IGWebMail: Modifiche proposte da Ale (Bozza) (Documento scaduto)

IGWebMail

[Modifiche di Ale-IGWebMail-fatte]
[Modifiche di Ale|Indice generale modifiche di Ale]

Ricerca in email di altri utenti

Nella mia proposta avevo distinto la ricerca in tutte le proprie cartelle dalla ricerca nelle email di tutti gli utenti. Questo mi sembra meglio, perché un conto è ricordare un'email che si è ricevuto senza che si ricordi esattamente in quale cartella è stata registrata, un'altro è ricercare tra le email di tutti.

[LucaS] 07.05.2007 Allora forse converrebbe inserire due temini nel dizionario webmail_lang tipo "Cerca in tutte le proprie cartelle" e "Cerca nelle cartelle di tutti gli utenti". Che ne pensi?

webmail::findshow


    ## Translate folders name
    $validfolders{$_} = $folderinfo{$_}{name} for keys %folderinfo;
+   $validfolders{everybody} = "All users"; #XXXTRANSLATE

Con rispetto della riservatezza per evitare la ricerca nel corpo di messaggi non completamente condivisi.
webmail::findexec:


  elsif ($on{fieldtofind} eq 'body')
   {
       $query = "body~*'$in{keytofind}'";
+      $query = "(owner='$auth_user' or sharemode=1) and ($query)" if $in{folder} eq 'everybody';'''
   }

La ricerca per PID veniva effettuata automaticamente nelle cartelle di tutti gli utenti, ed effettuavo una ricerca esatta (senza usare una regex nella query).

[LucaS] 07.05.2007 Avevo visto. Ma da anni ho labitudine di ricercare i protocolli inserendo solo la parte univoca del numero. Ad esempio se cerco 'E00123.07' inserendo '123.07' ottengo lo stesso risultato con meno lavoro (al massimo rischio di avere anche 'x123.07' ma mi va bene lo stesso tanto a vista la clicco)

webmail::findexec


  elsif ($on{fieldtofind} eq 'protocol')
   { 
*   $query = "pid= '$in{keytofind}'"; 
+   $in{folder} = 'everybody'; 
   }

La query diventava pertanto:


  DbQuery("select id, issue, timeissue, sender, contactid, receiver,".
          " owner, subject, folder, content, status, size, pid, sharemode ".
          "from email_msgs ".
          "where ".
*         "(owner='$auth_user'".($in{folder} eq 'everybody' ? " or sharemode<>2)" : ")").
*         " and ($query) ".
          "order by issue desc");

Miglioramento addressbook

Questa modifica permette di visualizzare nell'addressbook di IGWebMail anche i nomi dei contatti che non hanno specificato un'email, ma che hanno del personale con l'email.

Permette inoltre di visualizzare come link solo i contatti che non sono staff di un contatto (master=''), e di non visualizzare il checkbox per i contatti che non hanno un'email.

Quando la 'visualizzazione è focalizzata sullo staff di un certo contatto questo fatto viene evidenziato in testa alla lista dello staff.

Avevi notato che la query come l'avevo modificata era molto lenta (su Postgre):


     DbQuery("select contacts.contactid, contacts.contactname, contacts.email, contacts.master from contacts ".

             "where ".
             ($on{alphabet} ne 'all' ? "substr(contacts.contactname,1,1)='$on{alphabet}' and " : "").
             "(email<>'' or (master='0' and (select count(*) from contacts cont1 where cont1.master=contacts.contactid and cont1.email<>'') > 0) ) "
             "and contacts.contacttype<>1 ".
             ($on{alphabet} ne 'all' ? " and substr(contacts.contactname,1,1)='$on{alphabet}' " : " ").
             "group by contacts.contactid ".
             "order by contacts.contactname");
    }

Allora ti avevo proposto questa variante che sfrutta una join sulla medesima tabella contatti per individuare lo staff con email, ma non so se hai effettuato dei test sulle prestazioni di questa variante:


     DbQuery("select contacts.contactid, contacts.contactname, contacts.email, contacts.master from contacts ".
             "left join contacts staff on staff.master = contacts.contactid and staff.email<>'' ".
             "where ".
             ($on{alphabet} ne 'all' ? "substr(contacts.contactname,1,1)='$on{alphabet}' and " : "").
             "(contacts.email<>'' or (contacts.master='0' and staff.email<>'')) "
             "and contacts.contacttype<>1 ".
             ($on{alphabet} ne 'all' ? " and substr(contacts.contactname,1,1)='$on{alphabet}' " : " ").
             "group by contacts.contactid ".
             "order by contacts.contactname");
    }

Il resto era nel documento che ti avevo inviato al riguardo.