Ignore:
Timestamp:
11/11/09 17:13:52 (14 years ago)
Author:
rafaelraymundo
Message:

Ticket #722 - Implementação da pesquisa avançada no expressoMail.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/js/local_messages.js

    r1595 r1622  
    99                this.fileSubmitter = null; 
    1010        } 
     11 
     12        function HeaderFlags() 
     13        { 
     14            this.Answered = 0; 
     15            //this.Draft = 0; 
     16            this.Flagged = 0; 
     17            this.Recent = 0; 
     18        } 
     19 
     20        HeaderFlags.prototype.getAnswered = function() 
     21        { 
     22            return this.Answered; 
     23        } 
     24 
     25        HeaderFlags.prototype.setAnswered = function(answered) 
     26        { 
     27            this.Answered = answered; 
     28        } 
     29 
     30        //HeaderFlags.prototype.getDraft = function() 
     31        //{ 
     32        //    return this.Draft; 
     33        //} 
     34 
     35        HeaderFlags.prototype.setDraft = function(draft) 
     36        { 
     37            this.Draft = draft; 
     38        } 
     39 
     40        HeaderFlags.prototype.getFlagged = function() 
     41        { 
     42            return this.Flagged; 
     43        } 
     44 
     45        HeaderFlags.prototype.setFlagged = function(flagged) 
     46        { 
     47            this.Flagged = flagged; 
     48        } 
     49 
     50        HeaderFlags.prototype.getRecent = function() 
     51        { 
     52            return this.Recent; 
     53        } 
     54 
     55        HeaderFlags.prototype.setRecent = function(recent) 
     56        { 
     57            this.Recent = recent; 
     58        } 
     59 
     60        function FlagsParser(headerObj) 
     61        { 
     62            this.Header = headerObj; 
     63        } 
     64 
     65        FlagsParser.prototype.parse = function() 
     66        { 
     67            var tmp = null; 
     68            if (typeof this.Header == 'string') 
     69            { 
     70                tmp = connector.unserialize(this.Header); 
     71            } 
     72            else 
     73            { 
     74                tmp = this.Header; 
     75            } 
     76 
     77            flags = new HeaderFlags(); 
     78 
     79            if (tmp.Answered && tmp.Answered.match(/^A$/)) 
     80            { 
     81                flags.setAnswered(1); 
     82                //if (tmp.Draft && tmp.Draft.match(/^X$/)) 
     83                //{ 
     84                //    flags.setDraft(1); 
     85                //} 
     86            } 
     87 
     88            if (tmp.Flagged && tmp.Flagged.match(/^F$/)){ 
     89                flags.setFlagged(1); 
     90            } 
     91 
     92            if (tmp.Forwarded && tmp.Forwarded.match(/^F$/)){ 
     93                flags.setAnswered(1); 
     94                //flags.setDraft(1); 
     95            } 
     96 
     97            if (tmp.Recent && tmp.Recent.match(/^R$/)){ 
     98                flags.setRecent(1); 
     99            } 
     100 
     101            return flags; 
     102 
     103        } 
     104         
    11105        local_messages.prototype.installGears = function (){ 
    12106                temp = confirm(get_lang("To use local messages you have to install google gears. Would you like to install it now?")); 
     
    83177                } 
    84178                //end of temporary code 
     179 
     180                try { 
     181                    this.dbGears.execute('begin transaction'); 
     182                    this.dbGears.execute('alter table mail add column answered int'); 
     183                    //this.dbGears.execute('alter table mail add column draft int'); 
     184                    this.dbGears.execute('alter table mail add column flagged int'); 
     185                    this.dbGears.execute('alter table mail add column recent int'); 
     186                    //this.dbGears.execute('commit transaction'); 
     187                    //transaction_ended = true; 
     188                    //if (transaction_ended){ 
     189                    rs = null; 
     190                    rs = this.dbGears.execute('select rowid,header from mail'); 
     191 
     192                    // Popular os valores das novas colunas. 
     193                    var tmp = null; 
     194                    //this.dbGears.execute('begin transaction'); 
     195                    while(rs.isValidRow()) { 
     196                        //tmp = connector.unserialize(rs.field(1)); 
     197                        parser = new FlagsParser(rs.field(1)); 
     198                        flags = parser.parse(); 
     199 
     200                        this.dbGears.execute('update mail set answered='+flags.getAnswered()+ 
     201                            ',flagged='+flags.getFlagged()+',recent='+flags.getRecent()+ 
     202                            //',draft='+flags.getDraft()+' where rowid='+rs.field(0)); 
     203                            ' where rowid='+rs.field(0)); 
     204 
     205                        rs.next(); 
     206                    } 
     207                    this.dbGears.execute('commit transaction'); 
     208 
     209                    //tmp = null; 
     210 
     211                }catch(Exception) { 
     212                    this.dbGears.execute('rollback transaction'); 
     213                } 
     214 
    85215        } 
    86216         
     
    156286                        if(msg_info.Unseen=="U") 
    157287                                unseen = 1; 
    158             this.dbGears.execute("insert into mail (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",[mail,original_id,original_folder,header,timestamp,login,unseen,id_folder,from,subject,to,cc,body,size]); 
     288 
     289                        //parse header 
     290                        parser = new FlagsParser(msg_header); 
     291                        flags = parser.parse(); 
     292 
     293                        //insere o e-mail 
     294                        //this.dbGears.execute("insert into mail (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",[mail,original_id,original_folder,header,timestamp,login,unseen,id_folder,from,subject,to,cc,body,size]); 
     295                        this.dbGears.execute("insert into mail (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size,answered,flagged,recent) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",[mail,original_id,original_folder,header,timestamp,login,unseen,id_folder,from,subject,to,cc,body,size,flags.getAnswered(),flags.getFlagged(),flags.getRecent()]); 
    159296                        var call_back = function() { 
    160297                        } 
     
    571708        } 
    572709         
    573         local_messages.prototype.search = function(folders,filter) { 
    574                 this.init_local_messages(); 
    575                 var filters = filter.replace(/##/g," "); 
    576                 filters = filters.replace(/^ +| +$/g,""); 
    577                 filters = filters.split("<=>"); 
     710        local_messages.prototype.search = function(folders,sFilter) { 
     711                this.init_local_messages(); 
     712                var filters = sFilter.replace(/^##|##$/g,"").split('##'); 
    578713                var friendly_filters = new Array(); 
    579                 if (filters[0].indexOf('ALL') != -1) { //all filters... 
    580                         friendly_filters.push("SUBJECT"); 
    581                         friendly_filters.push(filters[1]); 
    582                         friendly_filters.push("BODY"); 
    583                         friendly_filters.push(filters[1]); 
    584                         friendly_filters.push("FROM"); 
    585                         friendly_filters.push(filters[1]); 
    586                         friendly_filters.push("TO"); 
    587                         friendly_filters.push(filters[1]); 
    588                         friendly_filters.push("CC"); 
    589                         friendly_filters.push(filters[1]);                       
     714 
     715                if (sFilter.indexOf('ALL') != -1) { //all filters... 
     716                    filters[0] = sFilter.replace(/##/g,""); 
     717                    tmp = filters[0].split("<=>"); 
     718 
     719                    searchKey = new Array(); 
     720                    searchKey.push("SUBJECT"); 
     721                    searchKey.push(tmp[1]); 
     722                    friendly_filters.push(searchKey); 
     723 
     724                    searchKey = new Array(); 
     725                    searchKey.push("BODY"); 
     726                    searchKey.push(tmp[1]); 
     727                    friendly_filters.push(searchKey); 
     728 
     729                    searchKey = new Array(); 
     730                    searchKey.push("FROM"); 
     731                    searchKey.push(tmp[1]); 
     732                    friendly_filters.push(searchKey); 
     733 
     734                    searchKey = new Array(); 
     735                    searchKey.push("TO"); 
     736                    searchKey.push(tmp[1]); 
     737                    friendly_filters.push(searchKey); 
     738 
     739                    searchKey = new Array(); 
     740                    searchKey.push("CC"); 
     741                    searchKey.push(tmp[1]); 
     742                    friendly_filters.push(searchKey); 
    590743                } 
    591744                else { 
    592                         friendly_filters[0] = filters[0]; 
    593                         for (var i in filters) { 
    594                                 if (i != 0) { 
    595                                         var temp = filters[i].split(" "); 
    596                                         friendly_filters.push(temp[0]); 
    597                                         friendly_filters.push(temp[1]); 
    598                                 } 
    599                         } 
     745                    for (var i=0; i<filters.length; i++) 
     746                    { 
     747                        if (filters[i] != ""){ 
     748                            //tmp[0] = tmp[0].replace(/^\s+|\s+$/g,""); 
     749                            //tmp[1] = tmp[1].replace(/^\s+|\s+$/g,""); 
     750                            friendly_filters.push(filters[i].split("<=>")); 
     751                        } 
     752                    } 
    600753                } 
    601754                var sql = "select mail.header,folder.folder,mail.rowid,size from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario="+account_id + " and folder.folder in ("; 
     
    607760                sql += ") and ("; 
    608761                for (var z=0;z<friendly_filters.length-1;z++) { 
    609                         if(z%2==0) { 
    610                                 if (z != 0) { 
    611                                         if (filters[0].indexOf('ALL') != -1)  
    612                                                 sql += " or"; 
    613                                         else  
    614                                                 sql += " and"; 
    615                                 } 
    616                                 sql+=" mail."+this.aux_convert_filter_field(friendly_filters[z])+" like '%"+url_decode(friendly_filters[z+1])+"%'"; 
    617                         } 
     762                    if (z != 0) { 
     763                        if (sFilter.indexOf('ALL') != -1) 
     764                            sql += " or"; 
     765                        else 
     766                            sql += " and"; 
     767                    } 
     768                    var cond = friendly_filters[z][0].replace(/^\s+|\s+$/g,""); 
     769                    if (cond == "SINCE" || cond == "BEFORE" | cond == "ON"){ 
     770 
     771                        tmpDate = url_decode(friendly_filters[z][1]).split('/'); 
     772 
     773                        // Date = url_decode(friendly_filters[z][1]); 
     774                        sql+=" mail.timestamp " + this.aux_convert_filter_field(friendly_filters[z][0], tmpDate); 
     775                    } 
     776                    else if (!friendly_filters[z][1]) 
     777                        { 
     778                            sql+=" mail."+this.aux_convert_filter_field(friendly_filters[z][0]); 
     779                        } 
     780                        else 
     781                            { 
     782                                sql+=" mail."+this.aux_convert_filter_field(friendly_filters[z][0])+" like '%"+url_decode(friendly_filters[z][1])+"%'"; 
     783                            } 
    618784                } 
    619785                sql += ")"; 
     
    621787                var retorno = ""; 
    622788                while(rs.isValidRow()) { 
    623                         var header = connector.unserialize(rs.field(0)); 
    624                         retorno+="##"+"local_"+rs.field(1)+"--"+header["from"]["name"]+"--"+header["subject"]+"--"+header["udate"]+"--"+this.aux_convert_size(rs.field(3))+"--"+header["Unseen"]+header["Recent"]+header["Flagged"]+header["Draft"]+"--"+rs.field(2)+"##"; 
    625                         rs.next(); 
     789                    var header = connector.unserialize(rs.field(0)); 
     790                    retorno+="##"+"local_"+rs.field(1)+"--"+"local_"+rs.field(1)+"--"+header["from"]["name"]+"--"+header["subject"]+"--"+header["udate"]+"--"+this.aux_convert_size(rs.field(3))+"--"+header["Unseen"]+header["Recent"]+header["Flagged"]+header["Draft"]+"--"+rs.field(2)+"##"; 
     791                    rs.next(); 
    626792                } 
    627793 
     
    641807        } 
    642808         
    643         local_messages.prototype.aux_convert_filter_field = function(filter) { 
     809        local_messages.prototype.aux_convert_filter_field = function(filter,date) { 
     810                if (typeof date != 'undefined'){ 
     811                    var dateObj=new Date(); 
     812                    dateObj.setFullYear(date[2],date[1]-1,date[0]); 
     813                } 
     814 
    644815                if((filter=="SUBJECT ") || (filter=="SUBJECT")) 
    645816                        return "subject"; 
     
    652823                else if((filter=="CC ") || (filter=="CC")) 
    653824                        return "cc"; 
     825                else if (filter.replace(/^\s+|\s+$/g,"") == "SINCE"){ 
     826                        dateObj.setHours(0, 0, 0, 0); 
     827                        return ">= " + dateObj.getTime().toString(10).substr(0, 10); 
     828                } 
     829                else if (filter.replace(/^\s+|\s+$/g,"") == "BEFORE"){ 
     830                        dateObj.setHours(23, 59, 59, 999); 
     831                        return "<= " + dateObj.getTime().toString(10).substr(0, 10); 
     832                } 
     833                else if (filter.replace(/^\s+|\s+$/g,"") == "ON"){ 
     834                        dateObj.setHours(0, 0, 0, 0); 
     835                        var ts1 = dateObj.getTime().toString(10).substr(0, 10); 
     836                        dateObj.setHours(23, 59, 59, 999); 
     837                        var ts2 = dateObj.getTime().toString(10).substr(0, 10); 
     838                        return ">= " + ts1 + ") and (timestamp <= " + ts2; 
     839                } 
     840                else if (filter.replace(/^\s+|\s+$/g,"") == "FLAGGED") 
     841                        return "flagged = 1"; 
     842                else if (filter.replace(/^\s+|\s+$/g,"") == "UNFLAGGED") 
     843                        return "flagged = 0"; 
     844                else if (filter.replace(/^\s+|\s+$/g,"") == "UNSEEN") 
     845                        return "unseen = 1"; 
     846                else if (filter.replace(/^\s+|\s+$/g,"") == "SEEN") 
     847                        return "unseen = 0"; 
     848                else if (filter.replace(/^\s+|\s+$/g,"") == "ANSWERED") 
     849                        return "answered = 1"; 
     850                else if (filter.replace(/^\s+|\s+$/g,"") == "UNANSWERED") 
     851                        return "answered = 0"; 
     852                else if (filter.replace(/^\s+|\s+$/g,"") == "RECENT") 
     853                        return "recent = 1"; 
     854                else if (filter.replace(/^\s+|\s+$/g,"") == "OLD") 
     855                        return "recent = 0"; 
     856 
    654857        } 
    655858         
Note: See TracChangeset for help on using the changeset viewer.