source: companies/serpro/expressoMail1_2/js/local_messages.js @ 903

Revision 903, 32.4 KB checked in by niltonneto, 15 years ago (diff)

Importacao inicial do Expresso do Serpro

Line 
1/**
2 * @author diogenes
3 */
4
5
6function local_messages() {
7    this.dbGears = null;
8    this.localServer = null;
9    this.store = null;
10    this.fileSubmitter = null;
11}
12
13local_messages.prototype.init_local_messages = function(){
14    if(this.dbGears == null)
15        this.dbGears = google.gears.factory.create('beta.database');
16    if(this.localServer==null)
17        this.localServer = google.gears.factory.create('beta.localserver');
18    if(this.store==null)
19        this.store = this.localServer.createStore('store-expresso');
20    if(this.fileSubmitter == null)
21        this.fileSubmitter = this.store.createFileSubmitter();
22
23    try
24    {
25        this.dbGears.open('database-expresso');
26        this.dbGears.execute('create table if not exists folder (folder text,uid_usuario int,unique(folder,uid_usuario))');
27
28        // inclusao do campo msg_source;
29        // inclusao da constraint unique(id_folder), que permite gravar a mesma mensagem em diferentes pastas locais
30        // (Rommel Cysne - rommel.cysne@serpro.gov.br - em 09/01/2009);
31        this.dbGears.execute('create table if not exists mail' +
32            ' (mail blob,original_id int,original_folder text,header blob,timestamp int,uid_usuario int,unseen int,id_folder int,' +
33        //Codigo esta comentado para verificar a possibilidade de uso futuro (em 26/01/2009 - Rommel Cysne)
34        //    ' ffrom text, subject text, fto text, cc text, body text,unique (original_id,original_folder,uid_usuario,id_folder))');
35            ' ffrom text, subject text, fto text, cc text, body text, size int, unique (original_id,original_folder,uid_usuario,id_folder))');
36        this.dbGears.execute('create table if not exists anexo' +
37            ' (id_mail int,nome_anexo text,url text,pid int)');
38    }catch(error)
39    {
40        //alert(error);
41    }
42        //some people that used old version of local messages could not have the size column. If it's the first version
43        //with local messages you're using in expresso, this part of code can be removed
44        try {
45                this.dbGears.execute('alter table mail add column size int');
46        }catch(Exception) {
47
48        }
49        var rs = this.dbGears.execute('select rowid,header from mail where size is null');
50        while(rs.isValidRow()) {
51                if(rs.field(1)!='N;')
52                        {
53                                var temp = connector.unserialize(rs.field(1));
54                                this.dbGears.execute('update mail set size='+temp.Size+' where rowid='+rs.field(0));
55                        }
56                rs.next();
57
58        }
59        //end of temporary code
60
61        //trecho abaixo atualiza as bases locais antigas para permitir a gravacao do mesmo e-mail em diferentes pastas
62        //de arquivamento local;
63        var rs = this.dbGears.execute('select tbl_name from sqlite_master where tbl_name="mail" and sql like "%unique (original_id,original_folder,uid_usuario,id_folder)%"');
64
65        if(!rs.isValidRow()){
66
67
68                try{
69
70                        this.dbGears.execute(' create table if not exists mailTmp (mail blob,original_id int,original_folder text,header blob,timestamp int,uid_usuario int,unseen int,id_folder int, ffrom text, subject text, fto text, cc text, body text, size int, unique (original_id,original_folder,uid_usuario,id_folder));');
71
72                        this.dbGears.execute('begin transaction;');
73
74                        this.dbGears.execute(' insert into mailTmp (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size) select mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size from mail;');
75
76                        this.dbGears.execute(' commit;');
77
78                        this.dbGears.execute(' alter table mail rename to mailOriginal;');
79                        this.dbGears.execute(' alter table mailTmp rename to mail;');
80
81
82                } catch(error){
83
84                        this.dbGears.execute('rollback transaction;') ; alert(error);
85                }
86        }
87
88}
89
90
91/**********************************
92//Rommel Cysne
93
94local_messages.prototype.migra_db = function() {
95
96        this.init_local_messages();
97
98        var rs = this.dbGears.execute('select tbl_name from sqlite_master where tbl_name="mail" and sql like "%unique (original_id,original_folder,uid_usuario,id_folder)%"');
99
100        if(!rs.isValidRow()){
101
102
103                try{
104
105                        this.dbGears.execute(' create table if not exists mailTmp (mail blob,original_id int,original_folder text,header blob,timestamp int,uid_usuario int,unseen int,id_folder int, ffrom text, subject text, fto text, cc text, body text, size int, unique (original_id,original_folder,uid_usuario,id_folder));');
106
107                        this.dbGears.execute('begin transaction;');
108
109                        this.dbGears.execute(' insert into mailTmp (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size) select mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size from mail;');
110
111                        this.dbGears.execute(' commit;');
112
113                        this.dbGears.execute(' alter table mail rename to mailOriginal;');
114                        this.dbGears.execute(' alter table mailTmp rename to mail;');
115
116
117                } catch(error){
118
119                        this.dbGears.execute('rollback transaction;') ; alert(error);
120                }
121        }
122
123
124        this.finalize();
125
126
127}
128
129
130/**********************************/
131
132
133local_messages.prototype.drop_tables = function() {
134    this.init_local_messages();
135    var rs = this.dbGears.execute('select url from anexo');
136    while(rs.isValidRow()) {
137        this.store.remove(rs.field(0));
138        rs.next();
139    }
140    this.dbGears.execute('drop table folder');
141    this.dbGears.execute('drop table mail');
142    this.dbGears.execute('drop table anexo');
143    this.finalize();
144}
145
146local_messages.prototype.insere_email = function(msg_info,msg_header,anexos,folder) {
147    this.init_local_messages();
148        var unseen;
149    var login = msg_info.login;
150    var original_id = msg_info.msg_number;
151    var original_folder = msg_info.msg_folder;
152
153    //Os campos abaixo precisam estar isolados para busca de mensagens em cima deles.
154    var from = connector.serialize(msg_info.from);
155    var subject = msg_info.subject;
156    var body = msg_info.body;
157    var to = connector.serialize(msg_info.toaddress2);
158    var cc = connector.serialize(msg_info.cc);
159        //var msg_source = msg_info.msg_source;
160        var size = msg_header.Size;
161        //Zero os campos que foram isolados para nï¿œo ter informaᅵᅵes duplicadas
162    msg_info.from = null;
163    msg_info.subject = null;
164    msg_info.body = null;
165    msg_info.to = null;
166    msg_info.cc = null;
167        //msg_header.Size=null;
168        //If the mail was archieved in the same date the user received it, the date cames with the time.
169        //here I solved it
170        if(msg_header.udate.indexOf(":")!=-1) {
171                msg_header.udate = msg_header.aux_date;
172        }
173        /**
174         * The importance attribute can be empty, and javascript consider as null causing nullpointer.
175         */
176//      if((msg_header.Importance == null) ||  (msg_header.Importance == ""))
177//              msg_header.Importance = "Normal";
178        msg_header.aux_date = null;
179    var mail = connector.serialize(msg_info);
180    var header = connector.serialize(msg_header);
181
182    var timestamp = msg_info.timestamp;
183    var id_folder;
184    var thumbs = msg_info.thumbs;
185
186                        if((folder==null) || (folder=="local_root"))
187        folder = "Inbox";
188    else
189        folder = folder.substr(6);//Retira a palavra "local_"
190
191    var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[folder,account_id]);
192
193    if(rs.isValidRow())
194        id_folder=rs.field(0);
195    else {
196        this.dbGears.execute("insert into folder (folder,uid_usuario) values (?,?)",["Inbox",account_id]);
197        id_folder = this.dbGears.lastInsertRowId;
198    }
199
200    if(msg_info.Unseen=="U")
201    {
202        unseen = "1";
203    }
204        var cb = function(url,success,captureId) {
205  //      alert("Capturado: " + url);
206    }
207        this.store.capture(msg_info.url_export_file,cb);
208        var id_mail = this.dbGears.lastInsertRowId;
209
210    try {
211        for (i in anexos)
212        {
213            if(anexos[i]['name'].match('jpg')||anexos[i]['name'].match('gif')||anexos[i]['name'].match('png'))
214                {
215                    var er_imagens = new RegExp("\\.\\/inc\\/show_embedded_attach.php\\?msg_folder=[\\w/]+\\&msg_num=[0-9]+\\&msg_part="+anexos[i]['pid']);
216                  //  alert(er_imagens.source);
217                    var Result_imagens = er_imagens.exec(body);
218                 //   alert(Result_imagens+anexos[i]['url']);
219                    body = body.replace(Result_imagens,anexos[i]['url']);
220                   // alert(body);
221                }
222        }
223
224                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]);
225
226
227    } catch (error) {
228        //sucess = false;
229        //alert("O e-mail de numero "+msg_info.msg_number+" foi anteriormente arquivado, se mais de um foi selecionado, o expresso irï¿œ tentar arquivar os outros");
230        //throw error;
231        //alert(error);
232        this.finalize();
233        return false;
234    }
235
236    var rsUnseen = this.dbGears.execute("select header,unseen from mail where original_id=" + original_id);
237    header = connector.unserialize(rsUnseen.field(0));
238    naoLida = header["Unseen"];
239
240
241    if( (naoLida == " ") && (unseen == "1") )
242    {
243
244        try
245        {
246                header["Unseen"] = "U";
247                this.dbGears.execute("update mail set header='"+connector.serialize(header)+"',unseen="+unseen+" where original_id="+original_id);
248
249        }catch(error) {
250                this.finalize();
251                return false;
252        }
253
254    }
255
256
257    var id_mail = this.dbGears.lastInsertRowId;
258    this.insere_anexos(id_mail,anexos);
259    this.finalize();
260    return true;
261
262}
263
264
265/*************************************************************************/
266/* Funcao usada para exportar mensagens arquivadas localmente.
267 * Rommel de Brito Cysne (rommel.cysne@serpro.gov.br)
268 * em 22/12/2008.
269 */
270local_messages.prototype.local_messages_to_export = function(){
271
272        var msgs_to_export_id = get_selected_messages();
273
274        this.init_local_messages();
275        var handler_local_mesgs_to_export = function(data){
276                //alert("data - " + data + " - tipo - " + typeof(data));
277                download_attachments(null, null, data, null,null,'mensagens.zip');
278        }
279        if(msgs_to_export_id){
280                //var msgs_to_export = msgs_to_export_id.split(",");
281                var l_msg = "t";
282                var mesgs = new Array();
283                var subjects = new Array();
284                var hoje = new Date();
285                for(var i in msgs_to_export_id[0]){
286                        var rs = this.dbGears.execute("select mail,subject from mail where rowid in ("+msgs_to_export_id[0][i]+")");
287
288                        if(rs.isValidRow()){
289                                mail = connector.unserialize(rs.field(0));
290                                msg=mail['msg_source'];
291                                subject = rs.field(1);
292
293                                mesgs += msg;
294                                mesgs += "@@";
295
296                                subjects += subject;
297                                subjects += "@@";
298                                rs.next();
299                        } else{
300                                alert("erro");
301                        }
302                }
303
304                source = escape(mesgs);
305                subjects = escape(subjects);
306                params = "folder="+msgs_to_export_id[1]+"&subjects="+subjects+"&mesgs="+source+"&l_msg="+l_msg+"&msgs_to_export="+msgs_to_export_id[0];
307                cExecute ("$this.exporteml.makeAll&", handler_local_mesgs_to_export, params);
308        }
309        return true;
310}
311
312/*************************************************************************/
313
314local_messages.prototype.get_all_local_folder_messages= function(folder_name){
315
316
317         var mesgs = new Array();
318         var subjects = new Array();
319         var hoje = new Date();
320         var msgs_to_export = new Array();
321         var l_msg="t";
322
323        this.init_local_messages();
324        var query = "select mail,subject,mail.rowid from mail inner join folder on (mail.id_folder=folder.rowid) where folder.folder='" + folder_name + "'";
325
326        var rs = this.dbGears.execute(" "+query)
327
328        var handler_local_mesgs_to_export = function(data){
329                //alert("data - " + data + " - tipo - " + typeof(data));
330                download_attachments(null, null, data, null,null,'mensagens.zip');
331        }
332
333
334        var j=0;
335
336        while (rs.isValidRow()){
337                  msgs_to_export[j]=rs.field(2)
338                  mail = connector.unserialize(rs.field(0));
339                  msg=mail['msg_source'];
340                  subject = rs.field(1);
341                  mesgs += msg;
342                  mesgs += "@@";
343                  subjects += subject;
344                  subjects += "@@";
345                  rs.next();
346                  j++;
347
348        }
349
350       source = escape(mesgs);
351       subjects = escape(subjects);
352       params = "folder="+folder_name+"&subjects="+subjects+"&mesgs="+source+"&l_msg="+l_msg+"&msgs_to_export="+msgs_to_export;
353       cExecute ("$this.exporteml.makeAll&", handler_local_mesgs_to_export, params);
354
355
356        rs.close
357
358}
359
360local_messages.prototype.get_local_mail = function(id_mail) {
361    this.init_local_messages();
362    var rs = this.dbGears.execute("select mail.rowid,mail.mail,mail.ffrom,mail.subject,mail.body,mail.fto,mail.cc,folder.folder,mail.original_id from mail inner join folder on mail.id_folder=folder.rowid  where mail.rowid="+id_mail);
363    var retorno = null;
364    if(rs.isValidRow()) {
365        retorno = rs.field(1);
366    }
367    retorno = connector.unserialize(retorno);
368        if (retorno.source)
369        {
370         retorno.msg_number=rs.field(8);
371         retorno.msg_folder=rs.field(7);
372         show_msg(retorno);
373        }
374        else
375        {
376        retorno['fulldate'] = retorno['fulldate'].substr(0,16);
377                retorno['from'] = connector.unserialize(rs.field(2));
378        retorno['subject'] = rs.field(3);
379                retorno['body'] = rs.field(4);
380                retorno['to'] = connector.unserialize(rs.field(5));
381                retorno['cc'] = connector.unserialize(rs.field(6));
382
383                retorno['local_message'] = true;
384                retorno['msg_folder'] = "local_"+rs.field(7); //A pasta agora ï¿œ local
385                retorno['msg_number'] = rs.field(0); //O nï¿œmero da mensagem ï¿œ o rowid, pois a mensagem agora ï¿œ local
386                retorno['signature'] = '';
387                this.finalize();
388                return retorno;
389        }
390}
391
392local_messages.prototype.insere_anexos = function(id_msg,anexos) {
393    //Nï¿œo preciso iniciar nem fechar o gears, isso ï¿œ tarefa de insere_email...
394    for (var i = 0; i < anexos.length; i++) {
395        this.dbGears.execute("insert into anexo (id_mail,nome_anexo,url,pid) values (?,?,?,?)", [id_msg, anexos[i]['name'],anexos[i]['url'],anexos[i]['pid']]);
396        this.save_anexos(anexos[i]['url']);
397    }
398}
399
400local_messages.prototype.save_anexos = function (url) {
401    //Nï¿œo preciso iniciar nem fechar o gears, isso ï¿œ tarefa de insere_email...
402    var call_back = function(url,success,captureId) {
403//        alert("Capturado: " + url);
404    }
405    this.store.capture(url,call_back);
406}
407
408        local_messages.prototype.get_local_range_msgs = function(folder,msg_range_begin,emails_per_page,sort,sort_reverse,search) {
409    this.init_local_messages();
410    var retorno = new Array();
411    msg_range_begin--;
412
413                filter = " ";
414                if(search=="FLAGGED") {
415                        filter = "and (header like '%\"Flagged\";s:1:\"F%' or header like '%\"Importance\";s:5:\"High%') ";
416                }
417                if(search=="UNSEEN") {
418                        filter = "and unseen = 1 ";
419                }
420                if(search=="SEEN") {
421                        filter = "and unseen = 0 ";
422                }
423                if (search=="ANSWERED") {
424                        filter = "and header like '%\"Answered\";s:1:\"A%' ";
425                }
426                sql = 'select rowid,header,size,timestamp,unseen from (';
427                sql += 'select mail.rowid as rowid,mail.header as header,mail.size as size,mail.timestamp as timestamp,mail.unseen as unseen,ltrim(ltrim(substr(UPPER(ffrom),21,length(ffrom)),\':\'),\'"\') as order_from,mail.subject from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario=? and folder.folder=? and lower(mail.ffrom) not like lower(?) ';
428                sql += filter;
429                sql += 'union ';
430                sql += 'select mail.rowid as rowid,mail.header as header,mail.size as size,mail.timestamp as timestamp,mail.unseen as unseen,ltrim(ltrim(substr(UPPER(fto),7,length(fto)),\':\'),\'"\') as order_from,mail.subject from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario=? and folder.folder=? and lower(mail.ffrom) like lower(?) ';
431                sql += filter;
432                sql += ') order by '
433
434                if(sort == 'SORTFROM') {
435                        sql += 'order_from ';
436                }
437                if(sort == 'SORTARRIVAL') {
438                        sql += 'timestamp ';
439                }
440                if(sort == 'SORTSIZE') {
441                        sql += 'size ';
442                }
443                if(sort == 'SORTSUBJECT') {
444                        sql += 'UPPER(subject) ';
445                }
446
447
448                sql+= sort_reverse==0?"ASC ":"DESC ";
449                sql +='limit ?,? ';
450
451
452                var rs = this.dbGears.execute(sql,[account_id,folder,'%'+Element("user_email").value+'%',account_id,folder,'%'+Element("user_email").value+'%',msg_range_begin,emails_per_page]);
453    var cont = 0;
454
455                var rs3 = this.dbGears.execute('select count(*) from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario=? and folder.folder=?'+filter,[account_id,folder]);
456
457    while (rs.isValidRow()) {
458        //var email = rs.field(1);
459        var head = rs.field(1);
460//      alert(head);
461        var codigoMail = rs.field(0);
462//      alert(codigoMail);
463        var rs2 = this.dbGears.execute('select count(*) from anexo where id_mail = '+codigoMail);
464        var head_unserialized = connector.unserialize(head);
465                        head_unserialized.Size = rs.field(2);
466                        if(rs.field(4)==1)
467                                head_unserialized.Unseen = 'U';
468
469        //var email_unserialized = connector.unserialize(email);
470        retorno[cont] = head_unserialized;
471        if(retorno[cont]['subject']==null)
472           retorno[cont]['subject']='';
473        retorno[cont]['msg_number'] = codigoMail;
474 //       retorno[cont]['Unseen'] = codigoMail;
475
476//      alert(retorno[cont]);
477
478        cont++;
479        rs.next();
480    }
481    retorno['num_msgs'] = rs3.field(0);
482    rs3.close();
483    rs.close();
484    if(cont>0)
485        rs2.close();
486    this.finalize();
487    return retorno;
488}
489
490local_messages.prototype.get_url_anexo = function(msg_number,pid) {
491    this.init_local_messages();
492    /*var rs = this.dbGears.execute('select * from anexo');
493                while(rs.isValidRow()) {
494                        alert(rs.field(0));
495                        alert(rs.field(1));
496                        alert(rs.field(2));
497                        alert(rs.field(3));
498                        rs.next();
499                }
500
501                alert('msg_number:'+msg_number);
502                alert('pid:'+pid);              */
503    var retorno;
504    var rs = this.dbGears.execute('select url from anexo where id_mail='+msg_number+' and pid = '+"'"+pid+"'");
505    retorno = rs.field(0)
506    this.finalize();
507
508    return retorno;
509}
510
511local_messages.prototype.getInputFileFromAnexo = function (element,url) {
512    this.init_local_messages();
513    this.fileSubmitter.setFileInputElement(element,url);
514    this.finalize();
515}
516
517local_messages.prototype.finalize = function() {
518    this.dbGears.close();
519    this.dbGears = null;
520}
521
522local_messages.prototype.delete_msgs = function(msgs_number,border_ID,folder) {
523    this.init_local_messages();
524    var rs = this.dbGears.execute("select url from anexo where id_mail in ("+msgs_number+")");
525    while(rs.isValidRow()) {
526        this.store.remove(rs.field(0));
527        rs.next();
528    }
529
530    this.dbGears.execute("delete from anexo where id_mail in ("+msgs_number+")");
531    this.dbGears.execute("delete from mail where rowid in ("+msgs_number+")");
532    this.finalize();
533    if (msgs_number.length == 1)
534        write_msg(get_lang("The message was deleted."));
535    else
536        write_msg(get_lang("The messages were deleted."));
537
538    try {
539            msgs_exploded = msgs_number.split(",");
540    }catch(error) {
541        msgs_exploded = msgs_number;
542    }
543    for (var i=0; i<msgs_exploded.length; i++){
544        if (msg_to_delete = Element(msgs_exploded[i])){
545            if ( (msg_to_delete.style.backgroundColor != '') && (preferences.use_shortcuts == '1') )
546                select_msg('null', 'down');
547            msg_to_delete.parentNode.removeChild(msg_to_delete);
548        }
549        if (msg_to_delete = Element(msgs_exploded[i]+";"+folder)){
550            if ( (msg_to_delete.style.backgroundColor != '') && (preferences.use_shortcuts == '1') )
551                select_msg('null', 'down');
552            msg_to_delete.parentNode.removeChild(msg_to_delete);
553        }
554    }
555    Element('chk_box_select_all_messages').checked = false;
556    if (border_ID != 'null')
557    {
558        delete_border(border_ID,'false');
559
560            if (msg_to_delete = Element(msgs_exploded)){
561                if ( (msg_to_delete.style.backgroundColor != '') && (preferences.use_shortcuts == '1') )
562                        select_msg('null', 'down');
563                msg_to_delete.parentNode.removeChild(msg_to_delete);
564            }
565            if (msg_to_delete = Element(msgs_exploded+";"+folder)){
566                if ( (msg_to_delete.style.backgroundColor != '') && (preferences.use_shortcuts == '1') )
567                    select_msg('null', 'down');
568                msg_to_delete.parentNode.removeChild(msg_to_delete);
569            } 
570        }
571}
572
573local_messages.prototype.get_source_msg = function(id_msg) {
574    this.init_local_messages();
575    var rs = this.dbGears.execute("select mail from mail where rowid="+id_msg);
576    //if(!rs.isValidRow())
577
578    mail = connector.unserialize(rs.field(0));
579    download_local_attachment(mail.url_export_file)
580
581    this.finalize();
582}
583
584local_messages.prototype.set_messages_flag = function(msgs_number, flag, folder) {
585    this.init_local_messages();
586    if (msgs_number == 'get_selected_messages') { //Pegar mensagens selecionadas
587        var msgs_to_set = get_selected_messages();
588    }
589    else { //Veio apenas uma mensagem
590        var msgs_to_set = new Array();
591        msgs_to_set[0] = msgs_number;
592    }
593    for (var i in msgs_to_set[0]) { //if(i%2 == 0){
594
595        var rs = this.dbGears.execute("select header,unseen from mail where rowid=" + msgs_to_set[0][i]);
596        header = connector.unserialize(rs.field(0));
597        unseen = rs.field(1);
598        if (flag == "unseen") {
599            set_msg_as_unread(msgs_to_set[0][i],folder);
600            header["Unseen"] = "U";
601            unseen = 1;
602        }
603        else
604        if (flag == "flagged") {
605            set_msg_as_flagged(msgs_to_set[0][i],folder);
606            header["Flagged"] = "F";
607        }
608        else
609                                        if (flag == "unflagged")
610                                                if (header["Importance"].indexOf("High") != -1)
611                                                        write_msg(get_lang("At least one of selected message cant be marked as normal"));
612                                                else {
613            set_msg_as_unflagged(msgs_to_set[0][i],folder);
614            header["Flagged"] = "N";
615        }
616        else
617        if (flag == "seen") {
618            header["Unseen"] = "N";
619            set_msg_as_read(msgs_to_set[0][i],true,folder);
620            unseen = 0;
621        }
622        rs.close();
623
624        if( tr = Element("check_box_message_" + msgs_to_set[0][i]))
625            tr.checked = false;
626        if( tr = Element(msgs_to_set[0][i] + ';' + msgs_to_set[1][i]) )
627            tr.firstChild.firstChild.checked = false;
628
629        this.dbGears.execute("update mail set header='"+connector.serialize(header)+"',unseen="+unseen+" where rowid="+msgs_to_set[0][i]);
630    }
631    if(Element('chk_box_select_all_messages'))
632        Element('chk_box_select_all_messages').checked = false;
633    this.finalize();
634
635}
636
637local_messages.prototype.get_unseen_msgs_number = function() {
638    this.init_local_messages();
639    var rs = this.dbGears.execute("select count(*) from mail where unseen=1");
640    var retorno = rs.field(0);
641    rs.close();
642    this.finalize();
643    return retorno;
644}
645
646local_messages.prototype.create_folder = function(folder) {
647
648    if (folder.indexOf("local_") != -1)
649        return false; //Nï¿œo posso criar pastas contendo a string local_
650
651    this.init_local_messages();
652    try {
653        this.dbGears.execute("insert into folder (folder,uid_usuario) values (?,?)",[folder,account_id]);
654    } catch (error) {
655        this.finalize();
656        throw error;
657        return false;
658    }
659    this.finalize();
660    return true;
661}
662
663local_messages.prototype.list_local_folders = function(folder) {
664    this.init_local_messages();
665    var retorno = new Array();
666    rs = this.dbGears.execute("select folder.folder,sum(mail.unseen) from folder left join mail on "+
667        "folder.rowid=mail.id_folder where folder.uid_usuario=? group by folder.folder",[account_id]);
668    while(rs.isValidRow()) {
669        var temp = new Array();
670        temp[0] = rs.field(0);
671        temp[1] = rs.field(1);
672        retorno.push(temp);
673        rs.next();
674    }
675
676    rs.close();
677    this.finalize();
678    return retorno;
679}
680
681local_messages.prototype.rename_folder = function(folder,old_folder) {
682    if (folder.indexOf("local_") != -1)
683        return false; //Nï¿œo posso criar pastas contendo a string local_
684    this.init_local_messages();
685    try {
686        this.dbGears.execute("update folder set folder=? where folder=? and uid_usuario=?",[folder,old_folder,account_id]);
687    } catch (error) {
688        this.finalize();
689        return false;
690    }
691    this.finalize();
692    return true;
693}
694
695local_messages.prototype.remove_folder = function(folder) {
696    this.init_local_messages();
697    var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[folder,account_id]);
698    var folder_id = rs.field(0);
699    rs.close();
700    this.dbGears.execute("delete from folder where rowid=?",[folder_id]);
701    rs = this.dbGears.execute("select rowid,mail from mail where id_folder=?",[folder_id]);
702    while(rs.isValidRow()) {
703        var rs2 = this.dbGears.execute("select url from anexo where id_mail=?",[rs.field(0)]);
704        while(rs2.isValidRow()) {
705            this.store.remove(rs2.field(0));
706            rs2.next();
707        }
708        rs2.close();
709        this.dbGears.execute("delete from anexo where id_mail=?",[rs.field(0)]);
710        var mail = connector.unserialize(rs.field(1));
711        this.store.remove(mail.url_export_file);
712        rs.next();
713    }
714    rs.close();
715    this.dbGears.execute("delete from mail where id_folder=?",[folder_id]);
716    this.finalize();
717}
718
719local_messages.prototype.move_messages = function(new_folder,msgs_number) {
720    this.init_local_messages();
721    var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[new_folder,account_id]);
722    var id_folder = rs.field(0);
723    rs.close();
724//alert(msgs_number);
725//Codigo esta comentado para verificar a possibilidade de uso futuro (em 26/01/2009 - Rommel Cysne)
726
727    //Tenta mover uma mensagem entre pastas locais fazendo o update na tabela mail,
728    //se acontecer algum erro no processo, retorna "error" para a funcao messages_proxy.prototype.proxy_move_messages;
729    //(em 14/01/2009 - Rommel Cysne)
730    var ret = "";
731    try{
732//    alert("dentro do try");
733        this.dbGears.execute("update mail set id_folder="+id_folder+" where rowid in ("+msgs_number.toString()+")"); //usando statement nï¿œo tava funcionando quando tinha mais de um email...
734        this.finalize();
735    } catch(error){
736//    alert("deu erro " + error);
737        ret = "error";
738    }
739
740    return ret;
741
742
743//    this.dbGears.execute("update mail set id_folder="+id_folder+" where rowid in ("+msgs_number.toString()+")"); //usando statement nï¿œo tava funcionando quando tinha mais de um email...
744//    this.finalize();
745}
746
747local_messages.prototype.search = function(folders,filter) {
748    this.init_local_messages();
749    var filters = filter.replace(/##/g," ");
750    filters = url_decode(filters);
751        filters = filters.replace(/^ +| +$/g,"");
752    filters = filters.split("<=>");
753    var friendly_filters = new Array();
754    if (filters[0].indexOf('ALL') != -1) { //Todos os filtros...
755        friendly_filters.push("SUBJECT");
756        friendly_filters.push(filters[1]);
757        friendly_filters.push("BODY");
758        friendly_filters.push(filters[1]);
759        friendly_filters.push("FROM");
760        friendly_filters.push(filters[1]);
761        friendly_filters.push("TO");
762        friendly_filters.push(filters[1]);
763        friendly_filters.push("CC");
764        friendly_filters.push(filters[1]);
765    }
766    else {
767        friendly_filters[0] = filters[0];
768        for (var i in filters) {
769            if (i != 0) {
770                var temp = filters[i].split(" ");
771                                friendly_filters.push(temp[0]);
772                friendly_filters.push(temp[1]);
773            }
774        }
775    }
776    var sql = "select mail.header,folder.folder,mail.rowid,mail.timestamp from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario="+account_id + " and folder.folder in (";
777    for(var fnum in folders) {
778        sql+="'"+folders[fnum]+"'";
779        if(fnum<folders.length-1)
780            sql+=",";
781    }
782    sql += ") and (";
783    for (var z=0;z<friendly_filters.length-1;z++) {
784        if(z%2==0) {
785            if (z != 0) {
786                if (filters[0].indexOf('ALL') != -1)
787                    sql += " or";
788                else
789                    sql += " and";
790            }
791            sql+=" mail."+this.aux_convert_filter_field(friendly_filters[z])+" like '%"+friendly_filters[z+1]+"%'";
792        }
793    }
794    sql += ")";
795    var rs = this.dbGears.execute(sql);
796    var retorno = "";
797    while(rs.isValidRow()) {
798        var header = connector.unserialize(rs.field(0));
799        var datamsg = new Date(rs.field(3)*1000);
800        var dia = datamsg.getDate().toString();
801        if (dia.length < 2) {
802                dia = "0"+dia;
803        }
804        var mes = (datamsg.getMonth()+1).toString(); // Returns the month from 0-11
805        if (mes.length < 2) {
806                mes = "0"+mes;
807        }
808        retorno+="##"+"local_"+rs.field(1)+"--"+"local_"+rs.field(1)+"--"+header["from"]["name"]+"--"+header["subject"]+"--"+dia+"/"+mes+"/"+datamsg.getFullYear()+"--"+this.aux_convert_size(header["Size"])+"--"+header["Unseen"]+"--"+rs.field(2)+"##";
809        rs.next();
810    }
811
812this.finalize();
813    return retorno==""?false:retorno;
814
815}
816
817local_messages.prototype.aux_convert_size = function(size) {
818    var tmp = Math.floor(size/1024);
819    if(tmp >= 1){
820        return tmp + " kb";
821    }else{
822        return size + " b";
823    }
824
825}
826
827local_messages.prototype.aux_convert_filter_field = function(filter) {
828    if((filter=="SUBJECT ") || (filter=="SUBJECT"))
829        return "subject";
830    else if((filter=="BODY ") || (filter=="BODY"))
831        return "body";
832    else if((filter=="FROM ") || (filter=="FROM"))
833        return "ffrom";
834    else if((filter=="TO ") || (filter=="TO"))
835        return "fto";
836    else if((filter=="CC ") || (filter=="CC"))
837        return "cc";
838}
839
840local_messages.prototype.has_local_mails = function() {
841    this.init_local_messages();
842    var rs = this.dbGears.execute("select rowid from folder limit 0,1");
843    var retorno;
844    if(rs.isValidRow())
845        retorno = true;
846    else
847        retorno = false;
848    this.finalize();
849    return retorno;
850}
851
852local_messages.prototype.unarchive_msgs = function (folder,new_folder,msgs_number){
853
854        if(!new_folder)
855                new_folder='INBOX';
856        this.init_local_messages();
857        var handler_unarchive = function(data)
858        {
859                if(data.error == '')
860                        write_msg(get_lang('All messages are successfully unarchived'));
861                else
862                        alert(data.error);
863        }
864        if(msgs_number =='selected' || !msgs_number)
865        {
866                msgs_number = get_selected_messages()
867                if (!msgs_number){
868                        write_msg(get_lang('No selected message.'));
869                        return;
870                }
871                var rs = this.dbGears.execute("select mail,timestamp from mail where rowid in ("+msgs_number[0]+")");
872                var source="";
873        var timestamp="";
874                while(rs.isValidRow()) {
875                        mail=connector.unserialize(rs.field(0));
876                        source_tmp=escape(mail.msg_source);
877                source+="#@#@#@"+source_tmp;
878                        timestamp+="#@#@#@"+rs.field(1);
879                        rs.next();
880                }
881        }
882        else
883        {
884                var rs = this.dbGears.execute("select mail,timestamp from mail where rowid="+msgs_number[0]);
885                mail=connector.unserialize(rs.field(0));
886                source=escape(mail.msg_source);
887        timestamp=rs.field(1);
888        }
889        params="&folder="+new_folder+"&source="+source+"&timestamp="+timestamp;
890        cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params);
891}
892
893local_messages.prototype.get_msg_date = function (original_id){
894
895        this.init_local_messages();
896        //alert("select header from mail where original_id="+'"'+original_id+'"');
897        var rs = this.dbGears.execute("select mail from mail where original_id="+original_id);
898        var tmp = connector.unserialize(rs.field(0));
899        var ret = new Array();
900        ret.fulldate = tmp.fulldate.substr(0,16);
901        ret.smalldate = tmp.msg_day;
902        ret.msg_day = tmp.msg_day;
903        ret.msg_hour = tmp.msg_day;
904        return ret;
905}
906
907local_messages.prototype.download_all_local_attachments = function(folder,id){
908    this.init_local_messages();
909        var rs = this.dbGears.execute("select mail from mail where rowid="+id);
910        var tmp = connector.unserialize(rs.field(0));
911        source = tmp.msg_source;
912    source = escape(source);
913        var handler_source = function(data){
914                download_attachments(null, null, data, null,null,'anexos.zip');
915        }
916        cExecute("$this.imap_functions.download_all_local_attachments",handler_source,"source="+source);
917}
918
919var expresso_local_messages;
920expresso_local_messages = new local_messages();
Note: See TracBrowser for help on using the repository browser.