Ignore:
Timestamp:
10/08/13 16:20:46 (11 years ago)
Author:
douglas
Message:

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

Location:
branches/2.5/prototype/modules
Files:
1 added
31 edited

Legend:

Unmodified
Added
Removed
  • branches/2.5/prototype/modules/attach_message/attach_message.css

    r5831 r8232  
    3636#mailpreview_container {margin:5px;padding:0px;height:220px; width:907px; float:left; margin:5px 5px 5px 5px;} 
    3737#mailpreview_container .ui-tabs-panel {height:183px;overflow:auto;padding:0px; width:905px;} 
    38 /*#mailpreview_tabs { max-height: 20px; }*/ 
     38#mailpreview_tabs { max-height: 25px; } 
    3939#buttons-container {text-align: right;margin:5px 5px 5px 5px;float:right;} 
    4040#selected_messages_counter {text-align:right;padding:0;} 
  • branches/2.5/prototype/modules/attach_message/attach_message.js

    r7543 r8232  
    216216                for (var message in selectedMessages[folder]) { 
    217217                        if (selectedMessages[folder][message]) { 
    218                                 byte_size += parseInt(onceOpenedMessages[folder][message].size); 
     218                                byte_size += parseInt(onceOpenedHeadersMessages[folder][message].size); 
    219219                                total_messages++; 
    220220                        } 
     
    227227var msgAttacherGrid = $("#message_attacher_grid"), msgsTotal = $("#selected_messages_number"); 
    228228var lastLoadedMessages = []; 
    229 var onceOpenedMessages = []; 
    230229var selectedMessages   = {}; 
    231230var selectedFolder     = {}; 
    232231 
     232function mount_children_localfolders_list(folder){  
     233    folder.children = new Array(); 
     234    folder.id_search = folder.id; 
     235    folder.id = 'local_messages_'+folder.id, 
     236    folder.commonName =  folder.name, 
     237    folder.parentId = folder.parentid, 
     238    folder.type = 'localFolder', 
     239    folder.name = folder.id, 
     240    folder.messageCount = { 
     241                             total: folder.messages, 
     242                             unseen: folder.unseen 
     243                          } 
     244 
     245    if(folder.haschild){ 
     246        expresso_mail_archive.getFoldersList(folder.id_search); 
     247        folder.children = expresso_mail_archive.folders; 
     248 
     249        for(var i = 0; i < folder.children.length; i++){ 
     250            mount_children_localfolders_list(folder.children[i]); 
     251        } 
     252 
     253    } 
     254} 
    233255function adaptOffline( data ) 
    234256{ 
     
    254276         
    255277    return( data ); 
    256          
    257 } 
     278} 
     279 
     280function archive_flag( flagObj ){ 
     281 
     282    var flags = {}; 
     283    var returns = ''; 
     284 
     285    $.each( flagObj.tag , function(i, flag){ 
     286        flags[ flag['@value'] ] = true; 
     287    }); 
     288 
     289        returns += (flags['seen'] ? '0,' : '1,') ; 
     290        returns += (flags['answered'] && !flags['forwarded'] ? '1,' : '0,') ; 
     291        returns += (flags['forwarded'] ? '1,' : '0,') ; 
     292        returns += (flags['flagged'] || flags['importance_high'] ? '1,' : '0,') ; 
     293        returns += '0,0'; 
     294             
     295    return returns; 
     296} 
     297 
     298function archive_flag_search( flagObj ){ 
     299    var flags = {}; 
     300    var returns = ''; 
     301 
     302    flagObj = flagObj.split(""); 
     303    $.each( flagObj , function(i, flag){ 
     304        flags[ flag ] = true; 
     305    }); 
     306 
     307    returns += (flags['U'] ? '1,' : '0,') ; 
     308    returns += (flags['A'] && !flags['X'] ? '1,' : '0,') ; 
     309    returns += (flags['X'] ? '1,' : '0,') ; 
     310    returns += (flags['F'] ? '1,' : '0,') ; 
     311    returns += '0,0'; 
     312             
     313    return returns; 
     314} 
     315 
    258316 
    259317$mailpreview_tabs_label_length = 15; 
     
    271329                var tree2 = new Array(); 
    272330                var tree3 = new Array(); 
     331 
     332        if(preferences.use_local_messages == 1){ 
     333            if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive 
     334                //pega pastas locais do mailarchiver e insere no array de pastas 
     335                    expresso_mail_archive.getFoldersList("home"); 
     336                    treeFolders = expresso_mail_archive.folders; 
     337 
     338                    for(var i=0; i<treeFolders.length; i++ ){ 
     339                        mount_children_localfolders_list(treeFolders[i]); 
     340                    } 
     341                     
     342                    for(var i = 0; i < treeFolders.length; i++){ 
     343                        data.push(treeFolders[i]); 
     344                    } 
     345            } 
     346        } 
     347 
    273348                for (var i=0; i<data.length; i++) { 
    274349 
     
    286361                        } 
    287362                        else if (/^local_messages/.test(data[i].id)) { 
    288                                 if (!unorphanize(tree3, data[i])) { 
    289                                         data[i].children = new Array(); 
    290363                                        tree3.push(data[i]); 
    291                                 } 
    292364                        } 
    293365                         
     
    299371                .find("#foldertree").treeview() 
    300372                .click(function(event){ 
     373 
    301374                        //request new selected folder messages 
    302375                        var target = $(event.target); 
     
    325398                        var grid = $("#message_attacher_grid"), offlineCase = ""; 
    326399                         
    327                         if( !targetId.indexOf( 'local_messages/' ) ) 
    328                             offlineCase = ":offline"; 
    329                          
    330  
    331                         grid.jqGrid('setGridParam',{url:BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+targetId.replace(dashes, '.')+'/message'}) 
    332                             .trigger("reloadGrid") 
    333                             .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 
     400            if(targetId.indexOf( 'local_messages' ) == 0){ 
     401                 //Entrar caso: Clicar em uma pasta que seja do arquivamento local 
     402                targetId = targetId.split("_")[2]; 
     403 
     404                expresso_mail_archive.getMessagesByFolder(targetId,"ALL"); 
     405 
     406                msgAll = expresso_mail_archive.msgAll;                 
     407 
     408                var msgs = new Array(); 
     409                var from = ''; 
     410                var flag = ''; 
     411                 
     412                $.each(msgAll, function(i, msg){ 
     413                    from = $.parseJSON(msg['_from']); 
     414 
     415                    if(!from){ 
     416                        from = {"mailbox":{"name":"null","route":"null","localPart":"null","domain":"null"}}; 
     417                    } 
     418 
     419                    flag = $.parseJSON(msg['_tags']); 
     420                    id = msg['_id']; 
     421 
     422                    var message = {}; 
     423                     
     424                     
     425                    message['msg_number'] = id; 
     426                    message['flags'] = archive_flag( flag ); 
     427                    message['from.name'] = from['mailbox']['@name']; 
     428                    message['subject'] = msg['_subject']; 
     429                    message['timestamp'] = msg['_receivedDate']; 
     430                    message['size'] = msg['_size']; 
     431                    message['id'] = id; 
     432                    msgs.push( message ); 
     433 
     434                }); 
     435 
     436            grid.jqGrid("clearGridData", true); 
     437            grid.jqGrid('setGridParam',{datatype: "local",data: msgs}) 
     438                    .trigger("reloadGrid") 
     439                    .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 
     440 
     441            } else { 
     442                if( !targetId.indexOf( 'local_messages/' ) ) 
     443                    offlineCase = ":offline"; 
     444 
     445                grid.jqGrid('setGridParam',{datatype: "json", url:BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+targetId.replace(dashes, '.')+'/message'}) 
     446                    .trigger("reloadGrid") 
     447                    .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 
     448            } 
    334449                }) 
    335450                .find('span:first-child'); 
    336                 $('span.folder.inbox').addClass('selected'); 
     451                $('span.folder.inbox').parents(".ui-dialog").find("li#INBOX span").addClass('selected'); 
    337452                selectedFolder = { 
    338453                        id: firstFolder.parent().attr('id'),  
     
    360475                        ], 
    361476                        jsonReader : { 
    362                                   root:"rows", 
     477                                  root: function(obj){ 
     478                                        obj['data'] = {}; 
     479                            obj.data = {rows : obj.rows}; 
     480                                        if(obj.rows){ 
     481                                                if(!obj.rows[0].flag){ 
     482                                                        var msgs = []; 
     483                                                        $.each(obj.rows, function(i, msg){ 
     484                                                                flag = msg['flags']; 
     485                                        id = msg['msg_number']; 
     486                                        var message = {}; 
     487                                      
     488                                        message['msg_number'] = id; 
     489                                        message['flags'] = flag; 
     490                                        message['to'] = { 
     491                                                name: msg['toaddress2'], 
     492                                                email: msg['toaddress2'] 
     493                                        }; 
     494                 
     495                                        if(msg['from'] != undefined &&  msg['header']['from'] != undefined){ 
     496                                                message['from'] = { 
     497                                                        'email' : msg['from']['email'], 
     498                                                        'name' : msg['header']['from']['name'] 
     499                                                } 
     500                                            }else{ 
     501                                                message['from'] = { 
     502                                                        'email' : '', 
     503                                                        'name' : 'Rascunho' 
     504                                                } 
     505                                            } 
     506                                        //message['from']['name'] = msg['from']['name']; 
     507                                        message['subject'] = msg['subject'] ? msg['subject'] : "(sem assunto)"; 
     508                                        message['timestamp'] = parseInt(msg['timestamp']); 
     509                                        message['size'] = msg['size']; 
     510                                        message['id'] = id; 
     511                                        msgs.push( message ); 
     512                                        }); 
     513                                                        obj['data'] = {}; 
     514                                        obj.data = {rows : msgs}; 
     515                                    } 
     516                        } 
     517                                        return obj.data.rows; 
     518                                  }, 
    363519                                  page: "page", 
    364520                                  total: "total", 
     
    367523                                  id: "0" 
    368524                        }, 
     525                        hidegrid:false, 
    369526                        rowNum:10, 
    370527                        rowList:[10,25,50], 
     
    377534                        loadComplete: function(data) { 
    378535                                lastLoadedMessages = data.rows; 
    379                                  
     536                                $("#mailgrid-container").find(".loading").hide(); 
     537 
    380538                                // aplica o contador 
    381539                                jQuery('.timable').each(function (i) { 
     
    401559                                 
    402560                        }, 
    403                         onSelectRow: function (id, selected) { 
    404                                 var message = false; 
    405                                 for (var i=0; i<lastLoadedMessages.length; i++){ 
    406                                         if (lastLoadedMessages[i].msg_number == id) { 
    407                                                 message = lastLoadedMessages[i]; 
    408                                                 break; 
    409                                         } 
    410                                 } 
    411                                  
    412                                 var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number; 
    413                                 var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-');  
    414                                  
    415                                 if (selected) {  
    416                                         if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) { 
    417                                                 if (!selectedMessages[selectedFolder.id]) 
    418                                                         selectedMessages[selectedFolder.id] = {}; 
    419                                                          
    420                                                 selectedMessages[selectedFolder.id][message.msg_number] = true; 
    421                                                 $('#mailpreview-container').unblock();                                           
    422  
    423                                                 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 
    424                                                 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 
    425                                                         tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 
    426                                                  
    427                                                 if (!$('#' + tabPanelTemplateId).length) {                                                               
    428                                                         $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 
    429                                                         .find('.message.empty-container').hide().end() 
    430                                                         .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body); 
    431                                                 } else { 
    432                                                         $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 
    433                                                         .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 
    434                                                 } 
    435                                                  
    436                                         } else { 
    437                                                 jQuery('#mailpreview_container').block({   
    438                                                         message: '<div id="loading-content"><div class="image"></div></div>',   
    439                                                         css: {   
    440                                                                 backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)',   
    441                                                                 backgroundRepeat: 'no-repeat',  
    442                                                                 backgroundPosition: 'center',  
    443                                                                 backgroundColor: 'transparent',  
    444                                                                 width: '32px',  
    445                                                                 height: '32px',  
    446                                                                 border:'none'   
    447                                                         },  
    448                                                         overlayCSS: {   
    449                                                                 backgroundColor: '#CCC',   
    450                                                                 opacity:         0.5  
    451                                                         }   
    452                                                 });  
    453  
    454                                                 var offlineCase = ""; 
    455                                                  
    456                                                 if( !selectedFolder.id.indexOf( 'local_messages/' ) ) 
    457                                                     offlineCase = ":offline"; 
    458                                            
    459                                                 if (!selectedMessages[selectedFolder.id]) 
    460                                                         selectedMessages[selectedFolder.id] = {}; 
    461                                                 selectedMessages[selectedFolder.id][message.msg_number] = true; 
    462                                                 $.ajax({ 
    463                                                         accepts: 'text/html', 
    464                                                         url: BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+selectedFolder.id.replace(dashes, '.')+'/message/'+id, 
    465                                                         dataType: 'json', 
    466                                                         success: function( mail_preview ){               
    467                                                                 //selectedMessagesCount(); 
    468                                                                 if (!onceOpenedMessages[selectedFolder.id]) 
    469                                                                         onceOpenedMessages[selectedFolder.id] = {}; 
    470                                                                 onceOpenedMessages[selectedFolder.id][message.msg_number] = jQuery.extend(true, message, mail_preview); 
    471  
    472                                                                 $('#mailpreview_container').unblock(); 
    473  
    474                                                                 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 
    475                                                                 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 
    476                                                                         tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 
    477                                                         selectedMessagesCount(); 
    478                                                                  
    479                                                                 if (!$('#' + tabPanelTemplateId).length) {                                                               
    480                                                                         $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 
    481                                                                         .find('.message.empty-container').hide().end() 
    482                                                                         .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body) 
    483                                                                         .prepend( 
    484                                                                                 '<div class="mailpreview-message-info">' +  
    485                                                                                         get_lang('Subject') + ': ' + 
    486                                                                                         html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject) +  
    487                                                                                 '</div>' 
    488                                                                         ) 
    489                                                                         .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body"); 
    490                                                                 } else { 
    491                                                                         $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 
    492                                                                         .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 
    493                                                                 } 
    494                                                         } 
    495                                                 }); 
    496                                         } 
    497                                 } else { 
    498                                         /** 
    499                                          * if you wants to remove tab on unselect message, 
    500                                          * but still needs to uselect message on remove tab. 
    501                                          *  
    502                                          */ 
    503                                         /* 
    504                                         if ($('#' + tabPanelTemplateId).length) { 
    505                                                 $mailpreview_tabs.tabs('remove', '#' + tabPanelTemplateId); 
    506                                         } 
    507                                          */ 
    508                                         selectedMessages[selectedFolder.id][message.msg_number] = false; 
    509                                         $mailpreview_tabs.find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').addClass('preview-message-unselected'); 
    510                                 } 
    511                                  
    512                                 if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) 
    513                                         selectedMessagesCount(); 
    514                         }, 
     561            onSelectRow: function(id, selected) 
     562            { 
     563                /* Funções auxiliares:*/ 
     564 
     565                /* 
     566                    Marca a mensagem como selecionada no grid de anexar mensagena. 
     567                    Parâmetros: 
     568                        folder: folder em que a mensagem a ser selecionada se encontra. 
     569                        msg_number: id da mensagem a ser selecionada. 
     570                */ 
     571                var mark_as_selected = function (folder, msg_number) { 
     572                    if(!selectedMessages[folder]) 
     573                    { 
     574                        selectedMessages[folder] = {}; 
     575                    } 
     576                    selectedMessages[folder][msg_number] = true; 
     577                } 
     578 
     579                /* 
     580                    Adiciona uma mensagem ao cache de mensagens. 
     581                        cache: vetor de cache de mensagens. 
     582                        msg: mensagem a ser armazenada. 
     583                */ 
     584                var add_msg_to_cache = function (cache, msg) { 
     585                    if(!cache[selectedFolder.id]) 
     586                    { 
     587                        cache[selectedFolder.id] = {}; 
     588                    } 
     589                    cache[selectedFolder.id][msg.msg_number] = msg; 
     590                } 
     591 
     592                /* 
     593                    Adiciona uma aba de preview para cada mensagem selecionada. 
     594                        subject: assunto da mensagem. 
     595                        body: corpo da mensagem. 
     596                */ 
     597                var add_preview_tab = function (subject, body) { 
     598                    // Trunca o assunto, para caber na aba de preview: 
     599                    var tabPanelTemplateLabel = html_entities(subject); 
     600                    if(tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 
     601                    { 
     602                        tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 
     603                    } 
     604 
     605                    // Se a aba não tiver sido adicionada: 
     606                    if(!$('#' + tabPanelTemplateId).length) 
     607                    { 
     608                        // adiciona-a: 
     609                        $mailpreview_tabs 
     610                        .tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 
     611                        .find('.message.empty-container') 
     612                        .hide() 
     613                        .end() 
     614                        .find('#' + tabPanelTemplateId) 
     615                        .html(body) 
     616                        .prepend('<div class="mailpreview-message-info">' + get_lang('Subject') + ': ' + html_entities(subject) + '</div>') 
     617                        .find('[class^="ExpressoCssWrapper"]') 
     618                        .addClass("mailpreview-message-body"); 
     619                    } 
     620                    else 
     621                    { 
     622                        // Senão, só a seleciona: 
     623                        $mailpreview_tabs 
     624                        .tabs('select', '#' + tabPanelTemplateId) 
     625                        .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]') 
     626                        .removeClass('preview-message-unselected'); 
     627                    } 
     628                } 
     629 
     630                var message = false; 
     631                for(var i = 0; i < lastLoadedMessages.length; i++) 
     632                { 
     633                    if(lastLoadedMessages[i].msg_number == id) 
     634                    { 
     635                        message = lastLoadedMessages[i]; 
     636                        break; 
     637                    } 
     638                } 
     639                var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number; 
     640                var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-'); 
     641 
     642                if(selected) 
     643                { 
     644                    // Se a já mensagem (com preview) já estiver no cache: 
     645                    if(onceOpenedHeadersMessages[selectedFolder.id] && onceOpenedHeadersMessages[selectedFolder.id][message.msg_number]  && onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].body) 
     646                    { 
     647 
     648                        mark_as_selected(selectedFolder.id, message.msg_number); 
     649 
     650                        add_preview_tab( 
     651                            onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].subject, 
     652                            onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].body 
     653                        ); 
     654                    } 
     655                    else // Mensagem não está no cache: 
     656                    { 
     657                        jQuery('#mailpreview_container').block( 
     658                        { 
     659                            message: '<div id="loading-content"><div class="image"></div></div>', 
     660                            css: { 
     661                                backgroundImage: 'url(' + BASE_PATH + 'modules/attach_message/images/loading.gif)', 
     662                                backgroundRepeat: 'no-repeat', 
     663                                backgroundPosition: 'center', 
     664                                backgroundColor: 'transparent', 
     665                                width: '32px', 
     666                                height: '32px', 
     667                                border: 'none' 
     668                            }, 
     669                            overlayCSS: { 
     670                                backgroundColor: '#CCC', 
     671                                opacity: 0.5 
     672                            } 
     673                        }); 
     674 
     675                        mark_as_selected(selectedFolder.id, message.msg_number); 
     676 
     677                        // Se for mensagem local: 
     678                        if(selectedFolder['id'].indexOf("local_messages_") != -1) 
     679                        { 
     680                            expresso_mail_archive.getPreviewToAttach(id); 
     681 
     682                            var body = expresso_mail_archive.bodyPreview; 
     683                            var subject = expresso_mail_archive.subjectPreview; 
     684 
     685                            add_preview_tab(subject, body); 
     686 
     687                            $('#mailpreview_container').unblock(); 
     688 
     689                            add_msg_to_cache(onceOpenedHeadersMessages, message); 
     690                        } 
     691                        else 
     692                        { 
     693                            proxy_mensagens.get_msg(id, selectedFolder.id, '', function (data) { 
     694                                message = $.extend(true, message, data); 
     695 
     696                                add_preview_tab(message.subject, message.body); 
     697 
     698                                $('#mailpreview_container').unblock(); 
     699 
     700                                add_msg_to_cache(onceOpenedHeadersMessages, message); 
     701 
     702 
     703                            }) 
     704                        } 
     705                    } 
     706                } 
     707                else 
     708                { 
     709                    /** 
     710                     * if you wants to remove tab on unselect message, 
     711                     * but still needs to uselect message on remove tab. 
     712                     * 
     713                     */ 
     714                    selectedMessages[selectedFolder.id][message.msg_number] = false; 
     715                    $mailpreview_tabs 
     716                    .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]') 
     717                    .addClass('preview-message-unselected'); 
     718                } 
     719 
     720                selectedMessagesCount(); 
     721            }, 
     722             
    515723                        caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>' 
    516724                }); 
    517                 //.jqGrid('navGrid','#message_attacher_grid_pager',{edit:false,add:false,del:false}); 
     725 
     726        var search_local_messsages = function(param, folder){ 
     727            if(preferences.use_local_messages != 0) 
     728            { 
     729                folder = folder.split("_")[2]; 
     730 
     731                var local_folders   = []; 
     732                expresso_mail_archive.search_queryresult = null; 
     733                 
     734                local_folders.push(folder); 
     735                 
     736                tmp = []; 
     737 
     738                groupResult = []; 
     739                    expresso_mail_archive.search(local_folders, "SUBJECT " +  "<=>" +url_encode(param) + "##"); 
     740                        groupResult.push( expresso_mail_archive.search_queryresult ); 
     741                    expresso_mail_archive.search(local_folders, "FROM " + "<=>" + url_encode(param) + "##"); 
     742                        groupResult.push( expresso_mail_archive.search_queryresult ); 
     743                    expresso_mail_archive.search(local_folders, "TO " + "<=>" + url_encode(param) + "##"); 
     744                        groupResult.push( expresso_mail_archive.search_queryresult ); 
     745                    expresso_mail_archive.search(local_folders, "CC " + "<=>" + url_encode(param) + "##"); 
     746                        groupResult.push( expresso_mail_archive.search_queryresult ); 
     747                     
     748                if($("#gbox_message_attacher_grid .attach-message-search-checkbox").is(":checked")){ 
     749                    expresso_mail_archive.search(local_folders, "BODY " + "<=>" + url_encode(param) + "##"); 
     750                        groupResult.push( expresso_mail_archive.search_queryresult ); 
     751                } 
     752 
     753                 
     754                 $.each(groupResult, function(i, result){ 
     755                        if(result != null){ 
     756 
     757                                var existsMessage = true; 
     758 
     759                                $.each(result, function(i, each){ 
     760 
     761                                        $.each(tmp, function(i, ids){ 
     762 
     763                                            if(each.msg_number == ids.msg_number){ 
     764 
     765                                                    existsMessage = false; 
     766                                                    return false; 
     767 
     768                                            } 
     769 
     770                                        }); 
     771 
     772                                        if(existsMessage) tmp.push(each); 
     773                                }); 
     774 
     775                        } 
     776                }); 
     777 
     778 
     779                if(tmp == null) 
     780                { 
     781                    tmp = new Object(); 
     782                    tmp.length = 0; 
     783                } 
     784 
     785                msgs = []; 
     786 
     787                $.each(tmp, function(i, msg){ 
     788 
     789                    flag = msg['flag']; 
     790                    id = msg['msg_number']; 
     791 
     792                    var message = {}; 
     793 
     794                    var stamp =  msg['timestamp']; 
     795                    stamp = stamp.toString() + "000"; 
     796                    stamp = parseInt(stamp); 
     797 
     798                    message['msg_number'] = id; 
     799                    message['flags'] = archive_flag_search(flag);//"1,1,1,1,1,1";// 
     800                    message['from.name'] = msg['from']; 
     801                    message['subject'] = msg['subject']; 
     802                    message['timestamp'] = stamp; 
     803                    message['size'] = msg['size']; 
     804                    message['id'] = id; 
     805                    msgs.push( message ); 
     806                }); 
     807                return msgs; 
     808            } 
     809        } 
     810        var search_imap_messages = function(param, folder){ 
     811                var grid = $("#message_attacher_grid"); 
     812 
     813                DataLayer.storage.cache = {}; 
     814                if( $(".attach-message-search-checkbox:checked").length > 0 ){ 
     815                    var filters = [ 
     816                                [ 
     817                                        'from', 
     818                                        '*', 
     819                                        param 
     820                                ],               
     821                                [ 
     822                                'OR', 
     823                                'to', 
     824                                '*', 
     825                                param 
     826                        ], 
     827                                [ 
     828                                'OR', 
     829                                'subject', 
     830                                '*', 
     831                                param 
     832                        ], 
     833                        [ 
     834                                'OR', 
     835                                'folder', 
     836                                '*', 
     837                                folder 
     838                        ], 
     839                        [ 
     840                                'OR', 
     841                                'body', 
     842                                '*', 
     843                                param 
     844                        ] 
     845                    ]; 
     846                }else{ 
     847                        var filters = [ 
     848                                [ 
     849                                        'from', 
     850                                        '*', 
     851                                        param 
     852                                ],               
     853                                [ 
     854                                'OR', 
     855                                'to', 
     856                                '*', 
     857                                param 
     858                        ], 
     859                                [ 
     860                                'OR', 
     861                                'subject', 
     862                                '*', 
     863                                param 
     864                        ], 
     865                        [ 
     866                                'OR', 
     867                                'folder', 
     868                                '*', 
     869                                folder 
     870                        ] 
     871                    ]; 
     872                } 
     873                         
     874            var data = DataLayer.get( 'message', { filter: filters, criteria: { properties: { context: { folder: folder } } } }, true ); 
     875 
     876            if(DataLayer.criterias['message:jqGridSearch']){ 
     877                                delete DataLayer.criterias['message:jqGridSearch'];      
     878                        } 
     879 
     880                DataLayer.register( 'criterias', 'message:jqGridSearch', function( crit ){ 
     881                            crit.properties = { context: { folder: folder } }; 
     882 
     883                            return { filter: [ "msgNumber", "IN", data ], criteria: crit }; 
     884                        }); 
     885            if(typeof(data) == 'object'){ 
     886                                grid.jqGrid("clearGridData", true); 
     887                                grid.jqGrid('setGridParam',{datatype: "json", url: 'message:jqGridSearch'}).trigger("reloadGrid"); 
     888 
     889            }else{ 
     890                $("#mailgrid-container").find(".loading").hide(); 
     891                grid.jqGrid("clearGridData", true); 
     892            } 
     893        } 
     894 
     895                var search_messages = function(param){ 
     896            var grid = $("#message_attacher_grid"); 
     897            var folder = $("#foldertree li span.selected").parent().attr("id"); 
     898             
     899            if(param == ""){ 
     900                $('#foldertree [id="'+folder+'"]').trigger("click"); 
     901                return; 
     902            } 
     903            $(".attach-message-search-input").val(""); 
     904            if(folder.indexOf("local_messages_") == 0){ 
     905                // Pesquisa pelas mensagens locais... 
     906                msgs = search_local_messsages(param, folder); 
     907            } else { 
     908                // Pesquisa pelo Imap... 
     909                return search_imap_messages(param, folder); 
     910            } 
     911 
     912            // Monta as mensagens na grid... 
     913            grid.jqGrid("clearGridData", true); 
     914            grid.jqGrid('setGridParam',{datatype: "local",data: msgs}) 
     915            .trigger("reloadGrid"); 
     916            //.jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 
     917                } 
     918 
    518919                var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")]; 
    519920                $("#first_message_attacher_grid_pager").attr("title",title[0]); 
     
    521922                $("#next_message_attacher_grid_pager").attr("title",title[2]); 
    522923                $("#last_message_attacher_grid_pager").attr("title",title[3]); 
     924                $("#mailgrid-container .ui-jqgrid-titlebar") 
     925                .append( DataLayer.render("../prototype/modules/attach_message/attachment_search.ejs") ).find(".ui-jqgrid-titlebar-close").hide() 
     926                .end().find(".attach-message-search-input").Watermark("Pesquisa...").keydown(function(e){ 
     927                        var param = $(this).val(); 
     928                        if($.ui.keyCode.ENTER == e.keyCode){ 
     929                                $("#mailgrid-container").find(".loading").show("fast", function(){ 
     930                                        search_messages(param); 
     931                                }); 
     932                        } 
     933                         
     934                }).end().find(".attach-message-search-checkbox").click(function(){ 
     935            var msg; 
     936            if($(this).is(":checked")){ 
     937                msg = get_lang("take off this option to disregard the message body in the search."); 
     938            } else { 
     939                msg = get_lang("take on this option to regard the message body in the search."); 
     940            } 
     941            $(".attach-message-search-div .button-body-msg-title").attr("title",msg); 
     942        }); 
     943 
     944                $("#attach-message-search").button({ 
     945                        text: false, 
     946                        icons: { 
     947                                primary: "ui-icon-search" 
     948                        } 
     949                }).next().button({ 
     950                        text: false, 
     951                        icons: { 
     952                                primary: "ui-icon-script" 
     953                        } 
     954                }); 
     955                $("#attach-message-search").parent().buttonset(); 
     956 
     957                $("#attach-message-search").click(function(){ 
     958                        var param = $(this).parents(".attach-message-search-div:first").find(".attach-message-search-input").val(); 
     959                        $("#mailgrid-container").find(".loading").show("fast", function(){ 
     960                                search_messages(param); 
     961                        });      
     962                }); 
    523963        } 
    524964}); 
  • branches/2.5/prototype/modules/calendar/assetic.php

    r7664 r8232  
    8787 
    8888if (strpos($javaVersion,"java version") !== false){ 
    89     $filterManager->set('yui_js', $compressor);     
    90     $js->ensureFilter($filterManager->get('yui_js'));     
     89    $filterManager->set('yui_js', $compressor); 
     90    $js->ensureFilter($filterManager->get('yui_js')); 
    9191} 
    9292 
  • branches/2.5/prototype/modules/calendar/css/layout.css

    r7968 r8232  
    14081408        color: transparent; 
    14091409} 
    1410   
    1411 .occurrence-zebra{  
    1412     width: 440px !important;  
    1413 }  
     1410 
     1411.occurrence-zebra{ 
     1412    width: 440px !important; 
     1413} 
  • branches/2.5/prototype/modules/calendar/css/reset.css

    r5341 r8232  
    3333} 
    3434body { 
    35         line-height: 1; 
     35        /*line-height: 1;*/ 
    3636        color: black; 
    3737        background: white; 
  • branches/2.5/prototype/modules/calendar/css/style.css

    r8050 r8232  
    5151.new-event-win fieldset#calendar_addevent_details5 .button-files-upload, .new-task-win fieldset#calendar_addevent_details5 .button-files-upload{margin: 15px 0 0 0} 
    5252.new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset, .new-task-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 
    53 .new-event-win .creation-date-label{ white-space: nowrap; float: right;}  
     53.new-event-win .creation-date-label{ white-space: nowrap; float: right;} 
    5454 
    5555.new-activity-win fieldset { border: none; margin: 0; padding: 0; } 
     
    559559.div-addtask #calendar_addtask_details1 .subitem .done { width: 45px;} 
    560560 
    561 @-moz-document url-prefix() {.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -14px !important;}} 
    562  
    563 @media screen and (-webkit-min-device-pixel-ratio:0){.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;}} 
     561.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;;} 
     562/*@-moz-document url-prefix() {.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;}}*/ 
     563/*@media screen and (-webkit-min-device-pixel-ratio:0){.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;}}*/ 
    564564 
    565565.div-addtask #calendar_addtask_details1 .ui-spinner-buttons .ui-spinner-up{height: 7px !important;} 
  • branches/2.5/prototype/modules/calendar/interceptors/DAViCalAdapter.php

    r7799 r8232  
    206206        {   
    207207            $args =  Controller::parse( array( 'service' => 'iCal' ) , $data , $params); 
    208             ob_start();  
     208            ob_start(); 
    209209            include ROOTPATH.'/Sync.php'; 
    210210            ob_end_clean(); 
  • branches/2.5/prototype/modules/calendar/interceptors/DBMapping.php

    r8059 r8232  
    164164 
    165165    public function encodeSignatureAlarmType(&$uri, &$params, &$criteria, $original) { 
    166             $params['type'] = self::codeAlarmType($params['type']);  
    167     }  
    168   
    169     public function schedulableSecurity(&$uri, &$params, &$criteria, $original)  
     166            $params['type'] = self::codeAlarmType($params['type']); 
     167    } 
     168 
     169    public function schedulableSecurity(&$uri, &$params, &$criteria, $original) 
    170170    { 
    171   
    172         if( !isset($criteria['filter'][1]) || !$criteria['filter'][1] == 'uid')  
    173         {  
    174             $security = 'schedulable.id = calendarToSchedulable.schedulable';  
    175             $security .= ' AND calendar.id = calendarToSchedulable.calendar';  
    176             $security .= ' AND calendar.id = calendarSignature.calendar';  
    177             $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber'));  
    178   
    179             $criteria['condition'] = $security;  
    180         }  
    181    
    182     }  
    183   
    184     public function calendarSecurity(&$uri, &$params, &$criteria, $original)  
    185     {  
    186         $security = 'calendar.id = calendarSignature.calendar';  
    187         $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber'));  
    188   
    189         $criteria['condition'] = $security;  
    190     }  
    191   
    192     public function calendarSignatureSecurity(&$uri, &$params, &$criteria, $original)  
    193     {  
    194 //        $security = 'calendarSignature.user = ' . base64_encode(Config::me('uidNumber'));  
    195 //  
    196 //        $criteria['condition'] = $security;  
     171 
     172        if( !isset($criteria['filter'][1]) || !$criteria['filter'][1] == 'uid') 
     173        { 
     174            $security = 'schedulable.id = calendarToSchedulable.schedulable'; 
     175            $security .= ' AND calendar.id = calendarToSchedulable.calendar'; 
     176            $security .= ' AND calendar.id = calendarSignature.calendar'; 
     177            $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 
     178 
     179            $criteria['condition'] = $security; 
     180        } 
     181 
     182    } 
     183 
     184    public function calendarSecurity(&$uri, &$params, &$criteria, $original) 
     185    { 
     186        $security = 'calendar.id = calendarSignature.calendar'; 
     187        $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 
     188 
     189        $criteria['condition'] = $security; 
     190    } 
     191 
     192    public function calendarSignatureSecurity(&$uri, &$params, &$criteria, $original) 
     193    { 
     194//        $security = 'calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 
     195// 
     196//        $criteria['condition'] = $security; 
    197197    } 
    198198 
     
    347347        if (isset($original['properties']['exceptions'])) { 
    348348            $exceptions = explode(',', $original['properties']['exceptions']); 
    349             $event = Controller::read(array('concept' => 'schedulable', 'id' => $repeat['schedulable']));  
    350   
    351         if(array_key_exists(0, $event)) $event = $event[0];  
    352   
    353         $date = new DateTime('now', new DateTimeZone('UTC'));  
    354   
    355         foreach($exceptions as &$e){  
    356             $date->setTimestamp((int) ($e / 1000));  
    357             $date->setTimezone( new DateTimeZone( $event['timezone'] ));  
    358             $e = ($date->getTimestamp() - $date->getOffset()).'000';  
    359         }  
    360   
    361         unset($repeat['exceptions']);  
     349            $event = Controller::read(array('concept' => 'schedulable', 'id' => $repeat['schedulable'])); 
     350 
     351        if(array_key_exists(0, $event)) $event = $event[0]; 
     352 
     353        $date = new DateTime('now', new DateTimeZone('UTC')); 
     354 
     355        foreach($exceptions as &$e){ 
     356            $date->setTimestamp((int) ($e / 1000)); 
     357            $date->setTimezone( new DateTimeZone( $event['timezone'] )); 
     358            $e = ($date->getTimestamp() - $date->getOffset()).'000'; 
     359        } 
     360 
     361        unset($repeat['exceptions']); 
    362362        } 
    363363 
    364     unset($repeat['schedulable']);  
    365   
    366     $lastExceptions = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('AND', array('=', 'repeat', $id), array('=', 'exception', 1))));  
     364    unset($repeat['schedulable']); 
     365 
     366    $lastExceptions = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('AND', array('=', 'repeat', $id), array('=', 'exception', 1)))); 
    367367 
    368368        //Recurepa as execeções anteriores caso exista 
     
    379379        else if(!empty($exceptions)) 
    380380            Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES ('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" ); 
    381     }  
     381    } 
    382382 
    383383    public function checkOccurrences($start, $end, $calendarIds) { 
     
    428428 
    429429            foreach ($result as $id => $res){ 
    430   
    431             $ocurrences = array_unique($res);  
    432   
    433             /*  
    434              * Check current range decoded  
    435              * */  
    436             $current = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('=', 'repeat', $id)));  
    437             $toDiff = array();  
    438   
    439             if(!empty($current))  
    440                 foreach($current as $c) $toDiff[] = $c['occurrence'];  
    441   
    442             $ocurrences = array_diff($ocurrences, $toDiff);  
    443   
    444             if(!empty($ocurrences))  
     430 
     431            $ocurrences = array_unique($res); 
     432 
     433            /* 
     434             * Check current range decoded 
     435             * */ 
     436            $current = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('=', 'repeat', $id))); 
     437            $toDiff = array(); 
     438 
     439            if(!empty($current)) 
     440                foreach($current as $c) $toDiff[] = $c['occurrence']; 
     441 
     442            $ocurrences = array_diff($ocurrences, $toDiff); 
     443 
     444            if(!empty($ocurrences)) 
    445445                Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,occurrence)VALUES('" . $id . "','" . implode("'),('" . $id . "', '", $ocurrences) . "')"); 
    446   
    447         }  
     446 
     447        } 
    448448            $data = array(); 
    449449 
     
    471471        $result = array(); 
    472472        $params = array(); 
    473     $realResult = array();  
     473    $realResult = array(); 
    474474        foreach ($return as $ret) { 
    475475            $currentId = $ret['schedulable']; 
     
    483483        } 
    484484 
    485     foreach($result as $i => $v)  
    486     {  
    487         $calendarToCalendarObj = self::schedulable2calendarToObject($v['id']);  
    488             foreach($calendarToCalendarObj as $vv)  
    489             {  
    490                 $v['calendar'] = $vv['calendar_id'];  
    491                 $realResult[] = $v;  
    492             }  
    493     }  
    494   
    495         return( $realResult );  
     485    foreach($result as $i => $v) 
     486    { 
     487        $calendarToCalendarObj = self::schedulable2calendarToObject($v['id']); 
     488            foreach($calendarToCalendarObj as $vv) 
     489            { 
     490                $v['calendar'] = $vv['calendar_id']; 
     491                $realResult[] = $v; 
     492            } 
     493    } 
     494 
     495        return( $realResult ); 
    496496    } 
    497497 
     
    633633            //necessário para atulizar a atividade de composta pela tarefa aqui sendo atualizada 
    634634            if(isset($criteria['historic']['startTime']) || isset($criteria['historic']['endTime'])){ 
    635                 /*  
    636                  * Verify current task is built-in activity  
    637                  * */  
     635                /* 
     636                 * Verify current task is built-in activity 
     637                 * */ 
    638638                $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'task', $uri['id']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 
    639639                if(!empty($taskToActivity)){ 
     
    641641                    $isAllDay = 1; 
    642642 
    643                     /*  
    644                      * Get all task in activity  
    645                      * */  
    646                     $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $taskToActivity[0]['activity']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2));  
    647   
     643                    /* 
     644                     * Get all task in activity 
     645                     * */ 
     646                    $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $taskToActivity[0]['activity']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 
     647 
    648648                    if(!empty($activity)){ 
    649649                        $start = $params['startTime']; 
    650650                        $end = $params['endTime']; 
    651651                        foreach($taskToActivity as $t){ 
    652   
    653   
    654                             if($t['task']['id'] != $params['id']){  
    655                                 $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start;  
    656                                 $end = $t['task']['endTime'] > $end ? $t['task']['endTime'] : $end;  
    657                                 $isAllDay = (($isAllDay == 1) && ($t['task']['allDay'] == '1')) ? 1 : 0;  
    658                             }  
     652 
     653 
     654                            if($t['task']['id'] != $params['id']){ 
     655                                $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start; 
     656                                $end = $t['task']['endTime'] > $end ? $t['task']['endTime'] : $end; 
     657                                $isAllDay = (($isAllDay == 1) && ($t['task']['allDay'] == '1')) ? 1 : 0; 
     658                            } 
    659659                        } 
    660660 
     
    680680                } 
    681681            } 
    682             /*  
    683              * Clean historic not used  
    684              * */  
     682            /* 
     683             * Clean historic not used 
     684             * */ 
    685685            unset($criteria['historic']['endTime']); 
    686686            unset($criteria['historic']['rangeEnd']); 
     
    771771            } 
    772772        } 
    773     }  
    774   
    775     static function autoImportCalendar(&$uri, &$params, &$criteria, $original){  
    776         $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\'');  
    777   
    778   
    779         if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true')  
    780         {  
    781             if(isset($original['properties']) && isset($original['properties']['user'])  && isset($original['properties']['isOrganizer']) &&  $original['properties']['isOrganizer'] != '1')  
    782             {  
    783                 $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $original['properties']['user'])  )) );  
    784                 if(isset($defaultCalendar[0]) && $defaultCalendar[0]['value'] > 0)  
    785                 {  
    786                     Controller::create(array('concept' => 'calendarToSchedulable'),  
    787                         array('schedulable' => $original['properties']['schedulable'],  
    788                             'calendar' => $defaultCalendar[0]['value']  
    789                         )  
    790                     );  
    791                 }  
    792             }  
    793         }  
     773    } 
     774 
     775    static function autoImportCalendar(&$uri, &$params, &$criteria, $original){ 
     776        $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\''); 
     777 
     778 
     779        if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true') 
     780        { 
     781            if(isset($original['properties']) && isset($original['properties']['user'])  && isset($original['properties']['isOrganizer']) &&  $original['properties']['isOrganizer'] != '1') 
     782            { 
     783                $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $original['properties']['user'])  )) ); 
     784                if(isset($defaultCalendar[0]) && $defaultCalendar[0]['value'] > 0) 
     785                { 
     786                    Controller::create(array('concept' => 'calendarToSchedulable'), 
     787                        array('schedulable' => $original['properties']['schedulable'], 
     788                            'calendar' => $defaultCalendar[0]['value'] 
     789                        ) 
     790                    ); 
     791                } 
     792            } 
     793        } 
    794794    } 
    795795 
     
    913913    } 
    914914 
    915     public function getCalendarTask( $task ){  
    916   
    917         $sql = 'select co.calendar_id as "calendar" from calendar_to_calendar_object as "co", calendar_signature as "cs" where cs.user_uidnumber = '. Config::me('uidNumber')  
    918             .' AND cs.is_owner = 1 AND cs.calendar_id = co.calendar_id AND co.calendar_object_id = '. $task;  
    919   
    920   
    921         $returns = Controller::service('PostgreSQL')->execResultSql($sql);  
    922   
    923         return $returns[0]['calendar'];  
    924     }  
    925   
     915    public function getCalendarTask( $task ){ 
     916 
     917        $sql = 'select co.calendar_id as "calendar" from calendar_to_calendar_object as "co", calendar_signature as "cs" where cs.user_uidnumber = '. Config::me('uidNumber') 
     918            .' AND cs.is_owner = 1 AND cs.calendar_id = co.calendar_id AND co.calendar_object_id = '. $task; 
     919 
     920 
     921        $returns = Controller::service('PostgreSQL')->execResultSql($sql); 
     922 
     923        return $returns[0]['calendar']; 
     924    } 
     925 
    926926    //TODO: Remover apos suporte a deepness na api  
    927927    public function deepnessFindTask(&$uri, &$result, &$criteria, $original) { 
    928         if (isset($criteria['deepness']) && $criteria['deepness'] != 0){  
    929   
    930             foreach($result as &$value){  
    931   
     928        if (isset($criteria['deepness']) && $criteria['deepness'] != 0){ 
     929 
     930            foreach($result as &$value){ 
     931 
    932932                $value['task'] = Controller::read(array('concept' => 'schedulable', 'id' => $value['task'])); 
    933                 $value['task']['calendar'] = self::getCalendarTask( $value['task']['id'] );  
    934             }  
    935   
    936             return $result;  
    937         }  
     933                $value['task']['calendar'] = self::getCalendarTask( $value['task']['id'] ); 
     934            } 
     935 
     936            return $result; 
     937        } 
    938938    } 
    939939 
     
    972972                .'calendar_object.tzid as "timezone", calendar_to_calendar_object.calendar_id as "calendar" ' 
    973973                .'FROM calendar_object, calendar_to_calendar_object ' 
    974                 .'WHERE ( calendar_object.id = '. $criteria['schedulable'] .' AND calendar_to_calendar_object.calendar_object_id = calendar_object.id'  
    975                 .' AND calendar_to_calendar_object.calendar_id IN (select calendar_id from calendar_signature where calendar_signature.user_uidnumber = '. Config::me('uidNumber') .' )         )';  
     974                .'WHERE ( calendar_object.id = '. $criteria['schedulable'] .' AND calendar_to_calendar_object.calendar_object_id = calendar_object.id' 
     975                .' AND calendar_to_calendar_object.calendar_id IN (select calendar_id from calendar_signature where calendar_signature.user_uidnumber = '. Config::me('uidNumber') .' )         )'; 
    976976 
    977977            $params = Controller::service('PostgreSQL')->execResultSql($sql); 
    978   
    979             foreach( $params as &$event ){  
    980   
    981   
    982                 if(isset( $event['repeat'] ) && isset( $event['repeat']['id'] ) ){  
    983                     $occurrences = Controller::service('PostgreSQL')->execResultSql('SELECT DISTINCT occurrence FROM calendar_object as "c", calendar_repeat_occurrence as "o", calendar_repeat as "r" WHERE r.object_id = '. $event['id'] .' AND o.repeat_id = r.id ' );  
    984   
    985                     if($occurrences){  
    986                         $event['occurrences'] = array();  
    987   
    988                         foreach($occurrences as $o)  
    989                             $event['occurrences'][] = $o['occurrence'];  
    990                     }else  
    991                         unset( $event['occurrences'] );  
    992                 }  
    993             }  
     978 
     979            foreach( $params as &$event ){ 
     980 
     981 
     982                if(isset( $event['repeat'] ) && isset( $event['repeat']['id'] ) ){ 
     983                    $occurrences = Controller::service('PostgreSQL')->execResultSql('SELECT DISTINCT occurrence FROM calendar_object as "c", calendar_repeat_occurrence as "o", calendar_repeat as "r" WHERE r.object_id = '. $event['id'] .' AND o.repeat_id = r.id ' ); 
     984 
     985                    if($occurrences){ 
     986                        $event['occurrences'] = array(); 
     987 
     988                        foreach($occurrences as $o) 
     989                            $event['occurrences'][] = $o['occurrence']; 
     990                    }else 
     991                        unset( $event['occurrences'] ); 
     992                } 
     993            } 
    994994 
    995995            $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 
     
    10471047                if(isset( $v['occurrences'] ) && count( $v['occurrences'] ) > 0){ 
    10481048 
    1049                     $date->setTimestamp((int) ($v['startTime'] / 1000));  
    1050                     $date->setTimezone( new DateTimeZone( $v['timezone'] ));  
    1051   
     1049                    $date->setTimestamp((int) ($v['startTime'] / 1000)); 
     1050                    $date->setTimezone( new DateTimeZone( $v['timezone'] )); 
     1051 
    10521052                    foreach( $result[$i]['occurrences'] as &$o){ 
    10531053 
    1054                         $o = ($o + $date->getOffset()).'000';  
     1054                        $o = ($o + $date->getOffset()).'000'; 
    10551055 
    10561056                    } 
     
    14211421 
    14221422            Controller::delete(array('concept' => 'calendar', 'id' => $signature['calendar'])); 
    1423   
    1424         $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\'');  
    1425   
    1426         if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true')  
    1427         {  
    1428             $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value','id') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $signature['user'])  )) );  
    1429   
    1430   
    1431             if(isset($defaultCalendar[0])  && $defaultCalendar[0]['value'] == $signature['calendar'] )  
    1432             {  
    1433                 Controller::delete(array('concept' => 'modulePreference', 'id' => $defaultCalendar[0]['id']));  
    1434             }  
    1435         }  
    1436   
    1437         $permissions = Controller::find(array('concept' => 'calendarToPermission'), array('id'), array('filter' => array('=', 'calendar', $signature['calendar'])));  
    1438   
     1423 
     1424        $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\''); 
     1425 
     1426        if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true') 
     1427        { 
     1428            $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value','id') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $signature['user'])  )) ); 
     1429 
     1430 
     1431            if(isset($defaultCalendar[0])  && $defaultCalendar[0]['value'] == $signature['calendar'] ) 
     1432            { 
     1433                Controller::delete(array('concept' => 'modulePreference', 'id' => $defaultCalendar[0]['id'])); 
     1434            } 
     1435        } 
     1436 
     1437        $permissions = Controller::find(array('concept' => 'calendarToPermission'), array('id'), array('filter' => array('=', 'calendar', $signature['calendar']))); 
     1438 
    14391439                if($permissions && count($permissions) > 0){ 
    14401440                        $ids = array(); 
     
    15831583                } 
    15841584 
    1585                 if($i == 0)  
    1586                 {  
    1587                     $pref = array();  
    1588                     $pref['user'] = $_SESSION['wallet']['user']['uidNumber'];  
    1589                     $pref['value'] = $calCreated['id'];  
    1590                     $pref['name'] = 'dafaultImportCalendar' ;  
    1591                     $pref['module'] = 'expressoCalendar';  
    1592                     Controller::create(array('concept' => 'modulePreference'), $pref);  
    1593                 }  
    1594   
     1585                if($i == 0) 
     1586                { 
     1587                    $pref = array(); 
     1588                    $pref['user'] = $_SESSION['wallet']['user']['uidNumber']; 
     1589                    $pref['value'] = $calCreated['id']; 
     1590                    $pref['name'] = 'dafaultImportCalendar' ; 
     1591                    $pref['module'] = 'expressoCalendar'; 
     1592                    Controller::create(array('concept' => 'modulePreference'), $pref); 
     1593                } 
     1594 
    15951595                } 
    15961596            } else { 
     
    16141614 
    16151615                $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 
    1616   
    1617   
    1618             $pref = array();  
    1619             $pref['user'] = $_SESSION['wallet']['user']['uidNumber'];  
    1620             $pref['value'] = $calCreated['id'];  
    1621             $pref['name'] = 'dafaultImportCalendar' ;  
    1622             $pref['module'] = 'expressoCalendar';  
    1623             Controller::create(array('concept' => 'modulePreference'), $pref);  
    1624   
    1625   
     1616 
     1617 
     1618            $pref = array(); 
     1619            $pref['user'] = $_SESSION['wallet']['user']['uidNumber']; 
     1620            $pref['value'] = $calCreated['id']; 
     1621            $pref['name'] = 'dafaultImportCalendar' ; 
     1622            $pref['module'] = 'expressoCalendar'; 
     1623            Controller::create(array('concept' => 'modulePreference'), $pref); 
     1624 
     1625 
    16261626        } 
    16271627     
     
    16341634    //TODO - Criar conceito separado para participantes externos e remover o criterio notExternal 
    16351635    public function findExternalPaticipants(&$uri, &$result, &$criteria, $original) { 
    1636         if (Config::me('uidNumber') && !isset($criteria['notExternal'])) {  
    1637             $newuri['concept'] = 'user';  
    1638             $newuri['service'] = 'PostgreSQL';  
    1639   
    1640             $newCriteria = $original['criteria'];  
    1641             $valid = true;  
    1642   
    1643             $newCriteria['filter'] = array('AND', $newCriteria['filter'], array('=', 'owner', Config::me('uidNumber')));  
    1644             $externalUsers = Controller::find($newuri, $original['properties'] ? $original['properties'] : null, $newCriteria );  
    1645   
    1646             if (!is_array($result))  
    1647                 $result = array();  
    1648   
    1649             if (is_array($externalUsers)) {  
    1650                 foreach ($externalUsers as $i => $v)  
    1651                     $externalUsers[$i]['isExternal'] = '1';  
    1652             }  
    1653             else  
    1654                 $externalUsers = array();  
    1655   
    1656             $result = array_merge($result, $externalUsers);  
    1657   
    1658   
    1659             if(isset($original['criteria']['externalCatalogs']) &&  $original['criteria']['externalCatalogs'] == true)  
    1660             {  
    1661                 $externalCatalogs = self::findExternalCatalogContacts($original['criteria']['filter'][2]);  
    1662   
    1663                 foreach($externalCatalogs as $i => $v)  
    1664                 {  
    1665                     $exist = false;  
    1666                     foreach($result as $vv)  
    1667                     {  
    1668                         if($v['mail'] == $vv['mail'] )  
    1669                             $exist = true;  
    1670                     }  
    1671                     if(!$exist)  
    1672                         $result[] = $v;  
    1673                 }  
    1674             }  
    1675   
    1676   
    1677             if(isset($original['criteria']['personalContacts']) &&  $original['criteria']['personalContacts'] == true)  
    1678             {  
    1679                 $personalContacts = self::findPersonalContacts($original['criteria']['filter'][2]);  
    1680   
    1681                 foreach($personalContacts as $i => $v)  
    1682                 {  
    1683                     $exist = false;  
    1684                     foreach($result as $vv)  
    1685                     {  
    1686                         if($v['mail'] == $vv['mail'] )  
    1687                             $exist = true;  
    1688                     }  
    1689                     if(!$exist)  
    1690                         $result[] = $v;  
    1691                 }  
    1692             }  
    1693   
    1694             return $result ;  
    1695         }  
     1636        if (Config::me('uidNumber') && !isset($criteria['notExternal'])) { 
     1637            $newuri['concept'] = 'user'; 
     1638            $newuri['service'] = 'PostgreSQL'; 
     1639 
     1640            $newCriteria = $original['criteria']; 
     1641            $valid = true; 
     1642 
     1643            $newCriteria['filter'] = array('AND', $newCriteria['filter'], array('=', 'owner', Config::me('uidNumber'))); 
     1644            $externalUsers = Controller::find($newuri, $original['properties'] ? $original['properties'] : null, $newCriteria ); 
     1645 
     1646            if (!is_array($result)) 
     1647                $result = array(); 
     1648 
     1649            if (is_array($externalUsers)) { 
     1650                foreach ($externalUsers as $i => $v) 
     1651                    $externalUsers[$i]['isExternal'] = '1'; 
     1652            } 
     1653            else 
     1654                $externalUsers = array(); 
     1655 
     1656            $result = array_merge($result, $externalUsers); 
     1657 
     1658 
     1659            if(isset($original['criteria']['externalCatalogs']) &&  $original['criteria']['externalCatalogs'] == true) 
     1660            { 
     1661                $externalCatalogs = self::findExternalCatalogContacts($original['criteria']['filter'][2]); 
     1662 
     1663                foreach($externalCatalogs as $i => $v) 
     1664                { 
     1665                    $exist = false; 
     1666                    foreach($result as $vv) 
     1667                    { 
     1668                        if($v['mail'] == $vv['mail'] ) 
     1669                            $exist = true; 
     1670                    } 
     1671                    if(!$exist) 
     1672                        $result[] = $v; 
     1673                } 
     1674            } 
     1675 
     1676 
     1677            if(isset($original['criteria']['personalContacts']) &&  $original['criteria']['personalContacts'] == true) 
     1678            { 
     1679                $personalContacts = self::findPersonalContacts($original['criteria']['filter'][2]); 
     1680 
     1681                foreach($personalContacts as $i => $v) 
     1682                { 
     1683                    $exist = false; 
     1684                    foreach($result as $vv) 
     1685                    { 
     1686                        if($v['mail'] == $vv['mail'] ) 
     1687                            $exist = true; 
     1688                    } 
     1689                    if(!$exist) 
     1690                        $result[] = $v; 
     1691                } 
     1692            } 
     1693 
     1694            return $result ; 
     1695        } 
    16961696    } 
    16971697 
     
    18121812            && ($timestamp >= ~PHP_INT_MAX); 
    18131813    } 
    1814   
    1815     static function findExternalCatalogContacts( $search )  
    1816     {  
    1817             $result = array();  
    1818             $external_srcs = array();  
    1819             $external_mappings = array();  
    1820   
    1821             include_once dirname(__DIR__) .'/../../../contactcenter/setup/external_catalogs.inc.php';  
    1822   
    1823             $search = str_replace(' ', '*', $search) ;  
    1824             $search = '*' . $search . '*';  
    1825   
    1826             foreach($external_srcs as $i => $v)  
    1827             {  
    1828                 $con = ldap_connect($v['host']);  
    1829   
    1830                 ldap_set_option( $con , LDAP_OPT_PROTOCOL_VERSION , 3 );  
    1831   
    1832                 if( isset( $v['acc'] ) && isset( $v['pw'] ) )  
    1833                     ldap_bind( $con, $v['acc'], $v['pw'] );  
    1834   
    1835                 $fields = array();  
    1836                 $fields[] = $external_mappings[$i]['contact.names_ordered'][0];  
    1837                 $fields[] = $external_mappings[$i]['contact.connection.typeof_connection.contact_connection_type_name']['email'][0];  
    1838   
    1839                 $ldapFilter = '(&(objectClass='.$v['obj'].')(|('.$fields[0].'='.$search.')('.$fields[1].'='.$search.')))';  
    1840                 $sr =  ldap_search( $con, utf8_encode($v['dn']) , $ldapFilter , $fields );  
    1841                 if($sr)  
    1842                 {  
    1843                     $search = ldap_get_entries($con, $sr);  
    1844   
    1845                     for ($j = 0; $j < $search["count"]; ++$j) {  
    1846                         $tmp = array();  
    1847                         $tmp['name'] = $search[$j][$fields[0]][0];  
    1848                         $tmp['mail'] = $search[$j][$fields[1]][0];  
    1849                         $tmp['isExternal'] = '1';  
    1850   
    1851                         $result[] = $tmp;  
    1852                     }  
    1853                 }  
    1854             }  
    1855             return $result;  
    1856     }  
    1857   
    1858     static function findPersonalContacts($search_for)  
    1859     {  
    1860   
    1861               $query = 'select'  
    1862   
    1863                 . ' C.id_connection,'  
    1864                 . ' A.id_contact,'  
    1865                 . ' A.names_ordered,'  
    1866                 . ' A.alias,'  
    1867                 . ' A.birthdate,'  
    1868                 . ' A.sex,'  
    1869                 . ' A.pgp_key,'  
    1870                 . ' A.notes,'  
    1871                 . ' A.web_page,'  
    1872                 . ' A.corporate_name,'  
    1873                 . ' A.job_title,'  
    1874                 . ' A.department,'  
    1875                 . ' C.connection_name,'  
    1876                 . ' C.connection_value,'  
    1877                 . ' B.id_typeof_contact_connection,'  
    1878                 . ' phpgw_cc_contact_addrs.id_typeof_contact_address,'  
    1879                 . ' phpgw_cc_addresses.address1,'  
    1880                 . ' phpgw_cc_addresses.address2,'  
    1881                 . ' phpgw_cc_addresses.complement,'  
    1882                 . ' phpgw_cc_addresses.postal_code,'  
    1883                 . ' phpgw_cc_city.city_name,'  
    1884                 . ' phpgw_cc_state.state_name,'  
    1885                 . ' phpgw_cc_addresses.id_country'  
    1886             ;  
    1887   
    1888             $query .= ' from'  
    1889                 . ' phpgw_cc_contact A'  
    1890                 . ' inner join phpgw_cc_contact_conns B on ( A.id_contact = B.id_contact )'  
    1891                 . ' inner join phpgw_cc_connections C on ( B.id_connection = C.id_connection )'  
    1892                 . ' left join phpgw_cc_contact_addrs on ( A.id_contact = phpgw_cc_contact_addrs.id_contact )'  
    1893                 . ' left join phpgw_cc_addresses on ( phpgw_cc_contact_addrs.id_address = phpgw_cc_addresses.id_address )'  
    1894                 . ' left join phpgw_cc_city on ( phpgw_cc_addresses.id_city = phpgw_cc_city.id_city )'  
    1895                 . ' left join phpgw_cc_state on ( phpgw_cc_addresses.id_state = phpgw_cc_state.id_state)'  
    1896             ;  
    1897   
    1898             $query .= ' where '  
    1899                 . 'A.id_owner=' . Config::me('uidNumber')  
    1900                 . ' and lower(translate(names_ordered, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'  
    1901                 . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))';  
    1902   
    1903             //Se não existir parametro na busca, limita os usuarios no resultado da pesquisa.  
    1904             if(!$search_for){  
    1905                 $query .= 'LIMIT 11';  
    1906             }  
    1907   
    1908             $r = Controller::service('PostgreSQL')->execResultSql($query);  
    1909   
    1910   
    1911             $all_contacts = array();  
    1912             foreach( $r as $i => $object )  
    1913             {  
    1914                 if ( ! array_key_exists( $object[ 'id_contact' ], $all_contacts ) )  
    1915                     $all_contacts[ $object[ 'id_contact' ] ] = array(  
    1916                         'connection_value' => '',  
    1917                         'telephonenumber' => '',  
    1918                         'mobile' => '',  
    1919                         'cn' => '',  
    1920                         'id_contact' => '',  
    1921                         'id_connection' => '',  
    1922                         'alias' => '',  
    1923                         'birthdate' => '',  
    1924                         'sex' => '',  
    1925                         'pgp_key' => '',  
    1926                         'notes' => '',  
    1927                         'web_page' => '',  
    1928                         'corporate_name' => '',  
    1929                         'job_title' => '',  
    1930                         'department' => '',  
    1931                         'mail' => '',  
    1932                         'aternative-mail' => '',  
    1933                         'business-phone' => '',  
    1934                         'business-address' => '',  
    1935                         'business-complement' => '',  
    1936                         'business-postal_code' => '',  
    1937                         'business-city_name' => '',  
    1938                         'business-state_name' => '',  
    1939                         'business-id_country' => '',  
    1940                         'business-fax' => '',  
    1941                         'business-pager' => '',  
    1942                         'business-mobile' => '',  
    1943                         'business-address-2' => '',  
    1944                         'home-phone' => '',  
    1945                         'home-address' => '',  
    1946                         'home-complement' => '',  
    1947                         'home-postal_code' => '',  
    1948                         'home-city_name' => '',  
    1949                         'home-state_name' => '',  
    1950                         'home-fax' => '',  
    1951                         'home-pager' => '',  
    1952                         'home-address-2' => ''  
    1953   
    1954   
    1955                     );  
    1956   
    1957                 switch( $object[ 'id_typeof_contact_connection' ] )  
    1958                 {  
    1959                     case 1 :  
    1960                         $all_contacts[ $object[ 'id_contact' ] ][ 'connection_value' ] = $object[ 'connection_value' ];  
    1961                         switch ( strtolower( $object[ 'connection_name' ] ) )  
    1962                         {  
    1963                             case 'alternativo' :  
    1964                                 $all_contacts[ $object[ 'id_contact' ] ][ 'alternative-mail' ] = $object[ 'connection_value' ];  
    1965                                 break;  
    1966                             case 'principal' :  
    1967                                 $all_contacts[ $object[ 'id_contact' ] ][ 'mail' ] = $object[ 'connection_value' ];  
    1968                                 break;  
    1969                         }  
    1970                         break;  
    1971                     case 2 :  
    1972                         $all_contacts[ $object[ 'id_contact' ] ][ 'telephonenumber' ] = $object[ 'connection_value' ];  
    1973                         switch ( strtolower( $object[ 'connection_name' ] ) )  
    1974                         {  
    1975                             case 'casa' :  
    1976                                 $all_contacts[ $object[ 'id_contact' ] ][ 'home-phone' ] = $object[ 'connection_value' ];  
    1977                                 break;  
    1978                             case 'celular' :  
    1979                                 $all_contacts[ $object[ 'id_contact' ] ][ 'mobile' ] = $object[ 'connection_value' ];  
    1980                                 break;  
    1981                             case 'trabalho' :  
    1982                                 $all_contacts[ $object[ 'id_contact' ] ][ 'business-phone' ] = $object[ 'connection_value' ];  
    1983                                 break;  
    1984                             case 'fax' :  
    1985                                 $all_contacts[ $object[ 'id_contact' ] ][ 'home-fax' ] = $object[ 'connection_value' ];  
    1986                                 break;  
    1987                             case 'pager' :  
    1988                                 $all_contacts[ $object[ 'id_contact' ] ][ 'home-pager' ] = $object[ 'connection_value' ];  
    1989                                 break;  
    1990                             case 'celular corporativo' :  
    1991                                 $all_contacts[ $object[ 'id_contact' ] ][ 'business-mobile' ] = $object[ 'connection_value' ];  
    1992                                 break;  
    1993                             case 'pager corporativo' :  
    1994                                 $all_contacts[ $object[ 'id_contact' ] ][ 'business-pager' ] = $object[ 'connection_value' ];  
    1995                                 break;  
    1996                             case 'fax corporativo' :  
    1997                                 $all_contacts[ $object[ 'id_contact' ] ][ 'business-fax' ] = $object[ 'connection_value' ];  
    1998                                 break;  
    1999                         }  
    2000                         break;  
    2001                 }  
    2002   
    2003                 $all_contacts[ $object[ 'id_contact' ] ][ 'cn' ] = utf8_encode($object[ 'names_ordered' ]);  
    2004                 $all_contacts[ $object[ 'id_contact' ] ][ 'id_contact' ]    = $object[ 'id_contact' ];  
    2005                 $all_contacts[ $object[ 'id_contact' ] ][ 'id_connection' ] = $object[ 'id_connection' ];  
    2006                 $all_contacts[ $object[ 'id_contact' ] ][ 'alias' ]         = $object[ 'alias' ];  
    2007                 $all_contacts[ $object[ 'id_contact' ] ][ 'birthdate' ]         = $object[ 'birthdate' ];  
    2008                 $all_contacts[ $object[ 'id_contact' ] ][ 'sex' ]               = $object[ 'sex' ];  
    2009                 $all_contacts[ $object[ 'id_contact' ] ][ 'pgp_key' ]           = $object[ 'pgp_key' ];  
    2010                 $all_contacts[ $object[ 'id_contact' ] ][ 'notes' ]         = $object[ 'notes' ];  
    2011                 $all_contacts[ $object[ 'id_contact' ] ][ 'web_page' ]          = $object[ 'web_page' ];  
    2012                 $all_contacts[ $object[ 'id_contact' ] ][ 'corporate_name' ]= $object[ 'corporate_name' ];  
    2013                 $all_contacts[ $object[ 'id_contact' ] ][ 'job_title' ]         = $object[ 'job_title' ];  
    2014                 $all_contacts[ $object[ 'id_contact' ] ][ 'department' ]    = $object[ 'department' ];  
    2015   
    2016                 switch( $object[ 'id_typeof_contact_address' ] )  
    2017                 {  
    2018                     case 1 :  
    2019                         $all_contacts[ $object[ 'id_contact' ] ][ 'business-address' ]     = $object[ 'address1' ];  
    2020                         $all_contacts[ $object[ 'id_contact' ] ][ 'business-address-2' ]   = $object[ 'address2' ];  
    2021                         $all_contacts[ $object[ 'id_contact' ] ][ 'business-complement' ]  = $object[ 'complement' ];  
    2022                         $all_contacts[ $object[ 'id_contact' ] ][ 'business-postal_code' ] = $object[ 'postal_code' ];  
    2023                         $all_contacts[ $object[ 'id_contact' ] ][ 'business-city_name' ]   = $object[ 'city_name' ];  
    2024                         $all_contacts[ $object[ 'id_contact' ] ][ 'business-state_name' ]  = $object[ 'state_name' ];  
    2025                         $all_contacts[ $object[ 'id_contact' ] ][ 'business-id_country' ]  = $object[ 'id_country' ];  
    2026                         break;  
    2027                     case 2 :  
    2028                         $all_contacts[ $object[ 'id_contact' ] ][ 'home-address' ]     = $object[ 'address1' ];  
    2029                         $all_contacts[ $object[ 'id_contact' ] ][ 'home-address-2' ]   = $object[ 'address2' ];  
    2030                         $all_contacts[ $object[ 'id_contact' ] ][ 'home-complement' ]  = $object[ 'complement' ];  
    2031                         $all_contacts[ $object[ 'id_contact' ] ][ 'home-postal_code' ] = $object[ 'postal_code' ];  
    2032                         $all_contacts[ $object[ 'id_contact' ] ][ 'home-city_name' ]   = $object[ 'city_name' ];  
    2033                         $all_contacts[ $object[ 'id_contact' ] ][ 'home-state_name' ]  = $object[ 'state_name' ];  
    2034                         $all_contacts[ $object[ 'id_contact' ] ][ 'home-id_country' ]  = $object[ 'id_country' ];  
    2035                         break;  
    2036                 }  
    2037             }  
    2038             $all = array_values($all_contacts);  
    2039   
    2040             $result = array();  
    2041             foreach($all as $i => $v)  
    2042             {  
    2043                 if(!$v['mail']) continue;  
    2044   
    2045                 $tmp = array();  
    2046                 $tmp['mail'] = $v['mail'];  
    2047                 $tmp['name'] = $v['cn'];  
    2048                 $tmp['isExternal'] = '1';  
    2049                 $result[] = $tmp;  
    2050             }  
    2051   
    2052             return $result;  
    2053   
    2054     }  
     1814 
     1815    static function findExternalCatalogContacts( $search ) 
     1816    { 
     1817            $result = array(); 
     1818            $external_srcs = array(); 
     1819            $external_mappings = array(); 
     1820 
     1821            include_once dirname(__DIR__) .'/../../../contactcenter/setup/external_catalogs.inc.php'; 
     1822 
     1823            $search = str_replace(' ', '*', $search) ; 
     1824            $search = '*' . $search . '*'; 
     1825 
     1826            foreach($external_srcs as $i => $v) 
     1827            { 
     1828                $con = ldap_connect($v['host']); 
     1829 
     1830                ldap_set_option( $con , LDAP_OPT_PROTOCOL_VERSION , 3 ); 
     1831 
     1832                if( isset( $v['acc'] ) && isset( $v['pw'] ) ) 
     1833                    ldap_bind( $con, $v['acc'], $v['pw'] ); 
     1834 
     1835                $fields = array(); 
     1836                $fields[] = $external_mappings[$i]['contact.names_ordered'][0]; 
     1837                $fields[] = $external_mappings[$i]['contact.connection.typeof_connection.contact_connection_type_name']['email'][0]; 
     1838 
     1839                $ldapFilter = '(&(objectClass='.$v['obj'].')(|('.$fields[0].'='.$search.')('.$fields[1].'='.$search.')))'; 
     1840                $sr =  ldap_search( $con, utf8_encode($v['dn']) , $ldapFilter , $fields ); 
     1841                if($sr) 
     1842                { 
     1843                    $search = ldap_get_entries($con, $sr); 
     1844 
     1845                    for ($j = 0; $j < $search["count"]; ++$j) { 
     1846                        $tmp = array(); 
     1847                        $tmp['name'] = $search[$j][$fields[0]][0]; 
     1848                        $tmp['mail'] = $search[$j][$fields[1]][0]; 
     1849                        $tmp['isExternal'] = '1'; 
     1850 
     1851                        $result[] = $tmp; 
     1852                    } 
     1853                } 
     1854            } 
     1855            return $result; 
     1856    } 
     1857 
     1858    static function findPersonalContacts($search_for) 
     1859    { 
     1860 
     1861              $query = 'select' 
     1862 
     1863                . ' C.id_connection,' 
     1864                . ' A.id_contact,' 
     1865                . ' A.names_ordered,' 
     1866                . ' A.alias,' 
     1867                . ' A.birthdate,' 
     1868                . ' A.sex,' 
     1869                . ' A.pgp_key,' 
     1870                . ' A.notes,' 
     1871                . ' A.web_page,' 
     1872                . ' A.corporate_name,' 
     1873                . ' A.job_title,' 
     1874                . ' A.department,' 
     1875                . ' C.connection_name,' 
     1876                . ' C.connection_value,' 
     1877                . ' B.id_typeof_contact_connection,' 
     1878                . ' phpgw_cc_contact_addrs.id_typeof_contact_address,' 
     1879                . ' phpgw_cc_addresses.address1,' 
     1880                . ' phpgw_cc_addresses.address2,' 
     1881                . ' phpgw_cc_addresses.complement,' 
     1882                . ' phpgw_cc_addresses.postal_code,' 
     1883                . ' phpgw_cc_city.city_name,' 
     1884                . ' phpgw_cc_state.state_name,' 
     1885                . ' phpgw_cc_addresses.id_country' 
     1886            ; 
     1887 
     1888            $query .= ' from' 
     1889                . ' phpgw_cc_contact A' 
     1890                . ' inner join phpgw_cc_contact_conns B on ( A.id_contact = B.id_contact )' 
     1891                . ' inner join phpgw_cc_connections C on ( B.id_connection = C.id_connection )' 
     1892                . ' left join phpgw_cc_contact_addrs on ( A.id_contact = phpgw_cc_contact_addrs.id_contact )' 
     1893                . ' left join phpgw_cc_addresses on ( phpgw_cc_contact_addrs.id_address = phpgw_cc_addresses.id_address )' 
     1894                . ' left join phpgw_cc_city on ( phpgw_cc_addresses.id_city = phpgw_cc_city.id_city )' 
     1895                . ' left join phpgw_cc_state on ( phpgw_cc_addresses.id_state = phpgw_cc_state.id_state)' 
     1896            ; 
     1897 
     1898            $query .= ' where ' 
     1899                . 'A.id_owner=' . Config::me('uidNumber') 
     1900                . ' and lower(translate(names_ordered, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))' 
     1901                . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'; 
     1902 
     1903            //Se não existir parametro na busca, limita os usuarios no resultado da pesquisa. 
     1904            if(!$search_for){ 
     1905                $query .= 'LIMIT 11'; 
     1906            } 
     1907 
     1908            $r = Controller::service('PostgreSQL')->execResultSql($query); 
     1909 
     1910 
     1911            $all_contacts = array(); 
     1912            foreach( $r as $i => $object ) 
     1913            { 
     1914                if ( ! array_key_exists( $object[ 'id_contact' ], $all_contacts ) ) 
     1915                    $all_contacts[ $object[ 'id_contact' ] ] = array( 
     1916                        'connection_value' => '', 
     1917                        'telephonenumber' => '', 
     1918                        'mobile' => '', 
     1919                        'cn' => '', 
     1920                        'id_contact' => '', 
     1921                        'id_connection' => '', 
     1922                        'alias' => '', 
     1923                        'birthdate' => '', 
     1924                        'sex' => '', 
     1925                        'pgp_key' => '', 
     1926                        'notes' => '', 
     1927                        'web_page' => '', 
     1928                        'corporate_name' => '', 
     1929                        'job_title' => '', 
     1930                        'department' => '', 
     1931                        'mail' => '', 
     1932                        'aternative-mail' => '', 
     1933                        'business-phone' => '', 
     1934                        'business-address' => '', 
     1935                        'business-complement' => '', 
     1936                        'business-postal_code' => '', 
     1937                        'business-city_name' => '', 
     1938                        'business-state_name' => '', 
     1939                        'business-id_country' => '', 
     1940                        'business-fax' => '', 
     1941                        'business-pager' => '', 
     1942                        'business-mobile' => '', 
     1943                        'business-address-2' => '', 
     1944                        'home-phone' => '', 
     1945                        'home-address' => '', 
     1946                        'home-complement' => '', 
     1947                        'home-postal_code' => '', 
     1948                        'home-city_name' => '', 
     1949                        'home-state_name' => '', 
     1950                        'home-fax' => '', 
     1951                        'home-pager' => '', 
     1952                        'home-address-2' => '' 
     1953 
     1954 
     1955                    ); 
     1956 
     1957                switch( $object[ 'id_typeof_contact_connection' ] ) 
     1958                { 
     1959                    case 1 : 
     1960                        $all_contacts[ $object[ 'id_contact' ] ][ 'connection_value' ] = $object[ 'connection_value' ]; 
     1961                        switch ( strtolower( $object[ 'connection_name' ] ) ) 
     1962                        { 
     1963                            case 'alternativo' : 
     1964                                $all_contacts[ $object[ 'id_contact' ] ][ 'alternative-mail' ] = $object[ 'connection_value' ]; 
     1965                                break; 
     1966                            case 'principal' : 
     1967                                $all_contacts[ $object[ 'id_contact' ] ][ 'mail' ] = $object[ 'connection_value' ]; 
     1968                                break; 
     1969                        } 
     1970                        break; 
     1971                    case 2 : 
     1972                        $all_contacts[ $object[ 'id_contact' ] ][ 'telephonenumber' ] = $object[ 'connection_value' ]; 
     1973                        switch ( strtolower( $object[ 'connection_name' ] ) ) 
     1974                        { 
     1975                            case 'casa' : 
     1976                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-phone' ] = $object[ 'connection_value' ]; 
     1977                                break; 
     1978                            case 'celular' : 
     1979                                $all_contacts[ $object[ 'id_contact' ] ][ 'mobile' ] = $object[ 'connection_value' ]; 
     1980                                break; 
     1981                            case 'trabalho' : 
     1982                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-phone' ] = $object[ 'connection_value' ]; 
     1983                                break; 
     1984                            case 'fax' : 
     1985                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-fax' ] = $object[ 'connection_value' ]; 
     1986                                break; 
     1987                            case 'pager' : 
     1988                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-pager' ] = $object[ 'connection_value' ]; 
     1989                                break; 
     1990                            case 'celular corporativo' : 
     1991                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-mobile' ] = $object[ 'connection_value' ]; 
     1992                                break; 
     1993                            case 'pager corporativo' : 
     1994                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-pager' ] = $object[ 'connection_value' ]; 
     1995                                break; 
     1996                            case 'fax corporativo' : 
     1997                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-fax' ] = $object[ 'connection_value' ]; 
     1998                                break; 
     1999                        } 
     2000                        break; 
     2001                } 
     2002 
     2003                $all_contacts[ $object[ 'id_contact' ] ][ 'cn' ] = utf8_encode($object[ 'names_ordered' ]); 
     2004                $all_contacts[ $object[ 'id_contact' ] ][ 'id_contact' ]    = $object[ 'id_contact' ]; 
     2005                $all_contacts[ $object[ 'id_contact' ] ][ 'id_connection' ] = $object[ 'id_connection' ]; 
     2006                $all_contacts[ $object[ 'id_contact' ] ][ 'alias' ]         = $object[ 'alias' ]; 
     2007                $all_contacts[ $object[ 'id_contact' ] ][ 'birthdate' ]         = $object[ 'birthdate' ]; 
     2008                $all_contacts[ $object[ 'id_contact' ] ][ 'sex' ]               = $object[ 'sex' ]; 
     2009                $all_contacts[ $object[ 'id_contact' ] ][ 'pgp_key' ]           = $object[ 'pgp_key' ]; 
     2010                $all_contacts[ $object[ 'id_contact' ] ][ 'notes' ]         = $object[ 'notes' ]; 
     2011                $all_contacts[ $object[ 'id_contact' ] ][ 'web_page' ]          = $object[ 'web_page' ]; 
     2012                $all_contacts[ $object[ 'id_contact' ] ][ 'corporate_name' ]= $object[ 'corporate_name' ]; 
     2013                $all_contacts[ $object[ 'id_contact' ] ][ 'job_title' ]         = $object[ 'job_title' ]; 
     2014                $all_contacts[ $object[ 'id_contact' ] ][ 'department' ]    = $object[ 'department' ]; 
     2015 
     2016                switch( $object[ 'id_typeof_contact_address' ] ) 
     2017                { 
     2018                    case 1 : 
     2019                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-address' ]     = $object[ 'address1' ]; 
     2020                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-address-2' ]   = $object[ 'address2' ]; 
     2021                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-complement' ]  = $object[ 'complement' ]; 
     2022                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-postal_code' ] = $object[ 'postal_code' ]; 
     2023                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-city_name' ]   = $object[ 'city_name' ]; 
     2024                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-state_name' ]  = $object[ 'state_name' ]; 
     2025                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-id_country' ]  = $object[ 'id_country' ]; 
     2026                        break; 
     2027                    case 2 : 
     2028                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-address' ]     = $object[ 'address1' ]; 
     2029                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-address-2' ]   = $object[ 'address2' ]; 
     2030                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-complement' ]  = $object[ 'complement' ]; 
     2031                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-postal_code' ] = $object[ 'postal_code' ]; 
     2032                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-city_name' ]   = $object[ 'city_name' ]; 
     2033                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-state_name' ]  = $object[ 'state_name' ]; 
     2034                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-id_country' ]  = $object[ 'id_country' ]; 
     2035                        break; 
     2036                } 
     2037            } 
     2038            $all = array_values($all_contacts); 
     2039 
     2040            $result = array(); 
     2041            foreach($all as $i => $v) 
     2042            { 
     2043                if(!$v['mail']) continue; 
     2044 
     2045                $tmp = array(); 
     2046                $tmp['mail'] = $v['mail']; 
     2047                $tmp['name'] = $v['cn']; 
     2048                $tmp['isExternal'] = '1'; 
     2049                $result[] = $tmp; 
     2050            } 
     2051 
     2052            return $result; 
     2053 
     2054    } 
    20552055} 
    20562056 
  • branches/2.5/prototype/modules/calendar/interceptors/Notifications.php

    r8003 r8232  
    3434        if (Config::regGet('noAlarm') !== false) 
    3535            return; //Escapa notificações caso a flag de noAlarm esteja ativa. 
    36   
    37   
     36 
     37 
    3838 
    3939        $organizers = array(); //Cache Organizadores 
     
    9999            $psUpdated = Controller::find(array('concept' => 'participant'), false, array('deepness' => '1', 'filter' => array('IN', 'id', $updated))); 
    100100 
    101   
     101 
    102102            foreach ($psUpdated as $i => $pUpdated) { 
    103103                if ($pUpdated['isOrganizer'] == '1' && $pUpdated['delegatedFrom'] == '0'){ 
     
    491491 
    492492            if (count($part) > 0) 
    493         {  
    494             $from = false;  
    495             foreach($schedulable['participants'] as $v)  
    496             {  
    497                 if($v['isOrganizer'] == 1)  
    498                     $from =  $v;  
    499             }  
    500   
    501             self::sendMail($data, $ical, implode(',', $part), $subject, 'notify_cancel_body' , $from );  
    502         }  
     493        { 
     494            $from = false; 
     495            foreach($schedulable['participants'] as $v) 
     496            { 
     497                if($v['isOrganizer'] == 1) 
     498                    $from =  $v; 
     499            } 
     500 
     501            self::sendMail($data, $ical, implode(',', $part), $subject, 'notify_cancel_body' , $from ); 
     502        } 
    503503        } 
    504504    } 
     
    522522            $method = 'CANCEL'; 
    523523            $notificationType = 'Cancelamento de Calendario'; 
    524             $part = 'me';  
    525             self::mountStruture($schedulable['id'], $schedulable, false, $data, $subject, $ical, $part, $method, $notificationType);  
    526   
    527         $from = false;  
    528         foreach($schedulable['participants'] as $v)  
    529         {  
    530             if($v['isOrganizer'] == 1)  
    531                 $from =  $v;  
    532         }  
    533             self::sendMail($data, $ical, $participant['user']['mail'], $subject, 'notify_cancel_body' , $from);  
     524            $part = 'me'; 
     525            self::mountStruture($schedulable['id'], $schedulable, false, $data, $subject, $ical, $part, $method, $notificationType); 
     526 
     527        $from = false; 
     528        foreach($schedulable['participants'] as $v) 
     529        { 
     530            if($v['isOrganizer'] == 1) 
     531                $from =  $v; 
     532        } 
     533            self::sendMail($data, $ical, $participant['user']['mail'], $subject, 'notify_cancel_body' , $from); 
    534534        } 
    535535    } 
  • branches/2.5/prototype/modules/calendar/js/activity.helpers.js

    r7977 r8232  
    222222    } 
    223223    */ 
    224         UI.dialogs.addActivity.find('select[name="activityStatus"], input[name="allDay"]').removeAttr('disabled'); 
    225     canDiscardActivityDialog = true; 
    226          
    227         UI.dialogs.addActivity.children().find('form.form-addactivity').submit(); 
    228         UI.dialogs.addActivity.dialog("close"); 
     224        //Código o qual será chamado para o salvamento da Atividade.  
     225        var handler_save = function (objsToSave){  
     226                UI.dialogs.addActivity.find('select[name="activityStatus"], input[name="allDay"]').removeAttr('disabled');  
     227                canDiscardActivityDialog = true;  
     228 
     229                var activity_tst = DataLayer.form( UI.dialogs.addActivity.children().find('form') );  
     230                if(objsToSave)  
     231                        objsToSave[objsToSave.length] = activity_tst;  
     232                 
     233                else   
     234                        objsToSave = activity_tst;  
     235                DataLayer.put('schedulable', objsToSave);  
     236                  
     237                UI.dialogs.addActivity.dialog("close");  
     238        }  
     239 
     240        //Verifica se o grupo da atividade mudou  
     241        if (group.id != UI.dialogs.addActivity.children().find('form select[name="group"] :selected').val() && typeof group.id != 'undefined') {  
     242                //Janela de dialogo  
     243                $.Zebra_Dialog('Você alterou o grupo da atividade, deseja alterar também o grupo das tarefas pertencentes à essa atividade?', {  
     244                        'type':     'question',  
     245                        'overlay_opacity': '0.5',  
     246                        'modal': true,  
     247                        'buttons':  ['Não Alterar', 'Alterar'],  
     248                        'onClose':  function(clicked) {  
     249                                if(clicked == 'Não Alterar') {  
     250                                    
     251                                        handler_save();  
     252                                }else{  
     253                                        var objsToSave = [];  
     254                                        //percorre as tarefas da atividade para verificar se o grupo mudou  
     255                                        for(var t in objActivity.tasks){  
     256                                                if(typeof objActivity.tasks[t].group != 'undefined')  
     257                                                        if (objActivity.tasks[t].group != UI.dialogs.addActivity.children().find('form select[name="group"] :selected').val()){  
     258                                                                objActivity.tasks[t].group = UI.dialogs.addActivity.children().find('form select[name="group"] :selected').val();  
     259                                                                objsToSave[objsToSave.length] = {'calendar' : objActivity.tasks[t].group, 'id': t};  
     260                                                        }  
     261                                        }  
     262                                        handler_save(objsToSave);  
     263                                          
     264                                }  
     265                                  
     266                        }  
     267                });  
     268                                                  
     269          
     270        } else {  
     271                handler_save();  
     272        } 
    229273 
    230274}).end() 
     
    259303                    ['=', 'type', '2'],  
    260304                    ['>=','startTime', $.now()],  
    261                     ['in', 'calendar', [$('div.new-activity-win.active select[name="groupFilter"]').val()]]  
     305                    ['in', 'calendar', [$('div.new-activity-win.active select[name="groupFilter"]').val()]] 
    262306                ], criteria: {filterTasks: true, deepness: 2} 
    263307        }; 
     
    410454    updateActivity = false; 
    411455 
    412     var idTask = UI.dialogs.addActivity.find('input[name="idActivity"]').val();  
    413   
    414     getSchedulable( idTask );  
    415   
    416     var objActivity = DataLayer.get('schedulable:activity', idTask );  
     456    var idTask = UI.dialogs.addActivity.find('input[name="idActivity"]').val(); 
     457 
     458    getSchedulable( idTask ); 
     459 
     460    var objActivity = DataLayer.get('schedulable:activity', idTask ); 
    417461    var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8'); 
    418462    var blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1'); 
     
    673717            text: false 
    674718        }).click(function () { 
    675   
    676             var idTask = $(this).parents('li').find('input[name="idtask[]"]').val()  
    677             getSchedulable(idTask);  
    678             var task = DataLayer.get('schedulable:task', idTask);  
    679             taskDetails(task, true, '',true, null, true);  
     719 
     720            var idTask = $(this).parents('li').find('input[name="idtask[]"]').val() 
     721            getSchedulable(idTask); 
     722            var task = DataLayer.get('schedulable:task', idTask); 
     723            taskDetails(task, true, '',true, null, true); 
    680724        }) 
    681725        .addClass('tiny disable ui-button-disabled ui-state-disabled') 
  • branches/2.5/prototype/modules/calendar/js/calendar.codecs.js

    r8051 r8232  
    7575                        Calendar.currentView =  DataLayer.encode('schedulable:calendar', DataLayer.dispatch('modules/calendar/schedules', DataLayer.criteria('schedulable:calendar', {start: start,end: end}))  );   //DataLayer.get( 'schedulable:calendar', {start: start,end: end} ); 
    7676                    } 
    77              if( !!Calendar.currentView[ signature.calendar.id ])  
    78             {  
    79                 if(signature.hidden == true  )  
    80                     Calendar.currentView[ signature.calendar.id ].hidden = true;  
    81                 else  
    82                     Calendar.currentView[ signature.calendar.id ].hidden = false;  
    83             }  
    84   
     77 
     78            if( !!Calendar.currentView[ signature.calendar.id ]) 
     79            { 
     80                if(signature.hidden == true  ) 
     81                    Calendar.currentView[ signature.calendar.id ].hidden = true; 
     82                else 
     83                    Calendar.currentView[ signature.calendar.id ].hidden = false; 
     84            } 
     85 
    8586                    var view = Calendar.currentView[ signature.calendar.id ]; 
    86   
    87   
     87 
     88 
    8889                    callback( view && !view.hidden ? view : [] ); 
    8990                }, 
     
    211212 
    212213            Calendar.rerenderView(true); 
    213             if(updateActivity){  
    214   
    215                 DataLayer.remove('taskToActivity', false);  
     214            if(updateActivity){ 
     215 
     216                DataLayer.remove('taskToActivity', false); 
    216217                refreshTaskActivity(); 
    217             }  
    218   
     218            } 
     219 
    219220        }); 
    220221    } 
     
    624625                calendars: Calendar.calendars, 
    625626                calendar: objEvent.calendar, 
    626         occurrences: objEvent.occurrences,  
     627        occurrences: objEvent.occurrences, 
    627628                summary: objEvent.summary, 
    628629        type: !!objEvent.type ? objEvent.type : 1, 
     
    632633                startDate: Timezone.getDate( (objEvent.DayLigth ? objEvent.DayLigth.event.startTime : objEvent.startTime), 'start', objEvent.allDay , true), 
    633634        startHour: objEvent.DayLigth ? Timezone.getHour( objEvent.DayLigth.event.startTime) : Timezone.formateHour( objEvent.startTime ), 
    634         startUnixTime: objEvent.DayLigth ? objEvent.DayLigth.event.startTime : objEvent.startTime,  
     635        startUnixTime: objEvent.DayLigth ? objEvent.DayLigth.event.startTime : objEvent.startTime, 
    635636        endDate: Timezone.getDate( (objEvent.DayLigth ? objEvent.DayLigth.event.endTime : objEvent.endTime), 'end', objEvent.allDay , true), 
    636637                endHour: objEvent.DayLigth ? Timezone.getHour( objEvent.DayLigth.event.endTime) : Timezone.formateHour( objEvent.endTime ), 
     
    832833        location: objEvent.location, 
    833834        category: objEvent.category, 
    834         calendar: objEvent.calendar,  
     835        calendar: objEvent.calendar, 
    835836        taskStatus: objEvent.status, 
    836837        groups: Calendar.groups, 
     
    840841        description: objEvent.description, 
    841842        timezone: objEvent.timezone, 
    842         startUnixTime: objEvent.startTime,  
     843        startUnixTime: objEvent.startTime, 
    843844        timezones: Timezone.timezones, 
    844845        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     
    11891190                                        percentage: task.percentage, 
    11901191                                        priority: task.priority, 
    1191                                         summary: task.summary 
     1192                                        summary: task.summary, 
     1193                                        group: task.calendar 
    11921194                } 
    11931195 
     
    12171219        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
    12181220        priority: objEvent.priority, 
    1219         startUnixTime: objEvent.startTime,  
     1221        startUnixTime: objEvent.startTime, 
    12201222        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
    12211223        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     
    16371639        } 
    16381640 
    1639         var orderByStartUnixTime = function( a , b )  
    1640         {  
    1641             return parseInt(a.startUnixTime) > parseInt(b.startUnixTime);  
    1642         }  
    1643   
     1641        var orderByStartUnixTime = function( a , b ) 
     1642        { 
     1643            return parseInt(a.startUnixTime) > parseInt(b.startUnixTime); 
     1644        } 
     1645 
    16441646        for (var i=0; i < res.length; i++) { 
    1645   
    1646             if(Calendar.currentView[res[i].calendar].hidden == true)  
    1647                 continue;  
    1648   
     1647 
     1648            if(Calendar.currentView[res[i].calendar].hidden == true) 
     1649                continue; 
     1650 
    16491651                        res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 
    16501652                 
    16511653            var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 
    16521654            var endDate   = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 
    1653                    
     1655 
    16541656            var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 
    1655              
     1657 
    16561658            var occurrences = [  res[i].startUnixTime ]; 
    1657   
     1659 
    16581660            if( res[i].occurrences ) 
    16591661            { 
     
    16711673                }); 
    16721674 
    1673                 res2.startUnixTime = parseInt(occurrences[ii]);  
    1674   
     1675                res2.startUnixTime = parseInt(occurrences[ii]); 
     1676 
    16751677                if(res[i].repeat) 
    16761678                    res2.repeat = typeRepeat[res[i].repeat.frequency]; 
     
    16831685 
    16841686                dates[index].events.push(res2); 
    1685   
    1686                 dates[index].events = dates[index].events.sort(orderByStartUnixTime);  
     1687 
     1688                dates[index].events = dates[index].events.sort(orderByStartUnixTime); 
    16871689                   
    16881690            } 
     
    18121814                return (evt.editable == '1' ) ? 
    18131815                { 
     1816                    selectable: true, 
    18141817                    editable: true, 
    1815                     selectable: true, 
    18161818                    className: 'fullcalendar-context-menu  event-type-1 event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 
    18171819                } : { 
     
    18741876                                occurrence: occurrences[i], 
    18751877                                type: typeEvent, 
    1876                                 calendar: evt.calendar,  
    1877                 unanswered: evt.unanswered,  
     1878                                calendar: evt.calendar, 
     1879                unanswered: evt.unanswered, 
     1880                                status: evt.status 
    18781881                                }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? taskEditable(evt.id) : {editable: false, disableResizing: true, disableDragging: true})))); 
    18791882        } 
  • branches/2.5/prototype/modules/calendar/js/calendar.shared.js

    r7217 r8232  
    7575            }); 
    7676 
    77             DataLayer.commit(); 
    78             UI.dialogs.sharedCalendar.dialog("close"); 
     77            DataLayer.commit(false, false, function(result){ 
     78 
     79            /* 
     80             * Force clean cache 
     81             * */ 
     82            DataLayer.storage.cache = {}; 
     83            UI.dialogs.sharedCalendar.dialog("close"); 
     84 
     85        }); 
     86 
    7987        }; 
    8088 
     
    295303 
    296304    //Carrega os dados já cadastrados 
    297     var dataCurrent = DataLayer.get('calendarToPermission:detail', { 
    298         filter: ['=','calendar', calendarId]  ,  
    299         criteria: { 
    300             deepness: 2 
    301         } 
    302     }); 
    303     if(dataCurrent){ 
    304         for(var i = 0; i < dataCurrent.length; i++){ 
    305             if(dataCurrent[i].user == "0"){ 
    306                 UI.dialogs.sharedCalendar.find('input[name="isPublic"]').attr('checked', 'checked') 
    307                 .parent().find('.free-busy').toggleClass('hidden'); 
    308                 if(dataCurrent[i].acl['busy']) 
    309                     UI.dialogs.sharedCalendar.find('input[name="busy"]').attr('checked', 'checked'); 
    310             }else{ 
    311                 currentUsers[dataCurrent[i].user.id] = true; 
    312  
    313                 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 
    314                 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{ 
    315                     id: dataCurrent[i].user.id,  
    316                     name: dataCurrent[i].user.name,  
    317                     mail: dataCurrent[i].user.mail,  
    318                     acl:dataCurrent[i].acl,  
    319                     aclValue: dataCurrent[i].aclValues,  
    320                     current: true,  
    321                     idPermission: dataCurrent[i].id 
    322                 }])) 
    323                 .scrollTo('max'); 
    324                 $('li.not-user').remove(); 
    325                 callbackSharedCotactsAdd(); 
    326  
    327                 for (var f in dataCurrent[i].acl){ 
    328                     if(dataCurrent[i].acl[f]){ 
    329                         UI.dialogs.sharedCalendar.find('.'+f+':last').toggleClass('attendee-permissions-change-button') 
    330                         .find('span:first').toggleClass('attendee-permissions-change').end();   
    331                     } 
    332                 } 
    333             } 
    334         } 
    335     } 
     305    var loadOldData = function (calendar) 
     306    { 
     307        UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list').empty(); 
     308 
     309        var dataCurrent = DataLayer.get('calendarToPermission:detail', { 
     310            filter: ['=','calendar', calendar]  , 
     311            criteria: { 
     312                deepness: 2 
     313            } 
     314        }); 
     315 
     316        if(dataCurrent){ 
     317            for(var i = 0; i < dataCurrent.length; i++){ 
     318                if(dataCurrent[i].user == "0"){ 
     319                    UI.dialogs.sharedCalendar.find('input[name="isPublic"]').attr('checked', 'checked') 
     320                        .parent().find('.free-busy').toggleClass('hidden'); 
     321                    if(dataCurrent[i].acl['busy']) 
     322                        UI.dialogs.sharedCalendar.find('input[name="busy"]').attr('checked', 'checked'); 
     323                }else{ 
     324                    currentUsers[dataCurrent[i].user.id] = true; 
     325 
     326                    UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 
     327                        .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{ 
     328                            id: dataCurrent[i].user.id, 
     329                            name: dataCurrent[i].user.name, 
     330                            mail: dataCurrent[i].user.mail, 
     331                            acl:dataCurrent[i].acl, 
     332                            aclValue: dataCurrent[i].aclValues, 
     333                            current: true, 
     334                            idPermission: dataCurrent[i].id 
     335                        }])) 
     336                        .scrollTo('max'); 
     337                    $('li.not-user').remove(); 
     338                    callbackSharedCotactsAdd(); 
     339 
     340                    for (var f in dataCurrent[i].acl){ 
     341                        if(dataCurrent[i].acl[f]){ 
     342                            UI.dialogs.sharedCalendar.find('.'+f+':last').toggleClass('attendee-permissions-change-button') 
     343                                .find('span:first').toggleClass('attendee-permissions-change').end(); 
     344                        } 
     345                    } 
     346                } 
     347            } 
     348        } 
     349    } 
     350 
     351    loadOldData(calendarId); 
     352 
     353    //Bind calendar select change 
     354    var select = UI.dialogs.sharedCalendar.find('select[name="calendar"]'); 
     355    select.change(function() { 
     356        loadOldData(select.val()); 
     357    }); 
     358 
    336359    UI.dialogs.sharedCalendar.dialog('open'); 
    337360} 
     
    526549    for (var i = 0; i < Calendar.signatures.length; i++) 
    527550        if(Calendar.signatures[i].isOwner == "0"){ 
     551 
     552        /* 
     553        * Verificar se o Owner é um objeto caso ao contrário é realizado a busca e adicionado ao mesmo o uid 
     554        * */ 
     555        if (Calendar.signatures[i].permission.owner != "object"){ 
     556 
     557            var result = DataLayer.get('calendarToPermission', { 
     558                filter: ['AND', ['=','id', Calendar.signatures[i].permission.id]]  , 
     559                criteria: { 
     560                    deepness: 2 
     561                } 
     562            }, true); 
     563 
     564            Calendar.signatures[i].permission.owner = {}; 
     565            Calendar.signatures[i].permission.owner['uid'] = result[0].owner.uid; 
     566 
     567        } 
     568 
    528569            var dataCurrent = Calendar.signatures[i].calendar; 
    529570            currentCalendars[Calendar.signatures[i].permission.id] = { 
  • branches/2.5/prototype/modules/calendar/js/desktop.notification.js

    r7693 r8232  
    55    initDesktopNotificationAddon: function(){ 
    66                if(useDesktopNotification()){ 
    7  
     7                        if ($.cookie('no-notification') == 'true'){ 
     8                                return false; 
     9                        } 
    810                        if (!window.webkitNotifications && $.browser.mozilla) 
    911                        this.installDektopNotificationAddon(); 
    1012 
    1113                        if(window.webkitNotifications && window.webkitNotifications.checkPermission()){ 
    12                              if($.browser.safari){ 
     14                            if($.browser.safari){ 
    1315                     $.Zebra_Dialog('Deseja instalar o plugin de notificação desktop?', { 
    1416                        'custom_class': 'request-notification-permission', 
     
    1921 
    2022                    $('div.ZebraDialog.request-notification-permission a').click(function() { 
    21                         if($(this).html() == 'Sim') 
     23                        if($(this).html() == 'Sim'){ 
    2224                            window.webkitNotifications.requestPermission();        
     25                        }else if ($(this).html() == 'Não'){ 
     26                                $.cookie('no-notification','true'); 
     27                        } 
    2328                    }); 
    2429                }else 
    2530                    window.webkitNotifications.requestPermission(); 
    2631            } 
     32                }else{ 
     33                        $.cookie('no-notification',null); 
    2734                } 
    2835    }, 
     
    4047            } 
    4148        }; 
    42  
     49           ; 
    4350           InstallTrigger.install(params); 
    44  
    4551           return false; 
    4652    }, 
  • branches/2.5/prototype/modules/calendar/js/helpers.js

    r8059 r8232  
    111111        var end = $("#calendar").fullCalendar('getView').visEnd.getTime()/1000; 
    112112        var criteria = DataLayer.criteria("schedulable:calendar", {'start':start, 'end':end} ); 
    113   
    114     var data = DataLayer.encode('schedulable:print', DataLayer.dispatch('modules/calendar/schedules', criteria )  );  
     113 
     114    var data = DataLayer.encode('schedulable:print', DataLayer.dispatch('modules/calendar/schedules', criteria )  ); 
    115115 
    116116        if($("#calendar").fullCalendar('getView').name == "month"){                              
     
    163163        print.removeClass('fc-button-year'); 
    164164        print.removeClass('fc-corner-left'); 
    165         print.removeClass('fc-state-active');  
     165        print.removeClass('fc-state-active'); 
    166166        print.find('.fc-button-content').html('Imprimir'); 
    167167        $('.fc-header-right').append(print); 
     
    179179function eventDetails( objEvent, decoded, path, isMail, repeat, buttonClicked) 
    180180{ 
    181  
    182181    $('.qtip.qtip-blue').remove(); 
    183182 
    184183    attendees = {}; 
    185   
    186     if(!!objEvent.participants)  
    187     {  
    188         $.each(objEvent.participants ,function(index, value) {  
    189  
    190             var part = DataLayer.get('participant' , value );  
    191             var user = DataLayer.get('user' , part.user );  
    192   
    193             attendees[part.user] = user.name;  
    194         });  
    195     }  
    196   
     184 
     185    if(!!objEvent.participants) 
     186    { 
     187        $.each(objEvent.participants ,function(index, value) { 
     188 
     189            var part = DataLayer.get('participant' , value ); 
     190            var user = DataLayer.get('user' , part.user ); 
     191 
     192            attendees[part.user] = user.name; 
     193        }); 
     194    } 
     195 
    197196    if(path == undefined) 
    198197        path = ""; 
    199           
     198         
    200199    if( !decoded ) 
    201         objEvent = DataLayer.decode("schedulable:calendar", objEvent );  
    202   
    203         var dtstamp = objEvent.dtstamp;   
     200        objEvent = DataLayer.decode("schedulable:calendar", objEvent ); 
     201 
     202        var dtstamp = objEvent.dtstamp; 
    204203    if(!isMail) 
    205                 objEvent = DataLayer.encode( "schedulable:preview", objEvent );  
    206         if (!dtstamp)  
    207                 var date = new Date();  
    208         else  
    209                 var date = new Date(parseInt(dtstamp));  
    210         objEvent.creationDate = [];  
    211         objEvent.creationDate[0] = dateFormat(parseInt(dtstamp),'dd/mm/yyyy');  
    212         objEvent.creationDate[1] = date.getHours();  
    213         objEvent.creationDate[2] = date.getMinutes();     
    214       
     204                objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 
     205        if (!dtstamp) 
     206                var date = new Date(); 
     207        else 
     208                var date = new Date(parseInt(dtstamp)); 
     209        objEvent.creationDate = []; 
     210        objEvent.creationDate[0] = dateFormat(parseInt(dtstamp),'dd/mm/yyyy'); 
     211        objEvent.creationDate[1] = date.getHours(); 
     212        objEvent.creationDate[2] = date.getMinutes();    
     213     
    215214    if(typeof(objEvent.id) == 'undefined'){ 
    216215        objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
     
    270269        }).click(function () { 
    271270        var participant = DataLayer.get('participant' , $(this).parents('li').find('[type=checkbox]').val());  
    272             DataLayer.remove('participant', participant.id);  
     271        DataLayer.remove('participant', participant.id); 
     272         
    273273            if($(this).parent().find('.button.delegate').hasClass('attendee-permissions-change-button')){ 
    274274                removeOthers(); 
     
    278278                blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 
    279279            } 
     280                         
    280281            $(this).parents('li').remove(); 
    281282                         
    282283            if(blkAddAtendee.find(".attendee-list li").length == 1) 
    283284                blkAddAtendee.find("li.not-attendee").removeClass('hidden'); 
    284         delete attendees[participant.user];  
     285     delete attendees[participant.user]; 
    285286        }) 
    286287        .addClass('tiny disable ui-button-disabled ui-state-disabled') 
     
    467468    } 
    468469    ); 
     470         
     471                 
    469472} 
    470473 
     
    487490                        $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                
    488491                attendees  = {}; 
     492        DataLayer.rollback();//Limpa cache do datalayer 
    489493        }, 
    490494        beforeClose: function(event, ui) { 
     
    566570} 
    567571 
    568   
    569 dateSameValue = function(){  
    570     UI.dialogs.addEvent.find('input.start-date').datepicker({  
    571         dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'),  
    572         onSelect : function (selectedDate){  
    573             endDate = $(".end-date").val();  
    574             storeSelectedDate = selectedDate;  
    575   
    576             if ( User.preferences.dateFormat == "dd/MM/yyyy" || User.preferences.dateFormat == "dd-MM-yyyy" ) {  
    577                 if ( User.preferences.dateFormat == "dd/MM/yyyy" ) {  
    578                     selectedDate = selectedDate.split("/");  
    579                     endDate = endDate.split("/");  
    580                 } else if( User.preferences.dateFormat == "dd-MM-yyyy" ){  
    581                     selectedDate = selectedDate.split("-");  
    582                     endDate = endDate.split("-");  
    583                 }  
    584   
    585                 newDt = new Date(selectedDate[2],selectedDate[1], selectedDate[0]);  
    586                 endDate = new Date(endDate[2],endDate[1], endDate[0]);  
    587   
    588             } else if ( User.preferences.dateFormat == "MM/dd/yyyy" ) {  
    589                 selectedDate = selectedDate.split("/");  
    590                 endDate = endDate.split("/");  
    591   
    592                 newDt = new Date(selectedDate[2],selectedDate[0], selectedDate[1]);  
    593                 endDate = new Date(endDate[2],endDate[0], endDate[1]);  
    594             }  
    595   
    596             if( newDt > endDate )  
    597                 $(".end-date").val(storeSelectedDate);  
    598         },  
    599         onClose: function(){  
    600                 UI.dialogs.addEvent.find(".end-date").val(UI.dialogs.addEvent.find(".start-date").val());  
    601         }  
    602     });  
    603 }  
    604   
     572 
     573dateSameValue = function(){ 
     574    UI.dialogs.addEvent.find('input.start-date').datepicker({ 
     575        dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 
     576        onSelect : function (selectedDate){ 
     577            endDate = $(".end-date").val(); 
     578            storeSelectedDate = selectedDate; 
     579 
     580            if ( User.preferences.dateFormat == "dd/MM/yyyy" || User.preferences.dateFormat == "dd-MM-yyyy" ) { 
     581                if ( User.preferences.dateFormat == "dd/MM/yyyy" ) { 
     582                    selectedDate = selectedDate.split("/"); 
     583                    endDate = endDate.split("/"); 
     584                } else if( User.preferences.dateFormat == "dd-MM-yyyy" ){ 
     585                    selectedDate = selectedDate.split("-"); 
     586                    endDate = endDate.split("-"); 
     587                } 
     588 
     589                newDt = new Date(selectedDate[2],selectedDate[1], selectedDate[0]); 
     590                endDate = new Date(endDate[2],endDate[1], endDate[0]); 
     591 
     592            } else if ( User.preferences.dateFormat == "MM/dd/yyyy" ) { 
     593                selectedDate = selectedDate.split("/"); 
     594                endDate = endDate.split("/"); 
     595 
     596                newDt = new Date(selectedDate[2],selectedDate[0], selectedDate[1]); 
     597                endDate = new Date(endDate[2],endDate[0], endDate[1]); 
     598            } 
     599 
     600            if( newDt > endDate ) 
     601                $(".end-date").val(storeSelectedDate); 
     602        }, 
     603        onClose: function(){ 
     604                UI.dialogs.addEvent.find(".end-date").val(UI.dialogs.addEvent.find(".start-date").val()); 
     605        } 
     606    }); 
     607} 
     608 
    605609DataLayer.render( path+'templates/event_repeat.ejs', { 
    606610    event:objEvent 
     
    608612 
    609613    UI.dialogs.addEvent.find('#calendar_addevent_details3').html(repeatHtml); 
    610   
    611     dateSameValue();  
     614 
     615    dateSameValue(); 
    612616    $(".date").datepicker({ 
    613617                dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy') 
    614         });  
    615   
    616   
     618        }); 
     619 
     620 
    617621    if(objEvent.repeat)  
    618622    { 
     
    10101014}); 
    10111015 
    1012 dateSameValue();  
    1013   
    1014 var fixHour = function(){  
    1015     currentTimeStart = UI.dialogs.addEvent.find("input.start-time").val();  
    1016     UI.dialogs.addEvent.find("input.start-time").val(currentTimeStart.replace(".","").replace(".",""));  
    1017 }     
    1018   
    1019 var setTime = function( selectedDateTime ) {  
    1020     if ((selectedDateTime.value == '__:__') || (selectedDateTime.value == '__:__ __'))  
    1021           selectedDateTime.value = "";  
    1022     if(!(User.preferences.hourFormat.length == 5))  
    1023         $(this).val(selectedDateTime.replace(/[\.]/gi, ""));                                  
    1024     updateMap();  
    1025   
    1026     if( Date.parse(selectedDateTime) < Date.parse(oldTime) ) return true;  
    1027   
    1028     var time = selectedDateTime.split(":");  
    1029   
    1030     var hh = time[0];  
    1031     var mm = time[1].substring(0, 2);  
     1016dateSameValue(); 
     1017 
     1018var fixHour = function(){ 
     1019    currentTimeStart = UI.dialogs.addEvent.find("input.start-time").val(); 
     1020    UI.dialogs.addEvent.find("input.start-time").val(currentTimeStart.replace(".","").replace(".","")); 
     1021}    
     1022 
     1023var setTime = function( selectedDateTime ) { 
     1024    if ((selectedDateTime.value == '__:__') || (selectedDateTime.value == '__:__ __')) 
     1025          selectedDateTime.value = ""; 
     1026    if(!(User.preferences.hourFormat.length == 5)) 
     1027        $(this).val(selectedDateTime.replace(/[\.]/gi, ""));                                 
     1028    updateMap(); 
     1029 
     1030    if( Date.parse(selectedDateTime) < Date.parse(oldTime) ) return true; 
    10321031     
    1033        
    1034     dt = new Date();  
    1035     dt.setHours(hh, mm);  
    1036     var startHours = dt.getHours();  
    1037     add = parseInt(User.preferences.defaultDuration) + parseInt($("input.end-time").val().split(":")[1].substring(0,2));  
    1038     dt.addMinutes(add);  
     1032    var time = selectedDateTime.split(":"); 
     1033 
     1034    var hh = time[0]; 
     1035    var mm = time[1].substring(0, 2); 
     1036    
    10391037      
    1040   
    1041     var minutes = dt.getMinutes().toString();  
    1042     var hours = dt.getHours();  
    1043 UI.dialogs.addEvent.find("input.start-time").val(selectedDateTime.replace(".","").replace(".",""));  
    1044       
    1045       
    1046     if (time[1].indexOf("p.m.") != -1 ) {  
    1047         var startHours = startHours == 12 ? 12 : startHours;  
    1048         var startHours = startHours == 1 ? 13 : startHours;  
    1049         var startHours = startHours == 2 ? 14 : startHours;  
    1050         var startHours = startHours == 3 ? 15 : startHours;  
    1051         var startHours = startHours == 4 ? 16 : startHours;  
    1052         var startHours = startHours == 5 ? 17 : startHours;  
    1053         var startHours = startHours == 6 ? 18 : startHours;  
    1054         var startHours = startHours == 7 ? 19 : startHours;  
    1055         var startHours = startHours == 8 ? 20 : startHours;  
    1056         var startHours = startHours == 9 ? 21 : startHours;  
    1057         var startHours = startHours == 10 ? 22 : startHours;  
    1058         var startHours = startHours == 11 ? 23 : startHours;  
    1059     } else if (time[1].indexOf("a.m.") ) {  
    1060         var startHours = startHours == 12 ? 00 : startHours;  
    1061     }  
    1062   
    1063   
    1064     dtFormat = (time[1].indexOf("p.m.") != -1 || time[1].indexOf("a.m.") != -1) ? ((((User.preferences.defaultDuration / 60) + startHours) >= 12 && (startHours + (User.preferences.defaultDuration / 60)) < 24) ? " pm" : " am") : "";  
    1065          
    1066     var newHours = "";  
    1067     if(dtFormat){  
    1068         hours = hours == 13 ? 01 : hours;  
    1069         hours = hours == 14 ? 02 : hours;  
    1070         hours = hours == 15 ? 03 : hours;  
    1071         hours = hours == 16 ? 04 : hours;  
    1072         hours = hours == 17 ? 05 : hours;  
    1073         hours = hours == 18 ? 06 : hours;  
    1074         hours = hours == 19 ? 07 : hours;  
    1075         hours = hours == 20 ? 08 : hours;  
    1076         hours = hours == 21 ? 09 : hours;  
    1077         hours = hours == 22 ? 10 : hours;  
    1078         hours = hours == 23 ? 11 : hours;  
    1079         hours = hours == 24 ? 12 : hours;  
    1080     } else {  
    1081         newHours = hours <= 9 ? "0" : "";  
    1082     }  
    1083   
    1084     minutes = minutes.length == 1 ? "0"+minutes+dtFormat : minutes+dtFormat;  
    1085     newHours +=  hours.toString() + ":" +minutes;  
    1086     UI.dialogs.addEvent.find("input.end-time").val(newHours);  
    1087   
    1088 }  
    1089   
    1090     UI.dialogs.addEvent.find(".start-date").focusout(function(data){   
    1091         UI.dialogs.addEvent.find(".end-date").val($(this).val());  
    1092     });  
     1038    dt = new Date(); 
     1039    dt.setHours(hh, mm); 
     1040    var startHours = dt.getHours(); 
     1041    add = parseInt(User.preferences.defaultDuration) + parseInt($("input.end-time").val().split(":")[1].substring(0,2)); 
     1042    dt.addMinutes(add); 
     1043     
     1044 
     1045    var minutes = dt.getMinutes().toString(); 
     1046    var hours = dt.getHours(); 
     1047UI.dialogs.addEvent.find("input.start-time").val(selectedDateTime.replace(".","").replace(".","")); 
     1048     
     1049     
     1050    if (time[1].indexOf("p.m.") != -1 ) { 
     1051        var startHours = startHours == 12 ? 12 : startHours; 
     1052        var startHours = startHours == 1 ? 13 : startHours; 
     1053        var startHours = startHours == 2 ? 14 : startHours; 
     1054        var startHours = startHours == 3 ? 15 : startHours; 
     1055        var startHours = startHours == 4 ? 16 : startHours; 
     1056        var startHours = startHours == 5 ? 17 : startHours; 
     1057        var startHours = startHours == 6 ? 18 : startHours; 
     1058        var startHours = startHours == 7 ? 19 : startHours; 
     1059        var startHours = startHours == 8 ? 20 : startHours; 
     1060        var startHours = startHours == 9 ? 21 : startHours; 
     1061        var startHours = startHours == 10 ? 22 : startHours; 
     1062        var startHours = startHours == 11 ? 23 : startHours; 
     1063    } else if (time[1].indexOf("a.m.") ) { 
     1064        var startHours = startHours == 12 ? 00 : startHours; 
     1065    } 
     1066 
     1067 
     1068    dtFormat = (time[1].indexOf("p.m.") != -1 || time[1].indexOf("a.m.") != -1) ? ((((User.preferences.defaultDuration / 60) + startHours) >= 12 && (startHours + (User.preferences.defaultDuration / 60)) < 24) ? " pm" : " am") : ""; 
     1069        
     1070    var newHours = ""; 
     1071    if(dtFormat){ 
     1072        hours = hours == 13 ? 01 : hours; 
     1073        hours = hours == 14 ? 02 : hours; 
     1074        hours = hours == 15 ? 03 : hours; 
     1075        hours = hours == 16 ? 04 : hours; 
     1076        hours = hours == 17 ? 05 : hours; 
     1077        hours = hours == 18 ? 06 : hours; 
     1078        hours = hours == 19 ? 07 : hours; 
     1079        hours = hours == 20 ? 08 : hours; 
     1080        hours = hours == 21 ? 09 : hours; 
     1081        hours = hours == 22 ? 10 : hours; 
     1082        hours = hours == 23 ? 11 : hours; 
     1083        hours = hours == 24 ? 12 : hours; 
     1084    } else { 
     1085        newHours = hours <= 9 ? "0" : ""; 
     1086    } 
     1087 
     1088    minutes = minutes.length == 1 ? "0"+minutes+dtFormat : minutes+dtFormat; 
     1089    newHours +=  hours.toString() + ":" +minutes; 
     1090    UI.dialogs.addEvent.find("input.end-time").val(newHours); 
     1091 
     1092} 
     1093 
     1094    UI.dialogs.addEvent.find(".start-date").focusout(function(data){  
     1095        UI.dialogs.addEvent.find(".end-date").val($(this).val()); 
     1096    }); 
    10931097 
    10941098    var oldTime = UI.dialogs.addEvent.find('input.start-time').val(); 
    1095     $(".start-time").focusout(function(data){  
    1096         if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) {  
    1097             setTime( $(this).val() );  
    1098         }  
    1099     });  
    1100    
    1101     UI.dialogs.addEvent.find('input.start-time').timepicker({  
    1102         ampm : ((User.preferences.hourFormat.length > 5) ? true: false),  
    1103         timeFormat: "hh:mm tt",  
    1104         onSelect: function( selectedDateTime ){  
    1105             if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) {  
    1106                 if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) {  
    1107                     var selectedTime = selectedDateTime.split(":");  
    1108                     var endTime = UI.dialogs.addEvent.find(".end-time").val();  
    1109                     endTime = endTime.split(":");  
    1110   
    1111                     var t1 = new Date(false,false,false,selectedTime[0],selectedTime[1],false);  
    1112                     var t2 = new Date(false,false,false,endTime[0],endTime[1],false);  
    1113   
    1114                     if (t1 < t2) return true;  
    1115                 }  
    1116   
    1117                 setTime( selectedDateTime );  
    1118             }  
    1119         },  
    1120         onClose : function (selectedDateTime){  
    1121             fixHour();  
    1122         }  
    1123   
    1124     });  
    1125   
    1126  
    1127   
     1099    $(".start-time").focusout(function(data){ 
     1100        if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) { 
     1101            setTime( $(this).val() ); 
     1102        } 
     1103    }); 
     1104 
     1105    UI.dialogs.addEvent.find('input.start-time').timepicker({ 
     1106        ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 
     1107        timeFormat: "hh:mm tt", 
     1108        onSelect: function( selectedDateTime ){ 
     1109            if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) { 
     1110                if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) { 
     1111                    var selectedTime = selectedDateTime.split(":"); 
     1112                    var endTime = UI.dialogs.addEvent.find(".end-time").val(); 
     1113                    endTime = endTime.split(":"); 
     1114 
     1115                    var t1 = new Date(false,false,false,selectedTime[0],selectedTime[1],false); 
     1116                    var t2 = new Date(false,false,false,endTime[0],endTime[1],false); 
     1117 
     1118                    if (t1 < t2) return true; 
     1119                } 
     1120 
     1121                setTime( selectedDateTime ); 
     1122            } 
     1123        }, 
     1124        onClose : function (selectedDateTime){ 
     1125            fixHour(); 
     1126        } 
     1127 
     1128    }); 
     1129 
     1130 
     1131 
    11281132UI.dialogs.addEvent.find('input.end-time').timepicker({  
    11291133    closeText: 'Ok', 
     
    11381142                $(this).val(selectedDateTime.replace(/[\.]/gi, ""));                                                             
    11391143                updateMap(); 
    1140   
    1141         if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) {  
    1142             var startT = UI.dialogs.addEvent.find('input.start-time');  
    1143   
    1144             var lessZeroTime = function( sTime ) {  
    1145                 sTime = sTime.split(":");  
    1146                 sTime = new Date(false,false,false,sTime[0],sTime[1],false);  
    1147                 sTimeReady = parseInt(sTime.getHours() - (User.preferences.defaultDuration / 60));  
    1148   
    1149                 if( sTimeReady < 0 )  
    1150                     return false; // If the value is less than 0, return false.  
    1151                       
    1152                 return sTimeReady.toString().length == 1 ? "0"+sTimeReady+":00" : sTimeReady+":00";  
    1153             }  
    1154   
    1155             var hEnd = new Date(false,false,false,selectedDateTime.split(":")[0],selectedDateTime.split(":")[1],false);  
    1156             var hStart = new Date(false,false,false,startT.val().split(":")[0],startT.val().split(":")[1],false);  
    1157               
    1158             if ( hEnd <= hStart ){  
    1159                 var lessTime = lessZeroTime( selectedDateTime );  
    1160                 if ( !lessTime ){  
    1161                     startT.val( "00:00" );  
    1162                     return true;  
    1163                 }  
    1164                 startT.val( lessTime );  
    1165             }  
    1166         }  
     1144 
     1145        if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) { 
     1146            var startT = UI.dialogs.addEvent.find('input.start-time'); 
     1147 
     1148            var lessZeroTime = function( sTime ) { 
     1149                sTime = sTime.split(":"); 
     1150                sTime = new Date(false,false,false,sTime[0],sTime[1],false); 
     1151                sTimeReady = parseInt(sTime.getHours() - (User.preferences.defaultDuration / 60)); 
     1152 
     1153                if( sTimeReady < 0 ) 
     1154                    return false; // If the value is less than 0, return false. 
     1155                     
     1156                return sTimeReady.toString().length == 1 ? "0"+sTimeReady+":00" : sTimeReady+":00"; 
     1157            } 
     1158 
     1159            var hEnd = new Date(false,false,false,selectedDateTime.split(":")[0],selectedDateTime.split(":")[1],false); 
     1160            var hStart = new Date(false,false,false,startT.val().split(":")[0],startT.val().split(":")[1],false); 
     1161             
     1162            if ( hEnd <= hStart ){ 
     1163                var lessTime = lessZeroTime( selectedDateTime ); 
     1164                if ( !lessTime ){ 
     1165                    startT.val( "00:00" ); 
     1166                    return true; 
     1167                } 
     1168                startT.val( lessTime ); 
     1169            } 
     1170        } 
    11671171    }, 
    11681172    onClose : function (selectedDateTime){ 
    11691173        if(!(User.preferences.hourFormat.length == 5)) 
    11701174            $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
    1171     fixHour();  
     1175    fixHour(); 
    11721176    }, 
     1177 
    11731178    beforeShow: function (selectedDateTime) { 
    11741179                if ((selectedDateTime.value == '__:__') || (selectedDateTime.value == '__:__ __')) 
     
    12161221var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', { 
    12171222    event:objEvent 
    1218 }); 
     1223});              
    12191224         
    12201225// load template of attendees 
    12211226var blkAddAtendee = UI.dialogs.addEvent.find('#calendar_addevent_details6').append(attendeeHtml); 
    1222 if(objEvent.attendee.length) 
     1227if(objEvent.attendee.length)  
    12231228                callbackAttendee();  
    12241229/** 
     
    15981603            if ($(event.target).is('input')) { 
    15991604                old_item = $(event.target).parents('li'); 
    1600   
    1601         var  userId = old_item.find('.id').html();  
    1602   
    1603         if(userId == '')  
    1604         {  
    1605            var  userId = DataLayer.put('user', {  
    1606                 name: old_item.find('.name').html(),  
    1607                 mail: old_item.find('.mail').html(),  
    1608                 isExternal: '1'  
    1609             });  
    1610         }  
    1611   
     1605 
     1606        var  userId = old_item.find('.id').html(); 
     1607 
     1608        if(userId == '') 
     1609        { 
     1610           var  userId = DataLayer.put('user', { 
     1611                name: old_item.find('.name').html(), 
     1612                mail: old_item.find('.mail').html(), 
     1613                isExternal: '1' 
     1614            }); 
     1615        } 
     1616 
    16121617                newAttendeeId = DataLayer.put('participant', { 
    16131618                    user: userId, 
     
    17681773        DataLayer.render( 'templates/preferences_calendar.ejs', { 
    17691774            preferences:User.preferences,  
    1770             calendars: Calendar.calendars,  
    1771         signatureOf : Calendar.signatureOf  
     1775            calendars: Calendar.calendars, 
     1776        signatureOf : Calendar.signatureOf 
    17721777            }, function( template ){ 
    17731778            var tabPrefCalendar = jQuery('#preference_tab').html( template ).find('.preferences-win'); 
    17741779                 
    1775             tabPrefCalendar.find('select[name="defaultCalendar"] option[value="'+User.preferences.defaultCalendar+'"]').attr('selected','selected').trigger('change');  
     1780            tabPrefCalendar.find('select[name="defaultCalendar"] option[value="'+User.preferences.defaultCalendar+'"]').attr('selected','selected').trigger('change');  
    17761781        tabPrefCalendar.find('select[name="dafaultImportCalendar"] option[value="'+User.preferences.dafaultImportCalendar+'"]').attr('selected','selected').trigger('change');  
    1777   
    1778         DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){  
    1779  
     1782 
     1783            DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 
    17801784                tabPrefCalendar.find('select[name="timezone"]').html(timezones_options).find('option[value="'+User.preferences.timezone+'"]').attr('selected','selected').trigger('change'); 
    17811785            }); 
     
    21032107 
    21042108function getSelectedCalendars( reverse, type ){ 
    2105     var selector = !!type ? "div.my-groups-task .calendar-view" : "div.my-calendars .calendar-view, div.signed-calendars .calendar-view";  
    2106     var returns = [];  
    2107   
    2108     $.each( $(selector), function(i , c){  
    2109   
    2110         if( reverse ? !c.checked : c.checked )  
    2111             returns.push( c.value );  
    2112   
     2109 
     2110    var selector = ""; 
     2111 
     2112    switch(type) 
     2113    { 
     2114        case 0: 
     2115            selector = "div.my-calendars .calendar-view, div.signed-calendars .calendar-view"; 
     2116            break; 
     2117        case 1: 
     2118            selector = "div.my-groups-task .calendar-view"; 
     2119            break; 
     2120        case 2: 
     2121            selector = ".calendar-view"; 
     2122            break; 
     2123    } 
     2124 
     2125//  var selector = !!type ? "div.my-groups-task .calendar-view" : "div.my-calendars .calendar-view, div.signed-calendars .calendar-view"; 
     2126    var returns = []; 
     2127 
     2128    $.each( $(selector), function(i , c){ 
     2129 
     2130        if( reverse ? !c.checked : c.checked ) 
     2131            returns.push( c.value ); 
     2132 
    21132133    }); 
    2114   
    2115     if (!returns.length)  
    2116             return false;  
    2117   
    2118     return returns;  
     2134 
     2135    if (!returns.length) 
     2136            return false; 
     2137 
     2138    return returns; 
    21192139} 
    21202140 
     
    21732193                var schudableDecode = DataLayer.encode( "schedulable:preview", schedulable); 
    21742194                var me = schudableDecode.me.user ? schudableDecode.me.user.id : schudableDecode.me.id; 
    2175  
    2176         var filter = {filter: ['AND', ['=','id',eventId], ['=','calendar',idCalendar], ['=','user', me]]}; 
    2177  
     2195        var filter = {filter: ['AND', ['=','id',eventId], ['=','calendar',idCalendar], ['=','user', me] ] }; 
    21782196        if(type) 
    21792197            filter.filter.push(['=','type',type]); 
    2180  
    21812198                DataLayer.removeFilter('schedulable', filter); 
    21822199                Calendar.rerenderView(true); 
     
    23062323                 
    23072324        }); 
    2308   
    2309      $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();});          
     2325 
     2326     $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();}); 
    23102327         
    23112328 
     
    24792496        show_modal_search_shared(); 
    24802497    }); 
    2481          
    2482          
     2498                 
     2499 
    24832500    meu_container.find('.title-signed-calendars').click(function(evt){ 
    24842501        var status = $(this).parent().find('.status-list-shared'); 
     
    24912508                 
    24922509    $('.calendar-view').click(function(evt){ 
    2493   
    2494         var checkBox = $(this);  
    2495         var calendarId = $(this).val();  
    2496   
    2497         Calendar.signatureOf[ calendarId ].hidden =  (checkBox.is(':checked') ? 0 : 1 );  
    2498   
    2499         DataLayer.put('calendarSignature', {id: Calendar.signatureOf[ calendarId ].id , hidden: Calendar.signatureOf[ calendarId ].hidden }  );  
    2500         DataLayer.commit();  
    2501   
    2502   
    2503          if($tabs.tabs('option' ,'selected') == 0){  
    2504   
    2505              if(Calendar.currentView && !!Calendar.currentView[ calendarId ]){  
    2506   
    2507                  Calendar.currentView[ calendarId ].hidden = !checkBox.is(':checked');  
    2508                  $('#calendar').fullCalendar( 'refetchEvents' );  
    2509              }  
    2510   
    2511          }else{  
    2512              type = $tabs.tabs('option' ,'selected');  
    2513              type = type > 2 ? 2 : (type - 1)  
    2514   
    2515              pageselectCallback('', 0, false, type);  
    2516          }  
     2510 
     2511        var checkBox = $(this); 
     2512        var calendarId = $(this).val(); 
     2513 
     2514        Calendar.signatureOf[ calendarId ].hidden =  (checkBox.is(':checked') ? 0 : 1 ); 
     2515 
     2516        DataLayer.put('calendarSignature', {id: Calendar.signatureOf[ calendarId ].id , hidden: Calendar.signatureOf[ calendarId ].hidden }  ); 
     2517        DataLayer.commit(); 
     2518 
     2519 
     2520         if($tabs.tabs('option' ,'selected') == 0){ 
     2521 
     2522             if(Calendar.currentView && !!Calendar.currentView[ calendarId ]){ 
     2523 
     2524                 Calendar.currentView[ calendarId ].hidden = !checkBox.is(':checked'); 
     2525                 $('#calendar').fullCalendar( 'refetchEvents' ); 
     2526             } 
     2527 
     2528         }else{ 
     2529             type = $tabs.tabs('option' ,'selected'); 
     2530             type = type > 2 ? 2 : (type - 1) 
     2531 
     2532             pageselectCallback('', 0, false, type); 
     2533         } 
    25172534    }); 
    25182535}); 
     
    26242641            $(this).addClass('fc-state-hover'); 
    26252642        }, 
    2626   
     2643 
    26272644        function(){ 
    26282645            $(this).removeClass('fc-state-hover'); 
     
    26582675        else 
    26592676            pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1), view, type); 
    2660     });  
    2661     if (currentView == "#tab_events_list_" || currentView == "#tab_tasks_list_")  
    2662         $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-left').find('span.fc-button-agendaWeek, span.fc-button-agendaDay').remove();  
     2677    }); 
     2678    if (currentView == "#tab_events_list_" || currentView == "#tab_tasks_list_") 
     2679        $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-left').find('span.fc-button-agendaWeek, span.fc-button-agendaDay').remove(); 
    26632680} 
    26642681 
     
    27252742        case 'agendaWeek': 
    27262743            var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]);  
    2727             var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]);  
    2728             dateEnd.setHours(0,0,0);  
    2729             dateStart.setHours(0,0,0);   
     2744            var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 
     2745            dateEnd.setHours(0,0,0); 
     2746            dateStart.setHours(0,0,0); 
    27302747            rangeStart = dateStart.add({ days: (7 * page_index) }).getTime(); 
    27312748            rangeEnd = dateEnd.add({ days: (7 * page_index)+7 }).getTime(); 
     
    27392756            var dateStart = new Date().add({ years: page_index }); 
    27402757            var dateEnd = new Date().add({ years: page_index }); 
    2741             dateEnd.setHours(0,0,0);  
    2742             dateStart.setHours(0,0,0);  
     2758            dateEnd.setHours(0,0,0); 
     2759            dateStart.setHours(0,0,0); 
    27432760            if(dateStart.getMonth() != 0) 
    27442761                    dateStart.moveToMonth(0, -1) 
     
    28042821            }; 
    28052822        } 
    2806           
     2823         
    28072824        var results = DataLayer.encode('schedulable:list', DataLayer.dispatch('modules/calendar/schedules', criteria)); 
    2808         //var results = DataLayer.get('schedulable:detail', criteria); 
     2825        //var results = DataLayer.get('schedulable:detail', criteria); 
    28092826        keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 
    28102827        } 
     
    28582875                                var eventId = $(this).siblings('[name="eventid"]').val(); 
    28592876                                var calendarId = $(this).siblings('[name="calendarid"]').val(); 
    2860                                 remove_event(eventId, calendarId, 2); 
     2877                                remove_event(eventId, calendarId, ( $(this).siblings('[name="eventtype"]').val() )); 
    28612878                                event.stopImmediatePropagation() 
    28622879                        }) 
     
    31313148        delete schedulable['historic']; 
    31323149 
    3133         schedulable.participants =  $.map( participants, function( attendee, i ){  
    3134   
    3135             var participant = DataLayer.get('participant', attendee, false);  
    3136   
    3137             if(typeof(participant) == 'array')  
    3138                 participant = participant[0];  
    3139   
    3140             if(owner.id != participant.user)  
    3141                 delete participant.status;  
    3142   
    3143             delete participant.delegatedFrom;  
    3144             delete participant.id;  
    3145             delete participant.schedulable;  
    3146   
    3147             participant.id = DataLayer.put('participant', participant);  
    3148   
    3149             return  (parseInt(type) == 3) ? participant.id : participant ;  
    3150         });  
    3151   
     3150        schedulable.participants =  $.map( participants, function( attendee, i ){ 
     3151 
     3152            var participant = DataLayer.get('participant', attendee, false); 
     3153 
     3154            if(typeof(participant) == 'array') 
     3155                participant = participant[0]; 
     3156 
     3157            if(owner.id != participant.user) 
     3158                delete participant.status; 
     3159 
     3160            delete participant.delegatedFrom; 
     3161            delete participant.id; 
     3162            delete participant.schedulable; 
     3163 
     3164            participant.id = DataLayer.put('participant', participant); 
     3165 
     3166            return  (parseInt(type) == 3) ? participant.id : participant ; 
     3167        }); 
     3168 
    31523169        //Edit ocurrence 
    31533170        if(parseInt(type) == 3){ 
  • branches/2.5/prototype/modules/calendar/js/init.js

    r8054 r8232  
    317317                axisFormat: User.preferences.hourFormat, 
    318318                eventSources: Calendar.sources, 
    319  
     319                 
    320320                header: { 
    321321                        left: 'prev,next today,agendaWeek,' + ((User.preferences.defaultCalView == "basicDay") ? "basicDay" : "agendaDay"), 
     
    353353                }, 
    354354 
    355  
    356355        eventRender: function( event, element, view ){ 
    357356                    $('#calendar td.fc-year-have-event').removeClass('fc-year-have-event'); 
    358357 
    359358                        var img_icon = ""; 
    360   
    361             if( !!parseInt(event.unanswered)  ){  
    362   
    363                 img_icon = "mini-attention.png";  
    364   
    365             }else{  
    366   
    367                         if(event.type == 1) 
    368                                 img_icon = "mini-event.png"; 
    369                         if(event.type == 2) 
    370                                 img_icon = "mini-task.png"; 
    371                         if(event.type == 3) 
    372                                 img_icon = "mini-activity.png"; 
    373  
    374         } 
    375                  
    376             element.find(".fc-event-inner.fc-event-skin").prepend($('<img style="width: 11px; height: 13px;" class="" src="../prototype/modules/calendar/img/' + img_icon + '"></img>')); 
     359                        var status_ball = ""; //nome da imagem a ser inserida 
     360                        var status_img = ""; 
     361 
     362            if( !!parseInt(event.unanswered) && event.type == 1 ){ 
     363 
     364                img_icon = "mini-attention.png"; 
     365 
     366            }else{ 
     367 
     368                if(event.type == 1) 
     369                    img_icon = "mini-event.png"; 
     370                if(event.type == 2) 
     371                    img_icon = "mini-task.png"; 
     372                if(event.type == 3) 
     373                    img_icon = "mini-activity.png"; 
     374 
     375                //se for diferente de evento(type 1). 
     376                if(event.type != 1){ 
     377                    if(event.status == "1"){ 
     378                        status_ball = "gray.png"; 
     379                    }else if(event.status == "2"){ 
     380                        status_ball = "yellow.png"; 
     381                    }else if(event.status == "3"){ 
     382                        status_ball = "green.png"; 
     383                    }else if(event.status == "4"){ 
     384                        status_ball = "red.png"; 
     385                    } 
     386 
     387                    status_img = '<img style="width: 8px; height: 8px; margin-bottom: 2px;" src="../prototype/modules/calendar/img/' + status_ball + '"></img>'; 
     388                } 
     389 
     390            } 
     391 
     392 
     393                        //html que exibe a imagem do type e do status 
     394            element.find(".fc-event-inner.fc-event-skin").prepend($('<img style="width: 11px; height: 13px;" class="" src="../prototype/modules/calendar/img/' + img_icon + '"></img>' + status_img)); 
    377395                }, 
    378396 
     
    477495                                'type':     'question', 
    478496                                'overlay_opacity': '0.5', 
    479                                 'custom_class':  'occurrence-zebra',  
     497                                'custom_class':  'occurrence-zebra', 
    480498                                'width': 427, 
    481499                                'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência', 'Cancelar'], 
    482500                                'onClose':  function(clicked) { 
    483501                                    if(clicked == 'Editar todas ocorrências') { 
    484                                         var schedule = getSchedulable(evt.id, '');  
    485                                         schedule.calendar = evt.calendar;  
    486                                         eventDetails( schedule , true);  
     502                                        var schedule = getSchedulable(evt.id, ''); 
     503                                        schedule.calendar = evt.calendar; 
     504                                        eventDetails( schedule , true); 
    487505 
    488506                                    }else if (clicked == 'Editar essa ocorrência'){ 
     
    493511                                        */       
    494512                                        var repeat = mount_exception(evt.id, evt.occurrence); 
    495                                                                                            
     513 
    496514                                        $('.calendar-copy-move input[name="typeEvent"]').val("3"); 
    497515                                         
     
    513531                    break; 
    514532                case 3: 
     533                                        DataLayer.remove('taskToActivity', false);//Limpa o cache 
    515534                    var activity = getSchedulable(evt.id, ''); 
    516535                    activity.group = evt.calendar; 
     
    565584 
    566585    if( $.browser.msie ){ 
    567  
    568         $('#divAppbox').css('width', $(window).width()); 
     586        //$('#divAppbox').css('width', $(window).width()); 
     587        $('#divAppbox').css({'height':'600px','max-width':'100%'}); 
    569588    } 
    570589 
  • branches/2.5/prototype/modules/calendar/schedules.php

    r8049 r8232  
    1818class Schedule{ 
    1919 
    20     function findEventsRange( $start, $end, $calendars, $timezones ){ 
     20    function findEventsRange( $start, $end, $calendars, $timezones  ){ 
    2121 
    2222        $sql = 
     
    3131                .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 
    3232                .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 
     33 
    3334                .'count(calendar_task_to_activity_object.id) as "tasks", ' 
     35 
    3436                .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 
    3537                .'calendar FROM calendar_object left join calendar_task_to_activity_object on ( calendar_object.id = calendar_task_to_activity_object.calendar_object_activity_id  ), calendar_to_calendar_object ' 
     38 
    3639                .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $calendars) . '\')) ' 
    3740                .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 
     
    5457                .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, ' 
    5558                .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) ' 
    56                 .'AND (calendar_repeat.object_id = calendar_object.id)) '  
    57                 .'group by  
    58                     calendar_object.id, calendar_object.cal_uid, calendar_object.type_id,  
    59                     calendar_object.dtstart, calendar_object.summary, calendar_object.description,  
    60                     calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage,  
    61                     calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp,  
    62                     calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end,  
    63                     calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence,  
    64                     calendar_object.tzid, calendar_to_calendar_object.calendar_id  
    65                 ORDER BY  
    66                     calendar_object.dtstart';  
     59                .'AND (calendar_repeat.object_id = calendar_object.id)) ' 
     60                .'group by 
     61                    calendar_object.id, calendar_object.cal_uid, calendar_object.type_id, 
     62                    calendar_object.dtstart, calendar_object.summary, calendar_object.description, 
     63                    calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage, 
     64                    calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp, 
     65                    calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end, 
     66                    calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence, 
     67                    calendar_object.tzid, calendar_to_calendar_object.calendar_id 
     68                ORDER BY 
     69                    calendar_object.dtstart'; 
    6770 
    6871        $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 
     
    8487            .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 
    8588            .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 
     89 
    8690            .'count(calendar_task_to_activity_object.id) as "tasks", ' 
     91 
    8792            .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 
    8893            .'calendar FROM calendar_object left join calendar_task_to_activity_object on ( calendar_object.id = calendar_task_to_activity_object.calendar_object_activity_id  ), calendar_to_calendar_object ' 
     
    9297 
    9398 
    94             $where = 'AND (((upper("summary") like upper(\'%'.$summary.'%\') OR upper("description") like upper(\'%'.$description.'%\'))))  
    95                 group by  
    96                     calendar_object.id, calendar_object.cal_uid, calendar_object.type_id,  
    97                     calendar_object.dtstart, calendar_object.summary, calendar_object.description,  
    98                     calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage,  
    99                     calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp,  
    100                     calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end,  
    101                     calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence,  
    102                     calendar_object.tzid, calendar_to_calendar_object.calendar_id  
    103                 ORDER BY  
    104                     dtstart LIMIT '.$limit.'  OFFSET '.$offset.' ';  
    105   
     99            $where = 'AND (((upper("summary") like upper(\'%'.$summary.'%\') OR upper("description") like upper(\'%'.$description.'%\')))) 
     100                group by 
     101                    calendar_object.id, calendar_object.cal_uid, calendar_object.type_id, 
     102                    calendar_object.dtstart, calendar_object.summary, calendar_object.description, 
     103                    calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage, 
     104                    calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp, 
     105                    calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end, 
     106                    calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence, 
     107                    calendar_object.tzid, calendar_to_calendar_object.calendar_id 
     108                ORDER BY 
     109                    dtstart LIMIT '.$limit.'  OFFSET '.$offset.' '; 
     110 
    106111            $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 
    107112 
    108  
    109  
    110113        return $this->normalizeEvents( $params, $timezones ); 
    111114    } 
     
    113116    function normalizeEvents( &$result, $timezones ){ 
    114117 
    115         $mySig = Controller::find(array('concept' => 'calendarSignature') , array('calendar') , array('filter' => array( 'AND' , array('=' , 'type' , '0' ) , array( '=' , 'user' ,Config::me('uidNumber') ) , array('=' , 'isOwner' , '0' ))));  
    116   
    117         $signedCalendars = array();  
    118         if(is_array($mySig))  
    119             foreach($mySig as $v)  
    120             {  
    121                 $tmp = Controller::find(array('concept' => 'calendarToPermission') , array('acl' ,'owner') , array('filter' => array( 'AND' ,array( '=' , 'calendar' , $v['calendar'] ) , array( '=' , 'user' , Config::me('uidNumber')  ) )));  
    122                 $signedCalendars[$v['calendar']] = $tmp[0];  
    123             }  
    124   
     118        $mySig = Controller::find(array('concept' => 'calendarSignature') , array('calendar') , array('filter' => array( 'AND' , array('=' , 'type' , '0' ) , array( '=' , 'user' ,Config::me('uidNumber') ) , array('=' , 'isOwner' , '0' )))); 
     119 
     120        $signedCalendars = array(); 
     121        if(is_array($mySig)) 
     122            foreach($mySig as $v) 
     123            { 
     124                $tmp = Controller::find(array('concept' => 'calendarToPermission') , array('acl' ,'owner') , array('filter' => array( 'AND' ,array( '=' , 'calendar' , $v['calendar'] ) , array( '=' , 'user' , Config::me('uidNumber')  ) ))); 
     125                $signedCalendars[$v['calendar']] = $tmp[0]; 
     126            } 
     127 
    125128        $date = new DateTime('now', new DateTimeZone('UTC')); 
    126129        $DayLigth = array(); 
     
    156159            if(isset( $v['occurrences'] ) && count( $v['occurrences'] ) > 0){ 
    157160 
    158                 $date->setTimestamp((int) ($v['startTime'] / 1000));  
    159                 $date->setTimezone( new DateTimeZone( $currentTimezone ));  
    160   
     161                $date->setTimestamp((int) ($v['startTime'] / 1000)); 
     162                $date->setTimezone( new DateTimeZone( $currentTimezone )); 
     163 
    161164                foreach( $result[$i]['occurrences'] as &$o){ 
    162165 
    163                     $o = ((int) ($o / 1000) + $date->getOffset()).'000';  
     166                    $o = ((int) ($o / 1000) + $date->getOffset()).'000'; 
    164167 
    165168                } 
    166169            } 
    167170 
    168             $attend = (isset($signedCalendars[$result[$i]['calendar']])) ?  
    169                 Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', $signedCalendars[$result[$i]['calendar']]['owner'] )  ))):  
    170                 Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', Config::me('uidNumber'))  )));  
    171   
    172                 $result[$i]['unanswered'] = 0;  
    173   
     171            $attend = (isset($signedCalendars[$result[$i]['calendar']])) ? 
     172                Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', $signedCalendars[$result[$i]['calendar']]['owner'] )  ))): 
     173                Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', Config::me('uidNumber'))  ))); 
     174 
     175                $result[$i]['unanswered'] = 0; 
     176 
    174177            if(count($attend) > 0 && !empty($attend)){ 
    175                if(array_key_exists(0, $attend))  
    176                   $attend = $attend[0];  
    177   
    178                 if(isset($signedCalendars[$result[$i]['calendar']])) //Caso agenda compartilhada verificar tmb se tem compartilhamento de escrita  
    179                     $result[$i]['editable'] = (strpos($signedCalendars[$result[$i]['calendar']]['acl'],"w") >=0  &&  (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ) ? 1 : 0;  
    180                 else  
    181                    $result[$i]['editable'] = (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ? 1 : 0;  
    182   
    183                 if($attend['status'] == STATUS_UNANSWERED && !isset($signedCalendars[$result[$i]['calendar']]) )  
    184                    $result[$i]['unanswered'] = 1;  
     178               if(array_key_exists(0, $attend)) 
     179                  $attend = $attend[0]; 
     180 
     181                if(isset($signedCalendars[$result[$i]['calendar']])) //Caso agenda compartilhada verificar tmb se tem compartilhamento de escrita 
     182                    $result[$i]['editable'] = (strpos($signedCalendars[$result[$i]['calendar']]['acl'],"w") >=0  &&  (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ) ? 1 : 0; 
     183                else 
     184                   $result[$i]['editable'] = (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ? 1 : 0; 
     185 
     186                if($attend['status'] == STATUS_UNANSWERED && !isset($signedCalendars[$result[$i]['calendar']]) ) 
     187                   $result[$i]['unanswered'] = 1; 
    185188 
    186189            }else{ 
  • branches/2.5/prototype/modules/calendar/templates/attendee_add.ejs

    r7982 r8232  
    1111                                                <option value="3" <%= data.event.status=='3' ? 'selected="selected"':'' %>>Eu não vou</option> 
    1212                                                <option value="2" <%= data.event.status=='2' ? 'selected="selected"':'' %>>Talvez</option> 
    13                         <option value="4" <%= data.event.status=='4' ? 'selected="selected"':'' %>>Sem resposta </option>  
    14                                             <option class="hidden" value="5" >Delegado</option>  
     13                        <option value="4" <%= data.event.status=='4' ? 'selected="selected"':'' %>>Sem resposta </option> 
     14                                            <option class="hidden" value="5" >Delegado</option> 
    1515                                        <%}%> 
    1616                                <%}else{%> 
  • branches/2.5/prototype/modules/calendar/templates/event_add.ejs

    r8050 r8232  
    7878                                continue; 
    7979                        %> 
    80                             <% if( data.event.isShared ){ %>  
    81                     <% if(data.event.calendars[i].id == data.event.calendar){ %>  
    82                         <option value="<%= data.event.calendars[i].id %>"><%= data.event.calendars[i].name %></option>  
    83                     <%}%>  
    84   
    85                 <% }else { %>  
    86   
    87                 <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>><%= data.event.calendars[i].name %></option>  
    88                 <% } %>  
    89   
    90   
     80                            <% if( data.event.isShared ){ %> 
     81                    <% if(data.event.calendars[i].id == data.event.calendar){ %> 
     82                        <option value="<%= data.event.calendars[i].id %>"><%= data.event.calendars[i].name %></option> 
     83                    <%}%> 
     84 
     85                <% }else { %> 
     86 
     87                <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>><%= data.event.calendars[i].name %></option> 
     88                <% } %> 
     89 
     90 
    9191                        <% } %> 
    9292                        </select> 
    93                                 <span class="creation-date-label">Evento criado em <%= data.event.creationDate[0] %> às  
    94                                         <%= data.event.creationDate[1] %> horas e <%= data.event.creationDate[2] %> minutos.  
    95                                 </span>  
    96                 </p>  
    97   
    98   
     93                                <span class="creation-date-label">Evento criado em <%= data.event.creationDate[0] %> às 
     94                                        <%= data.event.creationDate[1] %> horas e <%= data.event.creationDate[2] %> minutos. 
     95                                </span> 
     96                </p> 
     97 
     98 
    9999                <fieldset class="hidden"> 
    100100                        <legend class="hidden">Publicidade</legend> 
  • branches/2.5/prototype/modules/calendar/templates/event_repeat.ejs

    r7978 r8232  
    3232                <label for="repeatweekly[]">Domingo</label> 
    3333 
    34                 <input type="checkbox" name="repeatweekly[]" value="MO"  <%= ((data.event.acl.write || data.event.acl.organization) && data.event.isAttendee) ? '' : 'disabled="disabled"'%>> 
     34                <input type="checkbox" name="repeatweekly[]" value="MO" <%= ((data.event.acl.write || data.event.acl.organization) && data.event.isAttendee) ? '' : 'disabled="disabled"'%>> 
    3535                <label for="repeatweekly[]">Segunda</label> 
    3636 
    37                 <input type="checkbox" name="repeatweekly[]" value="TU"  <%= ((data.event.acl.write || data.event.acl.organization) && data.event.isAttendee) ? '' : 'disabled="disabled"'%>> 
     37                <input type="checkbox" name="repeatweekly[]" value="TU" <%= ((data.event.acl.write || data.event.acl.organization) && data.event.isAttendee) ? '' : 'disabled="disabled"'%>> 
    3838                <label for="repeatweekly[]">Terça</label> 
    3939 
  • branches/2.5/prototype/modules/calendar/templates/preferences_calendar.ejs

    r8021 r8232  
    3636                                <label for="defaultCalView">Visualização padrão do calendário:</label> 
    3737                                <select name="defaultCalView" > 
    38                                         <option value="agendaDay" <%= data.preferences.defaultCalView =='agendaDay' ? 'selected="selected"':'' %>>Diária com horário</option>  
    39                                         <option value="basicDay" <%= data.preferences.defaultCalView =='basicDay' ? 'selected="selected"':'' %>>Diária sem horário</option>  
     38                                        <option value="agendaDay" <%= data.preferences.defaultCalView =='agendaDay' ? 'selected="selected"':'' %>>Diária com horário</option> 
     39                                        <option value="basicDay" <%= data.preferences.defaultCalView =='basicDay' ? 'selected="selected"':'' %>>Diária sem horário</option> 
    4040                                        <option value="agendaWeek" <%= data.preferences.defaultCalView =='agendaWeek' ? 'selected="selected"':'' %>>Semanal</option> 
    4141                                        <option value="month" <%= data.preferences.defaultCalView =='month' ? 'selected="selected"':'' %>>Mensal</option> 
     
    7272 
    7373                        <p class="input-group">  
    74                 <label for="defaultCalendar">Agenda padrão para Criação de Eventos:</label>  
     74                <label for="defaultCalendar">Agenda padrão para Criação de Eventos:</label> 
    7575                <select name="defaultCalendar" >  
    7676                    <%for(var i = 0; i < data.calendars.length; i++){%>  
     
    7979                </select> 
    8080                        </p> 
    81   
    82             <p class="input-group">  
    83                 <label for="dafaultImportCalendar">Agenda padrão para Importação de Eventos :</label>  
    84                 <select name="dafaultImportCalendar" >  
    85                     <option value=""> </option>  
    86                     <%for(var i = 0; i < data.calendars.length; i++){  
    87                      if(data.signatureOf[data.calendars[i].id].isOwner == '1'){  
    88                     %>  
    89                     <option value="<%=data.calendars[i].id%>"> <%= data.calendars[i].name %></option>  
    90                     <%}}%>  
    91                 </select>  
    92             </p>  
     81 
     82            <p class="input-group"> 
     83                <label for="dafaultImportCalendar">Agenda padrão para Importação de Eventos :</label> 
     84                <select name="dafaultImportCalendar" > 
     85                    <option value=""> </option> 
     86                    <%for(var i = 0; i < data.calendars.length; i++){ 
     87                     if(data.signatureOf[data.calendars[i].id].isOwner == '1'){ 
     88                    %> 
     89                    <option value="<%=data.calendars[i].id%>"> <%= data.calendars[i].name %></option> 
     90                    <%}}%> 
     91                </select> 
     92            </p> 
    9393 
    9494                        <p class="input-group"> 
  • branches/2.5/prototype/modules/calendar/templates/shared_calendar.ejs

    r7019 r8232  
    77                                <dd class="calendar"> 
    88                                        <select class="calendar" name="calendar"> 
    9                                                         <%                                                       
    10                                                         for(var i = 0; i < data.calendar.length; i++){ 
    11                                                                 if(data.signature[i].permission){ 
    12                                                                         if(data.signature[i].permission.acl.shared == false) 
    13                                                                                 continue; 
    14                                                                 } 
    15                                                         %> 
    16                                                                 <option value="<%=data.calendar[i].id%>"><%=data.calendar[i].name%></option> 
     9                        <% 
     10                        for(var i = 0; i < data.calendar.length; i++) 
     11                        { 
     12                            for(var ii = 0; ii < data.signature.length; ii++) 
     13                            { 
     14                                if(data.signature[ii].calendar.id === data.calendar[i].id && data.signature[ii].permission) 
     15                                { 
     16                                    if(data.signature[ii].permission.acl.shared == false) 
     17                                        continue; 
     18                                } 
     19                            } 
     20                        %> 
     21                                                <option value="<%=data.calendar[i].id%>"><%=data.calendar[i].name%></option> 
    1722                                                                         
    1823                                                        <%  
     
    2429                        <dd class="<%=data.calendar ? "user-list" : "calendar-list"%>"> 
    2530                                <ul class="user-list"> 
    26                                 <% if (false) { 
    27                                         for (var i=0; i< data.event.user.length; i++) {%> 
    28                                                 <li class="user">  
    29                                                         <div style="overflow:hidden; width:100%; display:table;"> 
    30                                                                 <input type="checkbox" value=""> 
    31                                                                 <input type="hidden" name="user[]" value=""> 
    32                                                                 <label class="name"></label> 
    33                                                                 <label class="mail"></label> 
    34                                                         </div>  
    35                                                         <div class="shared-acl"> 
    36                                                                         <a class="button edit user-options-button-edit new">Editar permissões</a> 
    37                                                                         <a class="button close new">Remover</a> 
    38                                                         </div> 
    39                                                 </li>    
    40                                         <%}  
    41                                 } else { %> 
    4231                                        <li class="not-user"><%=data.calendar ? "Não compartilhado." : "Nenhuma agenda selecionada"%></li> 
    43                                 <% } %> 
    4432                                </ul> 
    4533                        </dd>    
  • branches/2.5/prototype/modules/filters/edit-filter.ejs

    r7703 r8232  
    2828 
    2929                                </select> 
    30                                 <input type="text" name="criteriaValue[]" /> 
     30                                <input type="text" name="criteriaValue[]" value="<%= data.from %>" /> 
    3131                                <input type="hidden" name="criteriaType[]" value="from"/> 
    3232                        </fieldset> 
     
    5353 
    5454                                </select> 
    55                                 <input type="text" name="criteriaValue[]" /> 
     55                                <input type="text" name="criteriaValue[]" value="<%= data.subject %>" /> 
    5656                                <input type="hidden" name="criteriaType[]" value="subject"/> 
    5757                        </fieldset> 
     
    128128                                        %> 
    129129                                </select> 
    130                                 <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 
    131                                 <label><%= get_lang("Alert message filter by sender")%></label> 
     130                <% 
     131                if(preferences['use_alert_filter_criteria'] == "1") 
     132                {%> 
     133                    <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 
     134                    <label><%= get_lang("Alert message filter by sender")%></label> 
     135                <%}%> 
    132136                        </fieldset> 
    133137                        <fieldset> 
  • branches/2.5/prototype/modules/filters/filters.css

    r7612 r8232  
    4747 
    4848.rule-list .rule .menu-control { 
    49         max-width:  100px; 
     49        max-width:  80px; 
    5050    float: right; 
    51         margin-top: -50px; 
     51        margin: -50px 5px; 
    5252        white-space: nowrap; 
    5353} 
     54 
    5455.rule-list .rule .menu-control .select { vertical-align: bottom; } 
    5556.rule-list .rule .menu-control .select input { margin: 5px 0 0 1px; } 
     
    122123} 
    123124.rule .menu-control .ui-button.disable,.rule .menu-control .ui-button.enable, .rule .menu-control .ui-button.update, .rule .menu-control .ui-button.close  { top:5px; } 
     125 
     126.rule .menu-control .ui-button.hidden { display: none; } 
     127 
    124128.filter-manager-window .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 
    125129 
  • branches/2.5/prototype/modules/filters/filters.js

    r7863 r8232  
    22 * Retorna as regras por remetente e que o usuário deseja ser avisado  
    33 */ 
    4 function getFromAlertRules() {  
    5         var filters = DataLayer.get("filter"); 
    6         fromRules = []; 
    7         var alertMessage; 
    8         var active; 
    9         for (var index in filters) { 
    10                 alertMessage = filters[index]['alertMessage'];           
    11                 active = filters[index]['enabled']; 
    12                 for(var criterias in filters[index]['actions']) { 
    13                         if (filters[index]['actions'][criterias]['type'] == 'fileinto' && alertMessage == 'true' && active == 'true') 
    14                                 fromRules[fromRules.length] = filters[index]['actions'][criterias]['parameter']; 
    15                 } 
    16         } 
    17         return fromRules; 
     4function getFromAlertRules() { 
     5    fromRules = []; 
     6    if(preferences['use_alert_filter_criteria'] == "1") 
     7    { 
     8        var filters = DataLayer.get("filter"); 
     9        var alertMessage; 
     10        var active; 
     11        for (var index in filters) { 
     12            alertMessage = filters[index]['alertMessage']; 
     13            active = filters[index]['enabled']; 
     14            for(var criterias in filters[index]['actions']) { 
     15                if (filters[index]['actions'][criterias]['type'] == 'fileinto' && alertMessage == 'true' && active == 'true') 
     16                    fromRules[fromRules.length] = filters[index]['actions'][criterias]['parameter']; 
     17            } 
     18        } 
     19 
     20    } 
     21    return fromRules; 
    1822} 
    1923 
     
    401405}); 
    402406 
    403  
    404 fromRules = getFromAlertRules(); 
     407if(preferences['use_alert_filter_criteria'] == "1") 
     408{ 
     409    fromRules = getFromAlertRules(); 
     410} 
    405411 
    406412var BASE_PATH = '../prototype/'; 
     
    439445        } 
    440446        if(confirm(get_lang("Want to block the user") + " " + email + "?")){ 
     447        var has_folder_spam = false; 
     448        var folder_spam = "INBOX"+cyrus_delimiter+"Spam"; 
     449        $.each(cp_tree1, function(index, value){ 
     450            if(value.id == folder_spam){ 
     451                has_folder_spam = true; 
     452                return; 
     453            } 
     454        }); 
     455        if(!has_folder_spam){ 
     456            connector.loadScript('TreeS'); 
     457            create_new_folder("Spam","INBOX"); 
     458        } 
    441459                DataLayer.put( 'filter', idd, 
    442460                                        { name: email, isExact: false, 
    443461                                                criteria:{ 0: {value: email, operator: "=", field: "from"} }, 
    444                                                 actions: { 0: {parameter: "INBOX" + cyrus_delimiter + "Spam", type: "fileinto"}}, 
     462                                                actions: { 0: {parameter: folder_spam, type: "fileinto"}}, 
    445463                                                enabled: true, 
    446464                                                id: email, 
     
    461479 
    462480DataLayer.codec( 'message', 'jqGrid', { 
     481 
     482      encoder: function( data ){ 
     483 
     484          return( data ); 
     485 
     486      } 
     487}); 
     488 
     489DataLayer.codec( 'message', 'jqGridSearch', { 
    463490 
    464491      encoder: function( data ){ 
     
    491518        var criterias_ = new Array(); 
    492519 
    493     var isExact = (list_container.find('[name="isExact"]:checked').val() == 'and') ? 'yes' : 'no';  
    494   
     520    var isExact = (list_container.find('[name="isExact"]:checked').val() == 'and') ? 'yes' : 'no'; 
     521 
    495522        for (i in criteria_) 
    496523                if(criteria_[i] != "") 
     
    605632 * Lista os filtros para o usuário 
    606633 */ 
    607 function list_filters(html){ 
     634function list_filters(html) {  
    608635        outOfficeVerify(); 
    609         for (var index in selectedMessages) { 
     636        for (var index in selectedMessages)  
     637        { 
    610638                delete selectedMessages[index]; 
    611639        } 
    612         if(html){ 
    613                 if( ! $(".filters-windows").length ) 
    614                         container = $('.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html( html ).find(".expresso-window-container"); 
    615                 list_container = $('.expressomail-module-container').find(".rule-list-container"); 
    616         } 
    617         list_container = $(".expresso-window-filters").dialog({ 
    618                 title: get_lang('Filters'), 
    619             width:700, 
    620             modal: true, 
    621                 resizable: false, 
    622             closeOnEscape:true, 
    623             close:function(event, ui) { 
    624                     event.stopPropagation(); 
    625                         if(list_container.find(".cancel").length) 
    626                                 list_container.find(".cancel").trigger('click'); 
    627                         $(".dialog-head-buttonpane").hide(); 
    628             }, 
    629                 open: function () { 
    630                         $(".ui-dialog .ui-dialog-titlebar") 
    631                         .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>') 
    632                         .find('.ui-dialog-titlebar-minimize').click(function() { 
    633                                 $(".ui-dialog-buttonpane, .ui-dialog-content").toggle(); 
    634                                 $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin'); 
    635                         }); 
    636                         $(".dialog-head-buttonpane").show(); 
    637                 }, 
    638             autoOpen: false, 
    639                 buttons: [{ 
    640                         text : get_lang("Close"), 
    641                         click : function() { 
    642                                 $( this ).dialog( "close" ); 
    643                         } 
    644                 }] 
    645     }); 
    646         $(".ui-dialog-titlebar").after("<div class='dialog-head-buttonpane ui-dialog-buttonpane ui-widget-content ui-helper-clearfix' style='background-color: rgb(224, 238, 238); '><div class='ui-dialog-buttonset header-buttonpane'></div></div>"); 
    647         $(".dialog-head-buttonpane").css("padding", "5px"). 
    648         find(".header-buttonpane").html("<a href='#' class='button add' title='"+get_lang("Add new rule")+"'>"+get_lang("New rule")+"</a>"+(!outoffice ? "<a href='#' class='button add vacation' title='"+get_lang("Add rule out of office")+"'>"+get_lang("Out of office")+"</a>" : "")).find(".button").button(); 
    649  
    650         $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); 
     640  
     641        initialize_container(html); // Inicializa o container do diálogo de filtros  
     642  
     643        list_container = create_filter_dialog(); // Cria a estrutura básica do diálogo  
     644         
    651645        var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true)); 
    652646        list_container.html(list).find(".button").button(); 
    653  
     647    list_container.find(".alldelete").button("disable"); 
     648    list_container.find(".alldisable").button("disable"); 
     649    list_container.find(".allenable").button("disable"); 
     650     
    654651        list_container.find(".rule-list").selectable({ 
    655652                selecting: function(event, ui) { 
     
    660657                } 
    661658        }); 
     659 
     660    list_container.find(".rule-list li").click(function(){ 
     661        if(list_container.find(".select").children("input:checked").length){ 
     662            list_container.find(".alldelete").button("enable"); 
     663            list_container.find(".alldisable").button("enable"); 
     664            list_container.find(".allenable").button("enable"); 
     665        } else { 
     666            list_container.find(".alldelete").button("disable"); 
     667            list_container.find(".alldisable").button("disable"); 
     668            list_container.find(".allenable").button("disable"); 
     669        } 
     670    }); 
    662671 
    663672        list_container.find( ".menu-control .button" ).filter(".update").button({ 
     
    716725                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    717726                                                getFromAlertRules(); 
     727                                                if (get_current_folder() == "INBOX") 
     728                                                        cExecute ("$this.imap_functions.get_range_msgs2&folder=INBOX&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type=SORTARRIVAL&search_box_type=ALL&sort_box_reverse=1", handler_draw_box); 
    718729                                        }); 
    719730 
     
    868879 
    869880        list_container.parent().find(".button.add:first").click(function(){ 
    870                 list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 
    871                 DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ 
    872                         list_container.html(html); 
    873                         var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); 
    874                         list_container.find(".button").button().filter(".forth").click(function(){ 
    875                                 accord.accordion('activate',1); 
    876                         }).end().filter(".forth2").click(function(){ 
    877                                 accord.accordion('activate',2); 
    878                         }).end().filter(".back").click(function(){ 
    879                                 accord.accordion('activate',0); 
    880                         }).end().filter(".back2").click(function(){ 
    881                                 accord.accordion('activate',1); 
    882                         }).end().filter(".cancel").click(function(){ 
    883                                 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    884                         }).end().filter(".submit").click(function() { 
    885                                 if(valid_save()) 
    886                                         $(this).submit(); 
    887                                 else 
    888                                         return; 
    889                                 DataLayer.commit( 'filter',false,function(){ 
    890                                         if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { 
    891                                                 for (var index in selectedMessages) { 
    892                                                         set_message_flag(index, action, false); 
    893                                                 } 
    894                                         } 
    895                                         DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    896                                         getFromAlertRules(); 
    897                                 }); 
    898                         }).end().filter('.button.search').click(function() { 
    899                                 if(valid_save()) 
    900                                         showGridMessages($(this)); 
    901                                 else 
    902                                         return; 
    903                         }); // end function click 
    904                 });     // end DataLayer.render 
     881                render_new_rule(); // Renderiza a tela de criação de nova regra de filtragem.  
    905882        }); 
    906883        list_container.parent().find(".button.add.vacation").click(function(){ 
     
    932909} 
    933910 
     911/*  
     912        Inicializa o container do diálogo de gerenciamento de filtros.  
     913*/  
     914function initialize_container (html) {  
     915        if(html)  
     916        {  
     917                if(!$(".filters-windows").length)   
     918                {  
     919                        container = $('.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html(html).find(".expresso-window-container");  
     920                }  
     921        }  
     922}  
     923  
     924/*  
     925        Cria a estrutura básica do diálogo de gerenciamento de filtros.  
     926*/  
     927function create_filter_dialog () {  
     928        var dialog = $(".expresso-window-filters").dialog(  
     929        {  
     930                title: get_lang('Filters'),  
     931                width: 700,  
     932                modal: true,  
     933                resizable: false,  
     934                closeOnEscape: true,  
     935                close: function(event, ui)  
     936                {  
     937                        event.stopPropagation();  
     938                        if(list_container.find(".cancel").length) list_container.find(".cancel").trigger('click');  
     939                        $(".dialog-head-buttonpane").hide();  
     940                },  
     941                open: function()  
     942                {  
     943                        $(".ui-dialog .ui-dialog-titlebar").append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>').find('.ui-dialog-titlebar-minimize').click(function()  
     944                        {  
     945                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();  
     946                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');  
     947                        });  
     948                        $(".dialog-head-buttonpane").show();  
     949                },  
     950                autoOpen: false,  
     951                buttons: [  
     952                {  
     953                        text: get_lang("Close"),  
     954                        click: function()  
     955                        {  
     956                                $(this).dialog("close");  
     957                        }  
     958                }]  
     959        });  
     960  
     961        $(".ui-dialog-titlebar").after("<div class='dialog-head-buttonpane ui-dialog-buttonpane ui-widget-content ui-helper-clearfix' style='background-color: rgb(224, 238, 238); '><div class='ui-dialog-buttonset header-buttonpane'></div></div>");  
     962        $(".dialog-head-buttonpane").css("padding", "5px").  
     963        find(".header-buttonpane").html("<a href='#' class='button add' title='" + get_lang("Add new rule") + "'>" + get_lang("New rule") + "</a>" + (!outoffice ? "<a href='#' class='button add vacation' title='" + get_lang("Add rule out of office") + "'>" + get_lang("Out of office") + "</a>" : "")).find(".button").button();  
     964        $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE");  
     965  
     966        return dialog;  
     967}  
     968  
     969/*  
     970        Renderiza a tela de adição de uma nova regra de filtragem,   
     971        dentro do diálogo de gerenciamento de filtros.  
     972*/  
     973function render_new_rule (from, subject) {  
     974        list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");  
     975        var data = {  
     976                folders: DataLayer.get("folder", true),  
     977                delimiter: cyrus_delimiter,  
     978                from: from,  
     979                subject: subject ? html_entities(subject) : subject  
     980        }  
     981  
     982        DataLayer.render(BASE_PATH + 'modules/filters/edit-filter.ejs', data, function(html)  
     983        {  
     984                list_container.html(html);  
     985                var accord = list_container.find(".rule-details-container").accordion(  
     986                {  
     987                        autoHeight: false  
     988                });  
     989                list_container.find(".button").button().filter(".forth").click(function()  
     990                {  
     991                        accord.accordion('activate', 1);  
     992                }).end().filter(".forth2").click(function()  
     993                {  
     994                        accord.accordion('activate', 2);  
     995                }).end().filter(".back").click(function()  
     996                {  
     997                        accord.accordion('activate', 0);  
     998                }).end().filter(".back2").click(function()  
     999                {  
     1000                        accord.accordion('activate', 1);  
     1001                }).end().filter(".cancel").click(function()  
     1002                {  
     1003                        DataLayer.render(BASE_PATH + 'modules/filters/init.ejs', {}, list_filters);  
     1004                }).end().filter(".submit").click(function()  
     1005                {  
     1006                        if(valid_save()) $(this).submit();  
     1007                        else return;  
     1008                        DataLayer.commit('filter', false, function()  
     1009                        {  
     1010                                if($('#gbox_fields-search-messages-grid').length > 0 && action != '')  
     1011                                {  
     1012                                        for(var index in selectedMessages)  
     1013                                        {  
     1014                                                set_message_flag(index, action, false);  
     1015                                        }  
     1016                                }  
     1017                                DataLayer.render(BASE_PATH + 'modules/filters/init.ejs', {}, list_filters);  
     1018                                getFromAlertRules();  
     1019                        });  
     1020                }).end().filter('.button.search').click(function()  
     1021                {  
     1022                        if(valid_save()) showGridMessages($(this));  
     1023                        else return;  
     1024                }); // end function click  
     1025        }); // end DataLayer.render  
     1026} 
    9341027 
    9351028/* Inicializa os filtros e chama o list_filters  
     
    9551048                } 
    9561049        } 
    957         $.each(fromRules, function(index, value) { 
    958                 if(value == folder){ 
    959                         for(var i=0; i < filters_c['criteria'].length; i++){ 
    960                                 if(filters_c['criteria'][i].field == 'from'){ 
    961                                         from = filters_c['criteria'][i].value; 
    962                                 } 
    963                         } 
    964                         cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){});  
    965                         return false; 
    966                 } 
    967         }); 
    968 } 
     1050 
     1051    if(preferences['use_alert_filter_criteria'] == "1") 
     1052    { 
     1053        $.each(fromRules, function(index, value) { 
     1054            if(value == folder){ 
     1055                for(var i=0; i < filters_c['criteria'].length; i++){ 
     1056                    if(filters_c['criteria'][i].field == 'from'){ 
     1057                        from = filters_c['criteria'][i].value; 
     1058                    } 
     1059                } 
     1060                cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){}); 
     1061                return false; 
     1062            } 
     1063        }); 
     1064    } 
     1065} 
  • branches/2.5/prototype/modules/filters/interceptors/FilterMapping.php

    r7726 r8232  
    550550                $actions['type'] = $rule_apply['actions'][0]['type']; 
    551551                $actions['parameter'] = $rule_apply['actions'][0]['parameter']; 
    552                 /* Hardcoded */ 
    553                 $actions['keep'] = false; 
     552 
     553                $actions['keep'] = is_array($rule_apply['actions'][1]); 
     554                if ($actions['keep']) 
     555                        $actions['value'] = $rule_apply['actions'][0]['parameter']; 
    554556 
    555557                //$messages = $rule_apply['applyMessages']; 
  • branches/2.5/prototype/modules/mail/css/followupflag.css

    r6996 r8232  
    242242.alert-options { 
    243243        border: none; 
     244        min-width:80%; 
    244245} 
    245246.confirm-alarm { 
  • branches/2.5/prototype/modules/mail/js/foldertree.js

    r8117 r8232  
    108108} 
    109109 
    110 function draw_new_tree_folder(callback, force){ 
    111  
    112     var folders =  normalizeFolder( Folder.get( false, force ) ); 
    113  
    114 if(preferences.use_local_messages == 1){ 
    115  
    116     if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive 
    117         //pega pastas locais do mailarchiver e insere no array de pastas 
     110function refreshTreeview(){ 
     111    //Atualização e correção dos ícones expandir/contrair 
     112    $.each($('.treeview').find('.expandable, .collapsable').filter(':not(.lastExpandable,.lastCollapsable)'),function(i,v){ 
     113      if ( $(v).find('ul').css('display') == "block" ){ 
     114        $(v).removeClass().addClass('collapsable');  
     115        $(v).find('.hitarea:first').removeClass().addClass('hitarea collapsable-hitarea') 
     116      } 
     117    }); 
     118    //Última árvore de pastas 
     119    $.each($('.treeview').find('.lastExpandable,.lastCollapsable'),function(i,v){ 
     120      if ( $(v).find('ul').css('display') == "block" ){ 
     121        $(v).removeClass().addClass('collapsable lastCollapsable');  
     122        $(v).find('.hitarea:first').removeClass('expandable-hitarea').addClass('collapsable-hitarea'); 
     123        $(v).find('.hitarea:first').removeClass('lastExpandable-hitarea').addClass('lastCollapsable-hitarea'); 
     124      } 
     125    }); 
     126} 
     127 
     128function draw_new_tree_folder(callback, force) 
     129{ 
     130 
     131    var folders = normalizeFolder(Folder.get(false, force)); 
     132 
     133    if(preferences.use_local_messages == 1) 
     134    { 
     135 
     136        if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) 
     137        { //MailArchive 
     138            //pega pastas locais do mailarchiver e insere no array de pastas 
    118139            expresso_mail_archive.getFoldersList("home"); 
    119140            treeFolders = expresso_mail_archive.folders; 
    120141 
    121             for(var i=0; i<treeFolders.length; i++ ){ 
     142            for(var i = 0; i < treeFolders.length; i++) 
     143            { 
    122144                mount_children_localfolders_list(treeFolders[i]); 
    123145            } 
    124              
    125             for(var i = 0; i < treeFolders.length; i++){ 
     146 
     147            for(var i = 0; i < treeFolders.length; i++) 
     148            { 
    126149                folders.push(treeFolders[i]); 
    127150            } 
    128   
    129     } 
    130 } 
    131  
    132     if(!selected){ 
     151 
     152        } 
     153    } 
     154 
     155    if(!selected) 
     156    { 
    133157        selected = "INBOX"; 
    134158    } 
     
    137161    var tree2 = new Array(); 
    138162    var tree3 = new Array(); 
    139       
    140     for (var i=0; i<folders.length; i++) { 
    141           
    142         if(/*/^INBOX/.test(folders[i].id)*/folders[i].id.substr(0,5) == "INBOX") { 
    143             if (!unorphanize(tree1, folders[i])) { 
     163     
     164    for(var i = 0; i < folders.length; i++) 
     165    { 
     166         
     167        if(/*/^INBOX/.test(folders[i].id)*/folders[i].id.substr(0,5) == "INBOX") 
     168        { 
     169            if(!unorphanize(tree1, folders[i])) 
     170            { 
    144171                folders[i].children = new Array(); 
    145172 
     
    147174            } 
    148175        } 
    149         else if (/*/^user/.test(folders[i].id)*/folders[i].id.substr(0,4) == "user") { 
    150             if (!unorphanize(tree2, folders[i])) { 
     176        else if(/*/^user/.test(folders[i].id)*/folders[i].id.substr(0,4) == "user") 
     177        { 
     178            if(!unorphanize(tree2, folders[i])) 
     179            { 
    151180                folders[i].children = new Array(); 
    152181                tree2.push(folders[i]); 
    153182            } 
    154183        } 
    155         else if (/*/^local_messages/.test(folders[i].id)*/folders[i].id.substr(0,14) == "local_messages") { 
    156             
    157                 tree3.push(folders[i]); 
    158              
    159         } 
    160     } 
    161      
    162     for(var i =0; i<tree1.length; i++){ 
     184        else if(/*/^local_messages/.test(folders[i].id)*/folders[i].id.substr(0,14) == "local_messages") 
     185        { 
     186 
     187            tree3.push(folders[i]); 
     188 
     189        } 
     190    } 
     191 
     192    for(var i = 0; i < tree1.length; i++) 
     193    { 
    163194        count_unseen_children(tree1[i]); 
    164195    } 
    165     for(var i =0; i<tree2.length; i++){ 
     196    for(var i = 0; i < tree2.length; i++) 
     197    { 
    166198        count_unseen_children(tree2[i]); 
    167199    } 
    168     for(var i =0; i<tree3.length; i++){ 
     200    for(var i = 0; i < tree3.length; i++) 
     201    { 
    169202        count_unseen_children(tree3[i]); 
    170203    } 
     
    174207    var shared_acls = {}; 
    175208 
    176     $.each(cp_tree2, function(index, value){ 
     209    $.each(cp_tree2, function(index, value) 
     210    { 
    177211        shared_acls[value.id] = value.acl_share; 
    178212    }); 
    179      
    180     if(preferences.use_local_messages == 1){ 
    181       $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu"); 
    182       mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin"; 
    183     } 
    184      
    185     var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {folders: [tree1, tree2, tree3]}); 
    186     var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview({ 
    187             persist: "cookie", 
    188             animated: "fast" 
    189     }).find(".folder").unbind("click").click(function(event){ 
    190  
    191         if ($(this).next().hasClass("local-connect")) { 
     213 
     214    if(preferences.use_local_messages == 1) 
     215    { 
     216        $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu"); 
     217        mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin"; 
     218    } 
     219 
     220    var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', { 
     221        folders: [tree1, tree2, tree3] 
     222    }); 
     223    var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview( 
     224    { 
     225        persist: "cookie", 
     226        animated: "fast" 
     227    }).find(".folder").unbind("click").click(function(event) 
     228    { 
     229 
     230        if($(this).next().hasClass("local-connect")) 
     231        { 
    192232            return; 
    193233        } 
    194234 
    195         if ($(this).hasClass("local-folder")) { 
     235        if($(this).hasClass("local-folder")) 
     236        { 
    196237            return; 
    197238        } 
    198          
     239 
    199240        // MUDANÇA DE PASTAS! 
    200         var target = $(this);    
    201          
     241        var target = $(this); 
     242 
    202243        if($(".folders-loading").length) 
     244        { 
    203245            return; 
    204          
     246        } 
     247 
    205248        if($(event.target).parent().is(".float-menu")) 
     249        { 
    206250            return; 
    207              
    208         if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable-hitarea, .lastExpandable-hitarea, .treeview ,.folder_unseen,.ui-icon, .float-menu, .new_folder, .folders-loading, .head_folder, .shared-folders') ) 
     251        } 
     252 
     253        if(target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable-hitarea, .lastExpandable-hitarea, .treeview ,.folder_unseen,.ui-icon, .float-menu, .new_folder, .folders-loading, .head_folder, .shared-folders')) 
     254        { 
    209255            return; 
    210          
    211         if( target.parent().find(".new_folder").length) 
     256        } 
     257 
     258        if(target.parent().find(".new_folder").length) 
     259        { 
    212260            return; 
    213              
    214         if( !target.attr('id') ) 
     261        } 
     262 
     263        if(!target.attr('id')) 
     264        { 
    215265            target = target.parent(); 
    216         if (target[0] == $(".mainfoldertree")[0]) return; 
     266        } 
     267        if(target[0] == $(".mainfoldertree")[0]) 
     268        { 
     269            return; 
     270        } 
     271 
    217272        var uiId = target.attr('id'); 
    218273        var child = target.find('.folder'); 
    219            
    220         if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')){ 
     274 
     275        if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')) 
     276        { 
    221277            $('.filetree span.folder.selected').removeClass('selected'); 
    222278            $(target).children('.folder').addClass('selected'); 
     
    224280        $(this).addClass("folders-loading"); 
    225281        selected = target.attr('id'); 
    226         change_folder(target.attr('id'), child.attr('title'));   
    227  
    228         $.ajax({ 
    229               url : "controller.php?"+ $.param( { action: "$this.imap_functions.get_folders_list", folder: target.attr('id') } ), 
    230               success : function(data){ 
    231                   data = connector.unserialize(data); 
    232  
    233                   if(data) 
     282        change_folder(target.attr('id'), child.attr('title')); 
     283     
     284        $.ajax( 
     285        { 
     286            url: "controller.php?" + $.param( 
     287            { 
     288                action: "$this.imap_functions.get_folders_list", 
     289                folder: target.attr('id') 
     290            }), 
     291            success: function(data) 
     292            { 
     293                data = connector.unserialize(data); 
     294 
     295                if(data) 
     296                { 
    234297                    build_quota(data); 
    235               } 
     298                } 
     299            } 
    236300        }); 
    237301 
    238     }).filter('.followup-messages').click(function(event, ui){ 
     302    }).filter('.followup-messages').click(function(event, ui) 
     303    { 
    239304        search_emails("UNDELETED KEYWORD \"$Followupflagged\""); 
    240305    }).end().end(); 
    241  
    242     $('.upper').droppable({ 
    243         over: function(event, ui){ 
    244             $('#content_folders').autoscroll({ 
     306     
     307    refreshTreeview(); 
     308     
     309    $('.upper').droppable( 
     310    { 
     311        over: function(event, ui) 
     312        { 
     313            $('#content_folders').autoscroll( 
     314            { 
    245315                direction: 'up', 
    246316                step: 150, 
     
    248318            }); 
    249319        }, 
    250         out: function(event, ui){ 
     320        out: function(event, ui) 
     321        { 
    251322            $('#content_folders').autoscroll('destroy'); 
    252323        } 
    253324    }); 
    254325 
    255     $('.lower').droppable({ 
    256         over: function(event, ui){ 
    257             $('#content_folders').autoscroll({ 
     326    $('.lower').droppable( 
     327    { 
     328        over: function(event, ui) 
     329        { 
     330            $('#content_folders').autoscroll( 
     331            { 
    258332                direction: 'down', 
    259333                step: 150, 
     
    261335            }); 
    262336        }, 
    263         out: function(event, ui){ 
     337        out: function(event, ui) 
     338        { 
    264339            $('#content_folders').autoscroll('destroy'); 
    265340        } 
     
    268343 
    269344 
    270     folders_html.find('[id="'+selected+'"]').children().addClass("selected"); 
    271     $(".folder").not(".head_folder").not(".shared-folders").not(".shared-folders + ul .folder").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").draggable({ 
     345    folders_html.find('[id="' + selected + '"]').children().addClass("selected"); 
     346    $(".folder") 
     347    .not(".head_folder") 
     348    .not(".shared-folders") 
     349    .not(".shared-folders + ul .folder") 
     350    .parent() 
     351    .find(".folder") 
     352    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash") 
     353    .draggable( 
     354    { 
    272355        // DRAG DE PASTAS 
    273         start : function(){ 
     356        start: function() 
     357        { 
    274358            $(this).css("color", "gray"); 
    275359            $('.upper, .lower').show(); 
    276             $(".lower").css("top", ($("#content_folders").height()-18) + $("#content_folders").offset().top); 
     360            $(".lower").css("top", ($("#content_folders").height() - 18) + $("#content_folders").offset().top); 
    277361        }, 
    278         stop : function(){ 
     362        stop: function() 
     363        { 
    279364            $(this).css("color", ""); 
    280365            $('.upper, .lower').hide(); 
    281366        }, 
    282367        revert: "invalid", 
    283         helper: function(event){ 
    284             if($.trim(($(this).text().split("["))[0]).length > 18) 
    285                 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]).substring(0,18) + "...", type: "folder"})); 
    286             return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]), type: "folder"})); 
     368        helper: function(event) 
     369        { 
     370            if($.trim(($(this).text().split("["))[0]).length > 18) return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', { 
     371                texto: (($(this).text().split("["))[0]).substring(0, 18) + "...", 
     372                type: "folder" 
     373            })); 
     374            return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', { 
     375                texto: (($(this).text().split("["))[0]), 
     376                type: "folder" 
     377            })); 
    287378        }, 
    288379        delay: 150, 
    289380        refreshPositions: true, 
    290         zIndex : 2700, 
     381        zIndex: 2700, 
    291382        //scroll: true, 
    292383        //scrollSensitivity: 100, 
     
    294385        containment: $("#divAppbox") 
    295386    }); 
    296     $(".folder").not(".head_folder").not(".shared-folders").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").end().droppable({ 
     387    $(".folder") 
     388    .not(".head_folder") 
     389    .not(".shared-folders") 
     390    .parent() 
     391    .find(".folder") 
     392    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash") 
     393    .end() 
     394    .droppable( 
     395    { 
    297396        //DROP DE PASTAS 
    298         over : function(a, b){ 
     397        over: function(a, b) 
     398        { 
    299399            //INICIO : SE A PASTA CONTER FILHAS EXPANDE  
     400            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green"); 
    300401            over = $(this); 
    301402            $(this).addClass("folder-over"); 
    302             if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 
    303                 if($(this).prev()[0]) 
    304                     if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 
    305                         setTimeout(function(){ 
    306                             if(over.hasClass("folder-over")){ 
    307                                 over.prev().trigger("click"); 
    308                             } 
    309                         }, 500); 
    310                          
     403            if(($(this)[0] != $(this).parent().find(".head_folder")[0])) if($(this).prev()[0]) if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]) 
     404            { 
     405                setTimeout(function() 
     406                { 
     407                    if(over.hasClass("folder-over")) 
     408                    { 
     409                        over.prev().trigger("click"); 
    311410                    } 
     411                }, 500); 
     412 
     413            } 
    312414            //FIM : SE A PASTA CONTER FILHAS EXPANDE            
    313             //$("#content_folders").stop().scrollTo($(this), {axis:'y', margin:true, offset:-50, duration:400});       
    314415            //SETA BORDA EM VOLTA DA PASTA 
    315416            // 
    316417        }, 
    317         out : function(){ 
     418        out: function(a, b) 
     419        { 
    318420            //RETIRA BORDA EM VOLTA DA PASTA 
     421            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", ""); 
    319422            $(this).removeClass("folder-over"); 
    320423        }, 
    321         drop : function(event, ui){ 
     424        drop: function(event, ui) 
     425        { 
    322426            $(this).removeClass("folder-over"); 
    323427 
    324             if($(this).parent().attr('id') == undefined){ 
     428            if($(this).parent().attr('id') == undefined) 
     429            { 
    325430                var folder_to = 'INBOX'; 
    326431                var to_folder_title = get_lang("Inbox"); 
    327             }else{ 
     432            } 
     433            else 
     434            { 
    328435                var folder_to = $(this).parent().attr('id'); 
    329436                var to_folder_title = $(this).attr('title'); 
    330             }        
     437            } 
    331438            var folder_to_move = ui.draggable.parent().attr('id'); 
    332439            var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 
    333440            // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS : 
    334             if(folder_to_move == "tbody_box"){ 
    335                 move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true); 
     441            if(folder_to_move == "tbody_box") 
     442            { 
     443                move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title, true); 
    336444                //Correção para realinhamento da grid de mensagens no navegador Chrome. 
    337                 if(is_webkit){ 
     445                if(is_webkit) 
     446                { 
    338447                    var table = $('#table_box'); 
    339448                    $('#divScrollMain_0').html(''); 
     
    344453            } 
    345454            //SE FOR DE UMA PESQUISA RAPIDA 
    346             else if(ui.draggable.parents('[id^="content_id_"]')[0]){ 
    347                 move_search_msgs("content_id_"+border_id, folder_to, to_folder_title); 
     455            else if(ui.draggable.parents('[id^="content_id_"]')[0]) 
     456            { 
     457                move_search_msgs("content_id_" + border_id, folder_to, to_folder_title); 
    348458                return; 
    349459            } 
    350460            // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 
    351             else if(folder_to_move == "border_tr"){ 
     461            else if(folder_to_move == "border_tr") 
     462            { 
    352463                var id_msg = border_id.split("_")[0]; 
    353                 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 
     464                folder = $("#input_folder_" + border_id + "_r")[0] ? $("#input_folder_" + border_id + "_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id] : get_current_folder()); 
    354465                alternate_border(border_id); 
    355                 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 
     466                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title, true); 
    356467                return; 
    357468            } 
    358469            // SE O DROP VIER DA LISTA DE PASTAS 
    359             else{ 
    360                                 if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder")  
    361                 {  
    362                     return write_msg(get_lang("It isn't possible to send a folder by Archiver to My folders"));  
    363                 }  
    364                 else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder")  
    365                 {  
    366                     return write_msg(get_lang("It isn't possible to send a folder by My folders to Archiver"));  
    367                 }  
    368                 var folder_to_exist = folder_to_move.split(cyrus_delimiter);     
    369                 folder_to_exist = folder_to+cyrus_delimiter+folder_to_exist[folder_to_exist.length-1]; 
    370                  
     470            else 
     471            { 
     472                if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder") 
     473                { 
     474                    return write_msg(get_lang("It isn't possible to send a folder by Archiver to My folders")); 
     475                } 
     476                else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder") 
     477                { 
     478                    return write_msg(get_lang("It isn't possible to send a folder by My folders to Archiver")); 
     479                } 
     480                var folder_to_exist = folder_to_move.split(cyrus_delimiter); 
     481                folder_to_exist = folder_to + cyrus_delimiter + folder_to_exist[folder_to_exist.length - 1]; 
     482 
    371483                //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS 
    372  
    373                 if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){ 
     484                if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)) 
     485                { 
    374486                    return; 
    375487                } 
    376488                //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS; 
    377                  
    378489                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL 
    379                 if(folder_to_exist == folder_to_move){ 
     490                if(folder_to_exist == folder_to_move) 
     491                { 
    380492                    return write_msg(get_lang("Thie folder is already in this place")); 
    381493                } 
    382                  
     494 
    383495                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO 
    384                 if(folder_to_move == get_current_folder()){ 
     496                if(folder_to_move == get_current_folder()) 
     497                { 
    385498                    return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!")); 
    386499                } 
    387                  
     500 
    388501                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO 
    389                 if(ui.draggable.parent().find(".selected")[0]){ 
     502                if(ui.draggable.parent().find(".selected")[0]) 
     503                { 
    390504                    return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!")); 
    391505                } 
    392                  
     506 
    393507                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA 
    394                 if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){ 
     508                if(ui.draggable.parent().find('[id="' + folder_to + '"]')[0]) 
     509                { 
    395510                    return write_msg(get_lang("It's not possible to move this folder to its subfolders!")); 
    396                 }                    
    397                  
    398                 if($('[id="'+folder_to_exist+'"]').length){ 
     511                } 
     512 
     513                if($('[id="' + folder_to_exist + '"]').length) 
     514                { 
    399515                    return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name")); 
    400516                } 
    401                  
     517 
    402518                $(this).addClass("folders-loading"); 
    403519 
    404520 
    405                 if($(this).parents("li").find("input").first().val() == "localFolder"){ 
     521                if($(this).parents("li").find("input").first().val() == "localFolder") 
     522                { 
    406523                    var idFolder = $(this).parent().attr("id").split("_")[2]; 
    407524 
    408525                    expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]); 
    409                      cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
    410                 } else { 
    411                     $.ajax({ 
    412                         url : "controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ), 
    413                         success : function(data){ 
     526                    cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
     527                } 
     528                else 
     529                { 
     530                    $.ajax( 
     531                    { 
     532                        url: "controller.php?" + $.param( 
     533                        { 
     534                            action: "$this.imap_functions.move_folder", 
     535                            folder_to_move: folder_to_move, 
     536                            folder_to: folder_to 
     537                        }), 
     538                        success: function(data) 
     539                        { 
    414540                            cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu); 
    415541                            data = connector.unserialize(data); 
    416                             if(data == "Permission denied"){ 
     542                            if(data == "Permission denied") 
     543                            { 
    417544                                write_msg(get_lang("Permission denied")); 
    418                             }else if(data){ 
     545                            } 
     546                            else if(data) 
     547                            { 
    419548                                write_msg(get_lang("The folder was successfully moved")); 
    420                             } else { 
     549                            } 
     550                            else 
     551                            { 
    421552                                write_msg(get_lang("ERROR moving your folder.")); 
    422553                            } 
     
    427558        } 
    428559    }); 
    429     $(".folder").not(".shared-folders, .followup-messages").parent().find(".folder").hover( 
    430         function(){ 
    431             //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO! 
    432             if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect"))){ /*se houver a classe local-connect, não adiciona o botão de conectar*/ 
    433                 var folder_ = $(this); 
    434                 var folder_name; 
    435                 var shared = { 
    436                     head : false, 
    437                     valid : false 
    438                 }; 
    439                 if(folder_.parent().attr('id')){ 
    440                     folder_name = folder_.parent().attr('id').split(cyrus_delimiter); 
    441                     folder_name = folder_name[folder_name.length -1]; 
    442                     shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false; 
    443                 }else 
    444                     folder_name = "Root"; 
    445                  
    446                 if(shared.valid){ 
    447                     shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ?  true : false; 
    448                     var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter); 
    449                     var acls = shared_acls[folder_name_parts[0]+cyrus_delimiter+folder_name_parts[1]]; 
    450                 } 
    451  
    452                 html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls});                    
    453                     //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN 
    454                 var esc = false; 
    455                 $(folder_).append(html).find(".float-menu-edit").click(function(){ 
    456                     var folder_id = $(this).parents(".closed:first").attr('id'); 
    457                     var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 
    458                     if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 
    459                         return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!")); 
    460                     if($(this).parents(".closed:first").find("span.selected").length) 
    461                         return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!"));  
    462                     if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 
    463                         return; 
    464                     $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 
    465                     $(".new_folder").focus().keydown(function(event){ 
    466                         event.stopPropagation(); 
    467                         if(event.keyCode == 13){ 
    468                             if($(this).val() != ""){ 
    469                                 /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 
    470                                  * em parte do nome (palavra reservada para pastas locais) */ 
    471                                 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){ 
    472                                     return write_msg(get_lang("cannot create folder. try other folder name")); 
    473                                 } 
    474                                 var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val()); 
    475                                 if($('[id="'+new_name+'"]').length){ 
    476                                     $(".folders-loading").removeClass("folders-loading"); 
    477                                     write_msg(get_lang("Mailbox already exists")); 
    478                                     return draw_new_tree_folder(); 
    479                                 } 
    480                                 $(".new_folder").parent().addClass("folders-loading"); 
    481                                  
    482                                 if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1){ 
    483                                     var idFolder = $(this).parents("li").first().attr("id").split("_")[2]; 
    484                                     expresso_mail_archive.renameFolder(idFolder, new_name); 
    485                                      cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
    486                                 } else { 
    487  
    488                                 $.ajax({ 
    489                                     url : "controller.php?action=$this.imap_functions.ren_mailbox", 
    490                                     type : "POST", 
    491                                     data : "current="+folder_id+"&rename="+new_name, 
    492                                     success : function(data){ 
     560    $(".folder") 
     561    .not(".shared-folders, .followup-messages") 
     562    .parent() 
     563    .find(".folder") 
     564    .not($('#message-attach-dialog').find('.folder')) 
     565    .hover( 
     566    function() 
     567    { 
     568        //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO! 
     569        if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect"))) 
     570        { /*se houver a classe local-connect, não adiciona o botão de conectar*/ 
     571            var folder_ = $(this); 
     572            var folder_name; 
     573            var shared = { 
     574                head: false, 
     575                valid: false 
     576            }; 
     577            if(folder_.parent().attr('id')) 
     578            { 
     579                folder_name = folder_.parent().attr('id').split(cyrus_delimiter); 
     580                folder_name = folder_name[folder_name.length - 1]; 
     581                shared.valid = folder_.parent().attr('id').search("user"+cyrus_delimiter) == 0 ? true : false; 
     582            } 
     583            else folder_name = "Root"; 
     584 
     585            if(shared.valid) 
     586            { 
     587                shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false; 
     588                var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter); 
     589                var acls = shared_acls[folder_name_parts[0] + cyrus_delimiter + folder_name_parts[1]]; 
     590            } 
     591 
     592            html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", { 
     593                name_folder: folder_name, 
     594                flag: shared, 
     595                acl: acls 
     596            }); 
     597            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN 
     598            var esc = false; 
     599            $(folder_).append(html).find(".float-menu-edit").click(function() 
     600            { 
     601                var folder_id = $(this).parents(".closed:first").attr('id'); 
     602                var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 
     603                if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 
     604                { 
     605                    return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!")); 
     606                } 
     607                if($(this).parents(".closed:first").find("span.selected").length) 
     608                { 
     609                    return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!")); 
     610                } 
     611                if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 
     612                { 
     613                    return; 
     614                } 
     615                $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 
     616                $(".new_folder").focus().keydown(function(event) 
     617                { 
     618                    event.stopPropagation(); 
     619                    if(event.keyCode == 13) 
     620                    { 
     621                        if($(this).val() != "") 
     622                        { 
     623                            /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 
     624                             * em parte do nome (palavra reservada para pastas locais) */ 
     625                            if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1) 
     626                            { 
     627                                return write_msg(get_lang("cannot create folder. try other folder name")); 
     628                            } 
     629                            var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val()); 
     630                            if($('[id="' + new_name + '"]').length) 
     631                            { 
     632                                $(".folders-loading").removeClass("folders-loading"); 
     633                                write_msg(get_lang("Mailbox already exists")); 
     634                                return draw_new_tree_folder(); 
     635                            } 
     636                            $(".new_folder").parent().addClass("folders-loading"); 
     637 
     638                            if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1) 
     639                            { 
     640                                var idFolder = $(this).parents("li").first().attr("id").split("_")[2]; 
     641                                expresso_mail_archive.renameFolder(idFolder, new_name); 
     642                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
     643                            } 
     644                            else 
     645                            { 
     646                                $.ajax( 
     647                                { 
     648                                    url: "controller.php?action=$this.imap_functions.ren_mailbox", 
     649                                    type: "POST", 
     650                                    data: "current=" + folder_id + "&rename=" + new_name, 
     651                                    success: function(data) 
     652                                    { 
    493653                                        data = connector.unserialize(data); 
    494                                         if(data == "Permission denied"){ 
     654                                        if(data == "Permission denied") 
     655                                        { 
    495656                                            $(".folders-loading").removeClass("folders-loading"); 
    496657                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
     
    502663                                }); 
    503664 
    504                                 } 
    505                             }else{ 
    506                                 $(".new_folder").focusout(); 
    507                             } 
    508                         }else if( event.keyCode == 27){ 
    509                             draw_new_tree_folder(); 
    510                         } 
    511                     }).focusout(function(){ 
     665                            } 
     666                        } 
     667                        else 
     668                        { 
     669                            $(".new_folder").focusout(); 
     670                        } 
     671                    } 
     672                    else if(event.keyCode == 27) 
     673                    { 
    512674                        draw_new_tree_folder(); 
    513                     }).val(name); 
    514                 }) 
    515                 //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END 
    516                 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN 
    517                 .end().find(".float-menu-remove").click(function(){ 
    518                      
    519                     var folder_id = $(this).parents(".closed:first").attr('id'); 
    520                     var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>"; 
    521                      
    522                     if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 
    523                         return; 
    524                     $(this).parents(".closed:first").find(".folder").addClass("folders-loading");  
    525                      
    526                     if($(this).parents(".closed:first").find("ul").length){ 
    527                         $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 
    528                         return write_msg(get_lang("Delete/move subfolders first")); 
    529675                    } 
    530                     if($(this).parents(".closed:first").find("span.selected").length){ 
    531                         $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 
    532                         return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!"));  
    533                     } 
    534                     var folder_span = $(this); 
    535                     var confirm_text = get_lang("Do you wish to exclude the folder "); 
    536  
    537                     $.Zebra_Dialog(confirm_text+folder_name, { 
    538                         'type': 'question', 
    539                         'overlay_opacity': '0.5', 
    540                                                 'custom_class': 'custom-zebra-filter', 
    541                         'buttons':  [get_lang('Yes'), get_lang('No')], 
    542                         'onClose':  function(caption) { 
    543  
    544                             if(caption == get_lang('Yes')){ 
    545                                 if(folder_span.parents("li").find("input").first().val() == "localFolder"){ 
    546                                     var idFolder = folder_span.parents("li").first().attr("id").split("_")[2]; 
    547                                     expresso_mail_archive.deleteFolder(idFolder, folder_name); 
    548                                      cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
    549                                 } else { 
    550                                 $.ajax({ 
    551                                     url : "controller.php?action=$this.imap_functions.delete_mailbox", 
     676                }).focusout(function() 
     677                { 
     678                    draw_new_tree_folder(); 
     679                }).val(name); 
     680            }) 
     681            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END 
     682            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN 
     683            .end().find(".float-menu-remove").click(function() 
     684            { 
     685 
     686                var folder_id = $(this).parents(".closed:first").attr('id'); 
     687                var folder_name = "<strong>" + $.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0]) + "</strong>"; 
     688 
     689                if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 
     690                { 
     691                    return; 
     692                } 
     693                $(this).parents(".closed:first").find(".folder").addClass("folders-loading"); 
     694 
     695                if($(this).parents(".closed:first").find("ul").length) 
     696                { 
     697                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 
     698                    return write_msg(get_lang("Delete/move subfolders first")); 
     699                } 
     700                if($(this).parents(".closed:first").find("span.selected").length) 
     701                { 
     702                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 
     703                    return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!")); 
     704                } 
     705                var folder_span = $(this); 
     706                var confirm_text = get_lang("Do you wish to exclude the folder "); 
     707 
     708                $.Zebra_Dialog(confirm_text + folder_name, { 
     709                    'type': 'question', 
     710                    'overlay_opacity': '0.5', 
     711                    'custom_class': 'custom-zebra-filter', 
     712                    'buttons': [get_lang('Yes'), get_lang('No')], 
     713                    'onClose': function(caption) 
     714                    { 
     715 
     716                        if(caption == get_lang('Yes')) 
     717                        { 
     718                            if(folder_span.parents("li").find("input").first().val() == "localFolder") 
     719                            { 
     720                                var idFolder = folder_span.parents("li").first().attr("id").split("_")[2]; 
     721                                expresso_mail_archive.deleteFolder(idFolder, folder_name); 
     722                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
     723                            } 
     724                            else 
     725                            { 
     726                                $.ajax( 
     727                                { 
     728                                    url: "controller.php?action=$this.imap_functions.delete_mailbox", 
    552729                                    type: "POST", 
    553                                     data : "del_past="+folder_id, 
    554                                     success : function(data){ 
     730                                    data: "del_past=" + folder_id, 
     731                                    success: function(data) 
     732                                    { 
    555733                                        data = connector.unserialize(data); 
    556                                         if(data == "Mailbox does not exist"){ 
     734                                        if(data == "Mailbox does not exist") 
     735                                        { 
    557736                                            $(".folders-loading").removeClass("folders-loading"); 
    558737                                            return write_msg(get_lang("Mailbox does not exist")); 
    559                                         }else if(data == "Permission denied"){ 
     738                                        } 
     739                                        else if(data == "Permission denied") 
     740                                        { 
    560741                                            $(".folders-loading").removeClass("folders-loading"); 
    561742                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
     
    566747                                    } 
    567748                                }); 
     749                            } 
     750                        } 
     751                        else 
     752                        { 
     753                            folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 
     754                            return; 
     755                        } 
     756                    } 
     757                }); 
     758            }) 
     759            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END 
     760            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 
     761            .end().find(".float-menu-new").click(function() 
     762            { 
     763                $(this).parents(".float-menu").hide(); 
     764                var selected_li = $(this).parents(".closed:first"); 
     765                if(selected_li.find("ul:first").length) 
     766                { 
     767                    var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first")); 
     768                    if(selected_li.find(".expandable-hitarea").length) 
     769                    { 
     770                        selected_li.find(".expandable-hitarea").trigger('click'); 
     771                    } 
     772                    selected_li.find("ul:first").treeview( 
     773                    { 
     774                        add: new_folder 
     775                    }); 
     776                } 
     777                else if(selected_li.length) 
     778                { 
     779                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 
     780                    selected_li.treeview( 
     781                    { 
     782                        add: new_folder 
     783                    }); 
     784                } 
     785                else 
     786                { 
     787                    selected_li = $(this).parents("li:first"); 
     788                    if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length) 
     789                    { 
     790                        $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 
     791                    } 
     792                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 
     793                    selected_li.treeview( 
     794                    { 
     795                        add: new_folder 
     796                    }); 
     797                } 
     798                var existsIdenticalFolder = false; 
     799                selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event) 
     800                { 
     801                    event.stopPropagation(); 
     802 
     803                    existsIdenticalFolder = false; 
     804 
     805                    var ok = false; 
     806                    var makeChildren = function(auxNameFolder, father) 
     807                        { 
     808                            if(auxNameFolder.length == 0) return true; 
     809 
     810 
     811                            if(auxNameFolder[0] == "") 
     812                            { 
     813                                auxNameFolder.shift(); 
     814                                makeChildren(auxNameFolder, father); 
     815                                return true; 
     816                            } 
     817                            if(ok == false) 
     818                            { 
     819                                expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]); 
     820                            } 
     821 
     822                            expresso_mail_archive.getFoldersList(father); 
     823 
     824                            for(var ii = 0; ii < expresso_mail_archive.folders.length; ii++) 
     825                            { 
     826                                if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name) 
     827                                { 
     828                                    auxNameFolder.shift(); 
     829                                    save = expresso_mail_archive.folders; 
     830                                    expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]); 
     831                                    expresso_mail_archive.folders = save; 
     832                                    ok = true; 
     833                                    makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id); 
     834                                    return true; 
    568835                                } 
    569                             }else{ 
    570                                 folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 
    571                                 return; 
    572                             } 
    573                         } 
    574                     }); 
    575                     /* if(!confirm(confirm_text + folder_name)){ 
    576                         $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 
    577                         return; 
    578                     } */ 
    579                 }) 
    580                 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END 
    581                 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 
    582                 .end().find(".float-menu-new").click(function(){ 
    583                     $(this).parents(".float-menu").hide(); 
    584                     var selected_li = $(this).parents(".closed:first"); 
    585                     if(selected_li.find("ul:first").length){ 
    586                         var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first"));                                 
    587                         if(selected_li.find(".expandable-hitarea").length){ 
    588                             selected_li.find(".expandable-hitarea").trigger('click'); 
    589                         } 
    590                         selected_li.find("ul:first").treeview({ 
    591                             add: new_folder 
    592                         }); 
    593                     }else if(selected_li.length){ 
    594                         var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);                                 
    595                         selected_li.treeview({ 
    596                             add: new_folder 
    597                         }); 
    598                     }else{ 
    599                         selected_li = $(this).parents(".head_folder").parent(); 
    600                         if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){ 
    601                             $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 
    602                         } 
    603                         var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);                                 
    604                         selected_li.treeview({ 
    605                             add: new_folder 
    606                         }); 
     836                            } 
     837                        } 
     838 
     839 
     840                    if(event.keyCode == 13) 
     841                    { 
     842                        /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 
     843                         * em parte do nome (palavra reservada para pastas locais) */ 
     844                        if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1) 
     845                        { 
     846                            return write_msg(get_lang("cannot create folder. try other folder name")); 
     847                        } 
     848                        if($(this).parents("li").find("input[type=hidden]").val() == "localFolder") 
     849                        { 
     850 
     851                            $(".new_folder").parent().addClass("folders-loading"); 
     852 
     853                            var folderName = $(this).val(); 
     854                            var folder = (folderName != "" ? folderName : get_lang("New Folder")); 
     855                            var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home"; 
     856 
     857                            $(this).parents(".treeview:first").find("li").each(function() 
     858                            { 
     859                                var eachFolder = $(this).find("span:first").text().trim(); 
     860                                if(folder == eachFolder) 
     861                                { 
     862                                    existsIdenticalFolder = true; 
     863                                    return false; 
     864                                } 
     865                            }); 
     866 
     867                            if(existsIdenticalFolder) 
     868                            { 
     869                                event.stopPropagation(); 
     870                                write_msg(get_lang("Mailbox already exists")); 
     871                                draw_new_tree_folder(); 
     872                                return false; 
     873                            } 
     874 
     875                            if(folderName.indexOf("/") != -1) 
     876                            { 
     877                                auxNameFolder = folderName.split("/"); 
     878 
     879                                makeChildren(auxNameFolder, father); 
     880                            } 
     881                            else 
     882                            { 
     883                                var folder = (folderName != "" ? folderName : get_lang("New Folder")); 
     884                                create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox"), folder); 
     885                            } 
     886 
     887                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
     888                        } 
     889                        else 
     890                        { 
     891                            if($('[id="' + (selected_li.attr('id') ? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val() + '"]').length) 
     892                            { 
     893                                $(".folders-loading").removeClass("folders-loading"); 
     894                                write_msg(get_lang("Mailbox already exists")); 
     895                                return draw_new_tree_folder(); 
     896                            } 
     897                            $(".new_folder").parent().addClass("folders-loading"); 
     898                            create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id') ? selected_li.attr('id') : "INBOX")); 
     899                        } 
     900 
    607901                    } 
    608                     var existsIdenticalFolder = false; 
    609                     selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){ 
    610                         event.stopPropagation(); 
    611  
    612                         existsIdenticalFolder = false; 
    613  
    614                     var ok = false; 
    615                     var makeChildren = function(auxNameFolder, father){ 
    616                         if(auxNameFolder.length == 0) return true; 
    617  
    618  
    619                         if(auxNameFolder[0] == ""){ 
    620                             auxNameFolder.shift(); 
    621                             makeChildren(auxNameFolder, father); 
    622                             return true; 
    623                         } 
    624                         if(ok == false) 
    625                             expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]); 
    626                          
    627                         expresso_mail_archive.getFoldersList(father); 
    628  
    629                         for(var ii =0; ii<expresso_mail_archive.folders.length; ii++){ 
    630                             if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name){ 
    631                                  auxNameFolder.shift(); 
    632                                  save = expresso_mail_archive.folders; 
    633                                  expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]); 
    634                                  expresso_mail_archive.folders = save;  
    635                                  ok = true; 
    636                                  makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id); 
    637                                  return true; 
    638                             } 
    639                         } 
     902                    else if(event.keyCode == 27) 
     903                    { 
     904                        draw_new_tree_folder(); 
    640905                    } 
    641906 
    642  
    643                         if(event.keyCode == 13){ 
    644                             /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 
    645                              * em parte do nome (palavra reservada para pastas locais) */ 
    646                             if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){ 
    647                                 return write_msg(get_lang("cannot create folder. try other folder name")); 
    648                             } 
    649                             if($(this).parents("li").find("input[type=hidden]").val() == "localFolder"){ 
    650  
    651                                  $(".new_folder").parent().addClass("folders-loading"); 
    652  
    653                                  var folderName = $(this).val(); 
    654                                  var folder = (folderName != "" ? folderName : get_lang("New Folder")); 
    655                                  var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home"; 
    656  
    657                                  $(this).parents(".treeview:first").find("li").each(function(){ 
    658                                      var eachFolder = $(this).find("span:first").text().trim(); 
    659                                      if(folder == eachFolder){ 
    660                                         existsIdenticalFolder = true; 
    661                                         return false; 
    662                                      }   
    663                                  }); 
    664  
    665                                  if(existsIdenticalFolder){ 
    666                                     event.stopPropagation(); 
    667                                     write_msg(get_lang("Mailbox already exists")); 
    668                                     draw_new_tree_folder(); 
    669                                     return false; 
    670                                  } 
    671  
    672                                  if(folderName.indexOf("/") != -1){ 
    673                                     auxNameFolder = folderName.split("/"); 
    674  
    675                                     makeChildren(auxNameFolder, father); 
    676                                  } else { 
    677                                      var folder = (folderName != "" ? folderName : get_lang("New Folder")); 
    678                                      create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox") , folder); 
    679                                  } 
    680  
    681                                  cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
    682                             } else { 
    683                                 if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val()+'"]').length){ 
    684                                     $(".folders-loading").removeClass("folders-loading"); 
    685                                     write_msg(get_lang("Mailbox already exists")); 
    686                                     return draw_new_tree_folder(); 
    687                                 } 
    688                                 $(".new_folder").parent().addClass("folders-loading"); 
    689                                 create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id')? selected_li.attr('id') : "INBOX")); 
    690                             } 
    691  
    692                         }else if( event.keyCode == 27){ 
    693                             draw_new_tree_folder(); 
    694                         } 
    695  
    696                     }).focusout(function(){ 
    697                         if(!existsIdenticalFolder){ 
    698                             draw_new_tree_folder(); 
    699                         } 
    700                          
    701                     }); 
    702                 }).end().find(".float-menu-export").click(function(){ 
    703                     //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id")) 
    704  
    705                     var name_box = $(this).parents("li:first").attr("id"); 
    706  
    707                     var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length-1]; 
    708  
    709  
    710                     var hand_export = function(data){ 
    711                                                 clean_msg(); 
    712                         if(!data){ 
     907                }).focusout(function() 
     908                { 
     909                    if(!existsIdenticalFolder) 
     910                    { 
     911                        draw_new_tree_folder(); 
     912                    } 
     913 
     914                }); 
     915            }).end().find(".float-menu-export").click(function() 
     916            { 
     917                var name_box = $(this).parents("li:first").attr("id"); 
     918 
     919                var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length - 1]; 
     920 
     921 
     922                var hand_export = function(data) 
     923                    { 
     924                        clean_msg(); 
     925                        if(!data) 
     926                        { 
    713927                            write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.')) 
    714                         }else if(data["empty_folder"] || data == "empty_folder"){ 
     928                        } 
     929                        else if(data["empty_folder"] || data == "empty_folder") 
     930                        { 
    715931                            write_msg(get_lang("The selected folder is empty.")); 
    716                         }else 
    717                                                         download_attachments(null, null, data, null,null, name_folder +'.zip');                                          
     932                        } 
     933                        else download_attachments(null, null, data, null, null, name_folder + '.zip'); 
    718934                    } 
    719                     if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder"){                         
    720                           expresso_mail_archive.listMessages(name_box.split("_")[2]); 
    721                           var msgsArchive = expresso_mail_archive.messageslisted; 
    722                          
    723                            buildExportArchiver(msgsArchive, name_box); 
    724  
    725                     } else { 
    726                           cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box);   
    727                     } 
    728                     write_msg(get_lang('You must wait while the messages will be exported...'),true);         
    729                 }); 
    730                 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END 
    731             } 
    732             if(!$(".new_folder").length){ 
    733                 $(this).find(".float-menu:first").css("display", ""); 
    734             } 
    735         }, 
    736         function(){ 
    737             $(this).find(".float-menu:first").hide(); 
    738         } 
    739     ); 
    740     $("#new_m").html($('.selected').find(".folder_unseen").html() ? $('.selected').find(".folder_unseen").html() : "0").css("color", "red"); 
     935                if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder") 
     936                { 
     937                    expresso_mail_archive.listMessages(name_box.split("_")[2]); 
     938                    var msgsArchive = expresso_mail_archive.messageslisted; 
     939 
     940                    buildExportArchiver(msgsArchive, name_box); 
     941 
     942                } 
     943                else 
     944                { 
     945                    cExecute("$this.exporteml.export_all", hand_export, "folder=" + name_box); 
     946                } 
     947                write_msg(get_lang('You must wait while the messages will be exported...'), true); 
     948            }); 
     949            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END 
     950        } 
     951        if(!$(".new_folder").length) 
     952        { 
     953            $(this).find(".float-menu:first").css("display", ""); 
     954        } 
     955    }, function() 
     956    { 
     957        $(this).find(".float-menu:first").hide(); 
     958    }); 
     959    $("#new_m") 
     960    .html($('.selected .message_unseen_count:first .folder_unseen').html() ? $('.selected .message_unseen_count:first .folder_unseen').html() : "0") 
     961    .css("color", "red"); 
    741962} 
  • branches/2.5/prototype/modules/mail/js/followupflag.js

    r7780 r8232  
    7373                winElement.dialog("close"); 
    7474                $.each(selectedMessageIds, function(index, value){       
    75                         $('tr#' + value + ' .td-followup-flag').find('img').remove(); 
     75                        $('tr#' + value + ' .td-followup-flag')//.find('img').remove(); 
    7676                }); 
    7777                 
     
    173173                                                         alert('Uma ou mais mensagens não puderam ser sinalizadas. \nDetalhes do erro: limite de flags atingido para esta pasta.');      
    174174                                                } 
    175                                                 $.each(selectedMessageIds,function(index,value){         
    176                                                         var flagged = DataLayer.get('followupflagged', {filter: [ 
    177                                                                 'AND',  
    178                                                                 ['=', 'messageNumber', value],  
    179                                                                 ['=', 'folderName', folder_name] 
    180                                                         ]}); 
    181                                                         if (!flagged) 
    182                                                                 $('#td_message_followup_'+value).find(".flag-edited").css("background","#cccccc").find('img').remove(); 
    183                                                          
    184                                                         $('tr#' + value + ' .td-followup-flag').find('img').remove(); 
    185                                                 });                                      
     175                                                /*DIVIDE O ARRAY EM ARRAYS MENORES*/ 
     176                                                var splice = function(arr){ 
     177                                                        var newArray = []; 
     178                                                        while (arr.length > 500){ 
     179                                                                newArray[newArray.length] = arr.splice(0,500); 
     180                                                        } 
     181                                                        if (arr.length)  
     182                                                                newArray[newArray.length] = arr; 
     183                                                        return newArray; 
     184                                                } 
     185                                                if (selectedMessageIds.length > 500){ 
     186                                                        var arrayIndex = selectedMessageIds; 
     187                                                        $.each(splice(arrayIndex),function(iterator,subarray){ 
     188                                                                var flaggeds = DataLayer.get('followupflagged', {filter: [ 
     189                                                                                'AND',  
     190                                                                                ['IN', 'messageNumber', subarray],  
     191                                                                                ['IN', 'folderName', folder_name] 
     192                                                                ]}); 
     193                                                                $.each(subarray,function(index,value){   
     194                                                                        var flagged = false; 
     195                                                                        $.each(flaggeds,function(i,v){ 
     196                                                                                if (v.messageNumber == value) 
     197                                                                                        flagged = true; 
     198                                                                        }); 
     199                                                                        if (!flagged) 
     200                                                                                $('#td_message_followup_'+value).find(".flag-edited").css("background","#cccccc").find('img').remove();                                          
     201                                                                        $('tr#' + value + ' .td-followup-flag').find('img').remove(); 
     202                                                                }); 
     203                                                        });      
     204                                                }                                        
    186205                                        }); 
    187206                                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true); 
     
    267286                         
    268287                        $.each(selectedMessageIds, function(index, value){       
    269                                 $('tr#' + value + ' .td-followup-flag').find('img').remove(); 
     288                                $('tr#' + value + ' .td-followup-flag').find('img')//.remove(); 
    270289                        }); 
    271290                         
     
    756775 
    757776} 
    758                  
    759 $('#main_table').ready(function(){ 
    760         handlerMessageFilter = function (data) { 
    761                 alarmFollowupflagged(null, data); 
    762         } 
    763         /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 
    764         cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 
    765 }); 
    766  
     777 
     778if(preferences['use_alert_filter_criteria'] == "1") 
     779{ 
     780    $('#main_table').ready(function(){ 
     781        handlerMessageFilter = function (data) { 
     782            alarmFollowupflagged(null, data); 
     783        } 
     784        /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 
     785        cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 
     786    }); 
     787} 
     788 
     789 
  • branches/2.5/prototype/modules/mail/js/label.js

    r7750 r8232  
    8383} 
    8484 
     85function returnLabels(msgsReference){ 
     86        var folderIndex = {}; 
     87   for (var i=0; i < msgsReference.length; i++) {        
     88       if( folderIndex[ msgsReference[i].folderName] ){         
     89           folderIndex[ msgsReference[i].folderName].push( msgsReference[i].messageNumber );           
     90       }else{ 
     91           folderIndex[ msgsReference[i].folderName] = [ msgsReference[i].messageNumber ]; 
     92       }       
     93   } 
     94   var labels = [];  
     95   for(var folder in folderIndex){ 
     96                var currentLabes = DataLayer.get('labeled',{ filter:[ 
     97               'AND', 
     98               ['=', 'folderName', folder ], 
     99               ['IN', 'messageNumber', folderIndex[ folder ] ] 
     100               ], criteria: {deepness: '2'}}); 
     101 
     102                if( $.isArray( currentLabes ) ) 
     103                        labels = labels.concat( currentLabes ); 
     104   } 
     105   var labelsIndex = {}; 
     106   $.each( labels, function(i, e){ 
     107       if( labelsIndex[ e.messageNumber ] ){ 
     108           labelsIndex[ e.messageNumber ][ 'labels' ].push( e.label ); 
     109       }else{ 
     110           labelsIndex[ e.messageNumber ] = e; 
     111           labelsIndex[ e.messageNumber ][ 'labels' ] = []; 
     112           labelsIndex[ e.messageNumber ][ 'labels' ].push( e.label ); 
     113       } 
     114   }); 
     115   return labelsIndex; 
     116} 
     117 
     118 
    85119function updateMessageLabels(msgsReference){ 
    86         for(var i = 0; i < msgsReference.length; i++){ 
    87                 updateLabelsColumn({msg_number: msgsReference[i].messageNumber, boxname: msgsReference[i].folderName}); 
    88         }        
     120        var labelsIndex = returnLabels(msgsReference); 
     121   $.each(labelsIndex,function(index,e){ 
     122           updateLabelsColumn({msg_number: e.messageNumber, boxname: e.folderName,labels: e.labels, forceIcon: true}); 
     123   }); 
    89124} 
    90125 
     
    164199                                                winElement.find('.edit').unbind("click").click(editLabel);                               
    165200                                                winElement.find('.close').click(deleteLabel); 
    166                                                  
    167                                                 draw_tree_labels(); 
     201                        if( preferences['use_followupflags_and_labels'] == "1" ) 
     202                                                    draw_tree_labels(); 
    168203                                                var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true); 
    169204                                                updateMessageLabels(msgsReference); 
     
    291326                        .find("li:first") 
    292327                        .fadeIn("slow").click(configureLabel); 
    293                          
    294                         draw_tree_labels(); 
     328            if( preferences['use_followupflags_and_labels'] == "1" ) 
     329                            draw_tree_labels(); 
    295330 
    296331                        $(".label-list-container .label-list li").not(".empty-item").click(function(){ 
  • branches/2.5/prototype/modules/mail/templates/attachment.ejs

    r7697 r8232  
    1 <div id="fileupload_msg<%=data.ID%>" class="fileupload" style="margin : 5px 0px 0px 0px; padding-bottom : 5px;"> 
    2     <div class="button-files-upload"> 
    3     <button class="fileUploadButton">Anexar Arquivos</button> 
    4                         <INPUT type="file" id="fileInput<%=data.ID%>" name="files[]" style="display:none;" multiple></INPUT> 
     1<div id="fileupload_msg<%=data.ID%>" class="fileupload" style="margin : 15px 0px -5px -10px; padding-bottom : 5px;"> 
     2        <div class="row fileupload-buttonbar"> 
     3                <div class="button-files-upload"> 
     4                        <<%= is_webkit ? 'button' : 'span style="height: 22px; cursor:pointer;"' %>  class="fileinput-button button small"> 
     5                                <span style="margin-top: 4px; cursor:pointer;"><i class="icon-plus icon-white"></i>Anexar arquivos</span> 
     6                                <INPUT type="file" id="fileInput<%=data.ID%>" name="files[]" multiple></INPUT> 
    57                        </<%= is_webkit ? 'button' : 'span' %>> 
    6                         <button class="message-attach-link button-small"> 
     8                        <button class="message-attach-link button small"> 
    79                                <span>Anexar mensagens</span> 
    810                        </button> 
    9     </div> 
    10 <div class="files-list"> 
     11                </div> 
     12        </div> 
     13        <br /> 
     14        <div class="files-list"> 
    1115                <div class="attachments-list ui-corner-all" style="display:none;"></div> 
    1216        </div> 
  • branches/2.5/prototype/modules/mail/templates/detailedfoldertree.ejs

    r8113 r8232  
    55                        Inbox: {name:'Caixa de Entrada', classe:'inbox'},  
    66                }; 
    7     specialFolders[outboxfolder] = {name: 'Caixa de Saída', classe:'outbox'}; 
     7    specialFolders[outboxfolder] = {name: 'Caixa de Saï¿œda', classe:'outbox'}; 
    88        specialFolders[trashfolder] = {name:'Lixeira', classe:'trash'}; 
    99        specialFolders[draftsfolder] = {name:'Rascunhos', classe:'drafts'}; 
     
    2626                  %><li id="<%= array_trees[i].id %>" class="closed"><span class="folder <%= folder_class %>" title="<%= folder_name %>" style="text-align : left; position : static;"><%= folder_name %> 
    2727                  <% if(array_trees[i].messageCount.unseen > 0){        %> 
    28                         <span style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_unseen" class="folder_unseen" style="color : red; text-align : left;"><%= array_trees[i].messageCount.unseen %></label>]</span> 
    29                   <% }  %> 
     28                        <span class="message_unseen_count" style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_unseen" class="folder_unseen" style="color : red; text-align : left;"><%= array_trees[i].messageCount.unseen %></label>]</span> 
     29          <% }  %> 
    3030                  <% if(array_trees[i].children_unseen > 0){    %> 
    31                         <span style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_children_unseen" class="folder_unseen" style="color : blue; text-align : left;"><%= array_trees[i].children_unseen %></label>]</span> 
     31                        <span style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_children_unseen" class="folder_children_unseen" style="color : blue; text-align : left;"><%= array_trees[i].children_unseen %></label>]</span> 
    3232                  <% }  %> 
    3333                  </span> 
     
    6767 
    6868          <%}%> 
     69        <% if(preferences['use_followupflags_and_labels'] == "1"){%> 
    6970          <li><span class="folder head_folder all_accomp followup-messages">Para acompanhamento</span> 
     71          <%}%> 
    7072          </li> 
    7173        </ul> 
Note: See TracChangeset for help on using the changeset viewer.