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

Revision 7635, 17.3 KB checked in by acoutinho, 11 years ago (diff)

Ticket #3227 - Alertas (amarelos) do Expresso travam operacees do usuario

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