source: branches/2.5/prototype/modules/mail/js/followupflag.js @ 8232

Revision 8232, 29.2 KB checked in by douglas, 11 years ago (diff)

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

  • Property svn:executable set to *
Line 
1MsgsCallbackFollowupflag = {
2
3    '#FollowupflagMessageIdError': function(){
4        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id.');
5    },
6    '#FollowupflagLimitError': function(){
7        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: limite de flags atingido para esta pasta.');
8    },
9    '#FollowupflagParamsError': function(){
10        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários.');
11    }
12   
13}
14
15function updateCacheFollowupflag(msgNumber, msgFolder, op){
16        if(op){
17                if(typeof msgNumber == 'object'){
18                        var extend = DataLayer.get('followupflagged', {
19                                filter: ['AND', ['IN', 'messageNumber', msgNumber], ['IN', 'folderName', msgFolder]],
20                                criteria: {deepness: 1}
21                        }, true);
22                } else{
23                        var extend = DataLayer.get('followupflagged', {
24                                filter: ['AND', ['=', 'messageNumber', msgNumber], ['=', 'folderName', msgFolder]],
25                                criteria: {deepness: 1}
26                        }, true);
27                }
28
29               
30                if(extend != "" || extend != 'undefined' || extend != []){
31                        for(var i = 0; i < extend.length; i++){
32                                if(!(onceOpenedHeadersMessages[extend[i].folderName])){
33                                        onceOpenedHeadersMessages[extend[i].folderName] = {};
34                                }
35                                if(!(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber])){
36                                        onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber] = []; 
37                                }
38                                onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'] = {};
39                                DataLayer.merge(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'], extend[i]);
40                               
41                                /*
42                                if(onceOpenedHeadersMessages[extend[i].folderName]){
43                                        if(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]){
44                                                onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'] = {};
45                                                DataLayer.merge(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'], extend[i]);
46                                        }
47                                }*/
48
49                        }
50                }
51        }else{
52                onceOpenedHeadersMessages[msgFolder][msgNumber]['followupflagged'] = undefined;
53        }
54}
55
56function init_followup(data){
57
58        winElement = data.window;
59        selectedMessageIds = data.selectedMessages;
60        folder = current_folder;
61
62         winElement.find('input[name="alarmDate"]').change(function(event){
63                winElement.find('input[name="alarmTime"]').attr('disabled', ( $(this).val() == "" ? 'disabled' : false));
64         });
65
66         winElement.find('input[name="alarmDate"]').keyup(function(event){
67                winElement.find('input[name="alarmTime"]').attr('disabled', ( $(this).val() == "" ? 'disabled' : false)).val('');
68         });
69
70        winElement.find('.button').button()
71       
72        .filter('.menu-configure-followupflag .cancel').click(function(){
73                winElement.dialog("close");
74                $.each(selectedMessageIds, function(index, value){     
75                        $('tr#' + value + ' .td-followup-flag')//.find('img').remove();
76                });
77               
78        }).end()
79       
80        .filter('.menu-configure-followupflag .save').click(function(){
81                var saveFollowupflagged = function(){
82                        var idFollowupflagged = winElement.find('[name="followupflagId"]').val();
83                        idFollowupflagged = idFollowupflagged.split(',');
84                        for (x=0; x<idFollowupflagged.length; x++){
85                                (idFollowupflagged[x] == "false") ? idFollowupflagged[x] = false : idFollowupflagged;
86                        }
87                        for(i=0; i<selectedMessageIds.length; i++){
88                                        var isDone = winElement.find('[name="done"]').is(':checked') ? 1 : 0;
89                                        var alarmDate = false;
90                                        var doneDate  = false;
91                                        var folder_name;
92                                        var folders = [];
93                                        var messages = [];
94                                        var roles = get_selected_messages_search_role().split(',');
95                                        for (var i=0; i < selectedMessageIds.length; i++ ){
96                                                if (currentTab == 0) {
97                                                        folder_name = current_folder;
98                                                        var messageNumber = selectedMessageIds[i];
99                                                }else{
100                                                        var tr = $('[role="'+roles[i]+'"]');
101                                                        folder_name = $(tr).attr('name');
102                                                        var id = $(tr).attr('id');
103                                                        var messageNumber = id.replace(/_[a-zA-Z0-9]+/,"");
104                                                }
105                                                folders.push(folder_name);
106                                               
107                                                        var followupflagged = DataLayer.merge({
108                                                                uid : User.me.id,
109                                                                followupflagId : followupflagId,
110                                                                folderName : folder_name,
111                                                                messageNumber : messageNumber,
112                                                                isDone: isDone,
113                                                                isSent: 0,
114                                                                backgroundColor : backgroundColor
115                                                        }, !!idFollowupflagged[i] ? {id: idFollowupflagged[i]} : {});
116                                               
117                                                if (alarmDate = winElement.find('[name="alarmDate"]').datepicker("getDate")) {
118                                                        if (alarmTime = winElement.find('[name="alarmTime"]').datepicker("getDate")) {
119                                                                alarmDate.set({hour:alarmTime.getHours(), minute:alarmTime.getMinutes()});
120                                                        }
121                                                        followupflagged.alarmDeadline = alarmDate.toString('yyyy-MM-dd HH:mm:ss');
122                                                }
123
124                                                if (doneDate = winElement.find('[name="doneDate"]').datepicker("getDate")) {
125                                                        if (doneTime = winElement.find('[name="doneTime"]').datepicker("getDate")) {
126                                                                doneDate.set({hour:doneTime.getHours(), minute:doneTime.getMinutes()});
127                                                        }
128                                                        followupflagged.doneDeadline = doneDate.toString('yyyy-MM-dd HH:mm:ss');
129                                                }
130                                               
131                                                /**
132                                                 * Aplica o ícone correspondente na lista de mensagens do expressoMail
133                                                 */
134                                                if(current_folder == folder_name){
135                                                        var flagged = $('#td_message_followup_' + messageNumber + ', tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited");
136                                                } else{
137                                                        var flagged = $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited");
138                                                }
139                                                if(isDone){
140                                                        flagged.find("img").attr("src", "../prototype/modules/mail/img/flagChecked.png").css("margin-left","-3px");
141                                                }else{
142                                                        flagged.css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"});                 
143                                                }
144                                               
145                                                var followupflagName = winElement.find('[name="name"] option:selected').text();
146                                                if(current_folder == folder_name){
147                                                        $('#td_message_followup_' + messageNumber + ', ' +
148                                                        'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', followupflagName).find(".flag-edited").css("background", backgroundColor);
149                                                }else{
150                                                        $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', followupflagName).find(".flag-edited").css("background", backgroundColor);
151                                                } 
152                                                /**
153                                                 * Salva ou, caso já exista, atualiza
154                                                 */
155                                                DataLayer.put('followupflagged', followupflagged);
156                                        }
157                                       
158                                        DataLayer.commit(false, false, function(data){
159                                                winElement.find('.menu-configure-followupflag .delete').button("option", "disabled", false);
160                                                updateCacheFollowupflag(selectedMessageIds, folders, true);
161                                                winElement.dialog("close");
162                                                alarmFollowupflagged('followupflagAlarms');
163                                                var fail = 'success';
164                                                $.each(data,function(index,value){
165                                                        if (typeof value == 'string'){
166                                                                fail = value;
167                                                        }                               
168                                                });
169                                                if (fail == '#FollowupflagMessageIdError'){
170                                                         alert('Uma ou mais mensagens não puderam ser sinalizadas. \nDetalhes do erro: mensagem não contém o atributo message-id.');
171                                                }
172                                                else if (fail == '#FollowupflagLimitError'){
173                                                         alert('Uma ou mais mensagens não puderam ser sinalizadas. \nDetalhes do erro: limite de flags atingido para esta pasta.');     
174                                                }
175                                                /*DIVIDE O ARRAY EM ARRAYS MENORES*/
176                                                var splice = function(arr){
177                                                        var newArray = [];
178                                                        while (arr.length > 500){
179                                                                newArray[newArray.length] = arr.splice(0,500);
180                                                        }
181                                                        if (arr.length)
182                                                                newArray[newArray.length] = arr;
183                                                        return newArray;
184                                                }
185                                                if (selectedMessageIds.length > 500){
186                                                        var arrayIndex = selectedMessageIds;
187                                                        $.each(splice(arrayIndex),function(iterator,subarray){
188                                                                var flaggeds = DataLayer.get('followupflagged', {filter: [
189                                                                                'AND',
190                                                                                ['IN', 'messageNumber', subarray],
191                                                                                ['IN', 'folderName', folder_name]
192                                                                ]});
193                                                                $.each(subarray,function(index,value){ 
194                                                                        var flagged = false;
195                                                                        $.each(flaggeds,function(i,v){
196                                                                                if (v.messageNumber == value)
197                                                                                        flagged = true;
198                                                                        });
199                                                                        if (!flagged)
200                                                                                $('#td_message_followup_'+value).find(".flag-edited").css("background","#cccccc").find('img').remove();                                         
201                                                                        $('tr#' + value + ' .td-followup-flag').find('img').remove();
202                                                                });
203                                                        });     
204                                                }                                       
205                                        });
206                                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true);
207                                       
208                       
209                        }
210                        selectAllFolderMsgs(false);
211                }
212                winElement.find('[name="name"]').next().data("autocomplete")._trigger("change");
213                var backgroundColor = winElement.find('[name="backgroundColor"]').val();
214                var followupflagId  = winElement.find('[name="name"] option:selected').val();
215                if (followupflagId == 'custom') {
216                        DataLayer.put('followupflag', {name:winElement.find('[name="name"] option:selected').text(), uid:User.me.id});
217                        DataLayer.commit(false, false, function(data){
218                                $.each(data, function(index, value) {
219                                        if(typeof value == 'object'){
220                                                followupflagId = value.id;
221                                        }
222                                });
223                                winElement.find('[name="name"] option[value="custom"]').val(followupflagId);
224                                saveFollowupflagged();
225                        });
226                }else{
227                        saveFollowupflagged();
228                }       
229
230        }).end()
231       
232        .filter('.menu-configure-followupflag .delete').click(function(){
233                if (selectedMessageIds.length == 0) $(this).button("option", "disabled", true);
234                /** TODO Mudar quando melhorias forem implementadas na API de atualização do cache */
235                DataLayer.remove('followupflagged', false);
236                DataLayer.get('followupflagged');
237                var roles = get_selected_messages_search_role().split(',');
238                for (var i=0; i < selectedMessageIds.length; i++ ){
239                                if (currentTab == 0) {
240                                        folder_name = current_folder;
241                                        var messageNumber = selectedMessageIds[i];
242                                }else{
243                                        var tr = $('[role="'+roles[i]+'"]');
244                                        folder_name = $(tr).attr('name');
245                                        var id = $(tr).attr('id');
246                                        var messageNumber = id.replace(/_[a-zA-Z0-9]+/,"");
247                                }                               
248                               
249                        if(onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged']){
250                                if(onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged'].id){
251                                        var flag_id = onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged'].id;
252                                        DataLayer.remove('followupflagged', flag_id );
253                                        /**
254                                         * TODO - corrigir o formato do ID no DataLayer, para que seja utilizado o ID composto
255                                         * ao invés do ID do PostgreSQL atualmente em uso.
256                                         */
257                                         
258                                        /**
259                                         * # hack necessário enquanto o DataLayer não reconhece o ID composto. Trocar o
260                                         * código abaixo pela chamada trivial de DataLayer.remove('followupflagged', idCompost)
261                                         */
262                                        // var data = {};
263                                        // data[ 'followupflagged://' + folder_name + '/' + messageNumber + '#' + flag_id ] = false;
264                                        // DataLayer.dispatch('Sync', data, false, true);
265                                       
266                                        if(current_folder == folder_name){
267                                                flag = $('#td_message_followup_' + messageNumber + ', ' +
268                                                  'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', '').find(".flag-edited").css("background", '#CCC');
269                                                $('#td_message_followup_' + messageNumber + ', ' +
270                                                        'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited")
271                                                        .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"});
272                                        }else{
273                                                flag = $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', '').find(".flag-edited").css("background", '#CCC');
274                                                $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited")
275                                                        .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"});
276                                        }
277                                        updateCacheFollowupflag(messageNumber, folder_name, false);
278                                }
279                        }
280                       
281                       
282                }
283                DataLayer.commit(false, false, function(){
284                        winElement.dialog("close");
285                        alarmFollowupflagged('followupflagAlarms');
286                       
287                        $.each(selectedMessageIds, function(index, value){     
288                                $('tr#' + value + ' .td-followup-flag').find('img')//.remove();
289                        });
290                       
291                        selectAllFolderMsgs(false);     
292                });
293
294
295                       
296        });
297       
298        /**
299         * Se houver mudança, habilita o botão "Save"
300         */
301        winElement.find(':input').change(function(event){
302                if (event.keyCode != '27' && event.keyCode != '13')
303                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", false);
304        }).keydown(function(event){
305                if (event.keyCode != '27' && event.keyCode != '13')
306                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", false);
307        });
308       
309        winElement.find('.date').datepicker();
310        winElement.find('.time').timepicker({});
311        winElement.find('[name="name"]').combobox()
312        //pega o botão criado
313        .next().next().click(function (event, ui){     
314                $(".ui-autocomplete.ui-menu li").css("position","relative");
315                $(".ui-autocomplete.ui-menu li a:gt(5)").append("<span class='ui-icon ui-icon-only ui-icon-close delete_followupflag'></span>").find("span").click(function(event){
316                        var id = $('.followupflag-configure').find('option')[$(this).parents('li').index()].value;
317                        var nameFollowupflag = $('.followupflag-configure').find('option')[$(this).parents('li').index()].text;
318                        var removeLi = $(this).parents("li");           
319                       
320                        $.Zebra_Dialog(get_lang('All messages flagged with the flag type ') + '<strong>'+ nameFollowupflag + '</strong>' + get_lang(' will be removed. This action cannot be undone. Want to continue?'), {
321                                'type':     'question',
322                                'custom_class': (is_ie ? 'configure-zebra-dialog custom-zebra-filter' : 'custom-zebra-filter'),
323                                'title':    'Atenção',
324                                'buttons': ['Sim','Não'],               
325                                'overlay_opacity': '0.5',
326                                'onClose':  function(caption) {
327                                        if(caption == 'Sim'){
328                                                var listFollowupflag = DataLayer.get('followupflagged', ['=', 'followupflagId', id]);
329                                                for (var i=0; i < listFollowupflag.length; i++)
330                                                        DataLayer.remove('followupflagged', listFollowupflag[i].id);
331
332                                                DataLayer.remove('followupflag',false);                                 
333                                                DataLayer.get('followupflag');
334
335                                                DataLayer.remove('followupflag', ''+id);                                               
336                                                DataLayer.commit(false, false, function(data){
337                                                        $('[title="'+nameFollowupflag+'"]').attr('title', '').find('div').css({backgroundColor:'#CCC'});
338                                                        $(removeLi).remove();
339                                                        $('option[value="'+ id +'"]').remove();
340                                                        $('.ui-autocomplete.ui-menu li:first');
341                                                        $('.followupflag-configure').find('option:first').attr("selected","selected");                                                 
342                                                        $('.ui-autocomplete-input').val($('.followupflag-configure').find('option:selected').text());
343                                                       
344                                                        for(var i=0; i<listFollowupflag.length; i++){
345                                                                if(listFollowupflag[i].id == winElement.find('[name="followupflagId"]').val()){
346                                                                        winElement.find('[name="followupflagId"]').val("");
347                                                                }
348                                                        }                                               
349                                                });                     
350                                                event.stopImmediatePropagation();
351                                        }
352                                }
353                        });     
354                        if(is_ie)
355                                $(".ZebraDialogOverlay").css("z-index","1006");
356                });
357
358        });
359        winElement.find('.ui-corner-right.ui-button-icon').attr('title', get_lang('Show All Items'));
360
361        winElement.find('[name="alarmDate"],[name="alarmTime"]').attr("disabled","disabled");
362       
363        winElement.find('.menu-configure-followupflag .delete').button("option", "disabled", true);     
364        var idFollowupflag = winElement.find('[name="followupflagId"]').val();
365                idFollowupflag = idFollowupflag.split(',');
366       
367        $.each(idFollowupflag, function(index,value){
368                if (value != "false" ){
369                        winElement.find('.menu-configure-followupflag .delete').button("option", "disabled", false);
370                }
371        });
372
373        winElement.find('[name="alarm"]').click(function(){
374                if($(this).is(":checked")){
375                        winElement.find('[name="alarmDate"]').removeAttr("disabled");                   
376                }else{
377                        winElement.find('[name="alarmDate"],[name="alarmTime"]').attr("disabled","disabled").val('');
378                }
379        });
380
381        if(winElement.find('[name="alarm"]').is(":checked")){
382                winElement.find('[name="alarmDate"],[name="alarmTime"]').removeAttr("disabled");
383        }
384       
385        winElement.find('[name="done"]').click(function(){
386                if($(this).is(":checked")){
387                        winElement.find(".input-done input").attr("disabled","disabled");
388                }else{
389                        winElement.find(".input-done input").removeAttr("disabled");
390                }
391        });
392
393
394        winElement.find(".followupflag-color-fields").hide();
395        winElement.find(".followupflag-color.sample-list .sample-item").click(function(){
396                winElement.find('.menu-configure-followupflag .save').button("enable");
397                winElement.find(".followupflag-color.sample-list .sample-item").removeClass("selected");
398                $(this).addClass("selected");
399                var color = $(this).attr('alt');
400                winElement.find('[name="backgroundColor"]').css('background-color', color).val(color)
401        });
402       
403        winElement.find(".followupflag-color.sample-list .sample-item.selected").trigger('click');
404                               
405        winElement.find('[name="setColor"]').change(function(){
406                if(winElement.find('[name="setColor"]').val() == "default"){
407                        winElement.find(".followupflag-color.sample-list").show("fast");
408                        winElement.find(".followupflag-color-fields").hide();
409                        winElement.find(".followupflag-color.sample-list .sample-item.selected").trigger('click');
410                } else if(winElement.find('[name="setColor"]').val() == "custom"){     
411                        winElement.find(".followupflag-color-fields").show("fast");
412                        winElement.find(".followupflag-color.sample-list").hide();
413                        winElement.find(".colorwell").focus();
414                }               
415        });
416       
417        if(winElement.find('[name="setColor"] option:selected').val() == "custom"){
418                winElement.find('[name="setColor"]').trigger("change");
419        }
420
421        var colorpickerPreviewChange = function(color) {
422                winElement.find('.menu-configure-followupflag .save').button("enable");
423                winElement.find('.colorwell-selected').val(color).css('background-color', color);
424                winElement.find('.flag-color-preview').css('background',color);
425        }
426
427        var f = $.farbtastic(winElement.find('.colorpicker'), colorpickerPreviewChange);
428        var selected;                                   
429        winElement.find('.colorwell').each(function () {
430                f.linkTo(this);
431        }).focus(function() {
432                if (selected) {
433                        $(selected).removeClass('colorwell-selected');
434                }
435                $(selected = this).addClass('colorwell-selected');
436                f.linkTo(this, colorpickerPreviewChange);
437                f.linkTo(colorpickerPreviewChange);
438               
439        });
440        if(winElement.find('[name="setColor"] option:selected').val() == "custom"){
441                winElement.find(".colorwell").focus();
442        }
443
444}
445
446
447/**
448 * constrói as três possíveis janelas de alerta, utilizando o mesmo template
449 * para o parametro alert_type, espera-se vazio, followupflagAlarms ou filtersAlarms
450 * vazio: quando serão carregadas todas as modais de alarmes
451 * followupflagAlarms: quando serão carregadas as modais referentes à sinalizações
452 * filtersAlarms: quando será carregada a modal de filtros (nesse caso o parametro filter_list deve conter a lista de mensagens a ser exibida na modal)
453 */
454function alarmFollowupflagged(alert_type, filter_list){
455        var currentDate = new Date().toString("dd/MM/yyyy");
456        var data = {alarmDeadline: false, doneDeadline: false, filtersAlarms: false};
457
458        switch(alert_type){
459                case 'followupflagAlarms':
460                        $('.doneDeadline').remove();
461                        $('.alarmDeadline').remove();
462                        data.alarmDeadline = $.cookie("fadeAlarm") != currentDate ? true : false;
463                        data.doneDeadline = $.cookie("fadeCompleted") != currentDate ? true : false;
464                break;
465                case 'filtersAlarms':
466                        $('.filtersDeadline').remove();
467                        data.filtersAlarms = $.cookie("fadeFilterAlarm") != currentDate ? true : false;
468                break;
469                default:
470                        $('.gray').remove();
471                        data.alarmDeadline = $.cookie("fadeAlarm") != currentDate ? true : false;
472                        data.doneDeadline = $.cookie("fadeCompleted") != currentDate ? true : false;
473                        data.filtersAlarms = $.cookie("fadeFilterAlarm") != currentDate ? true : false;
474                break;
475        };
476
477        var startDate = (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00');
478        var endDate = (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00');
479
480        if(data.alarmDeadline){
481                var decodeAlarms = {'sent': [], 'task':[]};     
482                alarms = DataLayer.get('followupflagged',
483                        {
484                                filter: ['AND', ['<', 'alarmDeadline', endDate], ['=','isSent','0'], ['=','isDone','0']],
485                                criteria: {deepness: 1}
486                        });
487
488                if(alarms.length > 0){
489                        var itens = [];
490                        for(var i = 0; i < alarms.length; i++){
491
492                                var date = Date.parseExact(alarms[i]['alarmDeadline'], 'yyyy-MM-dd HH:mm:ss');
493                        alarms[i]['alarmDeadline'] = date.toString('dd/MM HH:mm');
494
495                                var nameFollowupflag = alarms[i]['followupflag']['id'] < 7 ? get_lang(alarms[i]['followupflag']['name']) : alarms[i]['followupflag']['name'];
496                                var li_alarm = alarms[i]['alarmDeadline'] + ' - ' + nameFollowupflag + ' - ' + alarms[i]['message']['headers']['subject'];
497
498                                if(alarms[i]['doneDeadline'] != ''){
499                                        var dateDone = Date.parseExact(alarms[i]['doneDeadline'], 'yyyy-MM-dd HH:mm:ss');
500                                        if(dateDone.getTime() < $.now())
501                                                continue;
502                                }
503
504                                if(date.getTime() <= $.now())
505                                        decodeAlarms.sent.push({
506                                                "msg_number" : alarms[i]['messageNumber'],
507                                                "msg_folder" : alarms[i]['folderName'],
508                                                "a"                      : truncate(li_alarm, 34),
509                                                'id' : alarms[i].id
510                                        });
511                        else
512                                decodeAlarms.task.push({
513                                                a: truncate(li_alarm, 34),
514                                                sentTime:  date.getTime() / 1000,
515                                                id: alarms[i].id,
516                                                'msg_folder': alarms[i].folderName,
517                                                'msg_number': alarms[i].messageNumber
518                                        });
519                        }
520
521                        if(decodeAlarms.task.length)
522                                alarmDeadline.load(decodeAlarms.task);
523
524                        if(decodeAlarms.sent.length)
525                                data.alarmDeadline = {
526                                                alarms: decodeAlarms.sent,
527                                                title: get_lang('Follow ups'),
528                                                caption: (itens.length == 1) ? get_lang('You have one undone message today:') : get_lang('You have %1 follow ups due for today:', decodeAlarms.sent.length),
529                                                type: 'alarmDeadline'
530                                        };
531                        else
532                                data.alarmDeadline = false;
533                }else
534                        data.alarmDeadline = false;
535        }
536
537        if(data.doneDeadline){
538                alarms = DataLayer.get('followupflagged', {filter: ['AND', ['>', 'doneDeadline', startDate], ['<', 'doneDeadline', endDate]], criteria: {deepness: 1}});
539
540                if(alarms.length > 0){
541                        var itens = [];
542                        for(var i = 0; i < alarms.length; i++){
543
544                            var date = Date.parseExact(alarms[i]['doneDeadline'], 'yyyy-MM-dd HH:mm:ss');
545                            alarms[i]['doneDeadline'] = date.toString('dd/MM HH:mm');
546
547                            var nameFollowupflag = alarms[i]['followupflag']['id'] < 7 ? get_lang(alarms[i]['followupflag']['name']) : alarms[i]['followupflag']['name'];
548                            var li_alarm = alarms[i]['doneDeadline'] + ' - ' + nameFollowupflag + ' - ' + truncate(alarms[i]['message']['headers']['subject'], 15);
549
550                            itens.push({
551                                    a: truncate(li_alarm, 34),
552                                    id: alarms[i].id,
553                                    'msg_folder': alarms[i].folderName,
554                                    'msg_number': alarms[i].messageNumber
555                            });
556                        }
557                    data.doneDeadline = {
558                        alarms: itens,
559                        title: get_lang('Done'),
560                        caption: (itens.length == 1) ? get_lang('You have one undone message today:') : get_lang('You have %1 follow ups due for today:', itens.length),
561                        type: 'doneDeadline'
562                    };
563                }else
564                    data.doneDeadline = false;
565        }
566
567        if(data.filtersAlarms){
568
569                alarms = filter_list;
570
571                if(alarms.length > 0){
572                    var itens = [];
573
574                    for(var i=0; i<alarms.length; i++){
575                        alarms[i]['udate'] =  new Date(alarms[i]['udate']*1000).toString('dd/MM HH:mm');
576                        var li_alarm = alarms[i]['udate'] + ' - ' + alarms[i]['from'] + ' - ' + alarms[i]['subject'];
577
578                        itens.push({
579                                'msg_number' : alarms[i]['msg_number'],
580                                'msg_folder' : alarms[i]['msg_folder'],
581                                a            : truncate(html_entities(li_alarm), 34),
582                                id : alarms[i].id
583                        });                             
584                }
585
586                data.filtersAlarms = {
587                                alarms: itens,
588                                title: get_lang('Filter by sender'),
589                                caption: (itens.length == 1) ? get_lang('You have an archived message:') : get_lang('You have %1 messages archived:', itens.length),
590                                type: 'filtersDeadline',
591                                captions: {
592                                    singular:'You have one undone message today:',
593                                    plural:"You have %1 undone messages today:"
594                                }
595                        };
596
597                }else
598                    data.filtersAlarms = false;
599        }
600
601        for (var i in data)
602                if(data[i] != false)
603                        showAlarmsModal(data[i]);
604
605        // controle de qual janela de alarme estará maximizada
606        $('.gray').find('.content-alarm').hide();
607        $('.gray').find('.header-alarm [name="header-icon"]').removeClass('minimize-alarm').addClass('maximize-alarm');
608       
609        if($('.gray').length > 0){
610                if($('.gray').hasClass('filtersDeadline')){
611                        $('.filtersDeadline').find('.content-alarm').show();
612                        $('.filtersDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');
613                }else if($('.gray').hasClass('alarmDeadline')){
614                        $('.alarmDeadline').find('.content-alarm').show();
615                        $('.alarmDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');       
616                }else if($('.gray').hasClass('doneDeadline')){
617                        $('.doneDeadline').find('.content-alarm').show();
618                        $('.doneDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');
619                }
620        }
621}
622
623function showAlarmsModal(alarm){
624       
625        var ok_function = function(event, type, type_cookie){
626                if($(event.target).parents('.'+type).find('[name="stopAlert"]').is(':checked')){
627                        $.cookie(type_cookie, (new Date).toString("dd/MM/yyyy"), {
628                                expires: 1
629                        });
630                }
631        }
632
633        // carrega o template dos alarmes e cria a modal utilizando o plugin freeow
634        var dialogText = DataLayer.render("../prototype/modules/mail/templates/followupflag_alarm_list.ejs", alarm);
635        var titulo = '<div class="header-alarm"><span class="img_title"></span><span class="title-alarm"><strong>'+alarm.title+'</strong></span><span name="header-icon" class="maximize-alarm"></span></div>';
636       
637        $("#freeow").freeow(titulo, dialogText, {
638                classes: ["gray", alarm.type],
639                autoHide: false,
640                startStyle: null,
641                onClick: function(event){
642                        var type = '';
643                        var type_cookie = '';
644                        if($(this).hasClass('alarmDeadline')){
645                                type = 'alarmDeadline';
646                                type_cookie = 'fadeAlarm';
647                        }else if($(this).hasClass('doneDeadline')){
648                                type = 'doneDeadline';
649                                type_cookie = 'fadeCompleted';
650                        }else if($(this).hasClass('filtersDeadline')){
651                                type = 'filtersDeadline';
652                                type_cookie = 'fadeFilterAlarm';
653                        }
654                        if($(event.target).hasClass('stop-alert-alarm')){
655                                return;
656                        }
657                        if($(event.target).hasClass('minimize-alarm')){
658                                $('.'+type).find('.content-alarm').hide();
659                                $(event.target).removeClass('minimize-alarm').addClass('maximize-alarm');
660                                return;
661                        }
662                        if($(event.target).hasClass('maximize-alarm')){
663                                $('.'+type).find('.content-alarm').show();
664                                $(event.target).removeClass('maximize-alarm').addClass('minimize-alarm');
665                                return;
666                        }
667                        if($(( !!$.browser.safari ) ? event.target.parentElement : event.target).hasClass('confirm-alarm')){
668                                ok_function(event, type, type_cookie);
669                                $('.'+type).remove();
670                                return;
671                        }
672                        return false;
673                }
674        });
675        // elementos do freeow desnecessários
676        $('.gray .background .content p').remove();
677        $('.gray .icon').remove();
678        $('.gray .close').remove();
679
680        $('div.gray.alarmDeadline .button.delete').button({
681                text: false,
682                icons:{
683                        primary: 'ui-icon-close'
684                }
685        })
686       
687        // botão ok da modal com jquery button
688        $('.content-alarm button').button();
689}
690
691function cancelAlarm(element, idAlarm, messageNumber, folderName){
692
693        $(element).parents('li').remove();
694
695        var view = 'div.gray.alarmDeadline';
696        var length = $(view).find('ul.message-list li').length;
697
698        if(length > 0){
699                var msg = '';
700                if(length == 1)
701                        msg = get_lang( 'You have a follow up due for today:');
702                else
703                        msg = get_lang('You have %1 follow ups due for today:', length);
704
705                $(view).find('span.subtitle-alarm strong').html(msg);
706        }else
707                $(view).remove();
708
709        DataLayer.put('followupflagged',
710                {
711                        id: idAlarm ,
712                        isSent: '1',
713                        folderName: folderName,
714                        messageNumber: messageNumber,
715                        uid: User.me.uid
716                });
717
718        DataLayer.commit();
719
720}
721
722alarmDeadline = {
723
724
725        load: function(alarm){
726                var currentDate = new Date().toString("dd/MM/yyyy")
727                if($.cookie("fadeAlarm") != currentDate)
728                        for(var i = 0; i < alarm.length; i++)
729                                this.addAlarm( alarm[i] );
730        },
731
732        addAlarm: function(alarm){
733
734                    DataLayer.task( parseInt(alarm['sentTime']) , function( timestamp ){
735                        var view = 'div.gray.alarmDeadline';
736
737                        if(!$(view+' li.message-item.'+alarm.id).length){
738
739                                var currentDate = new Date().toString("dd/MM/yyyy")
740                                        if($.cookie("fadeAlarm") != currentDate)
741                                       
742                                        if($('div.gray.alarmDeadline').length){
743                                               
744                                                $(view).find('ul.message-list').append(DataLayer.render("../prototype/modules/mail/templates/followupflag_alarmDeadline_add_item_list.ejs", alarm))
745
746                                                var length = $(view).find('ul.message-list li').length;
747                                                var msg = '';
748                                                if(length == 1)
749                                                        msg = get_lang( 'You have a follow up due for today:');
750                                                else
751                                                        msg = get_lang('You have %1 follow ups due for today:', length);
752
753                                                $(view).find('span.subtitle-alarm strong').html(msg);
754
755                                                $(view+' .button.delete').button({
756                                                                text: false,
757                                                                icons:{
758                                                                        primary: 'ui-icon-close'
759                                                                }
760                                                        });
761
762                                        }else{
763                                                var item = {
764                                                                alarms: [alarm],
765                                                                title: get_lang('Follow ups'),
766                                                                caption: get_lang('You have one undone message today:'),
767                                                                type: 'alarmDeadline'
768                                                        };
769                                                        showAlarmsModal(item);
770                                        }
771                                    }
772                               
773                    });
774        }
775
776}
777
778if(preferences['use_alert_filter_criteria'] == "1")
779{
780    $('#main_table').ready(function(){
781        handlerMessageFilter = function (data) {
782            alarmFollowupflagged(null, data);
783        }
784        /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */
785        cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter);
786    });
787}
788
789
Note: See TracBrowser for help on using the repository browser.