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

Revision 7778, 18.3 KB checked in by angelo, 11 years ago (diff)

Ticket #3315 - Problema ao adicionar marcador ou sinalizador em varias mensagens

  • 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                                ]});
53                    /*VERIFICA SE A MENSAGEM msg POSSUI MARCADORES*/
54                    var hasLabel = function (msg){
55                        for(var index=0; index<msgsLabeled.length; index++){
56                            if (msgsLabeled){
57                                if (msgsLabeled[index].messageNumber == msg.msg_number && msgsLabeled[index].folderName == msg.msg_folder){
58                                    return true;
59                                }
60                            }
61                        }
62                        return false;
63                    }
64                                for (var i=0; i<messages.length; i++) {
65                                        if (!hasLabel(messages[i])) {
66                            lableleds.push(
67                                                        DataLayer.put('labeled', {
68                                                                labelId:label.id,
69                                                                folderName:messages[i].msg_folder,
70                                                                messageNumber:messages[i].msg_number
71                                                        })
72                                                );
73                                               
74                                        }
75                                }
76                                DataLayer.commit(false, false, function(data){
77                                        for (var i=0; i < messages.length; i++) {
78                                                updateLabelsColumn({msg_number:messages[i].msg_number, boxname:messages[i].msg_folder, labels:false});
79                                        }               
80                                });
81                               
82
83                        }
84    }
85
86    function openListUsers(border_id) {
87        connector.loadScript("QuickCatalogSearch");
88        if (typeof(QuickCatalogSearch) == 'undefined'){
89                                        setTimeout('openListUsers('+border_id+')',500);
90                                        return false;
91                                }
92        QuickCatalogSearch.showCatalogList(border_id);
93    }
94
95
96    /**
97     * Cria a lista de marcadores para o submenu "Marcadores"
98     */
99    function getLabels(){
100        var labels = DataLayer.get('label');
101
102        labels = orderLabel( labels );
103
104        var menuLabelItems = {};
105                menuLabelItems["new"] = {
106                        "name" : get_lang('New Label'),
107                        callback:function() {configureLabels({applyToSelectedMessages:true});}
108                };
109        for(var i=0; i<labels.length; i++) {
110                menuLabelItems["label"+labels[i].id] = {
111                        "name" : labels[i].name
112                }
113        }
114        return menuLabelItems;
115    }
116
117    /**
118     *  Carrega o menu de opção de uma mensagem
119     */
120    function loadMenu(){
121        var archive = "";
122        if(use_local_messages != 0){
123            archive = {"name": get_lang("Archive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.archive_message('inbox', 'get_selected_messages'); }}
124        }else{
125            archive = "";
126        }
127        var labelItems = getLabels();
128
129        $.contextMenu({
130                selector: ".table_box tbody tr",
131            build: function($trigger, e) {
132                if(typeof (currentTab) == "string" && currentTab.indexOf("local") != -1){ 
133                    alert("Impossível manipular mensagens locais a partir de uma busca. Isso é permitido apenas para mensagens não locais.");
134                    return true;
135                }
136                if( current.indexOf("local") != -1){
137                   archive = {"name": get_lang("Unarchive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.unarchive_message('inbox', 'get_selected_messages'); }}
138                }
139                var itensNotLocal = {
140                    "label": { "name": get_lang("Labels"), "items": labelItems},
141                    "follouwpflag":{"name": get_lang("Follow up"), callback: function(key, opt){ configureFollowupflag(); } },
142                    "sep2": "---------"
143                }
144
145                var items= {
146                    "flagSeen":      {"name": get_lang("Mark as") + " " + get_lang('seen'), "icon": "seen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages'); }},
147                    "flagUnseen":    {"name": get_lang("Mark as") + " " + get_lang('unseen'), "icon": "unseen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages'); }},
148                    "flagFlagged":   {"name": get_lang("Mark as") + " " + get_lang('important'), "icon": "important", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages'); }},
149                    "flagUnflagged": {"name": get_lang("Mark as") + " " + get_lang('normal'), callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages'); }},
150                    "sep1": "---------"
151                }
152
153                var lastItens = {
154                    "move": {"name": get_lang("Move to")+"...", "icon": "move", callback: function(key, opt){ wfolders.makeWindow('', 'move_to'); }},
155                    "remove": {"name": get_lang("Delete"),      "icon": "delete", callback: function(key, opt){ proxy_mensagens.delete_msgs('null','selected','null'); }},
156                    "export": {"name": get_lang("Export"),      "icon": "export", callback: function(key, opt){ proxy_mensagens.export_all_messages(); }},
157                    "archive": archive
158                }
159
160                var realItens = {};
161
162                if(currentTab == 0){
163                    if(get_current_folder().split("local").length > 1){
164                        realItens = $.extend(items, lastItens);
165                    }else{
166                        realItens = $.extend(items, itensNotLocal);
167                        realItens = $.extend(realItens, lastItens);
168                    }
169                }else if(currentTab.split("local").length > 1){
170                    realItens = $.extend(items, lastItens);
171                }else{
172                    realItens = $.extend(items, itensNotLocal);
173                    realItens = $.extend(realItens, lastItens);
174                }
175
176                        return {
177                    callback: function(key, options) {
178                                //TODO - default actions
179                               
180                                /**
181                                 * Apply labels to selected messages
182                                 */
183                                var isLabel = key.match(/label(.*)/);
184                                if (isLabel && isLabel.length > 1) {
185                                        labeledMessages(isLabel[1]);
186                                }
187                                selectAllFolderMsgs(false);
188                        },
189                        items: realItens
190                }
191            }
192        });
193    }
194    /*FIM*/
195    loadMenu();
196
197    if (!expresso_offline) {
198        var menuToolsItems = {
199                "i01": {"name": get_lang("Preferences"), "icon": "preferences-mail", callback: preferences_mail },
200                "i02": {"name": get_lang("Search"), "icon": "search-mail", callback: function(key, opt){ search_emails(""); }},
201                "103": {"name": get_lang("Edit filters"), "icon": "filter", callback: filterbox2 },
202                "i05": {"name": get_lang("Share mailbox"), "icon": "share-mailbox", callback: sharebox },
203                "i06": {"name": get_lang("Labels"), "icon": "tag", callback: configureLabels },
204                "i08": {"name": get_lang("Empty trash"), "icon": "empty-trash", callback: function(key, opt){ empty_trash_imap(); }}
205        };
206               
207        if(use_local_messages==1) {
208                //if(expresso_mail_archive.enabled == true) {
209                        //menuToolsItems["i09"] = {"name": get_lang("Send from queue"), "icon": "queue", callback: force_check_queue };
210                //} else {
211                menuToolsItems["i09"] = {"name": "MailArchive Admin", "icon": "config", callback: function(key, opt){ window.open(mail_archive_url); }}
212            //}
213        }
214    } else {
215        var menuToolsItems = {
216                "i01": {"name": get_lang("Search"), "icon": "search-mail", callback: function(key, opt){ search_emails(""); }}
217        }
218    }
219    $.contextMenu({
220        selector: "#link_tools",
221        trigger: 'hover',
222        className: 'context-menu-tools',
223        position: function($menu, x, y){
224                $menu.$menu.position({ my: "center top", at: "center bottom", of: this, offset:"0 0"});
225        },
226        determinePosition: function($menu, x, y){
227                $menu.css('display', 'block').position({ my: "center top", at: "center bottom", of: this}).css('display', 'none');
228        },
229        delay:500,
230        autoHide:true,
231        events: {
232                show: function(opt) {
233                        var $trigger = $(opt.selector).css({'background-color': '#ffffff', 'border': '1px solid #CCCCCC'});
234                        $('.context-menu-tools.context-menu-list.context-menu-root').css({'width': $trigger.css('width') });
235                        $('.context-menu-tools.context-menu-list').css({'background': '#ffffff'})
236                        .find(".context-menu-item").css({'background-color': '#ffffff'}).hover(
237                                function(){
238                                        $(this).css({'background-color': '#CCCCCC'});
239                                },
240                                function(){
241                                        $(this).css({'background-color': '#ffffff'});
242                                }
243                        );
244                        return true;
245                },
246                hide: function(opt) {
247                        $(opt.selector).css({'background-color': '', 'border': 'none'});
248                        return true;
249                }
250        },
251        callback: function(key, options) {
252                //TODO - default actions
253
254        },
255        items: menuToolsItems
256    });
257    var reComplexEmail = /<([^<]*)>[\s]*$/;
258    $.contextMenu({
259        selector: ".box",
260        autoHide:true,
261        items: {
262                "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]); }},
263                "remove" : {name:get_lang("Remove recipient"), icon:"delete-box",callback: function(key, opt){ $(opt.$trigger).remove(); }},
264                "sep1": "---------",
265                "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]); }},
266                "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]);}}         
267        }
268    });
269
270    function updateLabelsColumn(messageInfo) {
271        var msg_number = messageInfo.msg_number;
272        //uid é o numero da mensagem quando os dados são carregados na busca rapida.
273        if(messageInfo.uid != '' && messageInfo.uid != 'undefined' && messageInfo.uid != null){
274                msg_number = messageInfo.uid;
275        }
276        var msg_folder = current_folder;
277        if(messageInfo.boxname != '' && messageInfo.boxname != 'undefined' && messageInfo.boxname != null){
278                msg_folder = messageInfo.boxname;
279        }
280       
281        var menuItems = {};
282        if (messageInfo.labels) {
283                if($.isArray(messageInfo.labels)){
284                        var labels = messageInfo.labels;
285                        messageInfo.labels = {};
286                        for(var i in labels)
287                                messageInfo.labels[labels[i].id] = {backgroundColor: labels[i]['backgroundColor'],
288                                        borderColor: labels[i]['borderColor'],
289                                        fontColor: labels[i]['fontColor'], id: labels[i]['id'], name: labels[i]['name'],
290                                        uid: labels[i]['uid'] }
291                }       
292                menuItems = messageInfo.labels;
293        } else {
294                var labeleds = DataLayer.get('labeled', {
295                        criteria: {deepness: '2'},
296                        filter: [
297                                'AND',
298                                ['=', 'folderName', msg_folder],
299                                ['=', 'messageNumber', msg_number]
300                        ]
301                       
302                });
303                if (labeleds) {
304                if(current_folder == msg_folder || !current_folder){
305                    $('#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
306                        .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'});
307                }else{
308                    $('tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
309                        .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'});
310                }
311                        for (var i=0; i < labeleds.length; i++)
312                                menuItems[labeleds[i].label.id] = labeleds[i].label;
313                } else {
314                        $('#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
315                        .html('').css("background", "");
316                        //$.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', #td_message_labels_search_' + msg_number+':first');
317                        $.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
318                        return false;
319                }
320        }
321        var menuItensLabel = {};
322        for(index in menuItems){
323                menuItensLabel[index] = {type: "label", customName: menuItems[index].name, id: msg_folder+"/"+msg_number+"#"+index};           
324        }
325        $.contextMenu.types.label = function(item, opt, root) {
326            $('<span>'+item.customName+'</span><span class="removeLabeled" title="'+get_lang("Remove Label")+'">x</span>')
327                .appendTo(this);
328                $(this).find('span.removeLabeled').click(function(){
329                        //TODO Mudar quando API abstrair atualizações no cache
330                        DataLayer.remove('labeled', false);
331                        DataLayer.get('labeled');
332                        DataLayer.remove('labeled', item.id);
333                        DataLayer.commit(false, false, function(){
334                                updateLabelsColumn({msg_number:msg_number, boxname:msg_folder, labels:false});
335                        });
336                });
337        };
338        if(current_folder == msg_folder || !current_folder){
339                $.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
340                $.contextMenu({
341                        selector: '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number,
342                        trigger: 'hover',
343                        delay:100,
344                        autoHide:true,
345                        callback: function(key, options) {
346                                //TODO - default actions
347                        },
348                        items: menuItensLabel
349                });
350        }else{
351                $.contextMenu( 'destroy', 'tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
352
353                $.contextMenu({
354                        selector: 'tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number,
355                        trigger: 'hover',
356                        delay:100,
357                        autoHide:true,
358                        callback: function(key, options) {
359                                //TODO - default actions
360                        },
361                        items: menuItensLabel
362                });     
363        }
364    }
365
366    function loadExtraLDAPBox(data, element){
367
368        if(!!data[0]){
369            var decoded = {};
370
371            $.each(data, function(i, e){
372                decoded[e.name] = e.value;
373            });
374
375            data = decoded;
376        }
377
378        menuItensLabel = {};
379        menuItensLabel["Name"] = {name: "<b>"+data.name+"</b>", disabled: true};
380        menuItensLabel["Email"] = {name: data.email, disabled: true};
381        if(!!data.telephone){
382            menuItensLabel["TelefoneLabel"] = {name: "<b>"+get_lang("Telephone")+"</b>", disabled: true};
383            menuItensLabel["TelefoneValue"] = {name: data.telephone, disabled: true};
384        }
385        if(data.vacationActive){
386            if(data.vacationActive == "TRUE"){
387                menuItensLabel["outOffice"] = {name: "<b>"+get_lang("Out of office")+"</b>", disabled: true};
388                menuItensLabel["outOfficeValue"] = {name: data.vacationInfo.substring(0, 20), disabled: true};
389            }
390        }
391        $.contextMenu({
392            selector: "#content_id_"+currentTab+" "+element+" .box-info",
393            trigger: 'hover',
394            delay:100,
395            autoHide:true,
396            items: menuItensLabel
397        });
398    }
399
400    function loadGroupBox(data, element){
401        menuItensLabel = {};
402        menuItensLabel["ContactGroupLabelAll"] = {name:"<b>"+get_lang("Group contacts")+"</b>", disabled: true};
403        menuItensLabel["sep1"] = "---------";
404        if(data.itens){
405                var aux = 0;
406                var ctcName = "";
407                for(var item in data.itens){
408                        if(parseInt(item) <= 4){
409                                ctcName = data.itens[item].data[0].value;
410                                ctcName = ctcName.length > 2 ? ctcName : data.itens[item].data[2].value.substr(0,data.itens[item].data[2].value.indexOf("@"));
411                                menuItensLabel["ContactGroupLabel"+item] = {name: "<b>"+ctcName+"</b>", disabled: true};
412                                menuItensLabel["ContactGroupValue"+item] = {name: data.itens[item].data[2].value, disabled: true};
413                        }else{
414                                aux++;
415                                if(aux == 1)
416                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux), disabled: true };
417                                else
418                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux)+"s", disabled: true };
419                        }
420                }
421        }
422        $.contextMenu({
423                selector: "#content_id_"+currentTab+" "+element+" .box-info",
424                trigger: 'hover',
425                delay:100,
426                autoHide:true,
427                items: menuItensLabel
428        });     
429    }
430
431
432
433
434
Note: See TracBrowser for help on using the repository browser.