source: branches/2.5/prototype/modules/attach_message/attach_message.js @ 8232

Revision 8232, 34.7 KB checked in by douglas, 10 years ago (diff)

Ticket #0000 - Copiadas as alterações do Trunk. Versão final 2.5.1.

Line 
1// $.storage = new $.store();
2 
3isOffline = /[A-z0-9-_\/\.]*:offline\?(.*)/;
4breakParams = /[&=]/;
5dots = /\./gi;
6dashes = /\//gi;
7flags = [ 'Attachment', 'Forwarded' ,'Recent', 'Unseen',  'Answered',  'Draft',  'Deleted', 'Flagged', 'Followupflag', 'Label' ];
8
9$.ajaxPrefilter(function( options, originalOptions, jqXHR ){
10
11      var offlineAction = isOffline.exec( options.url );
12
13      if( offlineAction )
14      {
15          offlineAction = offlineAction[1] || "";
16       
17          jqXHR.abort();
18
19          var params = {};
20         
21          if( offlineAction )
22              offlineAction +=  options.data ? "&" +  options.data : "";
23
24          offlineAction = offlineAction.split( breakParams );
25
26          for( var i = 0; i < offlineAction.length; )
27              params[ offlineAction[i++] ] = offlineAction[i++];
28
29          rest = params["q"].split("/");
30
31          if( !(rest.length % 2) )
32              var id = rest.pop();
33
34          var concept = rest.pop();
35
36          for( var i = 0; i < rest.length; )
37            params[ rest[i++] ] = rest[ i++ ];
38
39          switch( concept )
40          {
41            case "message":
42            {
43                if( id ){
44                    var mail = expresso_local_messages.get_local_mail( id );
45                    mail.eml = expresso_local_messages.get_src( mail.url_export_file );
46
47                    ( options.success || options.complete )( mail );
48                    return;
49                }
50
51                var msgs = expresso_local_messages.get_local_range_msgs( params["folder"].replace(dots, "/").replace("local_messages/", ""),
52                                                                          params["rows"] * ( params["page"] - 1 ) + 1,
53                                                                          params["rows"], "SORTARRIVAL", (params["sord"] == "desc"),
54                                                                          "ALL", 1, 1 );
55
56                for( var i = 0; i < msgs.length; i++ )
57                {
58                      msgs[i].size = msgs[i].Size;
59                      msgs[i].timestamp = msgs[i].udate * 1000;
60                      msgs[i].flags = [];
61
62                      for( var ii = 0; ii < flags.length; ii++ )
63                          if( f = $.trim( msgs[i][ flags[ii] ] ) )
64                              msgs[i].flags[ msgs[i].flags.length ] =  f;
65
66                      msgs[i].flags = msgs[i].flags.join(',');
67                }
68
69                ( options.success || options.complete )( {"rows": msgs,
70                                                           "records": msgs.length,
71                                                           "page": params["page"],
72                                                           "total": Math.ceil( msgs.num_msgs / params["rows"] )} );
73            }
74          }
75      }
76});
77
78var BASE_PATH = '../prototype/';
79//BASE_PATH = '../';
80//encontra os pais de todas as pastas e cria uma nova estrutura adicionando os filhos a um array no atributo 'children' do respectivo pai
81unorphanize = function(root, element) {
82        var ok = false;
83        for (var i=0; i<root.length; i++) {
84                if (root[i].id == element.parentFolder) {
85                        element.children = new Array();
86                        root[i].children.push(element);
87                        return true;
88                } else if (ok = unorphanize(root[i].children, element)) {
89                        break;
90                }
91        }
92
93        return ok;
94}
95
96/* --- helpers --- */
97bytes2Size = function(bytes) {
98        var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
99        if (bytes == 0) return '0 Bytes';
100        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
101        var size = (i<2) ? Math.round((bytes / Math.pow(1024, i))) : Math.round((bytes / Math.pow(1024, i)) * 100)/100;
102        return  size + ' ' + sizes[i];
103}
104
105flags2Class = function(cellvalue, options, rowObject) {
106        var classes = '';       
107        cellvalue = cellvalue.split(',');
108        cell = {
109                        Unseen: parseInt(cellvalue[0])  ? 'Unseen' : 'Seen',
110                        Answered: parseInt(cellvalue[1]) ? 'Answered' : (parseInt(cellvalue[2]) ? 'Forwarded' : ''),
111                        Flagged: parseInt(cellvalue[3]) ? 'Flagged' : '',
112                        Recent: parseInt(cellvalue[4])  ? 'Recent' : '',                       
113                        Draft: parseInt(cellvalue[5]) ? 'Draft' : ''           
114                };
115        for(var flag in cell){
116                classes += '<span class="flags '+ (cell[flag]).toLowerCase() + '"' + (cell[flag] != "" ? 'title="'+ get_lang(cell[flag])+'"' : '')+'> </span>';
117        }
118        if(rowObject.labels){   
119                var titles = [];
120                var count = 0;
121                 for(i in rowObject.labels){
122                        titles[count] = " "+rowObject.labels[i].name;
123                        count++;
124                }
125                titles = titles.join();
126                classes += '<span class="flags labeled" title="'+titles+'"> </span>';
127        }else{
128                classes += '<span class="flags"> </span>';
129        }
130       
131        if(rowObject.followupflagged){         
132                if(rowObject.followupflagged.followupflag.id < 7){
133                        var nameFollowupflag = get_lang(rowObject.followupflagged.followupflag.name);
134                }else{
135                        var nameFollowupflag = rowObject.followupflagged.followupflag.name;
136                }
137                if(rowObject.followupflagged.isDone == 1){
138                        classes += '<span class="flags followupflagged" title="'+nameFollowupflag+'" style="background:'+rowObject.followupflagged.backgroundColor+';"><img style=" margin-left:-3px;" src="../prototype/modules/mail/img/flagChecked.png"></span>';
139                }else{                 
140                        classes += '<span class="flags followupflagged" title="'+nameFollowupflag+'" style="background:'+rowObject.followupflagged.backgroundColor+';background-image:url(../prototype/modules/mail/img/mail-sprites.png);background-position: 0 -864px;"</span>';
141                }
142               
143        }
144
145        return classes;
146}
147
148function numberMonths (months){
149        switch(months){
150                case 'Jan':
151                        return 1;
152                case 'Feb':
153                        return 2;
154                case 'Mar':
155                        return 3;
156                case 'Apr':
157                        return 4;
158                case 'May':
159                        return 5;
160                case 'June':
161                        return 6;
162                case 'July':
163                        return 7;
164                case 'Aug':
165                        return 8;
166                case 'Sept':
167                        return 9;
168                case 'Oct':
169                        return 10;
170                case 'Nov':
171                        return 11;
172                case 'Dec':
173                        return 12;
174        }       
175}
176
177NormaliseFrom = function(cellvalue, options, rowObject) {
178        rowObject['flags'] = rowObject['flags'].split(",");
179        if(rowObject['flags'][rowObject['flags'].length-1] ==  1){
180                return get_lang(special_folders["Drafts"]);
181        }
182        return cellvalue;       
183}
184
185NormaliseSubject = function(cellvalue, options, rowObject) {
186        return html_entities(cellvalue);
187}
188
189date2Time = function (timestamp) {
190        date = new Date();
191        dat = new Date(timestamp);
192        if ((date.getTime() - timestamp) < (24*60*60*1000)) {
193                return '<span class="timable" title="'+dat.getTime()+'"></span>';
194        } else {
195                date = new Date(timestamp);
196                if(is_ie){
197                        var b = date.toString().split(' ');
198                        var c = b[2] + "/" + numberMonths(b[1]) + "/" + b[5];
199                        return '<span class="datable">' + c + '</span>';
200                }else{
201                        var b = date.toISOString().split("T")[0].split("-");
202                        var c = b[2] + "/" + b[1] + "/" + b[0];
203                        return '<span class="datable">' + c + '</span>';
204                }
205        }
206}
207
208changeTabIndex = function (elements) {
209//      jQuery('#foldertree').attr('tabIndex', '1').focus();
210}
211
212
213selectedMessagesCount = function() {
214        var byte_size = 0, total_messages = 0;
215        for (var folder in selectedMessages) {
216                for (var message in selectedMessages[folder]) {
217                        if (selectedMessages[folder][message]) {
218                                byte_size += parseInt(onceOpenedHeadersMessages[folder][message].size);
219                                total_messages++;
220                        }
221                }
222        }
223        $("#selected_messages_number").html(total_messages).next().html(bytes2Size(byte_size));
224        return total_messages;
225}
226
227var msgAttacherGrid = $("#message_attacher_grid"), msgsTotal = $("#selected_messages_number");
228var lastLoadedMessages = [];
229var selectedMessages   = {};
230var selectedFolder     = {};
231
232function mount_children_localfolders_list(folder){
233    folder.children = new Array();
234    folder.id_search = folder.id;
235    folder.id = 'local_messages_'+folder.id,
236    folder.commonName =  folder.name,
237    folder.parentId = folder.parentid,
238    folder.type = 'localFolder',
239    folder.name = folder.id,
240    folder.messageCount = {
241                             total: folder.messages,
242                             unseen: folder.unseen
243                          }
244
245    if(folder.haschild){
246        expresso_mail_archive.getFoldersList(folder.id_search);
247        folder.children = expresso_mail_archive.folders;
248
249        for(var i = 0; i < folder.children.length; i++){
250            mount_children_localfolders_list(folder.children[i]);
251        }
252
253    }
254}
255function adaptOffline( data )
256{
257    if( preferences.use_local_messages == 1 || expresso_offline)
258    {
259        var folders = expresso_local_messages.list_local_folders();
260       
261        var stripParents = /^(.*)\/([^\/]*)/;
262
263        $.each( folders, function( i, folder ){
264               
265                  if(typeof(folder) == 'undefined')  return;
266                 
267              var id = 'local_messages/' + folder[0];
268
269              var parts = stripParents.exec( id );
270         
271              data[data.length] = {'id' : id,
272                                    'commonName' : parts[2],
273                                    'parentFolder' : parts[1]};
274        });
275    }
276       
277    return( data );
278}
279
280function archive_flag( flagObj ){
281
282    var flags = {};
283    var returns = '';
284
285    $.each( flagObj.tag , function(i, flag){
286        flags[ flag['@value'] ] = true;
287    });
288
289        returns += (flags['seen'] ? '0,' : '1,') ;
290        returns += (flags['answered'] && !flags['forwarded'] ? '1,' : '0,') ;
291        returns += (flags['forwarded'] ? '1,' : '0,') ;
292        returns += (flags['flagged'] || flags['importance_high'] ? '1,' : '0,') ;
293        returns += '0,0';
294           
295    return returns;
296}
297
298function archive_flag_search( flagObj ){
299    var flags = {};
300    var returns = '';
301
302    flagObj = flagObj.split("");
303    $.each( flagObj , function(i, flag){
304        flags[ flag ] = true;
305    });
306
307    returns += (flags['U'] ? '1,' : '0,') ;
308    returns += (flags['A'] && !flags['X'] ? '1,' : '0,') ;
309    returns += (flags['X'] ? '1,' : '0,') ;
310    returns += (flags['F'] ? '1,' : '0,') ;
311    returns += '0,0';
312           
313    return returns;
314}
315
316
317$mailpreview_tabs_label_length = 15;
318
319/* --- jQuery handlers --- */
320
321jQuery('#buttons-container .button').button();
322
323jQuery.ajax({
324        url: BASE_PATH + "REST.php?q=folder",
325        dataType: 'json',
326
327        success: function( data ){
328                var tree1 = new Array();
329                var tree2 = new Array();
330                var tree3 = new Array();
331
332        if(preferences.use_local_messages == 1){
333            if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive
334                //pega pastas locais do mailarchiver e insere no array de pastas
335                    expresso_mail_archive.getFoldersList("home");
336                    treeFolders = expresso_mail_archive.folders;
337
338                    for(var i=0; i<treeFolders.length; i++ ){
339                        mount_children_localfolders_list(treeFolders[i]);
340                    }
341                   
342                    for(var i = 0; i < treeFolders.length; i++){
343                        data.push(treeFolders[i]);
344                    }
345            }
346        }
347
348                for (var i=0; i<data.length; i++) {
349
350                        if (/^INBOX/.test(data[i].id)) {
351                                if (!unorphanize(tree1, data[i])) {
352                                        data[i].children = new Array();
353                                        tree1.push(data[i]);
354                                }
355                        }
356                        else if (/^user/.test(data[i].id)) {
357                                if (!unorphanize(tree2, data[i])) {
358                                        data[i].children = new Array();
359                                        tree2.push(data[i]);
360                                }
361                        }
362                        else if (/^local_messages/.test(data[i].id)) {
363                                        tree3.push(data[i]);
364                        }
365                       
366                }
367
368                var firstFolder = jQuery("#foldertree-container")
369                .removeClass('empty-container')
370                .html(DataLayer.render(BASE_PATH + 'api/templates/foldertree.ejs', {folders: [tree1, tree2, tree3]}))
371                .find("#foldertree").treeview()
372                .click(function(event){
373
374                        //request new selected folder messages
375                        var target = $(event.target);
376
377                        if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable, .lastExpandable, .treeview') )
378                            return;
379
380                        if( !target.attr('id') )
381                            target = target.parent();
382
383            if (target.attr('id') == "foldertree") return;
384                       
385                        var targetId = target.attr('id');
386                        var child = target.find('.folder');
387             
388                        $('.filetree span.folder.selected').removeClass('selected');
389                        if(!target.is('#foldertree > .expandable, #foldertree > .collapsable'))
390                                $(target).children('.folder').addClass('selected');
391                       
392                        selectedFolder = {
393                            id: targetId,
394                            name: child.attr('title'),
395                            'class': child.attr('class')
396                        };
397
398                        var grid = $("#message_attacher_grid"), offlineCase = "";
399                       
400            if(targetId.indexOf( 'local_messages' ) == 0){
401                 //Entrar caso: Clicar em uma pasta que seja do arquivamento local
402                targetId = targetId.split("_")[2];
403
404                expresso_mail_archive.getMessagesByFolder(targetId,"ALL");
405
406                msgAll = expresso_mail_archive.msgAll;               
407
408                var msgs = new Array();
409                var from = '';
410                var flag = '';
411               
412                $.each(msgAll, function(i, msg){
413                    from = $.parseJSON(msg['_from']);
414
415                    if(!from){
416                        from = {"mailbox":{"name":"null","route":"null","localPart":"null","domain":"null"}};
417                    }
418
419                    flag = $.parseJSON(msg['_tags']);
420                    id = msg['_id'];
421
422                    var message = {};
423                   
424                   
425                    message['msg_number'] = id;
426                    message['flags'] = archive_flag( flag );
427                    message['from.name'] = from['mailbox']['@name'];
428                    message['subject'] = msg['_subject'];
429                    message['timestamp'] = msg['_receivedDate'];
430                    message['size'] = msg['_size'];
431                    message['id'] = id;
432                    msgs.push( message );
433
434                });
435
436            grid.jqGrid("clearGridData", true);
437            grid.jqGrid('setGridParam',{datatype: "local",data: msgs})
438                    .trigger("reloadGrid")
439                    .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
440
441            } else {
442                if( !targetId.indexOf( 'local_messages/' ) )
443                    offlineCase = ":offline";
444
445                grid.jqGrid('setGridParam',{datatype: "json", url:BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+targetId.replace(dashes, '.')+'/message'})
446                    .trigger("reloadGrid")
447                    .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
448            }
449                })
450                .find('span:first-child');
451                $('span.folder.inbox').parents(".ui-dialog").find("li#INBOX span").addClass('selected');
452                selectedFolder = {
453                        id: firstFolder.parent().attr('id'),
454                        name: firstFolder.attr('title'),
455                        'class': firstFolder.attr('class')
456                };
457
458                //jqgrid
459                jQuery("#mailgrid-container")
460                .removeClass('empty-container')
461                .html(DataLayer.render(BASE_PATH + 'api/templates/messagegrid.ejs', {}))
462                .find("#message_attacher_grid")
463                .jqGrid({
464                        url:BASE_PATH + 'REST.php?q=folder/INBOX/message',
465                        datatype: "json",
466                        mtype: 'GET',
467                        colNames:['#',' ', 'De', 'Assunto', 'Data', 'Tamanho'],
468                        colModel:[
469                                {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
470                                {name:'flags',index:'msg_number',edittype: 'image', width:100, sortable:false, formatter:flags2Class, title :false},
471                                {name:'from.name',index:'msg_number', width:70, sortable:false, formatter:NormaliseFrom},
472                                {name:'subject',index:'subject', width:245, sortable:false,formatter:NormaliseSubject},
473                                {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
474                                {name:'size',index:'size', width:55, align:"right", sortable:false, formatter:bytes2Size}
475                        ],
476                        jsonReader : {
477                                  root: function(obj){
478                                        obj['data'] = {};
479                            obj.data = {rows : obj.rows};
480                                        if(obj.rows){
481                                                if(!obj.rows[0].flag){
482                                                        var msgs = [];
483                                                        $.each(obj.rows, function(i, msg){
484                                                                flag = msg['flags'];
485                                        id = msg['msg_number'];
486                                        var message = {};
487                                     
488                                        message['msg_number'] = id;
489                                        message['flags'] = flag;
490                                        message['to'] = {
491                                                name: msg['toaddress2'],
492                                                email: msg['toaddress2']
493                                        };
494               
495                                        if(msg['from'] != undefined &&  msg['header']['from'] != undefined){
496                                                message['from'] = {
497                                                        'email' : msg['from']['email'],
498                                                        'name' : msg['header']['from']['name']
499                                                }
500                                            }else{
501                                                message['from'] = {
502                                                        'email' : '',
503                                                        'name' : 'Rascunho'
504                                                }
505                                            }
506                                        //message['from']['name'] = msg['from']['name'];
507                                        message['subject'] = msg['subject'] ? msg['subject'] : "(sem assunto)";
508                                        message['timestamp'] = parseInt(msg['timestamp']);
509                                        message['size'] = msg['size'];
510                                        message['id'] = id;
511                                        msgs.push( message );
512                                        });
513                                                        obj['data'] = {};
514                                        obj.data = {rows : msgs};
515                                    }
516                        }
517                                        return obj.data.rows;
518                                  },
519                                  page: "page",
520                                  total: "total",
521                                  records: "records",
522                                  repeatitems: false,
523                                  id: "0"
524                        },
525                        hidegrid:false,
526                        rowNum:10,
527                        rowList:[10,25,50],
528                        pager: '#message_attacher_grid_pager',
529                        sortname: 'id',
530                        viewrecords: true,
531                        sortorder: "desc",
532                        multiselect: true,
533                        autowidth: true,
534                        loadComplete: function(data) {
535                                lastLoadedMessages = data.rows;
536                                $("#mailgrid-container").find(".loading").hide();
537
538                                // aplica o contador
539                                jQuery('.timable').each(function (i) {
540                                        jQuery(this).countdown({
541                                                since: new Date(parseInt(this.title)),
542                                                significant: 1,
543                                                layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
544                                                description: ' atr&aacute;s'
545                                        });                                     
546                                });
547                               
548                                // reconstrói a seleção das mensagens mesmo depois da mudança de pasta
549                                if (selectedMessages[selectedFolder.id]) {
550                                        for (var message in selectedMessages[selectedFolder.id]){
551                                                for (var j=0; j<data.rows.length; j++){
552                                                        if (selectedMessages[selectedFolder.id][message] && message == data.rows[j].msg_number) {
553                                                                jQuery("#message_attacher_grid").setSelection(jQuery("#message_attacher_grid").getDataIDs()[j], false);
554                                                        }
555                                                }
556                                        }
557                                }
558                                $('#cb_message_attacher_grid').css('display', 'none');
559                               
560                        },
561            onSelectRow: function(id, selected)
562            {
563                /* Funções auxiliares:*/
564
565                /*
566                    Marca a mensagem como selecionada no grid de anexar mensagena.
567                    Parâmetros:
568                        folder: folder em que a mensagem a ser selecionada se encontra.
569                        msg_number: id da mensagem a ser selecionada.
570                */
571                var mark_as_selected = function (folder, msg_number) {
572                    if(!selectedMessages[folder])
573                    {
574                        selectedMessages[folder] = {};
575                    }
576                    selectedMessages[folder][msg_number] = true;
577                }
578
579                /*
580                    Adiciona uma mensagem ao cache de mensagens.
581                        cache: vetor de cache de mensagens.
582                        msg: mensagem a ser armazenada.
583                */
584                var add_msg_to_cache = function (cache, msg) {
585                    if(!cache[selectedFolder.id])
586                    {
587                        cache[selectedFolder.id] = {};
588                    }
589                    cache[selectedFolder.id][msg.msg_number] = msg;
590                }
591
592                /*
593                    Adiciona uma aba de preview para cada mensagem selecionada.
594                        subject: assunto da mensagem.
595                        body: corpo da mensagem.
596                */
597                var add_preview_tab = function (subject, body) {
598                    // Trunca o assunto, para caber na aba de preview:
599                    var tabPanelTemplateLabel = html_entities(subject);
600                    if(tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
601                    {
602                        tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
603                    }
604
605                    // Se a aba não tiver sido adicionada:
606                    if(!$('#' + tabPanelTemplateId).length)
607                    {
608                        // adiciona-a:
609                        $mailpreview_tabs
610                        .tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
611                        .find('.message.empty-container')
612                        .hide()
613                        .end()
614                        .find('#' + tabPanelTemplateId)
615                        .html(body)
616                        .prepend('<div class="mailpreview-message-info">' + get_lang('Subject') + ': ' + html_entities(subject) + '</div>')
617                        .find('[class^="ExpressoCssWrapper"]')
618                        .addClass("mailpreview-message-body");
619                    }
620                    else
621                    {
622                        // Senão, só a seleciona:
623                        $mailpreview_tabs
624                        .tabs('select', '#' + tabPanelTemplateId)
625                        .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]')
626                        .removeClass('preview-message-unselected');
627                    }
628                }
629
630                var message = false;
631                for(var i = 0; i < lastLoadedMessages.length; i++)
632                {
633                    if(lastLoadedMessages[i].msg_number == id)
634                    {
635                        message = lastLoadedMessages[i];
636                        break;
637                    }
638                }
639                var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number;
640                var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-');
641
642                if(selected)
643                {
644                    // Se a já mensagem (com preview) já estiver no cache:
645                    if(onceOpenedHeadersMessages[selectedFolder.id] && onceOpenedHeadersMessages[selectedFolder.id][message.msg_number]  && onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].body)
646                    {
647
648                        mark_as_selected(selectedFolder.id, message.msg_number);
649
650                        add_preview_tab(
651                            onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].subject,
652                            onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].body
653                        );
654                    }
655                    else // Mensagem não está no cache:
656                    {
657                        jQuery('#mailpreview_container').block(
658                        {
659                            message: '<div id="loading-content"><div class="image"></div></div>',
660                            css: {
661                                backgroundImage: 'url(' + BASE_PATH + 'modules/attach_message/images/loading.gif)',
662                                backgroundRepeat: 'no-repeat',
663                                backgroundPosition: 'center',
664                                backgroundColor: 'transparent',
665                                width: '32px',
666                                height: '32px',
667                                border: 'none'
668                            },
669                            overlayCSS: {
670                                backgroundColor: '#CCC',
671                                opacity: 0.5
672                            }
673                        });
674
675                        mark_as_selected(selectedFolder.id, message.msg_number);
676
677                        // Se for mensagem local:
678                        if(selectedFolder['id'].indexOf("local_messages_") != -1)
679                        {
680                            expresso_mail_archive.getPreviewToAttach(id);
681
682                            var body = expresso_mail_archive.bodyPreview;
683                            var subject = expresso_mail_archive.subjectPreview;
684
685                            add_preview_tab(subject, body);
686
687                            $('#mailpreview_container').unblock();
688
689                            add_msg_to_cache(onceOpenedHeadersMessages, message);
690                        }
691                        else
692                        {
693                            proxy_mensagens.get_msg(id, selectedFolder.id, '', function (data) {
694                                message = $.extend(true, message, data);
695
696                                add_preview_tab(message.subject, message.body);
697
698                                $('#mailpreview_container').unblock();
699
700                                add_msg_to_cache(onceOpenedHeadersMessages, message);
701
702
703                            })
704                        }
705                    }
706                }
707                else
708                {
709                    /**
710                     * if you wants to remove tab on unselect message,
711                     * but still needs to uselect message on remove tab.
712                     *
713                     */
714                    selectedMessages[selectedFolder.id][message.msg_number] = false;
715                    $mailpreview_tabs
716                    .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]')
717                    .addClass('preview-message-unselected');
718                }
719
720                selectedMessagesCount();
721            },
722           
723                        caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>'
724                });
725
726        var search_local_messsages = function(param, folder){
727            if(preferences.use_local_messages != 0)
728            {
729                folder = folder.split("_")[2];
730
731                var local_folders   = [];
732                expresso_mail_archive.search_queryresult = null;
733               
734                local_folders.push(folder);
735               
736                tmp = [];
737
738                groupResult = [];
739                    expresso_mail_archive.search(local_folders, "SUBJECT " +  "<=>" +url_encode(param) + "##");
740                        groupResult.push( expresso_mail_archive.search_queryresult );
741                    expresso_mail_archive.search(local_folders, "FROM " + "<=>" + url_encode(param) + "##");
742                        groupResult.push( expresso_mail_archive.search_queryresult );
743                    expresso_mail_archive.search(local_folders, "TO " + "<=>" + url_encode(param) + "##");
744                        groupResult.push( expresso_mail_archive.search_queryresult );
745                    expresso_mail_archive.search(local_folders, "CC " + "<=>" + url_encode(param) + "##");
746                        groupResult.push( expresso_mail_archive.search_queryresult );
747                   
748                if($("#gbox_message_attacher_grid .attach-message-search-checkbox").is(":checked")){
749                    expresso_mail_archive.search(local_folders, "BODY " + "<=>" + url_encode(param) + "##");
750                        groupResult.push( expresso_mail_archive.search_queryresult );
751                }
752
753               
754                 $.each(groupResult, function(i, result){
755                        if(result != null){
756
757                                var existsMessage = true;
758
759                                $.each(result, function(i, each){
760
761                                        $.each(tmp, function(i, ids){
762
763                                            if(each.msg_number == ids.msg_number){
764
765                                                    existsMessage = false;
766                                                    return false;
767
768                                            }
769
770                                        });
771
772                                        if(existsMessage) tmp.push(each);
773                                });
774
775                        }
776                });
777
778
779                if(tmp == null)
780                {
781                    tmp = new Object();
782                    tmp.length = 0;
783                }
784
785                msgs = [];
786
787                $.each(tmp, function(i, msg){
788
789                    flag = msg['flag'];
790                    id = msg['msg_number'];
791
792                    var message = {};
793
794                    var stamp =  msg['timestamp'];
795                    stamp = stamp.toString() + "000";
796                    stamp = parseInt(stamp);
797
798                    message['msg_number'] = id;
799                    message['flags'] = archive_flag_search(flag);//"1,1,1,1,1,1";//
800                    message['from.name'] = msg['from'];
801                    message['subject'] = msg['subject'];
802                    message['timestamp'] = stamp;
803                    message['size'] = msg['size'];
804                    message['id'] = id;
805                    msgs.push( message );
806                });
807                return msgs;
808            }
809        }
810        var search_imap_messages = function(param, folder){
811                var grid = $("#message_attacher_grid");
812
813                DataLayer.storage.cache = {};
814                if( $(".attach-message-search-checkbox:checked").length > 0 ){
815                    var filters = [
816                                [
817                                        'from',
818                                        '*',
819                                        param
820                                ],             
821                                [
822                                'OR',
823                                'to',
824                                '*',
825                                param
826                        ],
827                                [
828                                'OR',
829                                'subject',
830                                '*',
831                                param
832                        ],
833                        [
834                                'OR',
835                                'folder',
836                                '*',
837                                folder
838                        ],
839                        [
840                                'OR',
841                                'body',
842                                '*',
843                                param
844                        ]
845                    ];
846                }else{
847                        var filters = [
848                                [
849                                        'from',
850                                        '*',
851                                        param
852                                ],             
853                                [
854                                'OR',
855                                'to',
856                                '*',
857                                param
858                        ],
859                                [
860                                'OR',
861                                'subject',
862                                '*',
863                                param
864                        ],
865                        [
866                                'OR',
867                                'folder',
868                                '*',
869                                folder
870                        ]
871                    ];
872                }
873                       
874            var data = DataLayer.get( 'message', { filter: filters, criteria: { properties: { context: { folder: folder } } } }, true );
875
876            if(DataLayer.criterias['message:jqGridSearch']){
877                                delete DataLayer.criterias['message:jqGridSearch'];     
878                        }
879
880                DataLayer.register( 'criterias', 'message:jqGridSearch', function( crit ){
881                            crit.properties = { context: { folder: folder } };
882
883                            return { filter: [ "msgNumber", "IN", data ], criteria: crit };
884                        });
885            if(typeof(data) == 'object'){
886                                grid.jqGrid("clearGridData", true);
887                                grid.jqGrid('setGridParam',{datatype: "json", url: 'message:jqGridSearch'}).trigger("reloadGrid");
888
889            }else{
890                $("#mailgrid-container").find(".loading").hide();
891                grid.jqGrid("clearGridData", true);
892            }
893        }
894
895                var search_messages = function(param){
896            var grid = $("#message_attacher_grid");
897            var folder = $("#foldertree li span.selected").parent().attr("id");
898           
899            if(param == ""){
900                $('#foldertree [id="'+folder+'"]').trigger("click");
901                return;
902            }
903            $(".attach-message-search-input").val("");
904            if(folder.indexOf("local_messages_") == 0){
905                // Pesquisa pelas mensagens locais...
906                msgs = search_local_messsages(param, folder);
907            } else {
908                // Pesquisa pelo Imap...
909                return search_imap_messages(param, folder);
910            }
911
912            // Monta as mensagens na grid...
913            grid.jqGrid("clearGridData", true);
914            grid.jqGrid('setGridParam',{datatype: "local",data: msgs})
915            .trigger("reloadGrid");
916            //.jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
917                }
918
919                var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")];
920                $("#first_message_attacher_grid_pager").attr("title",title[0]);
921                $("#prev_message_attacher_grid_pager").attr("title",title[1]);
922                $("#next_message_attacher_grid_pager").attr("title",title[2]);
923                $("#last_message_attacher_grid_pager").attr("title",title[3]);
924                $("#mailgrid-container .ui-jqgrid-titlebar")
925                .append( DataLayer.render("../prototype/modules/attach_message/attachment_search.ejs") ).find(".ui-jqgrid-titlebar-close").hide()
926                .end().find(".attach-message-search-input").Watermark("Pesquisa...").keydown(function(e){
927                        var param = $(this).val();
928                        if($.ui.keyCode.ENTER == e.keyCode){
929                                $("#mailgrid-container").find(".loading").show("fast", function(){
930                                        search_messages(param);
931                                });
932                        }
933                       
934                }).end().find(".attach-message-search-checkbox").click(function(){
935            var msg;
936            if($(this).is(":checked")){
937                msg = get_lang("take off this option to disregard the message body in the search.");
938            } else {
939                msg = get_lang("take on this option to regard the message body in the search.");
940            }
941            $(".attach-message-search-div .button-body-msg-title").attr("title",msg);
942        });
943
944                $("#attach-message-search").button({
945                        text: false,
946                        icons: {
947                                primary: "ui-icon-search"
948                        }
949                }).next().button({
950                        text: false,
951                        icons: {
952                                primary: "ui-icon-script"
953                        }
954                });
955                $("#attach-message-search").parent().buttonset();
956
957                $("#attach-message-search").click(function(){
958                        var param = $(this).parents(".attach-message-search-div:first").find(".attach-message-search-input").val();
959                        $("#mailgrid-container").find(".loading").show("fast", function(){
960                                search_messages(param);
961                        });     
962                });
963        }
964});
965
966
967var $mailpreview_tabs = $( "#mailpreview_container").tabs({
968        tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'> Fechar </span></li>",
969        panelTemplate: '<div class="message mailpreview-message"></div>',
970        add: function( event, ui ) {
971                $mailpreview_tabs.tabs('select', '#' + ui.panel.id);
972       
973                if ($('#mailpreview_tabs_default_empty').length && $mailpreview_tabs.tabs("length") > 1) {     
974                        $mailpreview_tabs.tabs('remove', '#mailpreview_tabs_default_empty');
975                }
976        },
977        remove: function(event, ui) {
978                if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
979                        /**
980                         * TODO: internacionalizar a string 'Nenhuma aba'
981                         */
982                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
983                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
984                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
985                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
986                }
987        }
988});
989
990$( "#mailpreview_container span.ui-icon-close" ).unbind("click");
991$( "#mailpreview_container span.ui-icon-close" ).live( "click", function(e) {
992        var index = $("li", $mailpreview_tabs).index($(this).parent());
993        $mailpreview_tabs.tabs("remove", index);
994        e.stopImmediatePropagation();
995});
996
997if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
998                        /**
999                         * TODO: internacionalizar a string 'Nenhuma aba'
1000                         */
1001                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
1002                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
1003                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
1004                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
1005}
Note: See TracBrowser for help on using the repository browser.