source: trunk/prototype/modules/mail/js/followupflag.js @ 7720

Revision 7720, 28.2 KB checked in by adriano, 11 years ago (diff)

Ticket #2523 - criado componente generico combobox utilizado na tela de sinalizacao para acompanhamento

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