source: trunk/expressoMail1_2/js/local_messages.js @ 1595

Revision 1595, 44.0 KB checked in by eduardoalex, 14 years ago (diff)

Ticket #709 - adição da melhoria descrita no ticket em questao

Line 
1/**
2 * @author diogenes
3 */
4
5        function local_messages() {
6                this.dbGears = null;
7                this.localServer = null;
8                this.store = null;
9                this.fileSubmitter = null;
10        }
11        local_messages.prototype.installGears = function (){
12                temp = confirm(get_lang("To use local messages you have to install google gears. Would you like to install it now?"));
13                if (temp && typeof(preferences.googlegears_url) != 'undefined'){
14                        if (is_ie)
15                                location.href = preferences.googlegears_url + "/gears.exe";
16                        else
17                                location.href = preferences.googlegears_url + "/gears.xpi";
18                        return false;
19                }
20                if (temp) {
21                        location.href = "http://gears.google.com/?action=install&message="+
22                                get_lang("To use local messages, install Google Gears")+"&return=" + document.location.href;
23                }
24                else return false;
25        }
26        local_messages.prototype.init_local_messages = function(){
27                if(this.dbGears == null)
28                        this.dbGears = google.gears.factory.create('beta.database');
29                if(this.localServer==null)
30                        this.localServer = google.gears.factory.create('beta.localserver');
31                if(this.store==null)
32                        this.store = this.localServer.createStore('test-store');                       
33               
34                var db_in_other_use = true;
35                var start_trying = new Date().getTime();
36                while (db_in_other_use) {
37                        try {
38                                this.dbGears.open('database-test');
39                                db_in_other_use = false;
40                        }
41                        catch (ex) {
42                                if(new Date.getTime()-start_trying>10000) { //too much time trying, throw an exception
43                                        throw ex;
44                                }
45                        }
46                }
47               
48                /*var db_is_opened = true;
49                while (db_is_opened) {
50                        try {
51                                this.dbGears.open('database-test');
52                                db_is_opened = true;
53                        }
54                        catch (ex) {
55                                db_is_opened=false;
56                        }
57                }*/
58               
59//              this.dbGears.open('database-test');
60                this.dbGears.execute('create table if not exists folder (folder text,uid_usuario int,unique(folder,uid_usuario))');
61                this.dbGears.execute('create table if not exists mail' +
62                ' (mail blob,original_id int,original_folder text,header blob,timestamp int,uid_usuario int,unseen int,id_folder int,' +
63                ' ffrom text, subject text, fto text, cc text, body text, size int,unique (original_id,original_folder,uid_usuario))');
64                this.dbGears.execute('create table if not exists anexo' +
65                ' (id_mail int,nome_anexo text,url text,pid int)');
66                this.dbGears.execute('create table if not exists folders_sync' +
67                ' (id_folder text,folder_name text,uid_usuario int)');
68                this.dbGears.execute('create table if not exists msgs_to_remove (id_msg int,folder text,uid_usuario int)');
69
70                //some people that used old version of local messages could not have the size column. If it's the first version
71                //with local messages you're using in expresso, this part of code can be removed
72                try {
73                        this.dbGears.execute('alter table mail add column size int');
74                }catch(Exception) {
75                       
76                }
77                var rs = this.dbGears.execute('select rowid,header from mail where size is null');
78                while(rs.isValidRow()) {
79                        var temp = connector.unserialize(rs.field(1));
80                       
81                        this.dbGears.execute('update mail set size='+temp.Size+' where rowid='+rs.field(0));
82                        rs.next();
83                }
84                //end of temporary code
85        }
86       
87        local_messages.prototype.drop_tables = function() {
88                this.init_local_messages();
89                var rs = this.dbGears.execute('select url from anexo');
90                while(rs.isValidRow()) {
91                        this.store.remove(rs.field(0));
92                        rs.next();
93                }
94                this.dbGears.execute('drop table folder');
95                this.dbGears.execute('drop table mail');
96                this.dbGears.execute('drop table anexo');
97                this.finalize();
98        }
99       
100        local_messages.prototype.insert_mail = function(msg_info,msg_header,anexos,folder) {
101                try {
102                        this.init_local_messages();
103                        var unseen = 0;
104                        var login = msg_info.login;
105                        var original_id = msg_info.msg_number;
106                        var original_folder = msg_info.msg_folder;
107                       
108                        //This fields needs to be separeted to search.
109                        var from = connector.serialize(msg_info.from);
110                        var subject = msg_info.subject;
111                        var body = msg_info.body;
112                        var to = connector.serialize(msg_info.toaddress2);
113                        var cc = connector.serialize(msg_info.cc);
114                        var size = msg_header.Size;
115       
116                        //do not duplicate this information
117                        msg_info.from = null;
118                        msg_info.subject = null;
119                        msg_info.body = null;
120                        msg_info.to = null;
121                        msg_info.cc = null;
122                        msg_header.Size=null;
123                        //If the mail was archieved in the same date the user received it, the date cames with the time.
124                        //here I solved it
125                        if(msg_header.udate.indexOf(":")!=-1) {
126                                msg_header.udate = msg_header.aux_date;
127                        }
128                       
129                        /**
130                         * The importance attribute can be empty, and javascript consider as null causing nullpointer.
131                         */
132                        if((msg_header.Importance == null) ||  (msg_header.Importance == ""))
133                                msg_header.Importance = "Normal";
134                       
135                        msg_header.aux_date = null;
136                       
137                        var mail = connector.serialize(msg_info);
138                        var header = connector.serialize(msg_header);
139       
140                        var timestamp = msg_info.timestamp;
141                        var id_folder;
142       
143                        if((folder==null) || (folder=="local_root"))
144                                folder = "Inbox";
145                        else
146                                folder = folder.substr(6);//take off the word "local_"
147                       
148                        var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[folder,account_id]);
149                        if(rs.isValidRow())
150                                id_folder=rs.field(0);
151                        else {
152                                this.dbGears.execute("insert into folder (folder,uid_usuario) values (?,?)",["Inbox",account_id]);
153                                id_folder = this.dbGears.lastInsertRowId;
154                        }
155                       
156                        if(msg_info.Unseen=="U")
157                                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]);
159                        var call_back = function() {
160                        }
161                        this.store.capture(msg_info.url_export_file,call_back);
162                        var id_mail = this.dbGears.lastInsertRowId;
163       
164                        this.insert_attachments(id_mail,anexos);
165                        this.finalize();
166                        return true;
167                } catch (error) {
168                        this.finalize();
169                        return false;
170                }
171
172
173        }
174       
175        local_messages.prototype.get_local_mail = function(id_mail) {
176                this.init_local_messages();
177                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);
178                var retorno = null;
179                if(rs.isValidRow()) {
180                         retorno = rs.field(1);
181                }
182                retorno = connector.unserialize(retorno);
183
184        //alert('tipo retorno.source: ' + typeof(retorno.source));
185
186        if (typeof(retorno.source) == 'string')
187        {
188            retorno.msg_number=rs.field(0);
189            retorno.original_ID=rs.field(8);
190            retorno.msg_folder=rs.field(7);
191
192            //alert('tipo retorno: '+typeof(retorno))
193            //show_msg(retorno);
194        }
195                else
196        {
197            retorno['from'] = connector.unserialize(rs.field(2));
198            retorno['subject'] = rs.field(3);
199            retorno['body'] = rs.field(4);
200            //Codigo que as imagens embutidas em emails (com multipart/related ou multipart/mixed) sejam corretamente mostradas em emails arquivados. Os links do
201            //tipo "./inc/show_embedded_attach.php?msg_folder=[folder]&msg_num=[msg_num]&msg_part=[part]"
202            //são substituidos pelos links dos anexos capturados pelo gears.
203
204            var thumbs= retorno.thumbs;
205            var anexos= retorno.array_attach;
206            for (i in anexos)
207            {
208                nomeArquivo = anexos[i]['name'].substring(0,anexos[i]['name'].length - 4);
209                if(nomeArquivo.match('jpg')||anexos[i]['name'].match('gif')||anexos[i]['name'].match('png'))
210                    {
211                        var er_imagens = new RegExp("\\.\\/inc\\/show_embedded_attach.php\\?msg_folder=[\\w/]+\\&msg_num=[0-9]+\\&msg_part="+anexos[i]['pid']);
212                        var Result_imagens = er_imagens.exec(retorno['body']);
213                        retorno['body'] = retorno['body'].replace(Result_imagens,anexos[i]['url']);
214                        if(thumbs && thumbs[i]){
215                            er_imagens = new RegExp("\\.\\/inc\\/show_thumbs.php\\?file_type=image\\/[\\w]+\\&msg_num=[0-9]+\\&msg_folder=[\\w/%]+\\&msg_part="+anexos[i]['pid']);
216                            Result_imagens = er_imagens.exec(thumbs[i]);
217                            thumbs[i] = thumbs[i].replace(Result_imagens,"'"+anexos[i]['url']+"'");
218                            er_imagens = new RegExp("\\.\\/inc\\/show_img.php\\?msg_num=[0-9]+\\&msg_folder=[\\w/%]+\\&msg_part="+anexos[i]['pid']);
219                            Result_imagens = er_imagens.exec(thumbs[i]);
220                            thumbs[i] = thumbs[i].replace(Result_imagens,"'"+anexos[i]['url']+"'");
221                            thumbs[i] = thumbs[i].replace(/<IMG/i,'<img width="120"');
222                        }
223                    }
224            }
225
226            retorno['to'] = connector.unserialize(rs.field(5));
227            retorno['cc'] = connector.unserialize(rs.field(6));
228
229            retorno['local_message'] = true;
230            retorno['msg_folder'] = "local_"+rs.field(7); //Now it's a local folder
231            retorno['msg_number'] = rs.field(0); //the message number is the rowid
232
233        }
234
235        rs.close();
236                this.finalize();
237                return retorno;
238        }
239
240        local_messages.prototype.insert_attachments = function(id_msg,anexos) {
241                //insert_mail already close and open gears.
242                for (var i = 0; i < anexos.length; i++) {
243                        this.dbGears.execute("insert into anexo (id_mail,nome_anexo,url,pid) values (?,?,?,?)", [id_msg, anexos[i]['name'],anexos[i]['url'],anexos[i]['pid']]);
244                        this.save_anexos(anexos[i]['url']);
245                }
246        }
247
248        local_messages.prototype.save_anexos = function (url) {
249                //insert_mail already close and open gears.
250                var call_back = function(url,success,captureId) {
251                                //alert("Capturado: " + url);
252                        }
253                //alert(url);
254                this.store.capture(url,call_back);
255        }
256
257        local_messages.prototype.get_local_range_msgs = function(folder,msg_range_begin,emails_per_page,sort,sort_reverse,search) {
258                this.init_local_messages();
259                var retorno = new Array();
260                msg_range_begin--;
261               
262                filter = " ";
263                if(search=="FLAGGED") {
264                        filter = "and (header like '%\"Flagged\";s:1:\"F%' or header like '%\"Importance\";s:5:\"High%') ";
265                }
266                if(search=="UNSEEN") {
267                        filter = "and unseen = 1 ";
268                }
269                if(search=="SEEN") {
270                        filter = "and unseen = 0 ";
271                }
272                if (search=="ANSWERED") {
273                        filter = "and header like '%\"Answered\";s:1:\"A%' ";
274                }
275                sql = 'select rowid,header,size,timestamp,unseen from (';
276                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(?) ';
277                sql += filter;
278                sql += 'union ';
279                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(?) ';
280                sql += filter;
281                sql += ') order by '
282               
283                if(sort == 'SORTFROM') {
284                        sql += 'order_from ';
285                }
286                if(sort == 'SORTARRIVAL') {
287                        sql += 'timestamp ';
288                }
289                if(sort == 'SORTSIZE') {
290                        sql += 'size ';
291                }
292                if(sort == 'SORTSUBJECT') {
293                        sql += 'UPPER(subject) ';
294                }
295
296
297                sql+= sort_reverse==0?"ASC ":"DESC ";
298                sql +='limit ?,? ';
299
300
301                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]);
302                var cont = 0;
303               
304                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]);
305                               
306                while (rs.isValidRow()) {
307                        //var email = rs.field(1);
308                        var head = rs.field(1);
309                        var codigoMail = rs.field(0);
310                        var rs2 = this.dbGears.execute('select count(*) from anexo where id_mail = '+codigoMail);
311                        var head_unserialized = connector.unserialize(head);
312                        head_unserialized.Size = rs.field(2);
313                        if(rs.field(4)==1)
314                                head_unserialized.Unseen = 'U';         
315                       
316                        //var email_unserialized = connector.unserialize(email);
317                        retorno[cont] = head_unserialized;
318                        retorno[cont]['msg_number'] = codigoMail;
319                       
320                        cont++;
321                        rs.next();
322                }
323                retorno['num_msgs'] = rs3.field(0);
324                rs3.close();
325                rs.close();
326                if(cont>0)
327                        rs2.close();
328                this.finalize();
329                return retorno;
330        }
331       
332        local_messages.prototype.get_url_anexo = function(msg_number,pid) {
333                this.init_local_messages();
334
335                var retorno;
336                var rs = this.dbGears.execute("select url from anexo where id_mail="+msg_number+" and pid = '"+pid+"'");
337                retorno = rs.field(0)
338                this.finalize();
339               
340                return retorno;
341        }
342
343        local_messages.prototype.getInputFileFromAnexo = function (element,url) {
344                this.init_local_messages();
345                fileSubmitter = this.store.createFileSubmitter();
346                fileSubmitter.setFileInputElement(element,url);
347                this.finalize();
348        }
349
350        local_messages.prototype.finalize = function() {
351                this.dbGears.close();
352                this.dbGears = null;
353        }
354
355        local_messages.prototype.delete_msgs = function(msgs_number,border_ID) {
356                this.init_local_messages();
357                var rs = this.dbGears.execute("select url from anexo where id_mail in ("+msgs_number+")");
358                while(rs.isValidRow()) {
359                        this.store.remove(rs.field(0));
360                        rs.next();
361                }
362                this.dbGears.execute("delete from anexo where id_mail in ("+msgs_number+")");
363                this.dbGears.execute("delete from mail where rowid in ("+msgs_number+")");
364                this.finalize();
365                if (msgs_number.length == 1)
366                        write_msg(get_lang("The message was deleted."));
367                else
368                        write_msg(get_lang("The messages were deleted."));
369               
370                mail_msg = Element("tbody_box");
371
372                try {
373                        msgs_exploded = msgs_number.split(",");
374                }catch(error) {
375                        msgs_exploded = new Array();
376                        msgs_exploded[0] = msgs_number;
377                }
378                var msg_to_delete;
379                for (var i=0; i<msgs_exploded.length; i++){
380                        msg_to_delete = Element(msgs_exploded[i]);
381                        if (msg_to_delete){
382                                if ( (msg_to_delete.style.backgroundColor != '') && (preferences.use_shortcuts == '1') )
383                                        select_msg('null', 'down');
384                                mail_msg.removeChild(msg_to_delete);
385                                decrement_folder_unseen();
386                        }
387                }
388                Element('chk_box_select_all_messages').checked = false;
389                if (border_ID != 'null')
390                        delete_border(border_ID,'false');
391               
392        }
393       
394        local_messages.prototype.get_source_msg = function(id_msg) {
395                this.init_local_messages();
396                var rs = this.dbGears.execute("select mail from mail where rowid="+id_msg);
397
398
399                mail = connector.unserialize(rs.field(0));             
400                download_local_attachment(mail.url_export_file)
401
402                this.finalize();
403        }
404       
405        local_messages.prototype.set_messages_flag = function(msgs_number, flag) {
406                this.init_local_messages();
407                var msgs_to_set;
408                if (msgs_number == 'get_selected_messages') {
409                        var msgs_to_set = get_selected_messages();
410                        msgs_to_set= msgs_to_set.split(",");
411                }
412                else { //Just one message
413                        msgs_to_set = new Array();
414                        msgs_to_set[0] = msgs_number;
415                }
416                for (var i in msgs_to_set) {
417               
418                        var rs = this.dbGears.execute("select header,unseen from mail where rowid=" + msgs_to_set[i]);
419                        header = connector.unserialize(rs.field(0));
420                        unseen = rs.field(1);
421                        switch(flag) {
422                                case "unseen":
423                                        set_msg_as_unread(msgs_to_set[i]);
424                                        header["Unseen"] = "U";
425                                        unseen = 1;
426                                        break;
427                                case "flagged":
428                                        set_msg_as_flagged(msgs_to_set[i]);
429                                        header["Flagged"] = "F";
430                                        break;
431                                case "unflagged":
432                                        if (header["Importance"].indexOf("High") != -1)
433                                                write_msg(get_lang("At least one of selected message cant be marked as normal"));
434                                        else {
435                                                set_msg_as_unflagged(msgs_to_set[i]);
436                                                header["Flagged"] = "N";
437                                        }
438                                        break;
439                                case "seen":
440                                        header["Unseen"] = "N";
441                                        set_msg_as_read(msgs_to_set[i],true);
442                                        unseen = 0;
443                                        break;
444                                case "answered":
445                                        header["Draft"]="";
446                                        header["Answered"]="A";
447                                        Element("td_message_answered_"+msgs_to_set[i]).innerHTML = '<img src=templates/default/images/answered.gif title=Respondida>';
448                                        break;
449                                case "forwarded":
450                                        header["Draft"]="X";
451                                        header["Answered"]="A";
452                                        Element("td_message_answered_"+msgs_to_set[i]).innerHTML = '<img src=templates/default/images/forwarded.gif title=Encaminhada>';
453                                        break;
454                        }
455               
456                        rs.close();
457                       
458                        if(Element("check_box_message_" + msgs_to_set[i]))
459                                Element("check_box_message_" + msgs_to_set[i]).checked = false;
460
461                        this.dbGears.execute("update mail set header='"+connector.serialize(header)+"',unseen="+unseen+" where rowid="+msgs_to_set[i]);                 
462                }
463                if(Element('chk_box_select_all_messages'))
464                        Element('chk_box_select_all_messages').checked = false;
465                this.finalize();
466
467        }
468       
469        local_messages.prototype.set_message_flag = function(msg_number,flag) {
470                this.set_messages_flag(msg_number,flag);
471        }
472       
473        local_messages.prototype.get_unseen_msgs_number = function() {
474                this.init_local_messages();
475                var rs = this.dbGears.execute("select count(*) from mail where unseen=1");
476                var retorno = rs.field(0);
477                rs.close();
478                this.finalize();
479                return retorno;
480        }
481
482        local_messages.prototype.create_folder = function(folder) {
483
484                if (folder.indexOf("local_") != -1)
485                        return false; //can't create folder with string local_
486
487                this.init_local_messages();
488                try {
489                        this.dbGears.execute("insert into folder (folder,uid_usuario) values (?,?)",[folder,account_id]);
490                } catch (error) {
491                        this.finalize();
492                        throw error;
493                        return false;
494                }
495                this.finalize();
496                return true;
497        }
498
499        local_messages.prototype.list_local_folders = function(folder) {
500                this.init_local_messages();
501                var retorno = new Array();
502                rs = this.dbGears.execute("select folder.folder,sum(mail.unseen) from folder left join mail on "+
503                                "folder.rowid=mail.id_folder where folder.uid_usuario=? group by folder.folder",[account_id]);
504                while(rs.isValidRow()) {
505                        var temp = new Array();
506                        temp[0] = rs.field(0);
507                        temp[1] = rs.field(1);
508                        var rs2 = this.dbGears.execute("select * from folder where folder like ?",["%"+temp[0]+"/%"]);
509                        if(rs2.isValidRow())
510                                temp[2] = 1;
511                        else
512                                temp[2] = 0;
513                        retorno.push(temp);
514                        rs.next();
515                }
516               
517                rs.close();
518                this.finalize();
519                return retorno;
520        }
521
522        local_messages.prototype.rename_folder = function(folder,old_folder) {
523                if (folder.indexOf("local_") != -1)
524                        return false; //can't create folder with string local_
525                this.init_local_messages();
526                if (old_folder.indexOf("/") != "-1") {
527                        final_pos = old_folder.lastIndexOf("/");
528                        folder = old_folder.substr(0, final_pos) + "/" + folder;
529                }
530                try {
531                        this.dbGears.execute("update folder set folder=? where folder=? and uid_usuario=?",[folder,old_folder,account_id]);
532                } catch (error) {
533                        this.finalize();
534                        return false;
535                }
536                this.finalize();
537                return true;
538        }
539       
540        local_messages.prototype.remove_folder = function(folder) {
541                this.init_local_messages();
542                var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[folder,account_id]);
543                var folder_id = rs.field(0);
544                rs.close();
545                this.dbGears.execute("delete from folder where rowid=?",[folder_id]);
546                rs = this.dbGears.execute("select rowid,mail from mail where id_folder=?",[folder_id]);
547                while(rs.isValidRow()) {
548                        var rs2 = this.dbGears.execute("select url from anexo where id_mail=?",[rs.field(0)]);
549                        while(rs2.isValidRow()) {
550                                this.store.remove(rs2.field(0));
551                                rs2.next();
552                        }
553                        rs2.close();
554                        this.dbGears.execute("delete from anexo where id_mail=?",[rs.field(0)]);
555                        var mail = connector.unserialize(rs.field(1));
556                        this.store.remove(mail.url_export_file);
557                        rs.next();
558                }
559                rs.close();
560                this.dbGears.execute("delete from mail where id_folder=?",[folder_id]);
561                this.finalize();
562        }
563
564        local_messages.prototype.move_messages = function(new_folder,msgs_number) {
565                this.init_local_messages();
566                var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[new_folder,account_id]);
567                var id_folder = rs.field(0);
568                rs.close();
569                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...
570                this.finalize();
571        }
572       
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("<=>");
578                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]);                     
590                }
591                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                        }
600                }
601                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 (";
602                for(var fnum in folders) {
603                        sql+="'"+folders[fnum]+"'";
604                        if(fnum<folders.length-1)
605                                sql+=",";
606                }
607                sql += ") and (";
608                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                        }
618                }
619                sql += ")";
620                var rs = this.dbGears.execute(sql);
621                var retorno = "";
622                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();
626                }
627
628                this.finalize();
629                return retorno==""?false:retorno;
630
631        }
632       
633        local_messages.prototype.aux_convert_size = function(size) {
634                var tmp = Math.floor(size/1024);
635                if(tmp >= 1){
636                        return tmp + " kb";     
637                }else{
638                        return size + " b";     
639                }
640               
641        }
642       
643        local_messages.prototype.aux_convert_filter_field = function(filter) {
644                if((filter=="SUBJECT ") || (filter=="SUBJECT"))
645                        return "subject";
646                else if((filter=="BODY ") || (filter=="BODY"))
647                        return "body";
648                else if((filter=="FROM ") || (filter=="FROM"))
649                        return "ffrom";
650                else if((filter=="TO ") || (filter=="TO"))
651                        return "fto";
652                else if((filter=="CC ") || (filter=="CC"))
653                        return "cc";
654        }
655       
656        local_messages.prototype.has_local_mails = function() {
657                this.init_local_messages();
658                var rs = this.dbGears.execute("select rowid from folder limit 0,1");
659                var retorno;
660                if(rs.isValidRow())
661                        retorno = true;
662                else
663                        retorno = false;
664                this.finalize();
665                return retorno;
666        }
667
668     //Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Essa função é um AJAX simples que serve apenas para pegar o fonte de uma msg local (no formato RFC 822).
669    local_messages.prototype.get_src = function(url){
670        AJAX = false;
671        if (window.XMLHttpRequest) { // Mozilla, Safari,...
672            AJAX = new XMLHttpRequest();
673            if (AJAX.overrideMimeType) {
674                AJAX.overrideMimeType('text/xml');
675            }
676        } else if (window.ActiveXObject) { // IE
677            try {
678                AJAX = new ActiveXObject("Msxml2.XMLHTTP");
679            } catch (e) {
680                try {
681                AJAX = new ActiveXObject("Microsoft.XMLHTTP");
682                } catch (e) {}
683            }
684        }
685
686        if (!AJAX) {
687            alert('ERRO :(Seu navegador não suporta a aplicação usada neste site');
688            return false;
689        }
690
691        AJAX.onreadystatechange = function() {
692            if (AJAX.readyState == 4) {
693                AJAX.src=AJAX.responseText;
694                if (AJAX.status == 200) {
695                    return AJAX.responseText;
696                    } else {
697                    return false;
698                }
699            }
700        }
701
702        AJAX.open('get', url, false);
703        AJAX.send(null);
704        return AJAX.responseText;
705    };
706
707  //Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Dessarquiva msgs locais pegando o codigo fonte das mesmas e mandando via POST para o servidor
708  //para que elas sejam inseridas no imap pela função  imap_functions.unarchive_mail.
709    local_messages.prototype.unarchive_msgs = function (folder,new_folder,msgs_number){
710
711        if(!new_folder)
712            new_folder='INBOX';
713        this.init_local_messages();
714       // alert(folder+new_folder+msgs_number);
715        var handler_unarchive = function(data)
716        {
717            if(data.error == '')
718                write_msg(get_lang('All messages are successfully unarchived'));
719            else
720                alert(data.error);
721        }
722        if(msgs_number =='selected' || !msgs_number)
723        {
724            msgs_number = get_selected_messages()
725            if (!msgs_number){
726                write_msg(get_lang('No selected message.'));
727                return;
728            }
729            var rs = this.dbGears.execute("select mail,timestamp from mail where rowid in ("+msgs_number+")");
730            var source="";
731            var timestamp="";
732            while(rs.isValidRow()) {
733                mail=connector.unserialize(rs.field(0));
734                source_tmp=escape(this.get_src(mail.url_export_file));
735                    source+="#@#@#@"+source_tmp;
736                    timestamp+="#@#@#@"+rs.field(1);
737                rs.next();
738            }
739            rs.close();
740            this.finalize();
741        }
742        else
743        {
744            var rs = this.dbGears.execute("select mail,timestamp from mail where rowid="+msgs_number);
745            mail=connector.unserialize(rs.field(0));
746            var source ="";
747            source = this.get_src(mail.url_export_file);
748            timestamp=rs.field(1);
749             rs.close();
750             this.finalize();
751        }
752            params="&folder="+new_folder+"&source="+source+"&timestamp="+timestamp;
753            cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params);
754    }
755
756    local_messages.prototype.get_msg_date = function (original_id, is_local){
757
758        this.init_local_messages();
759
760        if (typeof(is_local) == 'undefined')
761        {
762            is_local = false;
763        }
764
765        var rs;
766
767        if (is_local)
768        {
769            rs = this.dbGears.execute("select mail from mail where rowid="+original_id);
770        }
771        else
772        {
773            rs = this.dbGears.execute("select mail from mail where original_id="+original_id);
774        }
775        var tmp = connector.unserialize(rs.field(0));
776        var ret = new Array();
777        ret.fulldate = tmp.fulldate.substr(0,16);
778        ret.smalldate = tmp.msg_day;
779        ret.msg_day = tmp.msg_day;
780        ret.msg_hour = tmp.msg_day;
781
782        rs.close();
783        this.finalize();
784        return ret;
785    }
786
787
788    local_messages.prototype.download_all_local_attachments = function(folder,id){
789        this.init_local_messages();
790        var rs = this.dbGears.execute("select mail from mail where rowid="+id);
791        var tmp = connector.unserialize(rs.field(0));
792        rs.close();
793        this.finalize();
794        source = this.get_src(tmp.url_export_file);
795        source = escape(source);
796        var handler_source = function(data){
797            download_attachments(null, null, data, null,null,'anexos.zip');
798        }
799        cExecute("$this.imap_functions.download_all_local_attachments",handler_source,"source="+source);
800    }
801
802    /*************************************************************************/
803/* Funcao usada para exportar mensagens arquivadas localmente.
804 * Rommel de Brito Cysne (rommel.cysne@serpro.gov.br)
805 * em 22/12/2008.
806 */
807    local_messages.prototype.local_messages_to_export = function(){
808
809        if (openTab.type[currentTab] > 1){
810            var msgs_to_export_id = currentTab.substring(0,currentTab.length-2,currentTab);
811        }else{
812            var msgs_to_export_id = get_selected_messages();
813        }
814        var handler_local_mesgs_to_export = function(data){
815            download_attachments(null, null, data, null,null,'mensagens.zip');
816        }
817        if(msgs_to_export_id){
818            this.init_local_messages();
819            var l_msg = "t";
820            var mesgs ="";
821            var subjects ="";
822            var rs = this.dbGears.execute("select mail,subject from mail where rowid in ("+msgs_to_export_id+")");
823            while(rs.isValidRow()){
824                mail = connector.unserialize(rs.field(0));
825                src = this.get_src(mail.url_export_file);
826                subject = rs.field(1);
827                mesgs += src;
828                mesgs += "@@";
829                subjects += subject;
830                subjects += "@@";
831                rs.next();
832            }
833            rs.close();
834            this.finalize();
835            mesgs = escape(mesgs);
836            subjects = escape(subjects);
837            params = "subjects="+subjects+"&mesgs="+mesgs+"&l_msg="+l_msg+"&msgs_to_export="+msgs_to_export_id;
838            cExecute ("$this.exporteml.makeAll&", handler_local_mesgs_to_export, params);
839        }
840        return true;
841    }
842
843    local_messages.prototype.get_all_local_folder_messages= function(folder_name){
844
845
846         var mesgs = new Array();
847         var subjects = new Array();
848         var hoje = new Date();
849         var msgs_to_export = new Array();
850         var l_msg="t";
851
852        this.init_local_messages();
853        var query = "select mail,subject,mail.rowid from mail inner join folder on (mail.id_folder=folder.rowid) where folder.folder='" + folder_name + "'";
854
855        var rs = this.dbGears.execute(" "+query)
856
857            var handler_local_mesgs_to_export = function(data){
858                    //alert("data - " + data + " - tipo - " + typeof(data));
859                    download_attachments(null, null, data, null,null,'mensagens.zip');
860            }
861        var j=0;
862        while (rs.isValidRow()){
863              msgs_to_export[j]=rs.field(2)
864              mail = connector.unserialize(rs.field(0));
865                      msg=this.get_src(mail.url_export_file);
866                      subject = rs.field(1);
867                      mesgs += msg;
868                      mesgs += "@@";
869                      subjects += subject;
870                      subjects += "@@";
871                      rs.next();
872              j++;
873
874        }
875           rs.close();
876           this.finalize();
877           source = escape(mesgs);
878           subjects = escape(subjects);
879           params = "folder="+folder_name+"&subjects="+subjects+"&mesgs="+source+"&l_msg="+l_msg+"&msgs_to_export="+msgs_to_export;
880           cExecute ("$this.exporteml.makeAll&", handler_local_mesgs_to_export, params);
881         
882
883    }
884
885
886    /*************************************************************************/
887
888       
889/******************************************************************
890                                        Offline Part
891 ******************************************************************/
892
893        local_messages.prototype.is_offline_installed = function() {
894                this.init_local_messages();
895                var check = this.localServer.openManagedStore('expresso-offline');
896                this.finalize();
897                if(check==null)
898                        return false;
899                else
900                        return true;
901               
902        }
903        local_messages.prototype.update_offline = function(redirect) {
904                this.init_local_messages();
905                var managedStore = this.localServer.openManagedStore('expresso-offline');
906
907                if(managedStore!=null){
908                       
909                        managedStore.oncomplete = function(details){
910                                if(redirect!=null)
911                                        location.href=redirect;
912                        }
913                       
914                        managedStore.checkForUpdate();
915                } else if(redirect!=null) {
916                        location.href=redirect;
917                }
918                this.finalize();
919        }
920       
921        local_messages.prototype.uninstall_offline = function() {
922                if (!window.google || !google.gears) {
923                                temp = confirm(document.getElementById('lang_gears_redirect').value);
924                                if (temp) {
925                                        expresso_local_messages.installGears();
926                                }
927                                return;
928
929                }
930                this.init_local_messages();
931                this.localServer.removeManagedStore('expresso-offline');
932                alert(document.getElementById('lang_offline_uninstalled').value);
933                //this.dbGears.execute('drop table user');
934                //this.dbGears.execute('drop table queue');
935                //this.dbGears.execute('drop table attachments_queue');
936                this.finalize();
937        }
938       
939        local_messages.prototype.get_folders_to_sync = function() {//Precisa ter visibilidade ao array de linguagens.
940                this.init_local_messages();
941                var rs = this.dbGears.execute("select id_folder,folder_name from folders_sync where uid_usuario="+account_id);
942                var retorno = new Array();
943                while(rs.isValidRow()) {
944                        temp = new Array();
945                        temp[0] = rs.field(0);
946                        if(temp[0]=='INBOX/Drafts' ||temp[0]=='INBOX/Trash' || temp[0]=='INBOX/Sent') {
947                                temp[1] = array_lang[rs.field(1).toLowerCase()];
948                        }
949                        else {
950                                temp[1] = rs.field(1); 
951                        }
952                       
953                        retorno.push(temp);
954                        rs.next();
955                }
956                this.finalize();
957                return retorno;
958        }
959       
960        local_messages.prototype.install_offline = function(urlOffline,urlIcone,uid_usuario,login,pass,redirect) {
961                if (!window.google || !google.gears) {
962                                temp = confirm(document.getElementById('lang_gears_redirect').value);
963                                if (temp) {
964                                         expresso_local_messages.installGears();
965                                }
966                                return;
967
968                }
969               
970                if(pass.length>0) {
971                        only_spaces = true;
972                        for(cont=0;cont<pass.length;cont++) {
973                                if(pass.charAt(cont)!=" ")
974                                        only_spaces = false;
975                        }
976                        if(only_spaces) {
977                                alert(document.getElementById('lang_only_spaces_not_allowed').value);
978                                return false;
979                        }
980                }
981
982                modal('loading');
983                var desktop = google.gears.factory.create('beta.desktop');
984                desktop.createShortcut('ExpressoMail Offline',
985                        urlOffline,
986                {'32x32': urlIcone},
987                'ExpressoMail Offline');
988
989
990                this.init_local_messages();
991
992                //user with offline needs to have at least the folder Inbox already created.
993                tmp_rs = this.dbGears.execute("select rowid from folder where folder='Inbox' and uid_usuario=?",[uid_usuario]);
994                if(!tmp_rs.isValidRow())
995                        this.dbGears.execute("insert into folder (folder,uid_usuario) values (?,?)",['Inbox',uid_usuario]);
996
997                this.localServer.removeManagedStore('expresso-offline');
998       
999                var managedStore = this.localServer.createManagedStore('expresso-offline');
1000                managedStore.manifestUrl = 'js/manifest';
1001
1002                managedStore.onerror = function (error) {
1003                        alert(error);
1004                }
1005               
1006                managedStore.oncomplete = function(details) {
1007                        if (close_lightbox_div) {
1008                                close_lightbox();
1009                                close_lightbox_div = false;
1010                                alert(document.getElementById('lang_offline_installed').value);
1011                                location.href=redirect;
1012                        }
1013                }
1014
1015                //create structure to user in db
1016                this.dbGears.execute('create table if not exists user (uid_usuario int,login text,pass text, logged int,unique(uid_usuario))');
1017                this.dbGears.execute('create table if not exists queue (ffrom text, fto text, cc text, cco text,'+
1018                        'subject text, conf_receipt int, important int,body text,sent int,user int)');
1019                this.dbGears.execute('create table if not exists attachments_queue ('+
1020                        'id_queue int, url_attach text)');
1021                this.dbGears.execute('create table if not exists sent_problems (' +
1022                        'id_queue int,message text)');
1023               
1024                //d = new Date();
1025               
1026                try {
1027                        var rs = this.dbGears.execute("select uid_usuario from user where uid_usuario=?",[uid_usuario]);
1028                        if(!rs.isValidRow())
1029                                this.dbGears.execute("insert into user (uid_usuario,login,pass) values (?,?,?)",[uid_usuario,login,pass]);
1030                        else
1031                                this.dbGears.execute("update user set pass=? where uid_usuario=?",[pass,uid_usuario]);
1032                } catch (error) {
1033                        this.finalize();
1034                        alert(error);
1035                        return false;
1036                }
1037                managedStore.checkForUpdate();
1038               
1039                this.finalize();
1040        }
1041       
1042        /**
1043         * Return all users in an array following the structure below.
1044         *
1045         * key: uid
1046         * value: user login
1047         */
1048        local_messages.prototype.get_all_users = function() {
1049                this.init_local_messages();
1050                var users = new Array();
1051                var rs = this.dbGears.execute("select uid_usuario,login from user");
1052                while(rs.isValidRow()) {
1053                        users[rs.field(0)] = rs.field(1);
1054                        rs.next();
1055                }
1056                this.finalize();
1057                return users;
1058        }
1059       
1060        local_messages.prototype.set_as_logged = function(uid_usuario,pass) {
1061                this.init_local_messages();
1062                var rs = this.dbGears.execute("select pass from user where uid_usuario=?",[uid_usuario]);
1063                if(!rs.isValidRow() || (pass!=rs.field(0) && pass!=MD5(rs.field(0))) ) {
1064                        this.finalize();
1065                        return false;
1066                }
1067                d = new Date();
1068
1069                this.dbGears.execute("update user set logged=null"); //Logoff in everybody
1070                this.dbGears.execute("update user set logged=? where uid_usuario=?",[d.getTime(),uid_usuario]); //Login just in one...
1071                this.finalize();
1072                return true;
1073        }
1074       
1075        local_messages.prototype.unset_as_logged = function() {
1076                this.init_local_messages();
1077                this.dbGears.execute("update user set logged=null"); //Logoff in everybody
1078                this.finalize();
1079        }
1080       
1081        local_messages.prototype.user_logged = function() {
1082                this.init_local_messages();
1083                var user_logged = new Array();
1084                var rs = this.dbGears.execute("select uid_usuario,logged from user where logged is not null");
1085                if(!rs.isValidRow()) {
1086                        this.finalize();
1087                        return null;
1088                }
1089                user_logged[0] = rs.field(0);
1090                user_logged[1] = rs.field(1);
1091                this.finalize();
1092                return user_logged;
1093        }
1094       
1095        local_messages.prototype.send_to_queue = function (form) {
1096                this.init_local_messages();
1097                var mail_values = new Array();
1098               
1099                for (var i=0;i<form.length;i++) {
1100                        if (form.elements[i].name != '') { //I.E made me to do that...
1101                                if(form.elements[i].name=='folder' || form.elements[i].name=='msg_id' || form.elements[i].name=='' || form.elements[i].name==null)
1102                                        continue;
1103                                else if (form.elements[i].name == 'input_return_receipt' )
1104                                        mail_values['conf_receipt'] = form.elements[i].checked ? 1 : 0;
1105                                else if(form.elements[i].name == 'input_important_message')
1106                                        mail_values['important'] = form.elements[i].checked ? 1 : 0;
1107                                else
1108                                        if (form.elements[i].name == 'body')
1109                                                mail_values['body'] = form.elements[i].value;
1110                                        else
1111                                                if (form.elements[i].name == 'input_from')
1112                                                        mail_values['ffrom'] = form.elements[i].value;
1113                                                else
1114                                                        if (form.elements[i].name == 'input_to')
1115                                                                mail_values['fto'] = form.elements[i].value;
1116                                                        else
1117                                                                if (form.elements[i].name == 'input_cc')
1118                                                                        mail_values['cc'] = form.elements[i].value;
1119                                                                else
1120                                                                        if (form.elements[i].name == 'input_cco')
1121                                                                                mail_values['cco'] = form.elements[i].value;
1122                                                                        else
1123                                                                                if (form.elements[i].name == 'input_subject')
1124                                                                                        mail_values['subject'] = form.elements[i].value;
1125                        }
1126                }
1127                //mail_values['fto'] = input_to;
1128                //mail_values['cc'] = input_cc;
1129                //mail_values['cco'] = input_cco;
1130                //mail_values['subject'] = input_subject;
1131                //mail_values['conf_receipt'] = input_return_receipt;
1132                //mail_values['important'] = input_important_message;
1133               
1134                try {
1135                        this.dbGears.execute("insert into queue (ffrom,fto,cc,cco,subject,conf_receipt,important,body,sent,user) values (?,?,?,?,?,?,?,?,0,?)", [mail_values['ffrom'], mail_values['fto'], mail_values['cc'], mail_values['cco'], mail_values['subject'], mail_values['conf_receipt'], mail_values['important'], mail_values['body'], account_id]);
1136                        this.send_attach_to_queue(this.dbGears.lastInsertRowId,form);
1137                }catch(error) {
1138                        alert(error);
1139                        return get_lang('Error sending a mail to queue. Verify if you have installed ExpressoMail Offline');
1140                }
1141                this.finalize();
1142                return true;
1143        }
1144       
1145        local_messages.prototype.send_attach_to_queue = function(id_queue,form) {
1146               
1147                for(i=0;i<form.elements.length;i++) {
1148                       
1149                        if(form.elements[i].name.indexOf("file_")!=-1) {
1150                                var tmp_input = form.elements[i];
1151                                var d = new Date();
1152                                var url_local = 'local_attachs/'+d.getTime();
1153                                this.store.captureFile(tmp_input, url_local);
1154                                this.dbGears.execute("insert into attachments_queue (id_queue,url_attach) values (?,?)",[id_queue,url_local]);
1155                        }
1156                        else if(form.elements[i].name.indexOf("offline_forward_")!=-1){
1157                                //alert();
1158                                this.dbGears.execute("insert into attachments_queue (id_queue,url_attach) values (?,?)",[id_queue,form.elements[i].value]);
1159                        }
1160                }
1161        }
1162
1163       
1164        local_messages.prototype.get_num_msgs_to_send = function() {
1165                this.init_local_messages();
1166
1167                var rs = this.dbGears.execute("select count(*) from queue where user=? and sent=0",[account_id]);
1168                var to_return = rs.field(0);
1169
1170                this.finalize();
1171                return to_return;
1172        }
1173       
1174        local_messages.prototype.set_problem_on_sent = function(rowid_message,msg) {
1175                this.init_local_messages();
1176                this.dbGears.execute("update queue set sent = 2 where rowid=?",[rowid_message]);
1177                this.dbGears.execute("insert into sent_problems (id_queue,message) values (?,?)"[rowid_message,msg]);
1178                this.finalize();
1179        }
1180       
1181        local_messages.prototype.set_as_sent = function(rowid_message) {
1182                this.init_local_messages();
1183                this.dbGears.execute("update queue set sent = 1 where rowid=?",[rowid_message]);
1184                this.finalize();
1185        }
1186       
1187        local_messages.prototype.get_form_msg_to_send = function() {
1188                this.init_local_messages();
1189                var rs = this.dbGears.execute('select ffrom,fto,cc,cco,subject,conf_receipt,important,body,rowid from queue where sent=0 and user = ? limit 0,1',[account_id]);
1190                if(!rs.isValidRow())
1191                        return false;
1192               
1193                var form = document.createElement('form');
1194                form.method = 'POST';
1195                form.name = 'form_queue_'+rs.field(8);
1196                form.style.display = 'none';
1197                form.onsubmit = function(){return false;}
1198                if(!is_ie)
1199                        form.enctype="multipart/form-data";
1200                else
1201                        form.encoding="multipart/form-data";
1202               
1203                var ffrom = document.createElement('TEXTAREA');
1204                ffrom.name = "input_from";
1205                ffrom.value = rs.field(0);
1206                form.appendChild(ffrom);
1207               
1208                var fto = document.createElement('TEXTAREA');
1209                fto.name = "input_to";
1210                fto.value = rs.field(1);
1211                form.appendChild(fto);
1212               
1213                var cc = document.createElement('TEXTAREA');
1214                cc.name = "input_cc";
1215                cc.value = rs.field(2);
1216                form.appendChild(cc);
1217
1218                var cco = document.createElement('TEXTAREA');
1219                cco.name = "input_cco";
1220                cco.value = rs.field(3);
1221                form.appendChild(cco);
1222               
1223                var subject = document.createElement('TEXTAREA');
1224                subject.name = "input_subject";
1225                subject.value = rs.field(4);
1226                form.appendChild(subject);
1227               
1228                var folder = document.createElement('input');
1229                folder.name='folder';
1230                folder.value=preferences.save_in_folder;
1231                form.appendChild(folder);
1232               
1233                if (rs.field(5) == 1) {
1234                        var conf_receipt = document.createElement('input');
1235                        conf_receipt.type='text';
1236                        conf_receipt.name = "input_return_receipt";
1237                        conf_receipt.value = 'on';
1238                        form.appendChild(conf_receipt);
1239                }
1240               
1241                if (rs.field(6) == 1) {
1242                        var important = document.createElement('input');
1243                        important.type='text';
1244                        important.name = "input_important_message";
1245                        important.value = 'on';
1246                        form.appendChild(important);
1247                }
1248               
1249                var body = document.createElement('TEXTAREA');
1250                body.name = "body";
1251                body.value = rs.field(7);
1252                form.appendChild(body);
1253               
1254                var rowid = document.createElement('input');
1255                rowid.type = 'hidden';
1256                rowid.name = 'rowid';
1257                rowid.value = rs.field(8);
1258                form.appendChild(rowid);
1259               
1260                //Mounting the attachs
1261                var divFiles = document.createElement("div");
1262                divFiles.id = 'divFiles_queue_'+rs.field(8);
1263               
1264                form.appendChild(divFiles);
1265               
1266                document.getElementById('forms_queue').appendChild(form);
1267
1268                var is_local_forward = false;
1269                try {
1270                       
1271                        var rs_attach = this.dbGears.execute('select url_attach from attachments_queue where id_queue=?', [rs.field(8)]);
1272                        while (rs_attach.isValidRow()) {
1273                                if(rs_attach.field(0).indexOf('../tmpLclAtt/')==-1) {
1274                                        tmp_field = addForwardedFile('queue_' + rs.field(8), this.store.getCapturedFileName(rs_attach.field(0)), 'nothing');
1275                                }
1276                                else {
1277                                        var tempNomeArquivo = rs_attach.field(0).split("/");
1278                                        var nomeArquivo = tempNomeArquivo[tempNomeArquivo.length-1];
1279                                        nomeArquivo = nomeArquivo.substring(0,nomeArquivo.length - 4); //Anexos no gears são todos com extensão .php. tenho que tirar a extensão para ficar o nome real do arquivo.
1280                                        is_local_forward = true;
1281                                        tmp_field = addForwardedFile('queue_' + rs.field(8), nomeArquivo, 'nothing');
1282                                }
1283                                fileSubmitter = this.store.createFileSubmitter();
1284                                fileSubmitter.setFileInputElement(tmp_field,rs_attach.field(0));
1285                //              alert(form.innerHTML);
1286                        //      div.appendChild(tmp_field);
1287                                rs_attach.next();
1288                        }
1289                       
1290                        if(is_local_forward) {
1291                                var is_lcl_fw = document.createElement('input');
1292                                is_lcl_fw.type = 'hidden';
1293                                is_lcl_fw.name = 'is_local_forward';
1294                                is_lcl_fw.value = "1";
1295                                form.appendChild(is_lcl_fw);
1296                        }
1297                               
1298                }
1299                catch(exception) {
1300                        alert(exception);
1301                }
1302               
1303                this.finalize();
1304                return form;
1305        }
1306
1307        var expresso_local_messages;
1308        expresso_local_messages = new local_messages();
Note: See TracBrowser for help on using the repository browser.