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

Revision 6487, 27.0 KB checked in by marcieli, 12 years ago (diff)

Ticket #2764 - Após o merge e correção de bugs, commit da melhoria no trunk

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