source: trunk/expressoMail1_2/js/doiMenuData.js @ 8167

Revision 8167, 21.0 KB checked in by cristiano, 11 years ago (diff)

Ticket #3456 - Otimizacao e implementacao de habilitar/desabilitar funcionalidades no ExpressoMail?

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1    function labeledMessages(isLabel){
2        if(get_current_folder().split("_")[0] == "local"){
3            alert("Pastas locais não fornecem suporte para adição de marcadores.")
4            return true;
5        }
6                        if (isLabel) {
7                                var label = {
8                                        id: isLabel
9                                }       
10                                var lableleds = new Array();
11                                var msg_folder = current_folder;
12                                var messages = new Array();
13                                var messagesCache = [];
14                    if(currentTab == 0){
15                                        var id = get_selected_messages().split(',');
16                                        for (i = 0; i < id.length; i++){
17                                                messages.push({
18                                                        msg_number: id[i],
19                                                        msg_folder: msg_folder
20                                                });
21                            messagesCache[messagesCache.length] = id[i];
22                                        }
23                                }else{
24                                        // var id = get_selected_messages_search().split(',');
25                                        // var id_border = currentTab.replace(/[a-zA-Z_]+/, "");
26                                        // for (i = 0; i < id.length; i++){
27                                                // var tr = Element(id[i]+'_s'+id_border);
28                                                // msg_folder = tr.getAttribute('name');
29                                                // messages.push({
30                                                        // "msg_number": id[i],
31                                                        // "msg_folder": msg_folder,
32                                                // });
33                                        // }   
34                                       
35                                        var roles = get_selected_messages_search_role().split(',');
36                                        for (i = 0; i < roles.length; i++){
37                                                var tr = $('[role="'+roles[i]+'"]');
38                                                msg_folder = $(tr).attr('name');
39                                                var id = $(tr).attr('id');
40                                                messages.push({
41                                                        "msg_number": id.replace(/_[a-zA-Z0-9]+/,""),
42                                                        "msg_folder": msg_folder
43                                                });
44                                        }
45                                }
46                    /*TODAS AS MENSAGENS QUE POSSUEM MARCADORES*/
47                    var msgsLabeled = DataLayer.get('labeled',{ filter:[
48                                'AND',
49                                ['=', 'labelId', label.id],
50                                ['=', 'folderName', msg_folder],
51                                ['IN', 'messageNumber', messagesCache]
52                                ], criteria: {deepness: '2'}});                 
53
54                    /*VERIFICA SE A MENSAGEM msg POSSUI MARCADORES*/
55                    var hasLabel = function (msg){
56                        for(var index=0; index<msgsLabeled.length; index++){
57                            if (msgsLabeled){
58                                if (msgsLabeled[index].messageNumber == msg.msg_number && msgsLabeled[index].folderName == msg.msg_folder){
59                                    return true;
60                                }
61                            }
62                        }
63                        return false;
64                    }
65                                for (var i=0; i<messages.length; i++) {
66                                        if (!hasLabel(messages[i])) {
67                            lableleds.push(
68                                                        DataLayer.put('labeled', {
69                                                                labelId:label.id,
70                                                                folderName:messages[i].msg_folder,
71                                                                messageNumber:messages[i].msg_number
72                                                        })
73                                                );
74                                               
75                                        }
76                                }
77                                DataLayer.commit(false, false, function(data){
78                        var ids = [];
79                        for (var i=0; i < messages.length; i++) {
80                            ids[ ids.length ] = messages[i].msg_number;
81                        }
82
83                        var labels = DataLayer.get('labeled',{ filter:[
84                                'AND',
85                                ['=', 'folderName', msg_folder],
86                                ['IN', 'messageNumber', ids]
87                                ], criteria: {deepness: '2'}});
88
89                        var labelsIndex = {};
90                        $.each( labels, function(i, e){
91
92                            if( labelsIndex[ e.messageNumber ] ){
93                                labelsIndex[ e.messageNumber ][ 'labels' ].push( e.label );
94                            }else{
95                                labelsIndex[ e.messageNumber ] = e;
96                                labelsIndex[ e.messageNumber ][ 'labels' ] = [];
97                                labelsIndex[ e.messageNumber ][ 'labels' ].push( e.label );
98                            }
99                        });
100                        $.each( labelsIndex, function(i, e){
101                            /* the force parameter verifies the client's cache */
102                            updateLabelsColumn({msg_number: e.messageNumber, boxname: e.folderName, labels: e.labels, forceIcon: true });
103                        });
104                                });
105                        }
106    }
107
108    function openListUsers(border_id) {
109        connector.loadScript("QuickCatalogSearch");
110        if (typeof(QuickCatalogSearch) == 'undefined'){
111                                        setTimeout('openListUsers('+border_id+')',500);
112                                        return false;
113                                }
114        QuickCatalogSearch.showCatalogList(border_id);
115    }
116
117
118    /**
119     * Cria a lista de marcadores para o submenu "Marcadores"
120     */
121    function getLabels(){
122        var labels = DataLayer.get('label');
123
124        labels = orderLabel( labels );
125
126        var menuLabelItems = {};
127                menuLabelItems["new"] = {
128                        "name" : get_lang('New Label'),
129                        callback:function() {configureLabels({applyToSelectedMessages:true});}
130                };
131        for(var i=0; i<labels.length; i++) {
132                menuLabelItems["label"+labels[i].id] = {
133                        "name" : labels[i].name
134                }
135        }
136        return menuLabelItems;
137    }
138
139    /**
140     *  Carrega o menu de opção de uma mensagem
141     */
142    function loadMenu(){
143        var archive = "";
144
145        if( preferences['use_followupflags_and_labels'] == "1" )
146            var labelItems = getLabels();
147
148        var revertSortBox = function(){
149            if (search_box_type == "UNSEEN") sort_box_reverse = sort_box_reverse ? 0 : 1;
150        }
151
152        $.contextMenu({
153                selector: ".table_box tbody tr",
154            build: function($trigger, e) {
155                if(typeof (currentTab) == "string" && currentTab.indexOf("local") != -1){ 
156                    alert("Impossível manipular mensagens locais a partir de uma busca. Isso é permitido apenas para mensagens não locais.");
157                    return true;
158                }
159                if(use_local_messages != 0){
160                    if( current.indexOf("local") != -1){
161                       archive = {"name": get_lang("Unarchive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.unarchive_message('inbox', 'get_selected_messages'); }}
162                    } else {
163                        archive = {"name": get_lang("Archive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.unarchive_message('inbox', 'get_selected_messages'); }}
164                    }
165                }
166
167                if( preferences['use_followupflags_and_labels'] == "1" )
168                    var itensNotLocal = {
169                        "label": { "name": get_lang("Labels"), "items": labelItems},
170                        "follouwpflag":{"name": get_lang("Follow up"), callback: function(key, opt){ configureFollowupflag(); } },
171                        "sep2": "---------"
172                    }
173
174                var items= {
175                    "flagSeen":      {"name": get_lang("Mark as") + " " + get_lang('seen'), "icon": "seen", callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages'); }},
176                    "flagUnseen":    {"name": get_lang("Mark as") + " " + get_lang('unseen'), "icon": "unseen", callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages'); }},
177                    "flagFlagged":   {"name": get_lang("Mark as") + " " + get_lang('important'), "icon": "important", callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages'); }},
178                    "flagUnflagged": {"name": get_lang("Mark as") + " " + get_lang('normal'), callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages'); }},
179                    "sep1": "---------"
180                }
181                               
182                                // Desabilita a opção de criar filtro a partir da mensagem, caso mais de uma mensagem esteja selecionada:
183                                var is_filterFromMsg_disabled = function () {
184                                        var base_selector = ".table_box tbody tr.selected_msg";
185                                        return ($(base_selector).length > 1) || ($(base_selector + " td span").text().indexOf(get_lang("Draft")) > -1);
186                                }
187                               
188                var lastItens = {
189                    "move": {"name": get_lang("Move to")+"...", "icon": "move", callback: function(key, opt){ wfolders.makeWindow('', 'move_to'); }},
190                    "remove": {"name": get_lang("Delete"),      "icon": "delete", callback: function(key, opt){ proxy_mensagens.delete_msgs('null','selected','null'); }},
191                    "export": {"name": get_lang("Export"),      "icon": "export", callback: function(key, opt){ proxy_mensagens.export_all_messages(); }},
192                                        /*Abre o diálogo de criação de filtro a partir da mensagem:*/
193                                        "filterFromMsg": {
194                                                "name": get_lang("Create filter from message"), 
195                                                "icon": "filter", 
196                                                callback: function (key, opt) {
197                                                        var msg_number = get_selected_messages();
198                                                        var msg = onceOpenedHeadersMessages[current_folder][msg_number];
199                                                        if (msg !== undefined)
200                                                        {
201                                                                filter_from_msg(msg);
202                                                        }
203                                                },
204                                                disabled: is_filterFromMsg_disabled()
205                                        },
206                    "archive": archive
207                }
208
209                var realItens = {};
210
211                if(currentTab == 0){
212                    if(get_current_folder().split("local").length > 1){
213                        realItens = $.extend(items, lastItens);
214                    }else{
215                        realItens = $.extend(items, itensNotLocal);
216                        realItens = $.extend(realItens, lastItens);
217                    }
218                }else if(currentTab.split("local").length > 1){
219                    realItens = $.extend(items, lastItens);
220                }else{
221                    realItens = $.extend(items, itensNotLocal);
222                    realItens = $.extend(realItens, lastItens);
223                }
224
225                        return {
226                    callback: function(key, options) {
227                                //TODO - default actions
228                               
229                                /**
230                                 * Apply labels to selected messages
231                                 */
232                                var isLabel = key.match(/label(.*)/);
233                                if (isLabel && isLabel.length > 1) {
234                                        labeledMessages(isLabel[1]);
235                                }
236                                selectAllFolderMsgs(false);
237                        },
238                        items: realItens
239                }
240            }
241        });
242    }
243    /*FIM*/
244    loadMenu();
245
246    if (!expresso_offline) {
247        var menuToolsItems = {
248                "i01": {"name": get_lang("Preferences"), "icon": "preferences-mail", callback: preferences_mail },
249                "i02": {"name": get_lang("Search"), "icon": "search-mail", callback: function(key, opt){ search_emails(""); }},
250                "103": {"name": get_lang("Edit filters"), "icon": "filter", callback: filterbox2 },
251                "i05": {"name": get_lang("Share mailbox"), "icon": "share-mailbox", callback: sharebox },
252                "i06": {"name": get_lang("Labels"), "icon": "tag", callback: configureLabels },
253                "i08": {"name": get_lang("Empty trash"), "icon": "empty-trash", callback: function(key, opt){ empty_trash_imap(); }}
254        };
255               
256        if(use_local_messages==1) {
257                //if(expresso_mail_archive.enabled == true) {
258                        //menuToolsItems["i09"] = {"name": get_lang("Send from queue"), "icon": "queue", callback: force_check_queue };
259                //} else {
260                menuToolsItems["i09"] = {"name": "MailArchive Admin", "icon": "config", callback: function(key, opt){ window.open(mail_archive_url); }}
261            //}
262        }
263    } else {
264        var menuToolsItems = {
265                "i01": {"name": get_lang("Search"), "icon": "search-mail", callback: function(key, opt){ search_emails(""); }}
266        }
267    }
268    $.contextMenu({
269        selector: "#link_tools",
270        trigger: 'hover',
271        className: 'context-menu-tools',
272        position: function($menu, x, y){
273                $menu.$menu.position({ my: "center top", at: "center bottom", of: this, offset:"0 0"});
274        },
275        determinePosition: function($menu, x, y){
276                $menu.css('display', 'block').position({ my: "center top", at: "center bottom", of: this}).css('display', 'none');
277        },
278        delay:500,
279        autoHide:true,
280        events: {
281                show: function(opt) {
282                        var $trigger = $(opt.selector).css({'background-color': '#ffffff', 'border': '1px solid #CCCCCC'});
283                        $('.context-menu-tools.context-menu-list.context-menu-root').css({'width': $trigger.css('width') });
284                        $('.context-menu-tools.context-menu-list').css({'background': '#ffffff'})
285                        .find(".context-menu-item").css({'background-color': '#ffffff'}).hover(
286                                function(){
287                                        $(this).css({'background-color': '#CCCCCC'});
288                                },
289                                function(){
290                                        $(this).css({'background-color': '#ffffff'});
291                                }
292                        );
293                        return true;
294                },
295                hide: function(opt) {
296                        $(opt.selector).css({'background-color': '', 'border': 'none'});
297                        return true;
298                }
299        },
300        callback: function(key, options) {
301                //TODO - default actions
302
303        },
304        items: menuToolsItems
305    });
306    var reComplexEmail = /<([^<]*)>[\s]*$/;
307    $.contextMenu({
308        selector: ".box",
309        autoHide:true,
310        items: {
311                "add" : {name: get_lang("Quick Add"), icon : "quick-add",callback: function(key, opt){ var fname = $(opt.$trigger).find("input").val().split('"')[1];ccQuickAddOne.showList(','+fname+', ,'+$.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]); }},
312                "remove" : {name:get_lang("Remove recipient"), icon:"delete-box",callback: function(key, opt){ $(opt.$trigger).remove(); }},
313                "sep1": "---------",
314                "quick_search" : {name:get_lang("Quick search of messages"), icon: "quick-search-contact",callback: function(key, opt){ search_emails($.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]); }},
315                "full_search" : {name:get_lang("Search messages of ..."), icon: "quick-search-contact",callback: function(key, opt){ search_emails("", $.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]);}}         
316        }
317    });
318
319    function updateLabelsColumn(messageInfo) {
320        var msg_number = messageInfo.msg_number;
321        //uid é o numero da mensagem quando os dados são carregados na busca rapida.
322        if(messageInfo.uid != '' && messageInfo.uid != 'undefined' && messageInfo.uid != null){
323                msg_number = messageInfo.uid;
324        }
325        var msg_folder = current_folder;
326        if(messageInfo.boxname != '' && messageInfo.boxname != 'undefined' && messageInfo.boxname != null){
327                msg_folder = messageInfo.boxname;
328        }
329       
330        var menuItems = {};
331        if (messageInfo.labels && !messageInfo.forceIcon ) {
332                if($.isArray(messageInfo.labels)){
333                        var labels = messageInfo.labels;
334                        messageInfo.labels = {};
335                        for(var i in labels)
336                                messageInfo.labels[labels[i].id] = {backgroundColor: labels[i]['backgroundColor'],
337                                        borderColor: labels[i]['borderColor'],
338                                        fontColor: labels[i]['fontColor'], id: labels[i]['id'], name: labels[i]['name'],
339                                        uid: labels[i]['uid'] }
340                }       
341                menuItems = messageInfo.labels;
342        } else {
343            var labeleds =  (messageInfo.forceIcon ? messageInfo.labels : DataLayer.get('labeled', {
344                        criteria: {deepness: 2},
345                filter: [
346                                'AND',
347                                ['=', 'folderName', msg_folder],
348                                ['=', 'messageNumber', msg_number]
349                        ]
350                       
351                }) );
352
353                if (labeleds) {
354                if(current_folder == msg_folder || !current_folder){
355                    $('#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
356                        .html('').css({'background-image':'url(../prototype/modules/mail/img/mail-sprites.png)','background-position': '0 -1706px',"margin-left":"0",'margin-top':'3px','background-repeat':'no-repeat'});
357                }else{
358                    $('tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
359                        .html('').css({'background-image':'url(../prototype/modules/mail/img/mail-sprites.png)','background-position': '0 -1706px',"margin-left":"0",'margin-top':'3px','background-repeat':'no-repeat'});
360                }
361
362                for (var i=0; i < labeleds.length; i++){
363                    menuItems[ (labeleds[i].id ? labeleds[i].id : labeleds[i].label.id) ] = labeleds[i].label ? labeleds[i].label : labeleds[i];
364                }
365                } else {
366                        $('#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
367                        .html('').css("background", "");
368                        //$.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', #td_message_labels_search_' + msg_number+':first');
369                        $.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
370                        return false;
371                }
372        }
373        var menuItensLabel = {};
374        for(index in menuItems){
375                menuItensLabel[index] = {type: "label", customName: menuItems[index].name, id: msg_folder+"/"+msg_number+"#"+index};           
376        }
377
378
379        $.contextMenu.types.label = function(item, opt, root) {
380            $('<span>'+item.customName+'</span><span class="removeLabeled" title="'+get_lang("Remove Label")+'">x</span>')
381                .appendTo(this);
382                $(this).find('span.removeLabeled').click(function(){
383                        //TODO Mudar quando API abstrair atualizações no cache
384                        DataLayer.remove('labeled', false);
385                        DataLayer.get('labeled');
386                        DataLayer.remove('labeled', item.id);
387                        DataLayer.commit(false, false, function(){
388                                updateLabelsColumn({msg_number:msg_number, boxname:msg_folder, labels:false});
389                        });
390                });
391        };
392        if(current_folder == msg_folder || !current_folder){
393                $.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
394                $.contextMenu({
395                        selector: '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number,
396                        trigger: 'hover',
397                        delay:100,
398                        autoHide:true,
399                        callback: function(key, options) {
400                                //TODO - default actions
401                        },
402                        items: menuItensLabel
403                });
404        }else{
405                $.contextMenu( 'destroy', 'tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
406
407                $.contextMenu({
408                        selector: 'tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number,
409                        trigger: 'hover',
410                        delay:100,
411                        autoHide:true,
412                        callback: function(key, options) {
413                                //TODO - default actions
414                        },
415                        items: menuItensLabel
416                });     
417        }
418    }
419
420    function loadExtraLDAPBox(data, element){
421
422        if(!!data[0]){
423            var decoded = {};
424
425            $.each(data, function(i, e){
426                decoded[e.name] = e.value;
427            });
428
429            data = decoded;
430        }
431
432        menuItensLabel = {};
433        menuItensLabel["Name"] = {name: "<b>"+data.name+"</b>", disabled: true};
434        menuItensLabel["Email"] = {name: data.email, disabled: true};
435        if(!!data.telephone){
436            menuItensLabel["TelefoneLabel"] = {name: "<b>"+get_lang("Telephone")+"</b>", disabled: true};
437            menuItensLabel["TelefoneValue"] = {name: data.telephone, disabled: true};
438        }
439        if(data.vacationActive){
440            if(data.vacationActive == "TRUE"){
441                menuItensLabel["outOffice"] = {name: "<b>"+get_lang("Out of office")+"</b>", disabled: true};
442                menuItensLabel["outOfficeValue"] = {name: data.vacationInfo.substring(0, 20), disabled: true};
443            }
444        }
445        $.contextMenu({
446            selector: "#content_id_"+currentTab+" "+element+" .box-info",
447            trigger: 'hover',
448            delay:100,
449            autoHide:true,
450            items: menuItensLabel
451        });
452    }
453
454    function loadGroupBox(data, element){
455        menuItensLabel = {};
456        menuItensLabel["ContactGroupLabelAll"] = {name:"<b>"+get_lang("Group contacts")+"</b>", disabled: true};
457        menuItensLabel["sep1"] = "---------";
458        if(data.itens){
459                var aux = 0;
460                var ctcName = "";
461                for(var item in data.itens){
462                        if(parseInt(item) <= 4){
463                                ctcName = data.itens[item].data[0].value;
464                                ctcName = ctcName.length > 2 ? ctcName : data.itens[item].data[2].value.substr(0,data.itens[item].data[2].value.indexOf("@"));
465                                menuItensLabel["ContactGroupLabel"+item] = {name: "<b>"+ctcName+"</b>", disabled: true};
466                                menuItensLabel["ContactGroupValue"+item] = {name: data.itens[item].data[2].value, disabled: true};
467                        }else{
468                                aux++;
469                                if(aux == 1)
470                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux), disabled: true };
471                                else
472                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux)+"s", disabled: true };
473                        }
474                }
475        }
476        $.contextMenu({
477                selector: "#content_id_"+currentTab+" "+element+" .box-info",
478                trigger: 'hover',
479                delay:100,
480                autoHide:true,
481                items: menuItensLabel
482        });     
483    }
484
485
486
487
488
Note: See TracBrowser for help on using the repository browser.