source: sandbox/2.5.1-expresso1/prototype/modules/attach_message/attach_message.js @ 7927

Revision 7927, 34.3 KB checked in by gustavo, 11 years ago (diff)

Ticket #3349 - Finalizada implementacao da melhoria com a busca no anexo de mensagens

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(onceOpenedMessages[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 onceOpenedMessages = [];
230var selectedMessages   = {};
231var selectedFolder     = {};
232
233function mount_children_localfolders_list(folder){
234    folder.children = new Array();
235    folder.id_search = folder.id;
236    folder.id = 'local_messages_'+folder.id,
237    folder.commonName =  folder.name,
238    folder.parentId = folder.parentid,
239    folder.type = 'localFolder',
240    folder.name = folder.id,
241    folder.messageCount = {
242                             total: folder.messages,
243                             unseen: folder.unseen
244                          }
245
246    if(folder.haschild){
247        expresso_mail_archive.getFoldersList(folder.id_search);
248        folder.children = expresso_mail_archive.folders;
249
250        for(var i = 0; i < folder.children.length; i++){
251            mount_children_localfolders_list(folder.children[i]);
252        }
253
254    }
255}
256function adaptOffline( data )
257{
258    if( preferences.use_local_messages == 1 || expresso_offline)
259    {
260        var folders = expresso_local_messages.list_local_folders();
261       
262        var stripParents = /^(.*)\/([^\/]*)/;
263
264        $.each( folders, function( i, folder ){
265               
266                  if(typeof(folder) == 'undefined')  return;
267                 
268              var id = 'local_messages/' + folder[0];
269
270              var parts = stripParents.exec( id );
271         
272              data[data.length] = {'id' : id,
273                                    'commonName' : parts[2],
274                                    'parentFolder' : parts[1]};
275        });
276    }
277       
278    return( data );
279}
280
281function archive_flag( flagObj ){
282
283    var flags = {};
284    var returns = '';
285
286    $.each( flagObj.tag , function(i, flag){
287        flags[ flag['@value'] ] = true;
288    });
289
290        returns += (flags['seen'] ? '0,' : '1,') ;
291        returns += (flags['answered'] && !flags['forwarded'] ? '1,' : '0,') ;
292        returns += (flags['forwarded'] ? '1,' : '0,') ;
293        returns += (flags['flagged'] || flags['importance_high'] ? '1,' : '0,') ;
294        returns += '0,0';
295           
296    return returns;
297}
298
299$mailpreview_tabs_label_length = 15;
300
301/* --- jQuery handlers --- */
302
303jQuery('#buttons-container .button').button();
304
305jQuery.ajax({
306        url: BASE_PATH + "REST.php?q=folder",
307        dataType: 'json',
308
309        success: function( data ){
310                var tree1 = new Array();
311                var tree2 = new Array();
312                var tree3 = new Array();
313
314        if(preferences.use_local_messages == 1){
315            if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive
316                //pega pastas locais do mailarchiver e insere no array de pastas
317                    expresso_mail_archive.getFoldersList("home");
318                    treeFolders = expresso_mail_archive.folders;
319
320                    for(var i=0; i<treeFolders.length; i++ ){
321                        mount_children_localfolders_list(treeFolders[i]);
322                    }
323                   
324                    for(var i = 0; i < treeFolders.length; i++){
325                        data.push(treeFolders[i]);
326                    }
327            }
328        }
329
330                for (var i=0; i<data.length; i++) {
331
332                        if (/^INBOX/.test(data[i].id)) {
333                                if (!unorphanize(tree1, data[i])) {
334                                        data[i].children = new Array();
335                                        tree1.push(data[i]);
336                                }
337                        }
338                        else if (/^user/.test(data[i].id)) {
339                                if (!unorphanize(tree2, data[i])) {
340                                        data[i].children = new Array();
341                                        tree2.push(data[i]);
342                                }
343                        }
344                        else if (/^local_messages/.test(data[i].id)) {
345                                        tree3.push(data[i]);
346                        }
347                       
348                }
349
350                var firstFolder = jQuery("#foldertree-container")
351                .removeClass('empty-container')
352                .html(DataLayer.render(BASE_PATH + 'api/templates/foldertree.ejs', {folders: [tree1, tree2, tree3]}))
353                .find("#foldertree").treeview()
354                .click(function(event){
355
356                        //request new selected folder messages
357                        var target = $(event.target);
358
359                        if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable, .lastExpandable, .treeview') )
360                            return;
361
362                        if( !target.attr('id') )
363                            target = target.parent();
364
365            if (target.attr('id') == "foldertree") return;
366                       
367                        var targetId = target.attr('id');
368                        var child = target.find('.folder');
369             
370                        $('.filetree span.folder.selected').removeClass('selected');
371                        if(!target.is('#foldertree > .expandable, #foldertree > .collapsable'))
372                                $(target).children('.folder').addClass('selected');
373                       
374                        selectedFolder = {
375                            id: targetId,
376                            name: child.attr('title'),
377                            'class': child.attr('class')
378                        };
379
380                        var grid = $("#message_attacher_grid"), offlineCase = "";
381                       
382            if(targetId.indexOf( 'local_messages' ) == 0){
383                 //Entrar caso: Clicar em uma pasta que seja do arquivamento local
384                targetId = targetId.split("_")[2];
385
386                expresso_mail_archive.getMessagesByFolder(targetId,"ALL");
387
388                msgAll = expresso_mail_archive.msgAll;               
389
390                var msgs = new Array();
391                var from = '';
392                var flag = '';
393               
394                $.each(msgAll, function(i, msg){
395                    from = $.parseJSON(msg['_from']);
396
397                    if(!from){
398                        from = {"mailbox":{"name":"null","route":"null","localPart":"null","domain":"null"}};
399                    }
400
401                    flag = $.parseJSON(msg['_tags']);
402                    id = msg['_id'];
403
404                    var message = {};
405                   
406                    message['msg_number'] = id;
407                    message['flags'] = archive_flag( flag );
408                    message['from.name'] = from['mailbox']['@name'];
409                    message['subject'] = msg['_subject'];
410                    message['timestamp'] = msg['_receivedDate'];
411                    message['size'] = msg['_size'];
412                    message['id'] = id;
413                    msgs.push( message );
414
415                });
416
417            grid.jqGrid("clearGridData", true);
418            grid.jqGrid('setGridParam',{datatype: "local",data: msgs})
419                    .trigger("reloadGrid")
420                    .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
421
422            } else {
423                if( !targetId.indexOf( 'local_messages/' ) )
424                    offlineCase = ":offline";
425
426                grid.jqGrid('setGridParam',{datatype: "json", url:BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+targetId.replace(dashes, '.')+'/message'})
427                    .trigger("reloadGrid")
428                    .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
429            }
430
431
432                })
433                .find('span:first-child');
434                $('span.folder.inbox').parents(".ui-dialog").find("li#INBOX span").addClass('selected');
435                selectedFolder = {
436                        id: firstFolder.parent().attr('id'),
437                        name: firstFolder.attr('title'),
438                        'class': firstFolder.attr('class')
439                };
440
441                //jqgrid
442                jQuery("#mailgrid-container")
443                .removeClass('empty-container')
444                .html(DataLayer.render(BASE_PATH + 'api/templates/messagegrid.ejs', {}))
445                .find("#message_attacher_grid")
446                .jqGrid({
447                        url:BASE_PATH + 'REST.php?q=folder/INBOX/message',
448                        datatype: "json",
449                        mtype: 'GET',
450                        colNames:['#',' ', 'De', 'Assunto', 'Data', 'Tamanho'],
451                        colModel:[
452                                {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
453                                {name:'flags',index:'msg_number',edittype: 'image', width:100, sortable:false, formatter:flags2Class, title :false},
454                                {name:'from.name',index:'msg_number', width:70, sortable:false, formatter:NormaliseFrom},
455                                {name:'subject',index:'subject', width:245, sortable:false,formatter:NormaliseSubject},
456                                {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
457                                {name:'size',index:'size', width:55, align:"right", sortable:false, formatter:bytes2Size}
458                        ],
459                        jsonReader : {
460                                  root: function(obj){
461                                        obj['data'] = {};
462                            obj.data = {rows : obj.rows};
463                                        if(obj.rows){
464                                                if(!obj.rows[0].flag){
465                                                        var msgs = [];
466                                                        $.each(obj.rows, function(i, msg){
467                                                                flag = msg['flags'];
468                                        id = msg['msg_number'];
469                                        var message = {};
470                                     
471                                        message['msg_number'] = id;
472                                        message['flags'] = flag;
473                                        message['to'] = {
474                                                name: msg['toaddress2'],
475                                                email: msg['toaddress2']
476                                        };
477               
478                                        if(msg['from'] != undefined &&  msg['header']['from'] != undefined){
479                                                message['from'] = {
480                                                        'email' : msg['from']['email'],
481                                                        'name' : msg['header']['from']['name']
482                                                }
483                                            }else{
484                                                message['from'] = {
485                                                        'email' : '',
486                                                        'name' : 'Rascunho'
487                                                }
488                                            }
489                                        //message['from']['name'] = msg['from']['name'];
490                                        message['subject'] = msg['subject'] ? msg['subject'] : "(sem assunto)";
491                                        message['timestamp'] = parseInt(msg['timestamp']);
492                                        message['size'] = msg['size'];
493                                        message['id'] = id;
494                                        msgs.push( message );
495                                        });
496                                                        obj['data'] = {};
497                                        obj.data = {rows : msgs};
498                                    }
499                        }
500                                        return obj.data.rows;
501                                  },
502                                  page: "page",
503                                  total: "total",
504                                  records: "records",
505                                  repeatitems: false,
506                                  id: "0"
507                        },
508                        hidegrid:false,
509                        rowNum:10,
510                        rowList:[10,25,50],
511                        pager: '#message_attacher_grid_pager',
512                        sortname: 'id',
513                        viewrecords: true,
514                        sortorder: "desc",
515                        multiselect: true,
516                        autowidth: true,
517                        loadComplete: function(data) {                 
518                                lastLoadedMessages = data.rows;
519                                $("#mailgrid-container").find(".loading").hide();
520                        //$(".attach-message-search-input").val("");
521                                // aplica o contador
522                                jQuery('.timable').each(function (i) {
523                                        jQuery(this).countdown({
524                                                since: new Date(parseInt(this.title)),
525                                                significant: 1,
526                                                layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
527                                                description: ' atr&aacute;s'
528                                        });                                     
529                                });
530                               
531                                // reconstrói a seleção das mensagens mesmo depois da mudança de pasta
532                                if (selectedMessages[selectedFolder.id]) {
533                                        for (var message in selectedMessages[selectedFolder.id]){
534                                                for (var j=0; j<data.rows.length; j++){
535                                                        if (selectedMessages[selectedFolder.id][message] && message == data.rows[j].msg_number) {
536                                                                jQuery("#message_attacher_grid").setSelection(jQuery("#message_attacher_grid").getDataIDs()[j], false);
537                                                        }
538                                                }
539                                        }
540                                }
541                                $('#cb_message_attacher_grid').css('display', 'none');
542                               
543                        },
544                        onSelectRow: function (id, selected) {
545                                var message = false;
546                                for (var i=0; i<lastLoadedMessages.length; i++){
547                                        if (lastLoadedMessages[i].msg_number == id) {
548                                                message = lastLoadedMessages[i];
549                                                break;
550                                        }
551                                }
552                                var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number;
553                                var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-');
554                               
555                                if (selected) {
556                   if(selectedFolder['id'].indexOf("local_messages_") != -1){
557
558                        expresso_mail_archive.getPreviewToAttach(id);
559
560                        var body = expresso_mail_archive.bodyPreview;
561                        var subject = expresso_mail_archive.subjectPreview;
562                        tabPanelTemplateLabel =  subject.substring(0, $mailpreview_tabs_label_length) + '...';
563
564                        if (!$('#' + tabPanelTemplateId).length) {
565                            $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
566                            .find('.message.empty-container').hide().end()
567                            .find('#' + tabPanelTemplateId).html(body)
568                            .prepend(
569                                '<div class="mailpreview-message-info">' +
570                                    get_lang('Subject') + ': ' +
571                                    html_entities(subject) +
572                                '</div>'
573                            )
574                            .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body");
575                        } else {
576                            $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId)
577                            .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected');
578                        }
579                    }
580                                        if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) {
581
582                                                if (!selectedMessages[selectedFolder.id])
583                                                        selectedMessages[selectedFolder.id] = {};
584                                                       
585                                                selectedMessages[selectedFolder.id][message.msg_number] = true;
586                                                $('#mailpreview-container').unblock();                                         
587
588                                                var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject);
589                                                if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
590                                                        tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
591                                               
592                                                if (!$('#' + tabPanelTemplateId).length) {
593                                                        $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
594                                                        .find('.message.empty-container').hide().end()
595                                                        .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body);
596                                                } else {
597                                                        $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId)
598                                                        .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected');
599                                                }
600
601                       
602
603                                        } else {
604                                                jQuery('#mailpreview_container').block({ 
605                                                        message: '<div id="loading-content"><div class="image"></div></div>', 
606                                                        css: { 
607                                                                backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 
608                                                                backgroundRepeat: 'no-repeat',
609                                                                backgroundPosition: 'center',
610                                                                backgroundColor: 'transparent',
611                                                                width: '32px',
612                                                                height: '32px',
613                                                                border:'none' 
614                                                        },
615                                                        overlayCSS: { 
616                                                                backgroundColor: '#CCC', 
617                                                                opacity:         0.5
618                                                        } 
619                                                });
620
621                                                var offlineCase = "";
622                                               
623                                                if( !selectedFolder.id.indexOf( 'local_messages/' ) )
624                                                    offlineCase = ":offline";
625                                         
626                                                if (!selectedMessages[selectedFolder.id])
627                                                        selectedMessages[selectedFolder.id] = {};
628                                                selectedMessages[selectedFolder.id][message.msg_number] = true;
629
630
631                        if(selectedFolder['id'].indexOf("local_messages_") != -1){
632                            $('#mailpreview_container').unblock();
633                            if (!onceOpenedMessages[selectedFolder.id])
634                                    onceOpenedMessages[selectedFolder.id] = {};
635                                onceOpenedMessages[selectedFolder.id][message.msg_number] = message;
636
637                            var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject);
638                                    if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
639                                        tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
640                            selectedMessagesCount();
641                        } else {
642                                                $.ajax({
643                                                        accepts: 'text/html',
644                                                        url: BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+selectedFolder.id.replace(dashes, '.')+'/message/'+id,
645                                                        dataType: 'json',
646                                                        success: function( mail_preview ){             
647                                                                //selectedMessagesCount();
648                                                                if (!onceOpenedMessages[selectedFolder.id])
649                                                                        onceOpenedMessages[selectedFolder.id] = {};
650                                                                onceOpenedMessages[selectedFolder.id][message.msg_number] = jQuery.extend(true, message, mail_preview);
651
652                                                                $('#mailpreview_container').unblock();
653
654                                                                var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject);
655                                                                if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
656                                                                        tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
657                                                        selectedMessagesCount();
658                                                               
659                                                                if (!$('#' + tabPanelTemplateId).length) {     
660                                       
661
662                                    //tabPanelTemplateId - mailpreview_tab_INBOX_1110
663                                    //tabPanelTemplateLabel - Re: asduiahdih
664
665                                                                        $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
666                                                                        .find('.message.empty-container').hide().end()
667                                                                        .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body)
668                                                                        .prepend(
669                                                                                '<div class="mailpreview-message-info">' +
670                                                                                        get_lang('Subject') + ': ' +
671                                                                                        html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject) +
672                                                                                '</div>'
673                                                                        )
674                                                                        .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body");
675                                                                } else {
676                                                                        $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId)
677                                                                        .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected');
678                                                                }
679                                                        }
680                                                });
681                        }     
682                                        }
683                                } else {
684                                        /**
685                                         * if you wants to remove tab on unselect message,
686                                         * but still needs to uselect message on remove tab.
687                                         *
688                                         */
689                                        /*
690                                        if ($('#' + tabPanelTemplateId).length) {
691                                                $mailpreview_tabs.tabs('remove', '#' + tabPanelTemplateId);
692                                        }
693                                         */
694                                        selectedMessages[selectedFolder.id][message.msg_number] = false;
695                                        $mailpreview_tabs.find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').addClass('preview-message-unselected');
696                                }
697                               
698                                if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number])
699                                        selectedMessagesCount();
700                        },
701                        caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>'
702                });
703                //.jqGrid('navGrid','#message_attacher_grid_pager',{edit:false,add:false,del:false});
704
705        var search_local_messsages = function(param, folder){
706            if(preferences.use_local_messages != 0)
707            {
708
709                folder = folder.split("_")[2];
710                folder = "messages_"+folder;
711
712                var local_folders   = [];
713                expresso_mail_archive.search_queryresult = null;
714               
715                local_folders.push(folder);
716
717                expresso_local_messages.setSortType('SORTDATE');
718               
719                tmp = [];
720
721                groupResult = [];
722                    expresso_mail_archive.search(local_folders, "SUBJECT " +  "<=>" +url_encode(param) + "##");
723                        groupResult.push( expresso_mail_archive.search_queryresult );
724                    expresso_mail_archive.search(local_folders, "FROM " + "<=>" + url_encode(param) + "##");
725                        groupResult.push( expresso_mail_archive.search_queryresult );
726                    expresso_mail_archive.search(local_folders, "TO " + "<=>" + url_encode(param) + "##");
727                        groupResult.push( expresso_mail_archive.search_queryresult );
728                    expresso_mail_archive.search(local_folders, "CC " + "<=>" + url_encode(param) + "##");
729                        groupResult.push( expresso_mail_archive.search_queryresult );
730                   
731                if($("#gbox_message_attacher_grid .attach-message-search-checkbox").is(":checked")){
732                    expresso_mail_archive.search(local_folders, "BODY " + "<=>" + url_encode(param) + "##");
733                        groupResult.push( expresso_mail_archive.search_queryresult );
734                }
735
736               
737                 $.each(groupResult, function(i, result){
738                        if(result != null){
739
740                                var existsMessage = true;
741
742                                $.each(result, function(i, each){
743
744                                        $.each(tmp, function(i, ids){
745
746                                            if(each.msg_number == ids.msg_number){
747
748                                                    existsMessage = false;
749                                                    return false;
750
751                                            }
752
753                                        });
754
755                                        if(existsMessage) tmp.push(each);
756                                });
757
758                        }
759                });
760
761
762                if(tmp == null)
763                {
764                    tmp = new Object();
765                    tmp.length = 0;
766                }
767
768                msgs = [];
769
770                $.each(tmp, function(i, msg){
771
772                    flag = msg['flag'];
773                    id = msg['msg_number'];
774
775                    var message = {};
776
777                    var stamp =  msg['timestamp'];
778                    stamp = stamp.toString() + "000";
779                    stamp = parseInt(stamp);
780
781                    message['msg_number'] = id;
782                    message['flags'] = flag;
783                    message['from.name'] = msg['from'];
784                    message['subject'] = msg['subject'];
785                    message['timestamp'] = stamp;
786                    message['size'] = msg['size'];
787                    message['id'] = id;
788                    msgs.push( message );
789                });
790                return msgs;
791            }
792        }
793        var search_imap_messages = function(param, folder){
794                var grid = $("#message_attacher_grid");
795
796                DataLayer.storage.cache = {};
797                if( $(".attach-message-search-checkbox:checked").length > 0 ){
798                    var filters = [
799                                [
800                                        'from',
801                                        '*',
802                                        param
803                                ],             
804                                [
805                                'OR',
806                                'to',
807                                '*',
808                                param
809                        ],
810                                [
811                                'OR',
812                                'subject',
813                                '*',
814                                param
815                        ],
816                        [
817                                'OR',
818                                'folder',
819                                '*',
820                                folder
821                        ],
822                        [
823                                'OR',
824                                'body',
825                                '*',
826                                param
827                        ]
828                    ];
829                }else{
830                        var filters = [
831                                [
832                                        'from',
833                                        '*',
834                                        param
835                                ],             
836                                [
837                                'OR',
838                                'to',
839                                '*',
840                                param
841                        ],
842                                [
843                                'OR',
844                                'subject',
845                                '*',
846                                param
847                        ],
848                        [
849                                'OR',
850                                'folder',
851                                '*',
852                                folder
853                        ]
854                    ];
855                }
856                       
857            var data = DataLayer.get( 'message', { filter: filters, criteria: { properties: { context: { folder: folder } } } }, true );
858
859            if(DataLayer.criterias['message:jqGridSearch']){
860                                delete DataLayer.criterias['message:jqGridSearch'];     
861                        }
862
863                DataLayer.register( 'criterias', 'message:jqGridSearch', function( crit ){
864                            crit.properties = { context: { folder: folder } };
865                            console.log(crit);
866                            return { filter: [ "msgNumber", "IN", data ], criteria: crit };
867                        });
868            if(typeof(data) == 'object'){
869                                grid.jqGrid("clearGridData", true);
870                                grid.jqGrid('setGridParam',{datatype: "json", url: 'message:jqGridSearch'}).trigger("reloadGrid");
871
872            }else{
873                $("#mailgrid-container").find(".loading").hide();
874                grid.jqGrid("clearGridData", true);
875            }
876        }
877
878                var search_messages = function(param){
879            var grid = $("#message_attacher_grid");
880            var folder = $("#foldertree li span.selected").parent().attr("id");
881           
882            if(param == ""){
883                $('#foldertree [id="'+folder+'"]').trigger("click");
884                return;
885            }
886
887            if(folder.indexOf("local_messages_") == 0){
888                // Pesquisa pelas mensagens locais...
889                msgs = search_local_messsages(param, folder);
890            } else {
891                // Pesquisa pelo Imap...
892                return search_imap_messages(param, folder);
893            }
894
895            // Monta as mensagens na grid...
896            grid.jqGrid("clearGridData", true);
897            grid.jqGrid('setGridParam',{datatype: "local",data: msgs,mtype: 'POST'})
898            .trigger("reloadGrid");
899            //.jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
900                }
901
902                var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")];
903                $("#first_message_attacher_grid_pager").attr("title",title[0]);
904                $("#prev_message_attacher_grid_pager").attr("title",title[1]);
905                $("#next_message_attacher_grid_pager").attr("title",title[2]);
906                $("#last_message_attacher_grid_pager").attr("title",title[3]);
907                $("#mailgrid-container .ui-jqgrid-titlebar")
908                .append( DataLayer.render("../prototype/modules/attach_message/attachment_search.ejs") ).find(".ui-jqgrid-titlebar-close").hide()
909                .end().find(".attach-message-search-input").Watermark("Pesquisa...").keydown(function(e){
910                        var param = $(this).val();
911                        if($.ui.keyCode.ENTER == e.keyCode){
912                                $("#mailgrid-container").find(".loading").show("fast", function(){
913                                        search_messages(param);
914                                });
915                        }
916                       
917                });
918                $("#attach-message-search").button({
919                        text: false,
920                        icons: {
921                                primary: "ui-icon-search"
922                        }
923                }).next().button({
924                        text: false,
925                        icons: {
926                                primary: "ui-icon-script"
927                        }
928                });
929                $("#attach-message-search").parent().buttonset();
930
931                $("#attach-message-search").click(function(){
932                        var param = $(this).parents(".attach-message-search-div:first").find(".attach-message-search-input").val();
933                        $("#mailgrid-container").find(".loading").show("fast", function(){
934                                search_messages(param);
935                        });     
936                });
937        }
938});
939
940
941var $mailpreview_tabs = $( "#mailpreview_container").tabs({
942        tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'> Fechar </span></li>",
943        panelTemplate: '<div class="message mailpreview-message"></div>',
944        add: function( event, ui ) {
945                $mailpreview_tabs.tabs('select', '#' + ui.panel.id);
946       
947                if ($('#mailpreview_tabs_default_empty').length && $mailpreview_tabs.tabs("length") > 1) {     
948                        $mailpreview_tabs.tabs('remove', '#mailpreview_tabs_default_empty');
949                }
950        },
951        remove: function(event, ui) {
952                if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
953                        /**
954                         * TODO: internacionalizar a string 'Nenhuma aba'
955                         */
956                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
957                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
958                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
959                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
960                }
961        }
962});
963
964$( "#mailpreview_container span.ui-icon-close" ).unbind("click");
965$( "#mailpreview_container span.ui-icon-close" ).live( "click", function(e) {
966        var index = $("li", $mailpreview_tabs).index($(this).parent());
967        $mailpreview_tabs.tabs("remove", index);
968        e.stopImmediatePropagation();
969});
970
971if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
972                        /**
973                         * TODO: internacionalizar a string 'Nenhuma aba'
974                         */
975                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
976                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
977                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
978                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
979}
Note: See TracBrowser for help on using the repository browser.