Changeset 5533


Ignore:
Timestamp:
02/22/12 18:04:20 (12 years ago)
Author:
douglasz
Message:

Ticket #1875 - Commit inicial do codigo das funcionalidades de marcadores e sinalizadores

Location:
trunk
Files:
30 added
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/inc/class.imap_functions.inc.php

    r5520 r5533  
    157157 
    158158        function get_range_msgs2($params) 
    159         {  
     159        {        
    160160            // Free others requests 
    161161            session_write_close(); 
     
    193193                                    $sample = true; 
    194194                                             
    195                                     $return[$i] = $this->get_info_head_msg( $msg_number , $sample ) ; 
     195                                    $return[$i] = $this->get_info_head_msg( $msg_number , $sample ); 
    196196                                    $i++; 
    197197                            } 
     
    228228                return $return; 
    229229    } 
    230      
     230         
     231         
     232        function getMessages($params) { 
     233                $result = array(); 
     234 
     235                $exporteml = new ExportEml(); 
     236                $unseen_msgs = array(); 
     237                 
     238                foreach($params['messages'] as $folder => $messages) { 
     239                        foreach($messages as $msg_number) { 
     240 
     241                                $this->mbox = $this->open_mbox($folder); 
     242                         
     243                                if (isset($params['details']) && $params['details'] == 'all') { 
     244                                        $message = $this->get_info_msg(array('msg_number' => $msg_number, 'msg_folder' =>urlencode($folder))); 
     245                                } else { 
     246                                        $message['headers'] = $this->get_info_head_msg($msg_number, true); 
     247                                        //$message['attachments'] = $exporteml->get_attachments_in_array(array("num_msg" => $msg_number)); 
     248                                } 
     249 
     250                                imap_close($this->mbox); 
     251                                $this->mbox = false; 
     252 
     253                                if($msg_info['Unseen'] == "U" || $msg_info['Recent'] == "N") { 
     254                                        array_push($unseen_msgs,$msg_number); 
     255                                } 
     256                                 
     257                                $result[$folder][] = $message; 
     258                        } 
     259                        if($unseen_msgs){ 
     260                                $msgs_list = implode(",",$unseen_msgs); 
     261                                $array_msgs = array('folder' => $folder, "msgs_to_set" => $msgs_list, "flag" => "unseen"); 
     262                                $this->set_messages_flag($array_msgs); 
     263                        } 
     264                } 
     265                 
     266                return $result; 
     267        }        
     268 
    231269        /** 
    232270        *  Decodifica uma string no formato mime RFC2047 
     
    731769                        $array_msgs = array('folder' => $new_params["msg_folder"], "msgs_to_set" => $msgs_list, "flag" => "unseen"); 
    732770                        $this->set_messages_flag($array_msgs); 
    733                 } 
     771                }                                        
     772                                         
    734773                return $return; 
    735774        } 
    736         } 
     775} 
    737776 
    738777        /** 
     
    50845123        } 
    50855124         
    5086         function parseCriteriaSearchMail($search) 
    5087         { 
    5088             $criteria = ''; 
    5089             $searchArray = explode(' ', $search); 
    5090  
    5091             foreach ($searchArray as $v) 
    5092                 if(trim($v) !== '' ) 
    5093                     $criteria .= 'TEXT "'.$v.'" ' ; 
    5094             
    5095             return $criteria; 
    5096         } 
     5125        function parseCriteriaSearchMail($search) 
     5126        { 
     5127                $criteria = ''; 
     5128                $searchArray = explode(' ', $search); 
     5129 
     5130                foreach ($searchArray as $v) 
     5131                        if(trim($v) !== '' ) 
     5132                                $criteria .= 'TEXT "'.$v.'" ' ; 
     5133            
     5134                return $criteria; 
     5135        } 
    50975136         
    50985137        function quickSearchMail( $params ) 
    50995138        { 
     5139                include '../prototype/api/controller.php'; 
    51005140                $return = array(); 
    51015141                $return['folder'] = $params['folder']; 
     
    51145154                $count = 0; 
    51155155                 
    5116                 $search = $this->parseCriteriaSearchMail($params['search']); 
    5117                                  
     5156                if (!preg_match('/KEYWORD/i', $params['search'])){ 
     5157                        $search = $this->parseCriteriaSearchMail($params['search']); 
     5158                } else { 
     5159                        $search = $params['search']; 
     5160                } 
     5161         
    51185162                foreach ($params['folder'] as $folder)  
    51195163                { 
     
    51395183                                        $return['msgs'][$i]['subject'] .= mb_convert_encoding($tmp->text, 'UTF-8', 'UTF-8 , ISO-8859-1'); 
    51405184                                 
    5141                                  
     5185                                $filter = array('AND', array('=', 'folderName', $folder), array('=','messageNumber', $v)); 
     5186                                $followupflagged = Controller::find( 
     5187                                        array('concept' => 'followupflagged'), 
     5188                                        false,  
     5189                                        array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     5190                                ); 
     5191                                foreach ($followupflagged as $i => $v) 
     5192                                        { 
     5193                                                if(isset($v['followupflagId'])) 
     5194                                                { 
     5195                                                        $followupflag = Controller::find( array( 'concept' => 'followupflag' ) , false, array( 'filter' => array('=', 'id'  ,  $v['followupflagId']) ));      
     5196                                                        $followupflagged[$i]['followupflag'] = $followupflag[0]; 
     5197                                                } 
     5198 
     5199                                        } 
     5200                                         
     5201                                $labeleds = Controller::find( 
     5202                                        array('concept' => 'labeled'), 
     5203                                        false,  
     5204                                        array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     5205                                ); 
     5206                                                 
    51425207                                $return['msgs'][$i]['flag'] = ' '; 
    51435208                                $return['msgs'][$i]['flag'] .= $msg->Unseen ? $msg->Unseen : ''; 
     
    51545219                                $return['msgs'][$i]['boxname'] = $folder; 
    51555220                                $return['msgs'][$i]['uid'] = $v; 
     5221                                $return['msgs'][$i]['followupflagged'] = $followupflagged[0]; 
     5222                                $return['msgs'][$i]['labels'] = $labeleds; 
    51565223                                $i++; 
    51575224                        }        
  • trunk/expressoMail1_2/index.php

    r5530 r5533  
    4444                                        <script src="../prototype/plugins/ejs/ejs.js" language="javascript"></script> 
    4545                                        <script src="../prototype/plugins/store/jquery.store.js" language="javascript"></script> 
     46                                        <script src="../prototype/plugins/farbtastic/farbtastic.js" language="javascript"></script> 
    4647                                        <script src="../prototype/api/datalayer.js" language="javascript"></script>                                      
    4748                                        <script type="text/javascript" src="../prototype/plugins/scrollto/jquery.scrollTo.js"></script> 
     
    5758                                        <link rel="stylesheet" type="text/css" href="../prototype/plugins/zebradialog/css/zebra_dialog.css"></link> 
    5859                                        <link rel="stylesheet" type="text/css" href="../prototype/plugins/fileupload/jquery.fileupload-ui.css"></link> 
     60                                        <link rel="stylesheet" href="../prototype/plugins/farbtastic/farbtastic.css" type="text/css" > 
    5961                                        <script type="text/javascript" src="../prototype/plugins/zebradialog/javascript/zebra_dialog.js"></script> 
    6062                                        <script type="text/javascript" src="../prototype/plugins/datejs/date-pt-BR.js"></script> 
     
    115117        <script src="../prototype/plugins/countdown/jquery.countdown.min.js" type="text/javascript"></script> 
    116118        <script src="../prototype/plugins/countdown/jquery.countdown-pt-BR.js" type="text/javascript"></script>          
     119         
     120                 
    117121        '; 
    118122         
     123        echo '<script src="../prototype/modules/mail/js/label.js" type="text/javascript"></script>';     
     124        echo '<script src="../prototype/modules/mail/js/followupflag.js" type="text/javascript"></script>'; 
     125         
     126                 
     127        //followupflags 
     128        echo'<link rel="stylesheet" href="../prototype/modules/mail/css/followupflag.css" type="text/css" />'; 
     129         
    119130        /* 
    120          * TODO: implementar o controle como preferência do usuário  
     131         * TODO: implementar o controle como preferência do usuário  
    121132         * 
    122133         */ 
     
    348359        echo ' 
    349360        <link rel="stylesheet" href="../prototype/modules/attach_message/attach_message.css" type="text/css" /> 
     361         
     362                                        <script type="text/javascript" src="../prototype/plugins/jquery/i18n/jquery.ui.datepicker-pt-BR.js"></script> 
     363                                        <script type="text/javascript" src="../prototype/plugins/timepicker/jquery-ui-timepicker-addon.js"></script> 
     364                                        <script type="text/javascript" src="../prototype/plugins/timepicker/localization/jquery-ui-timepicker-pt-BR.js"></script> 
    350365        <script type="text/javascript"> 
    351366                init(); 
     
    373388<body scroll="no" style="overflow:hidden"> 
    374389<link rel="stylesheet" href="../prototype/modules/attach_message/attach_message.css" type="text/css" /> 
     390<link rel="stylesheet" href="../prototype/modules/mail/css/label.css" type="text/css" />         
    375391<link rel='stylesheet' type='text/css' href='../prototype/modules/calendar/css/layout.css' /> 
    376392<link rel='stylesheet' type='text/css' href='../prototype/modules/calendar/css/style.css' /> 
  • trunk/expressoMail1_2/js/common_functions.js

    r5497 r5533  
    657657        } 
    658658        cExecute ("$this.imap_functions.getacl", handler_imap_getacl); 
     659} 
     660 
     661function configureLabels(data){ 
     662 
     663        dialogElement = $('.label-configure-win').html(DataLayer.render("../prototype/modules/mail/templates/label_configure.ejs", {})) 
     664         
     665        dialogElement.dialog({ 
     666                width:821, 
     667                height:410, 
     668                title:' Configuração do Marcador', 
     669                resizable:false, 
     670                modal: true, 
     671                closeOnEscape:true, 
     672                close:function(event, ui) {event.stopPropagation();}, 
     673                autoOpen:false, 
     674                dialogClass: 'dialog-configure-label' 
     675        }); 
     676        init_label({window:dialogElement, selectedItem:data.selectedItem});      
     677        dialogElement.dialog("open"); 
     678} 
     679 
     680function configureFollowupflag(){ 
     681 
     682        var messages = new Array(); 
     683        var selectedMessageIds = new Array(); 
     684        var folder_name; 
     685        if (currentTab == 0) { 
     686                selectedMessageIds = get_selected_messages().split(","); 
     687        } else { 
     688                selectedMessageIds = get_selected_messages_search().split(","); 
     689                var id_border = currentTab.replace(/[a-zA-Z_]+/, ""); 
     690        } 
     691         
     692         
     693        for (var i=0; i<selectedMessageIds.length; i++) { 
     694                if (currentTab == 0) { 
     695                        folder_name = current_folder; 
     696                }else{ 
     697                        var tr = Element(selectedMessageIds[i]+'_s'+id_border); 
     698                        folder_name = tr.getAttribute('name'); 
     699                } 
     700                messages.push(onceOpenedHeadersMessages[folder_name][selectedMessageIds[i]]); 
     701        } 
     702 
     703        if(!User.followupflags) 
     704                User.followupflags = DataLayer.get('followupflag',true); 
     705        var data = { 
     706                followupflags: User.followupflags, 
     707                messages: messages 
     708        }; 
     709        dialogElement = $('.followupflag-configure-win').html(DataLayer.render("../prototype/modules/mail/templates/followupflag_configure.ejs", data)) 
     710 
     711        dialogElement.dialog({ 
     712                width:542, 
     713                height:420, 
     714                title:get_lang('Acompanhamento'), 
     715                resizable:false, 
     716                modal: true, 
     717                closeOnEscape:true, 
     718                close:function(event, ui) { 
     719                        $('.followupflag-configure-win').addClass('hidden'); 
     720                        event.stopPropagation(); 
     721                }, 
     722                autoOpen:false 
     723        });      
     724        init_followup({window:dialogElement, selectedMessages:selectedMessageIds}); 
     725        $('.followupflag-configure-win').removeClass('hidden'); 
     726        dialogElement.dialog("open"); 
    659727} 
    660728 
  • trunk/expressoMail1_2/js/doiMenuData.js

    r5497 r5533  
    88} 
    99 
    10 $.contextMenu({ 
    11         selector: ".table_box tbody tr", 
    12         callback: function(key, options) { 
    13                 //TODO - default actions 
    14                 //TODO - aply labels actions 
    15  
    16         }, 
    17         items: { 
    18                 "flagSeen":      {"name": get_lang("Mark as") + " " + get_lang('seen'), "icon": "seen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages'); }}, 
    19                 "flagUnseen":    {"name": get_lang("Mark as") + " " + get_lang('unseen'), "icon": "unseen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages'); }}, 
    20                 "flagFlagged":   {"name": get_lang("Mark as") + " " + get_lang('important'), "icon": "important", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages'); }}, 
    21                 "flagUnflagged": {"name": get_lang("Mark as") + " " + get_lang('normal'), callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages'); }}, 
    22                  
    23                  
    24                 "sep2": "---------", 
    25                 "move": {"name": get_lang("Move to")+"...", "icon": "move", callback: function(key, opt){ wfolders.makeWindow('', 'move_to'); }}, 
    26                 "remove": {"name": get_lang("Delete"),      "icon": "delete", callback: function(key, opt){ proxy_mensagens.delete_msgs('null','selected','null'); }}, 
    27                 "export": {"name": get_lang("Export"),      "icon": "export", callback: function(key, opt){ proxy_mensagens.export_all_messages(); }} 
    28         } 
    29 }); 
    30  
    3110 
    3211/** 
    33  * Cria a lista de itens para o menu ferramentas 
     12 * Cria a lista de marcadores para o submenu "Marcadores" 
    3413 */ 
     14function getLabels(){ 
     15        var labels = DataLayer.get('label',{criteria:{order: 'name'}}); 
     16        var menuLabelItems = {}; 
     17        for(var i=0; i<labels.length; i++) { 
     18                menuLabelItems["label"+labels[i].id] = { 
     19                        "name" : labels[i].name, 
     20                } 
     21        } 
     22        return menuLabelItems; 
     23} 
     24 
     25/** 
     26 *      Carrega o menu de opção de uma mensagem 
     27 */ 
     28function loadMenu(){ 
     29        var labelItems = getLabels(); 
     30        $.contextMenu({ 
     31                selector: ".table_box tbody tr", 
     32                callback: function(key, options) { 
     33                        //TODO - default actions 
     34                         
     35                        /**  
     36                         * Aply labels to selected messages 
     37                         */ 
     38                        var isLabel = key.match(/label(.*)/); 
     39                        if (isLabel && isLabel.length > 1) { 
     40                                var label = { 
     41                                        id: isLabel[1] 
     42                                }        
     43                                var lableleds = new Array(); 
     44                                 
     45                                if(currentTab == 0){ 
     46                                        var messages = get_selected_messages().split(','); 
     47                                }else{ 
     48                                        var messages = get_selected_messages_search().split(','); 
     49                                } 
     50 
     51                                for (var i=0; i < messages.length; i++) { 
     52                                        var hasLabel = DataLayer.get('labeled', [ 
     53                                                        'AND', 
     54                                                        ['=', 'labelId', label.id],  
     55                                                        ['=', 'folderName', current_folder],  
     56                                                        ['=', 'messageNumber', messages[i]] 
     57                                        ]); 
     58                                        if (!hasLabel) { 
     59                                                lableleds.push( 
     60                                                        DataLayer.put('labeled', { 
     61                                                                labelId:label.id,  
     62                                                                folderName:current_folder,  
     63                                                                messageNumber:messages[i] 
     64                                                        }) 
     65                                                ); 
     66                                                 
     67                                        } 
     68                                } 
     69                                DataLayer.commit(); 
     70                                for (var i=0; i < messages.length; i++) { 
     71                                        updateLabelsColumn({msg_number:messages[i], labels:false}); 
     72                                } 
     73                        } 
     74                }, 
     75                items: { 
     76                        "flagSeen":      {"name": get_lang("Mark as") + " " + get_lang('seen'), "icon": "seen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages'); }}, 
     77                        "flagUnseen":    {"name": get_lang("Mark as") + " " + get_lang('unseen'), "icon": "unseen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages'); }}, 
     78                        "flagFlagged":   {"name": get_lang("Mark as") + " " + get_lang('important'), "icon": "important", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages'); }}, 
     79                        "flagUnflagged": {"name": get_lang("Mark as") + " " + get_lang('normal'), callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages'); }}, 
     80                         
     81                        "sep1": "---------", 
     82                        "label": { "name": get_lang("Labels"), "items": labelItems}, 
     83                        "follouwpflag":{"name": get_lang("Follow up"), callback: function(key, opt){ configureFollowupflag(); } }, 
     84                         
     85                        "sep2": "---------", 
     86                        "move": {"name": get_lang("Move to")+"...", "icon": "move", callback: function(key, opt){ wfolders.makeWindow('', 'move_to'); }}, 
     87                        "remove": {"name": get_lang("Delete"),      "icon": "delete", callback: function(key, opt){ proxy_mensagens.delete_msgs('null','selected','null'); }}, 
     88                        "export": {"name": get_lang("Export"),      "icon": "export", callback: function(key, opt){ proxy_mensagens.export_all_messages(); }} 
     89                } 
     90        }); 
     91} 
     92/*FIM*/ 
     93loadMenu(); 
     94 
    3595if (!expresso_offline) { 
    3696        var menuToolsItems = { 
     
    40100                "i04": {"name": get_lang("Edit folders"), "icon": "edit-folder", callback: folderbox }, 
    41101                "i05": {"name": get_lang("Share mailbox"), "icon": "share-mailbox", callback: sharebox }, 
    42  
    43                 "i08": {"name": get_lang("Empty trash"), "icon": "empty-trash", callback: function(key, opt){ empty_trash_imap() } } 
     102                "i06": {"name": get_lang("Labels"), "icon": "tag", callback: configureLabels },  
     103                "i08": {"name": get_lang("Empty trash"), "icon": "empty-trash", callback: function(key, opt){ empty_trash_imap }} 
    44104        }; 
    45105                 
     
    56116} 
    57117 
    58 /** 
    59  * Aplica o menu ferramentas 
    60  */ 
    61118$.contextMenu({ 
    62119        selector: "#link_tools", 
     
    70127        events: { 
    71128                show: function(opt) { 
    72                         /** 
    73                          * Modifica cor do elemento de trigger para o menu 
    74                          */ 
    75129                        var $trigger = $(opt.selector).css({'background-color': '#EEEEEE', 'border': '1px solid #CCCCCC'}); 
    76130                        $('.context-menu-list.context-menu-root').css({'width': $trigger.css('width') }); 
     
    78132                }, 
    79133                hide: function(opt) { 
    80                         /** 
    81                          * Modifica cor do elemento de trigger para o menu 
    82                          */ 
    83134                        $(opt.selector).css({'background-color': '', 'border': 'none'}); 
    84135                        return true; 
     
    86137        }, 
    87138        callback: function(key, options) { 
    88                 //TODO - default actions                 
     139                 
    89140        }, 
    90141        items: menuToolsItems 
    91142}); 
    92143 
     144 
     145function updateLabelsColumn(messageInfo) { 
     146        $('#td_message_labels_' + messageInfo.msg_number +', #td_message_labels_search_' + messageInfo.msg_number) 
     147        .html('<img src="../prototype/modules/mail/img/tag.png">'); 
     148 
     149        var menuItems = {}; 
     150        if (messageInfo.labels) { 
     151                menuItems = messageInfo.labels; 
     152        } else { 
     153                var labeleds = DataLayer.get('labeled', { 
     154                        filter: [ 
     155                                'AND', 
     156                                ['=', 'folderName', current_folder],  
     157                                ['=', 'messageNumber', messageInfo.msg_number] 
     158                        ], 
     159                        criteria: {deepness: 2} 
     160                }); 
     161                if (labeleds) { 
     162                        for (var i=0; i < labeleds.length; i++) 
     163                                menuItems[labeleds[i].label.id] = labeleds[i].label; 
     164                } else { 
     165                        //não tem labels 
     166                        return false; 
     167                } 
     168        } 
     169 
     170        $.contextMenu( 'destroy', '#td_message_labels_' + messageInfo.msg_number +', #td_message_labels_search_' + messageInfo.msg_number); 
     171 
     172        $.contextMenu({ 
     173                selector: '#td_message_labels_' + messageInfo.msg_number +', #td_message_labels_search_' + messageInfo.msg_number, 
     174                trigger: 'hover', 
     175                delay:100, 
     176                autoHide:true, 
     177                callback: function(key, options) { 
     178                        //alert($(this).attr('id')); 
     179                }, 
     180                items: menuItems 
     181        }); 
     182} 
     183 
     184/** 
     185 * TODO 
     186 * * ao clicar com o botao direito em cima da mensagem, selecionar a mensagem 
     187 * * clarear a cor do menu ferramentas 
     188 * * pintar o botao ferramentas, quando clicado, da cor do menu 
     189 *  
     190 */ 
  • trunk/expressoMail1_2/js/drag_area.js

    r5368 r5533  
    2727         
    2828} 
    29  
     29/* 
    3030DragArea.prototype.makeMenuBox = function(element){ 
    3131 
     
    5252         
    5353} 
     54*/ 
    5455 
    5556DragArea.prototype.makeDragged = function(element, msg_number, subject, from_list, folder){ 
     
    7273                                        changeBgColor(is_ie ? window.event : e, msg_number); 
    7374                                } 
    74                                 ConstructRightMenu(is_ie ? window.event : e); 
     75                                //ConstructRightMenu(is_ie ? window.event : e); 
    7576                        }                        
    7677                        return false; 
  • trunk/expressoMail1_2/js/draw_api.js

    r5527 r5533  
    1  var openTab = { 
     1/** 
     2 * Estrutura que guarda em cache as mensagens abertas, a exemplo da estrutura utilizada 
     3 * na funcionalidade de anexar mensagens. 
     4 * Isto reduz a necessidade de acessar estruturas da tela para obter informações sobre  
     5 * as mensagens, como tem sido para encaminhar, responder, etc. 
     6 * Manter os dados 'limpos' em uma estrutura 'somente-leitura' permite maior flexibilidade 
     7 * para mudar a tela e menos processamento de limpeza de dados (por exemplo retirar tags de  
     8 * formatação, etc.)  
     9 */ 
     10onceOpenedHeadersMessages = {}; 
     11 
     12var openTab = { 
    213        'type' : [], // 8 types of tabs, further info. see expressolivre.org/dev/wiki/mail/Documentacao 
    314        'content_id' : [], 
     
    153164                        var noden=document.getElementById('lnews_roottree_folders'); 
    154165                        noden.style.backgroundImage="url(templates/"+template+"/images/menu/rss.png)"; 
     166                         
     167                         
     168                         
    155169                } 
    156170//              cExecute('$this.rss.getChannels',handlerChannel); 
     
    206220                        } 
    207221 
    208                 /*tree_folders.draw(Element('content_folders')); 
     222                tree_folders.draw(Element('content_folders')); 
    209223                if (!expresso_offline) { 
    210224                        n_root.changeState(); 
     
    214228                        root_local.changeState(); 
    215229                        tree_folders.getNodeById('local_Inbox')._select(); 
    216                 }*/ 
    217  
     230                } 
     231                 
    218232                var trash_span = document.getElementById(mount_url_folder(["lINBOX",special_folders["Trash"]])  + 'tree_folders');  
    219                 var draft_span = document.getElementById(mount_url_folder(["lINBOX",special_folders["Drafts"]]) + 'tree_folders');  
    220                 var sent_span  = document.getElementById(mount_url_folder(["lINBOX",special_folders["Sent"]]) + 'tree_folders');  
    221                 var spam_span  = document.getElementById(mount_url_folder(["lINBOX",special_folders["Spam"]]) + 'tree_folders'); 
     233                var draft_span = document.getElementById(mount_url_folder(["lINBOX",special_folders["Drafts"]]) + 'tree_folders');  
     234                var sent_span  = document.getElementById(mount_url_folder(["lINBOX",special_folders["Sent"]]) + 'tree_folders');  
     235                var spam_span  = document.getElementById(mount_url_folder(["lINBOX",special_folders["Spam"]]) + 'tree_folders'); 
    222236                //local folders 
    223237                var sent_local_conf = this.preferences.save_in_folder.replace(mount_url_folder(["INBOX",""]),"local_"); 
     
    321335                } 
    322336        } 
    323  
     337} 
     338 
     339function draw_tree_labels(){ 
     340        labels = DataLayer.get('label',{criteria:{order: 'name'}}); 
     341 
     342        $('#content_folders').append("<div id='MyMarckersList' class='acc-list list-label' ></div>").find("#MyMarckersList") 
     343        .append("<div class='my-labels'>" + 
     344                                "<img src='../prototype/modules/mail/img/tag.png'/>" + 
     345                                "<a class='title-my-labels' tabindex='0' role='button' aria-expanded='false' title='Meus marcadores'>Meus marcadores</a>" + 
     346                                 
     347                                "<span class='status-list-labels ui-icon ui-icon-triangle-1-s'></span>" + 
     348                        "</div>" 
     349        ) 
     350        .append(DataLayer.render("../prototype/modules/mail/templates/label_list.ejs", {labels: labels} )) 
     351        .find("li.label-item").css({"background-color":"#ffffff", "border-color":"#CCCCCC", "color":"#444444"}).click(function(){ 
     352                var labelId = $(this).attr('class').match(/label-item-([\d]+[()a-zA-Z]*)/)[1]; 
     353                search_emails("UNDELETED KEYWORD \"$Label"+labelId+"\""); 
     354        }) 
     355        .find(".square-color").css("display","").click(function(){ 
     356                $(this).parent(".label-item").each(function(){ 
     357                        configureLabels({selectedItem: $(this).attr('class').match(/label-item-([\d]+[()a-zA-Z]*)/)[1]}); 
     358                        var id_label_item = $(this).attr('class').match(/label-item-([\d]+[()a-zA-Z]*)/)[1]; 
     359                        $(".label-list-container .label-list").find(".label-item-"+id_label_item).trigger("click"); 
     360                }); 
     361        }); 
     362         
     363        $("#MyMarckersList a.title-my-labels").click(function() { 
     364                $("#MyMarckersList ul.label-list").toggleClass("hidden") 
     365                $('#MyMarckersList .status-list-labels').toggleClass("ui-icon-triangle-1-s"); 
     366                $('#MyMarckersList .status-list-labels').toggleClass("ui-icon-triangle-1-n"); 
     367         }); 
     368          
     369        if (!labels){ 
     370                $(".my-labels").addClass("hidden"); 
     371        } 
    324372} 
    325373 
     
    436484                } 
    437485                draw_new_tree_folder();  
     486                draw_tree_labels(); 
    438487} 
    439488 
     
    601650// stores the percentages of the cells 
    602651//var colSizes = [ ["24","24","12","12","12","16","16","20%","58%","11%","11%"], ["16","16","12","12","12","20%","20%","*","10%","10%"] ]; 
    603 var colSizes = [ ["2%","2%","1%","1%","1%","1%","2%","20%","48%","11%","11%"], ["16","16","12","12","12","20%","20%","*","10%","10%"] ]; 
     652//var colSizes = [ ["2%","2%","1%","1%","1%","1%","2%","2%","20%","46%","11%","11%"], ["16","16","12","12","12","20%","20%","*","10%","10%"] ]; 
     653var colSizes = [ ["2%","2%","1%","1%","1%","1%","2%","2%","2%","20%","46%","11%","11%"], ["2%","1%","1%","1%","1%","1%","1%","20%","20%","*","10%","9%"] ]; 
    604654// stores the alignments of the cells 
    605655var colAligns = [ ['','','','','','','','left','left','center','center'], ['','','','','','left','left','left','center','center'] ]; 
     
    942992// Draw the inbox and another folders 
    943993function draw_box(headers_msgs, msg_folder, alternate){ 
    944         /* 
     994        /* 
    945995         * When the paging response is not in the correct folder you need to change folder 
    946996         * This occurs when the Ajax response is not fast enough and the user click in outher 
     
    9681018        } 
    9691019        /* --- */ 
     1020          
     1021        /** 
     1022         * Get the labels aplyed to the messages and saves the information  
     1023         * into message array  
     1024         */ 
     1025        var messageNumbers = new Array(); 
     1026        for (var i=0; i<headers_msgs.length; i++) { 
     1027                messageNumbers.push(headers_msgs[i].msg_number); 
     1028        } 
     1029        var labeleds = DataLayer.get('labeled', { 
     1030                        filter: ['AND', ['IN', 'messageNumber', messageNumbers], ['=', 'folderName', msg_folder]], 
     1031                        criteria: {deepness: 2} 
     1032                }); 
     1033 
     1034        if(labeleds) { 
     1035                for (var i=0; i<headers_msgs.length; i++) { 
     1036                        for (var j=0; j<labeleds.length; j++) { 
     1037                                if (labeleds[j].messageNumber == headers_msgs[i].msg_number) { 
     1038                                        if (!headers_msgs[i].labels) 
     1039                                                headers_msgs[i].labels = {}; 
     1040                                        headers_msgs[i].labels[labeleds[j].label.id] = labeleds[j].label; 
     1041                                } 
     1042                        } 
     1043                } 
     1044        } 
     1045         
     1046        /** 
     1047         * Get the followupflags aplyed to the messages and saves the information  
     1048         * into message array  
     1049         */ 
     1050        var followupflaggeds = DataLayer.get('followupflagged', { 
     1051                        filter: ['AND', ['IN', 'messageNumber', messageNumbers], ['=', 'folderName', msg_folder]], 
     1052                        criteria: {deepness: 1} 
     1053                }); 
     1054 
     1055        if(followupflaggeds) { 
     1056                for (var i=0; i<headers_msgs.length; i++) { 
     1057                        for (var j=0; j<followupflaggeds.length; j++) { 
     1058                                if (followupflaggeds[j].messageNumber == headers_msgs[i].msg_number) { 
     1059                                        if (!headers_msgs[i].followupflagged) 
     1060                                                headers_msgs[i].followupflagged = {}; 
     1061                                        headers_msgs[i].followupflagged = followupflaggeds[j]; 
     1062                                } 
     1063                        } 
     1064                } 
     1065        } 
     1066         
     1067        /** 
     1068         * Preenche a estrutura de cache de mensagens para posterior consulta de  
     1069         * informações sobre as mensagens no escopo global. 
     1070         */ 
     1071        for (var i=0; i<headers_msgs.length; i++) {  
     1072                if (!onceOpenedHeadersMessages[current_folder]) 
     1073                        onceOpenedHeadersMessages[current_folder] = {}; 
     1074                onceOpenedHeadersMessages[current_folder][headers_msgs[i].msg_number] = headers_msgs[i]; 
     1075        } 
    9701076 
    9711077        if (alternate) 
     
    10301136 
    10311137                td_element2 = createTDElement(0,1); 
    1032                 td_element3 = createTDElement(0,7,"th_resizable","left","message_header_SORTFROM_"+numBox); 
     1138                td_element3 = createTDElement(0,8,"th_resizable","left","message_header_SORTFROM_"+numBox); 
    10331139                td_element3.onclick = function () {sort_box(search_box_type,'SORTFROM');}; 
    10341140                td_element3.innerHTML = get_lang("From"); 
    10351141 
    1036                 td_element4 = createTDElement(0,8,"th_resizable","left","message_header_SORTSUBJECT_"+numBox); 
     1142                td_element4 = createTDElement(0,9,"th_resizable","left","message_header_SORTSUBJECT_"+numBox); 
    10371143                td_element4.onclick = function () {sort_box(search_box_type,'SORTSUBJECT');}; 
    10381144                td_element4.innerHTML = get_lang("Subject"); 
    10391145 
    1040                 td_element5 = createTDElement(0,9,"th_resizable","center","message_header_SORTARRIVAL_"+numBox); 
     1146                td_element5 = createTDElement(0,10,"th_resizable","center","message_header_SORTARRIVAL_"+numBox); 
    10411147                td_element5.onclick = function () {sort_box(search_box_type,'SORTARRIVAL');}; 
    10421148                td_element5.innerHTML = get_lang("Date"); 
    10431149 
    1044                 td_element6 = createTDElement(0,10,"th_resizable","left","message_header_SORTSIZE_"+numBox); 
     1150                td_element6 = createTDElement(0,11,"th_resizable","left","message_header_SORTSIZE_"+numBox); 
    10451151                td_element6.onclick = function () {sort_box(search_box_type,'SORTSIZE');} 
    10461152                td_element6.innerHTML = get_lang("Size"); 
     
    10601166                var td_element24 = createTDElement(0,5); 
    10611167                td_element24.innerHTML = "&nbsp;"; 
    1062  
    1063                 var td_element25 = createTDElement(0,6); 
     1168                         
     1169                 
     1170                var td_element25 = createTDElement(0,7); 
    10641171                td_element25.innerHTML = "&nbsp;"; 
     1172                 
     1173                var td_element27 = createTDElement(0,8); 
     1174                td_element25.innerHTML = "&nbsp;"; 
     1175                 
     1176                var td_element26 = createTDElement(0,6); 
     1177                td_element26.innerHTML = "&nbsp;"; 
     1178                 
    10651179 
    10661180                tr_element.appendChild(td_element21); 
     
    10681182                tr_element.appendChild(td_element23); 
    10691183                tr_element.appendChild(td_element24); 
     1184                tr_element.appendChild(td_element26); 
     1185                tr_element.appendChild(td_element27); 
    10701186                tr_element.appendChild(td_element25); 
     1187                 
    10711188                tr_element.appendChild(td_element3); 
    10721189                tr_element.appendChild(td_element4); 
     
    12111328                                }, 
    12121329                                helper: function(event){ 
    1213                                         if($(this).find("input:checkbox").attr("checked") != "checked"){ 
    1214                                                 $(this).find("input:checkbox").trigger('click'); 
    1215                                                 $(this).addClass("selected_msg"); 
    1216                                         } 
     1330                                        $(this).find("input:checkbox").attr("checked", true); 
    12171331                                        if($("#table_box").find("tr input:checked").length > 1) 
    12181332                                                return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($("#table_box").find("tr input:checked")).length+" mensagens selecionadas"), type: "messages"})); 
     
    12281342                                scrollSpeed: 100, 
    12291343                                containment: "#divAppbox" 
    1230                         }).bind("contextmenu", function(){ 
    1231                                 if($(this).find("input:checkbox").attr("checked") != "checked"){ 
    1232                                         $(this).find("input:checkbox").trigger('click'); 
    1233                                         $(this).addClass("selected_msg"); 
     1344                        }).bind("mouseup", function(event){ 
     1345                                if(event.button == 2) 
     1346                                        if($(this).find("input:checkbox").attr("checked") != "checked"){ 
     1347                                                $(this).find("input:checkbox").trigger('click'); 
     1348                                                $(this).addClass("selected_msg"); 
    12341349                                } 
    12351350                        }); 
     
    12551370                alert("Carregou em "+(_eTime - _bTime)+" ms"); 
    12561371        } 
     1372         
    12571373        var msg_folder = Element('msg_folder').value; 
    12581374        var msg_number = Element('msg_number').value; 
     
    12711387        if(Element("table_quota")) 
    12721388                connector.loadScript("InfoQuota"); 
    1273  
     1389         
    12741390        // creates the dotted ruler which helps user to visualize resizing of columns 
    12751391        var ruler_element = document.getElementById("table_message_ruler"); 
     
    12811397                document.getElementById("exmail_main_body").appendChild(ruler_element); 
    12821398    } 
    1283  
     1399                                 
    12841400} 
    12851401 
     
    13031419// Passar o parâmetro offset para esta função 
    13041420function make_tr_message(headers_msgs, msg_folder, offsetToGMT){ 
    1305                 if (typeof offsetToGMT == 'undefined') 
    1306                 { 
    1307                     // In older local messages headers_msgs.offsetToGMT is undefined. 
    1308                     offsetToGMT = typeof headers_msgs.offsetToGMT != 'undefined'?headers_msgs.offsetToGMT:0; 
    1309                 } 
     1421 
     1422                if (typeof offsetToGMT == 'undefined') 
     1423                { 
     1424                        // In older local messages headers_msgs.offsetToGMT is undefined. 
     1425                        offsetToGMT = typeof headers_msgs.offsetToGMT != 'undefined'?headers_msgs.offsetToGMT:0; 
     1426                } 
    13101427                var tr_element = document.createElement('tr'); 
    13111428                if(typeof(preferences.line_height) != 'undefined') 
     
    13501467                chk_box_element.className = "checkbox"; 
    13511468                chk_box_element.setAttribute("id", "check_box_message_"+headers_msgs.msg_number); 
    1352                 chk_box_element.onclick = function(e){ 
    1353                         if (is_ie) 
    1354                                 changeBgColor(window.event,headers_msgs.msg_number); 
    1355                         else 
     1469                chk_box_element.onchange = function(e){ 
     1470                        //if (is_ie) 
    13561471                                changeBgColor(e,headers_msgs.msg_number); 
    13571472                }; 
     
    14151530 
    14161531 
    1417                 td_element25 = createTDElement(0,6,"td_msg",null,"td_message_unseen_"+headers_msgs.msg_number); 
     1532                td_element25 = createTDElement(0,7,"td_msg",null,"td_message_unseen_"+headers_msgs.msg_number); 
    14181533                if ((headers_msgs.Unseen == 'U') || (headers_msgs.Recent == 'N')) 
    14191534                        td_element25.innerHTML = "<img src ='templates/"+template+"/images/unseen.gif' title='"+get_lang('Unseen')+"'>"; 
     
    14221537 
    14231538 
    1424                 td_element3 = createTDElement(0,7,"td_msg td_resizable","left","td_from_"+ headers_msgs.msg_number); 
     1539                td_element3 = createTDElement(0,8,"td_msg td_resizable","left","td_from_"+ headers_msgs.msg_number); 
    14251540                var _onclick = function(){InfoContact.hide();proxy_mensagens.get_msg(headers_msgs.msg_number, msg_folder,true, show_msg);}; 
    14261541                td_element3.onclick = _onclick; 
     
    14831598                } 
    14841599 
    1485                 td_element4 = createTDElement(0,8,"td_msg td_resizable","left"); 
     1600                td_element4 = createTDElement(0,9,"td_msg td_resizable","left"); 
    14861601                td_element4.className += " td_msg_subject"; 
    14871602                td_element4.onclick = _onclick; 
     
    15111626                        td_element4.innerHTML += "</a>"; 
    15121627                } 
    1513  
    1514  
    1515                 td_element5 = createTDElement(0,9,"td_msg td_resizable","center"); 
     1628                 
     1629                td_element5 = createTDElement(0,10,"td_msg td_resizable","center"); 
    15161630                td_element5.onclick = _onclick; 
    1517  
     1631                 
     1632                td_element27 = createTDElement(0,7,"td_msg",null,"td_message_labels_"+headers_msgs.msg_number); 
     1633                $(td_element27).addClass("td-label"); 
     1634 
     1635                if (headers_msgs.labels) { 
     1636                        td_element27.innerHTML = '<img src="../prototype/modules/mail/img/tag.png">'; 
     1637                        updateLabelsColumn(headers_msgs)                 
     1638                } 
     1639                 
     1640                td_element26 = createTDElement(0,6,"td_msg",null,"td_message_followup_"+headers_msgs.msg_number); 
     1641                $(td_element26).addClass("td-followup-flag"); 
     1642                td_element26.innerHTML = '<div class="flag-edited" style="width:9px;height:6px;"><img src="../prototype/modules/mail/img/flagEditor.png"></div>'; 
     1643         
     1644                if (headers_msgs.followupflagged) { 
     1645                        $(td_element26).attr('title', headers_msgs.followupflagged.followupflag.name) 
     1646                        .find(".flag-edited").css("background",headers_msgs.followupflagged.backgroundColor); 
     1647                        if(headers_msgs.followupflagged.isDone == "1"){ 
     1648                                $(td_element26).find(".flag-edited").find("img") 
     1649                                .attr("src", "../prototype/modules/mail/img/flagChecked.png") 
     1650                                .css("margin-left","-3px"); 
     1651                        } 
     1652                } else { 
     1653                        $(td_element26).find(".flag-edited").css("background","#cccccc"); 
     1654                } 
     1655                 
     1656                /** 
     1657                 * Clique para aplicar sinalizador 
     1658                 */ 
     1659                $(td_element26).click(function() {       
     1660                         
     1661                        var messageClickedId = $(this).attr('id').match(/td_message_followup_([\d]+)/)[1]; 
     1662                         /** 
     1663                                * Hack: 
     1664                                * headers_msgs.followupflagged.id não vai funcionar porque já foi feito DataLayer.commit() 
     1665                                * por isso o id deve ser obtido do banco 
     1666                                * também para verificar se há ou não sinalizador nesta mensagem 
     1667                        */ 
     1668                        var flagged = DataLayer.get('followupflagged', {filter: [ 
     1669                                'AND',  
     1670                                ['=', 'messageNumber', messageClickedId],  
     1671                                ['=', 'folderName', msg_folder] 
     1672                        ]}); 
     1673                        if (flagged == '' || flagged == [] || flagged == 'undefined') { 
     1674                                /** 
     1675                                 * Aplica followupflag de Acompanhamento 
     1676                                 */ 
     1677 
     1678                                headers_msgs.followupflagged = { 
     1679                                        uid : User.me.id, 
     1680                                        folderName : msg_folder,  
     1681                                        messageNumber : messageClickedId,  
     1682                                        alarmTime : false,  
     1683                                        backgroundColor : '#FF2016', 
     1684                                        followupflagId: '1', 
     1685                                        followupflag: DataLayer.get('followupflag', '1') 
     1686                                }; 
     1687                                $(this).find(".flag-edited").css("background", headers_msgs.followupflagged.backgroundColor); 
     1688                                headers_msgs.followupflagged.id = DataLayer.put('followupflagged', headers_msgs.followupflagged); 
     1689                                 
     1690                        } else if (headers_msgs.followupflagged.followupflag.name == 'Follow up') { 
     1691                                /** 
     1692                                 * Remover followupflag de Acompanhamento (DFD0078:RI25) 
     1693                                 */ 
     1694                                 $(this).find(".flag-edited").css("background", "#cccccc"); 
     1695 
     1696 
     1697                                DataLayer.remove('followupflagged', flagged[0].id); 
     1698                                $('#td_message_followup_' + messageClickedId + ', ' +  
     1699                                '#td_message_followup_search_' + messageClickedId).find(".flag-edited") 
     1700                                .find("img").attr("src", "../prototype/modules/mail/img/flagEditor.png").css("margin-left","0"); 
     1701                        } else { 
     1702                                $(tr_element).addClass('selected_msg').find(':checkbox').trigger('click'); 
     1703                                configureFollowupflag(); 
     1704                        } 
     1705                         
     1706                });      
     1707                 
    15181708                var norm = function (arg) {return (arg < 10 ? '0'+arg : arg);}; 
    15191709                var weekDays = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; 
     
    15571747                td_element5.alt = td_element5.title; 
    15581748 
    1559                 td_element6 = createTDElement(0,10,"td_msg td_resizable","center"); 
     1749                td_element6 = createTDElement(0,11,"td_msg td_resizable","center"); 
    15601750                td_element6.onclick = _onclick; 
    15611751                td_element6.setAttribute("noWrap","true"); 
     
    15671757                tr_element.appendChild(td_element22); 
    15681758                tr_element.appendChild(td_element23); 
    1569                         tr_element.appendChild(td_element24); 
     1759                tr_element.appendChild(td_element24); 
     1760                tr_element.appendChild(td_element26); 
     1761                tr_element.appendChild(td_element27); 
    15701762                tr_element.appendChild(td_element25); 
     1763 
    15711764                tr_element.appendChild(td_element3); 
    15721765                tr_element.appendChild(td_element4); 
     
    33863579            if ((e.keyCode) == 120) //F9 
    33873580                        { 
    3388                 emQuickSearch(input_replyto.value, 'replyto', ID, undefined,true); 
     3581                emQuickSearch(input_replyto.value, 'replyto', ID); 
    33893582                        } 
    33903583                        else 
     
    34123605                        if ((window.event.keyCode) == 120) //F9 
    34133606                        { 
    3414                                         emQuickSearch(input_replyto.value, 'replyto', ID, undefined,true); 
     3607                                        emQuickSearch(input_replyto.value, 'replyto', ID); 
    34153608                        } 
    34163609                        else 
     
    34533646                        if ((e.keyCode) == 120) //F9 
    34543647                        { 
    3455                                 emQuickSearch(input_to.value, 'to', ID, undefined,true); 
     3648                                emQuickSearch(input_to.value, 'to', ID); 
    34563649                        } 
    34573650                        else 
     
    34793672                        if ((window.event.keyCode) == 120) //F9 
    34803673                        { 
    3481                                 emQuickSearch(input_to.value, 'to', ID, undefined,true); 
     3674                                emQuickSearch(input_to.value, 'to', ID); 
    34823675                        } 
    34833676                        else 
     
    35363729                        if ((e.keyCode) == 120) //F9 
    35373730                        { 
    3538                                 emQuickSearch(input_cc.value, 'cc', ID, undefined,true); 
     3731                                emQuickSearch(input_cc.value, 'cc', ID); 
    35393732                        } 
    35403733                        else 
     
    35623755                        if ((window.event.keyCode) == 120) //F9 
    35633756                        { 
    3564                                 emQuickSearch(input_cc.value, 'cc', ID, undefined,true); 
     3757                                emQuickSearch(input_cc.value, 'cc', ID); 
    35653758                        } 
    35663759                        else 
     
    36083801                                if ((e.keyCode) == 120) //F9 
    36093802                                { 
    3610                                         emQuickSearch(input_cco.value, 'cco', ID, undefined,true); 
     3803                                        emQuickSearch(input_cco.value, 'cco', ID); 
    36113804                                } 
    36123805                                else 
     
    36333826                                if ((window.event.keyCode) == 120) //F9 
    36343827                                { 
    3635                                         emQuickSearch(input_cco.value, 'cco', ID, undefined,true); 
     3828                                        emQuickSearch(input_cco.value, 'cco', ID); 
    36363829                                } 
    36373830                                else 
     
    36563849        var cc_load = ""; 
    36573850        a_cc_link.onclick = function () { 
    3658                 var rm = false; 
    36593851                var remove = function(){ 
    36603852                        document.getElementById('tr_cc_'+ID).style.display = 'none'; 
     
    36623854                        $("#cc_"+ID).val(""); 
    36633855                        $("#a_cc_link_"+ID).toggleClass("expressomail-button-icon-ative"); 
    3664                         rm = true; 
    36653856                } 
    36663857                if(!($("#cc_"+ID).parent().find("div")[0])){ 
     
    36823873                        } 
    36833874                } 
    3684                 if (rm) 
    3685                         input_to.focus(); 
    3686                 else     
    3687                         input_cc.focus();                
     3875                input_cc.focus(); 
     3876                 
    36883877                return false; 
    36893878        }; 
     
    40144203                $("#"+$(this).attr("name")).attr("checked", (!check ? true : false)); 
    40154204                //$(this).button({ disabled: false }); 
    4016                 if (RichTextEditor.plain[id] != true) 
    4017                         setTimeout("RichTextEditor.focus("+ID+")",100);                  
    4018                 else  
    4019                         $('#body_'+ID).focus(); 
    40204205        }); 
    40214206         
  • trunk/expressoMail1_2/js/main.js

    r5524 r5533  
    322322 
    323323function show_msg_img(msg_number,folder){ 
     324alert(msg_number+folder); 
    324325        var call_back = function(data){ 
    325326           data.showImg = true; 
  • trunk/expressoMail1_2/js/search.js

    r5506 r5533  
    1616                this.elementChecked = false; 
    1717        } 
    18  
     18         
    1919        //Monta os forms dentro da janela; 
    2020        searchE.prototype.showForms = function(value) 
     
    442442         
    443443        searchE.prototype.make_tr_message = function(aux,border_id,i) { 
     444        console.log(aux); 
     445        /** 
     446         * Preenche a estrutura de cache de mensagens para posterior consulta de  
     447         * informações sobre as mensagens no escopo global. 
     448         */ 
     449                if (!onceOpenedHeadersMessages[aux.boxname]) 
     450                        onceOpenedHeadersMessages[aux.boxname] = {}; 
     451                onceOpenedHeadersMessages[aux.boxname][aux.uid] = aux;   
     452         
    444453                var tr = document.createElement("TR"); 
    445454                if(typeof(preferences.line_height) != 'undefined') 
    446455                        tr.style.height = preferences.line_height; 
    447  
     456                         
     457                var msg_folder = get_current_folder();  
     458                                 
    448459                var mailbox = aux.boxname; 
    449460                var uid_msg = aux.uid; 
     
    455466                tr.setAttribute('name',mailbox); 
    456467                tr.name = mailbox; 
    457  
     468                 
    458469                if ( aux.flag.match("U") ) 
    459470                        add_className(tr,'tr_msg_unread'); 
     
    466477                }; 
    467478 
    468                 for(var j=0 ; j <= 10 ; j++) 
     479                for(var j=0 ; j <= 11 ; j++) 
    469480                { 
    470481                        var td = document.createElement("TD"); 
     
    519530                        { 
    520531                                td.setAttribute("width", colSizes[1][4]); 
     532                                td.id = "td_message_followup_search_"+uid_msg; 
     533                                td.setAttribute("class","search-result-item"); 
     534                                //td1 = "<img src ='../prototype/modules/mail/img/flagDefault.png' title='"+get_lang('Followup')+"'>"; 
     535                                td1 = '<div class="flag-edited" style="width:9px;height:6px;"><img src="../prototype/modules/mail/img/flagEditor.png"></div>'; 
     536                                                 
     537                                $(td).click(function(event, ui){         
     538                                        var messageClickedId = $(this).attr('id').match(/td_message_followup_search_([\d]+)/)[1]; 
     539                                        var flagged = DataLayer.get('followupflagged', {filter: [ 
     540                                                'AND',  
     541                                                ['=', 'messageNumber', messageClickedId],  
     542                                                ['=', 'folderName', mailbox] 
     543                                        ]}); 
     544                                        if(flagged == '' || flagged == [] || flagged == 'undefined'){ 
     545                                                /** 
     546                                                * Aplica followupflag de Acompanhamento 
     547                                                */ 
     548                                                aux.followupflagged = { 
     549                                                        uid : User.me.id, 
     550                                                        folderName : mailbox,  
     551                                                        messageNumber : messageClickedId,  
     552                                                        alarmTime : false,  
     553                                                        backgroundColor : '#FF2016', 
     554                                                        followupflagId: '1', 
     555                                                        followupflag: DataLayer.get('followupflag', '1') 
     556                                                }; 
     557                                                $(this).find(".flag-edited").css("background", aux.followupflagged.backgroundColor); 
     558                                                aux.followupflagged.id = DataLayer.put('followupflagged', aux.followupflagged); 
     559                                                 
     560                                        }else if(aux.followupflagged.id){ 
     561                                                /** 
     562                                                * Remover followupflag de Acompanhamento (DFD0078:RI25) 
     563                                                */ 
     564                                                $(this).find(".flag-edited").css("background", "#cccccc"); 
     565 
     566 
     567                                                DataLayer.remove('followupflagged', flagged[0].id); 
     568                                                $('#td_message_followup_' + messageClickedId + ', ' +  
     569                                                '#td_message_followup_search_' + messageClickedId).find(".flag-edited") 
     570                                                .find("img").attr("src", "../prototype/modules/mail/img/flagEditor.png").css("margin-left","0"); 
     571                                        } else { 
     572                                                //TODO - open dialog 
     573                                        } 
     574                                        if(!DataLayer.commit()){} 
     575 
     576                                });                              
     577                        } 
     578                        if (j == 5) 
     579                        { 
     580                                td.setAttribute("width", colSizes[1][5]); 
     581                                td.id = "td_message_labels_search_"+uid_msg; 
     582                                td.setAttribute("class","td-label-search");                              
     583                                 
     584                                if (aux.labels) { 
     585                                        td1 = '<img src="../prototype/modules/mail/img/tag.png">'; 
     586                                        updateLabelsColumn(aux)          
     587                                } else { 
     588                                        td1 = ''; 
     589                                } 
     590                        } 
     591                        if (j == 6) 
     592                        { 
     593                                td.setAttribute("width", colSizes[1][6]); 
    521594                                td.id = "td_message_sent_"+uid_msg; 
    522595                                td1 = ''; 
    523596                        } 
    524597 
    525                         if ( j == 5 ) 
    526                         { 
    527                                 td.setAttribute("width", colSizes[1][5]); 
     598                        if ( j == 7 ) 
     599                        { 
     600                                td.setAttribute("width", colSizes[1][7]); 
    528601                                td.className = "td_resizable"; 
    529602                                td.onclick = _onclick; 
     
    536609 
    537610                                var td1  = get_lang(td1).substr(get_lang(td1).length-1) == "*"?td1:get_lang(td1); 
    538  
    539                                                                         td1 = translateFolder(td1); 
    540  
    541  
    542                                 if( proxy_mensagens.is_local_folder(td1)) 
    543                                 { 
     611                                td1 = translateFolder(td1); 
     612 
     613                                if (proxy_mensagens.is_local_folder(td1)) { 
    544614                                        var td1 = this.aux_local_folder_display(td1); 
    545615                                } 
    546616                        } 
    547617 
    548                         if( j == 6 ) 
     618                        if( j == 8 ) 
    549619                        { 
    550620                                var name; 
     
    557627                                        name = name.substr(0,29) + "..."; 
    558628 
    559                                 td.setAttribute("width", colSizes[1][6]); 
     629                                td.setAttribute("width", colSizes[1][8]); 
    560630                                td.className = "td_resizable"; 
    561631                                td.onclick = _onclick; 
     
    566636                        } 
    567637 
    568                         if( j == 7 ) 
     638                        if( j == 9 ) 
    569639                        { 
    570640                                var subject_encode = url_encode(subject); 
     
    575645                                        aux.subject = aux.subject.substr(0,70) + "..."; 
    576646 
    577                                 td.setAttribute("width", colSizes[1][7]); 
     647                                td.setAttribute("width", colSizes[1][9]); 
    578648                                td.className = "td_resizable td_msg_search_subject"; 
    579649                                td.onclick = _onclick; 
     
    584654                        } 
    585655 
    586                         if( j == 8 ) 
    587                         { 
    588                                 td.setAttribute("width", colSizes[1][8]); 
     656                        if( j == 10 ) 
     657                        { 
     658                                td.setAttribute("width", colSizes[1][10]); 
    589659                                td.className = "td_resizable"; 
    590660                                td.align                = "center"; 
     
    609679                        } 
    610680 
    611                         if( j == 9 ) 
     681                        if( j == 11 ) 
    612682                        { 
    613683                                td.setAttribute("width", "9.4%");//alinhamento dos campos data e tamanho 
     
    623693                        } 
    624694 
    625                         if( j == 10 ) 
     695                        if( j == 12 ) 
    626696                        { 
    627697                                if (aux.flag.match("U")) 
     
    631701                                var td1 = ''; 
    632702                        } 
    633                         if (j<10) { 
     703                        if (j<12) { 
    634704                                td.innerHTML = td1; 
     705                                 
     706                                //Carregar os followupflag nos resultados. 
     707                                if (aux.followupflagged) { 
     708                                        $(td).attr('title', aux.followupflagged.followupflag.name) 
     709                                        .find(".flag-edited").css("background",aux.followupflagged.backgroundColor); 
     710                                        if(aux.followupflagged.isDone == "1"){ 
     711                                                $(td).find(".flag-edited").find("img") 
     712                                                .attr("src", "../prototype/modules/mail/img/flagChecked.png") 
     713                                                .css("margin-left","-3px"); 
     714                                        } 
     715                                } else { 
     716                                        $(td).find(".flag-edited").css("background","#cccccc"); 
     717                                } 
     718                                 
    635719                                tr.appendChild(td); 
    636720                        } 
     
    692776                        scrollSpeed: 100, 
    693777                        containment: "#divAppbox" 
    694                 }).bind("contextmenu", function(){ 
    695                         if($(this).find("input:checkbox").attr("checked") != "checked"){ 
    696                                 $(this).find("input:checkbox").trigger('click'); 
    697                                 $(this).addClass("selected_msg"); 
     778                }).bind("mouseup", function(event){ 
     779                        if(event.button == 2) 
     780                                if($(this).find("input:checkbox").attr("checked") != "checked"){ 
     781                                        $(this).find("input:checkbox").trigger('click'); 
     782                                        $(this).addClass("selected_msg"); 
    698783                        } 
    699784                }); 
     
    705790        { 
    706791                var data = ( Data['data'] ) ? Data['data'] : Data['data_gears']; 
    707                  
    708792                if ( data == undefined ) 
    709793                        return; 
    710                  
     794         
    711795                var cont = parseInt(0); 
    712796 
     
    859943                td_element03 = createTDElement(1,3); 
    860944                td_element04 = createTDElement(1,4); 
    861                 td_element1 = createTDElement(1,5,"th_resizable","left"); 
     945                td_element05 = createTDElement(1,5); 
     946                td_element06 = createTDElement(1,6); 
     947                td_element1 = createTDElement(1,7,"th_resizable","left"); 
    862948                 
    863949                var arrow_ascendant = function(Text) 
     
    865951                        return "<b>" + Text + "</b><img src='templates/"+template+"/images/arrow_ascendant.gif'>"; 
    866952                } 
    867                  
     953 
    868954                // Ordernar Pasta 
    869955                if ( sort_type == 'SORTBOX' /*|| sort_type == 'SORTBOX_REVERSE'*/ ) 
     
    894980                 
    895981                // Ordernar Quem 
    896                 td_element2 = createTDElement(1,6,"th_resizable","left"); 
     982                td_element2 = createTDElement(1,8,"th_resizable","left"); 
    897983 
    898984                if (sort_type == 'SORTFROM' || sort_type == 'SORTWHO' /*|| sort_type == 'SORTWHO_REVERSE' || sort_type == 'SORTFROM_REVERSE'*/ ) 
     
    9231009                 
    9241010                // Ordernar Subject 
    925                 td_element3 = createTDElement(1,7,"th_resizable","left"); 
     1011                td_element3 = createTDElement(1,9,"th_resizable","left"); 
    9261012                 
    9271013                if (sort_type == 'SORTSUBJECT' /*|| sort_type == 'SORTSUBJECT_REVERSE'*/) 
     
    9521038                 
    9531039                // Ordernar Data 
    954                 td_element4 = createTDElement(1,8,"th_resizable","center"); 
     1040                td_element4 = createTDElement(1,10,"th_resizable","center"); 
    9551041                 
    9561042                if ( sort_type == 'SORTDATE' /*|| sort_type == 'SORTDATE_REVERSE'*/ ) 
     
    9811067 
    9821068                // Ordernar Tamanho 
    983                 td_element5 = createTDElement(1,9,"th_resizable","center"); 
     1069                td_element5 = createTDElement(1,11,"th_resizable","center"); 
    9841070                 
    9851071                if ( sort_type == 'SORTSIZE' /*|| sort_type == 'SORTSIZE_REVERSE'*/ ) 
     
    10081094                        td_element5.innerHTML   = ( sort_type == 'SORTSIZE_REVERSE' ) ? arrow_ascendant(get_lang("size")) : get_lang("size"); 
    10091095                } 
     1096                 
     1097                //Abrir a Tela de de Configuracao de Acompanhamento 
     1098                 
    10101099                 
    10111100                tr_element.appendChild(td_element0); 
     
    10141103                tr_element.appendChild(td_element03); 
    10151104                tr_element.appendChild(td_element04); 
     1105                tr_element.appendChild(td_element05); 
     1106                tr_element.appendChild(td_element06); 
    10161107                tr_element.appendChild(td_element1); 
    10171108                tr_element.appendChild(td_element2); 
     
    10221113                table_element.appendChild(tbody_element); 
    10231114 
     1115                 
    10241116                var colgr_element = buildColGroup(1); 
    10251117                colgr_element.setAttribute("id","colgroup_head_"+numBox); 
     
    16241716// Cria o objeto 
    16251717var EsearchE = new searchE(); 
     1718var EsearchE = new searchE(); 
  • trunk/expressoMail1_2/templates/default/expressomail.css

    r5523 r5533  
    119119} 
    120120 
    121  
    122  
    123  
    124121.context-menu-item.icon-important { background-image: url(images/important.gif); background-position: 6px 5px !important} 
    125122.context-menu-item.icon-export { background-image: url(images/export.png); } 
     
    131128 
    132129 
    133  
    134130.context-menu-item.icon-search-mail { background-image: url(images/menu/search.png); } 
    135131.context-menu-item.icon-filter { background-image: url(images/menu/filters.png); } 
     
    137133.context-menu-item.icon-share-mailbox { background-image: url(images/menu/usersfolders.png); } 
    138134.context-menu-item.icon-label { background-image: url(images/menu/usersfolders.png); } 
     135.context-menu-item.icon-tag { background-image: url(images/menu/tag.png); margin: 3px; } 
    139136.context-menu-item.icon-empty-trash { background-image: url(images/menu/trash.png); } 
    140137.context-menu-item.icon-queue { background-image: url(images/menu/queue.png); } 
    141  
  • trunk/expressoMail1_2/templates/default/index.tpl

    r5525 r5533  
    207207<div id="sandbox" class="expresso-calendar-container hidden"> 
    208208</div> 
     209<div id="windowLabels" class="label-configure-win"></div> 
     210<div id="followupFlag" class="followupflag-configure-win hidden"></div> 
    209211<!-- END list --> 
  • trunk/phpgwapi/templates/default/css/base.css

    r5486 r5533  
    360360{ 
    361361} 
     362.context-menu-item.icon-preferences-mail { background-image: url(../images/preferences.png); } 
  • trunk/prototype/config/OpenLDAP.srv

    r5399 r5533  
    55host = 127.0.0.1 
    66 
    7 ;context = dc=exemplo.com 
     7context = "dc=prognus" 
    88;user =  
    99;password =  
  • trunk/prototype/config/PostgreSQL.srv

    r5523 r5533  
    33[config] 
    44port = 5432 
    5 dbname= expresso 
     5dbname= expresso24douglasz 
    66user=postgres 
    77host = /var/run/postgresql 
    8 ;conexão via tcp 
     8;conexï¿œo via tcp 
    99;host = 127.0.0.1 
    1010 
    11 ;user= 
    12 ;password= 
     11user = expressodev 
     12password = prognus 
  • trunk/prototype/modules/attach_message/attach_message.js

    r5399 r5533  
    319319                        datatype: "json", 
    320320                        mtype: 'GET', 
    321                         colNames:['#', ' ', 'De', 'Assunto', 'Data', 'Tamanho'], 
     321                        colNames:['#',' ', 'De', 'Assunto', 'Data', 'Tamanho'], 
    322322                        colModel:[ 
    323323                                {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false}, 
  • trunk/prototype/modules/mail/js

    • Property svn:ignore set to
      .goutputstream-7O768V
  • trunk/prototype/modules/mail/templates

    • Property svn:ignore set to
      .label_listitem.ejs.kate-swp
  • trunk/prototype/modules/mail/templates/detailedfoldertree.ejs

    r5500 r5533  
    5252  </li> 
    5353  <%}%> 
     54  <li><span class="folder head_folder all_accomp">Para acompanhamento</span> 
     55  </li> 
    5456</ul> 
  • trunk/prototype/services/ImapServiceAdapter.php

    r5416 r5533  
    77    public function open( $config ) 
    88    { 
    9         $this->init(); 
     9                $this->init(); 
    1010    } 
    1111 
    1212//     public function connect( $config ) 
    1313//     { 
    14 //      $this->init(); 
     14//                      $this->init(); 
    1515//     } 
    1616         
    1717    public function find( $URI, $justthese = false, $criteria = false ) 
    1818        {  
    19         $context = $justthese['context']; 
    20             $URI = $URI['concept']; 
    21  
    22         switch( $URI ) 
    23         { 
    24             case 'folder': 
    25             { 
    26                 $result = $this->to_utf8($this->get_folders_list()); 
    27  
    28                 foreach ($result as $res) { 
    29  
    30                     $response[] = array( 
    31                                     'id' => $res['folder_id'], 
    32                                     'commonName' => $res['folder_name'], 
    33                                     'parentFolder' => $res['folder_parent'], 
    34                                     'messageCount' => array('unseen' => isset($res['folder_unseen']) ? $res['folder_unseen'] : null, 'total' => null) 
    35                             ); 
     19                $context = $justthese['context']; 
     20                $URI = $URI['concept']; 
     21 
     22                switch( $URI ) 
     23                { 
     24                        case 'folder': 
     25                        { 
     26                                $result = $this->to_utf8($this->get_folders_list()); 
     27 
     28                                foreach ($result as $res) { 
     29 
     30                                        $response[] = array( 
     31                                                        'id' => $res['folder_id'], 
     32                                                        'commonName' => $res['folder_name'], 
     33                                                        'parentFolder' => $res['folder_parent'], 
     34                                                        'messageCount' => array('unseen' => isset($res['folder_unseen']) ? $res['folder_unseen'] : null, 'total' => null) 
     35                                                ); 
     36                                } 
     37 
     38                                return $response; 
     39                        } 
     40                        case 'message': 
     41                        { 
     42                                //begin: for grid        
     43                                $page  = $criteria['page']; //{1}    get the requested page 
     44                                $limit = $criteria['rows']; //{10}   get how many rows we want to have into the grid 
     45                                $sidx  = $criteria['sidx']; //{id}   get index row - i.e. user click to sort 
     46                                $sord  = $criteria['sord']; //{desc} get the direction 
     47 
     48                                $filter = $criteria['filter']; 
     49 
     50                                if( !$sidx ) $sidx = 1; 
     51 
     52                                $folder_name = str_replace( '.', $this->imap_delimiter, $context['folder'] ); 
     53                                 
     54                                $count = imap_num_msg( $this->open_mbox( $folder_name ) ); 
     55 
     56                                $total_pages = $count > 0 ? ceil( $count/$limit ) : 0; 
     57 
     58                                if( $page > $total_pages ) 
     59                                        $page = $total_pages; 
     60 
     61                                $start = $limit * $page - $limit; 
     62 
     63                                // do not put $limit*($page - 1) 
     64                                //end: for grid 
     65 
     66                                if( $filter ) 
     67                                { 
     68                                        if( $filter[0] !== 'msgNumber' ) 
     69                                        { 
     70                                        for( $i = 0; $i < count($filter); $i++ ) 
     71                                        { 
     72                                                if( count( $filter[$i] ) === 4 ) 
     73                                                $criteria['isExact'] = ( array_shift( $filter[$i] ) === 'AND' ); 
     74 
     75                                                $criteria[ $filter[$i][0] ] = array( 'criteria' => $filter[$i][2], 'filter' => $filter[$i][1] ); 
     76                                        } 
     77 
     78                                        return $this->searchSieveRule($criteria); 
     79                                        } 
     80 
     81                                        $msgNumber = array(); 
     82 
     83                                        for( $i = $start; $i < $start + $limit && isset( $filter[2][$i] ); $i++ ) 
     84                                          $msgNumber[] = $filter[2][$i]; 
     85 
     86                                        if( empty( $msgNumber ) ) 
     87                                        return( false ); 
     88 
     89                                        $result = $this->get_info_msgs( array( 'folder' => $folder_name,  
     90                                                                           'msgs_number' => implode( ',', $msgNumber ) ) ); 
     91 
     92                                        foreach( $result as $i => $val ) 
     93                                        $result[$i] = unserialize( $val ); 
     94 
     95                                } 
     96                                else 
     97                                { 
     98                                        $result = $this->get_range_msgs2(  
     99                                                array(  
     100                                                        'folder' => $folder_name, //INBOX 
     101                                                        'msg_range_begin' => $start + 1, //?? 
     102                                                        'msg_range_end' => $start + $limit, //$limit = $_GET['rows']; // get how many rows we want to have into the grid 
     103                                                        'sort_box_type' => 'SORTARRIVAL',  
     104                                                        'search_box_type' => 'ALL', 
     105                                                        'sort_box_reverse' => 1  
     106                                                )  
     107                                        ); 
     108                                } 
     109                                //return var_export($result); 
     110 
     111                                $response = array( "page" => $page, "total" => $total_pages, "records" => $count ); 
     112                                 
     113                                for ($i=0; $i<count($result); $i++) 
     114                                { 
     115                                        $flags_enum = array('Recent', 'Unseen',  'Answered',  'Draft',  'Deleted', 'Flagged'); 
     116 
     117                                        foreach ($flags_enum as $key => $flag) 
     118                                        { 
     119                                                if ( !isset($result[$i][$flag]) || !trim($result[$i][$flag]) || trim($result[$i][$flag]) == '')  
     120                                                        unset($flags_enum[$key]); 
     121 
     122                                                unset($result[$i][$flag]); 
     123                                        } 
     124 
     125                                        if (array_key_exists($i, $result)) 
     126                                        { 
     127                                                $response["rows"][$i] = $result[$i]; 
     128                                                $response["rows"][$i]['timestamp'] = ( ( $result[$i]['udate'] + $this->functions->CalculateDateOffset() ) * 1000 ); 
     129                                                $response["rows"][$i]['flags'] = implode(',', $flags_enum); 
     130                                                $response["rows"][$i]['size'] = $response["rows"][$i]['Size']; 
     131                                                //$response["rows"][$i]['udate'] = ( $result[$i]['udate'] + $this->functions->CalculateDateOffset()  * 1000 ); 
     132                                                unset($response["rows"][$i]['Size']); 
     133                                        } 
     134                                 } 
     135 
     136                                return $this->to_utf8($response); 
     137                        } 
     138                         
     139                        /** 
     140                         * Filtros suportados: 
     141                         * - ['=', 'folderName', $X] 
     142                         * - [ 
     143                         *              'AND', 
     144                         *              [ 
     145                         *                      'AND', 
     146                         *                      ['=', 'folderName', $X], 
     147                         *                      ['IN', 'messageNumber', $Ys] 
     148                         *              ], 
     149                         *              ['IN', 'labelId', $Zs] 
     150                         * ] 
     151                         * - ['=', 'labelId', $X] 
     152                         * - [ 
     153                         *              'AND', 
     154                         *              ['=', 'folderName', $X], 
     155                         *              ['=', 'labelId', $Y] 
     156                         * ] 
     157                         * - ['IN', 'labelId', $Ys] 
     158                         * - [ 
     159                         *              'AND', 
     160                         *              ['=', 'folderName', $X], 
     161                         *              ['IN', 'labelId', $Ys] 
     162                         * ]                     
     163                         */ 
     164                        case 'labeled': 
     165                        { 
     166                                $result = array ( ); 
     167                                if (isset($criteria["filter"]) && is_array($criteria['filter'])) { 
     168                                        //melhorar o tratamento do filter com a lista de todos os labelIds dado pelo interceptor 
     169                                        $map = array( 
     170                                                'id' => array(), 
     171                                                'folderName' => array(), 
     172                                                'messageNumber' => array(), 
     173                                                'labelId' => array() 
     174                                        ); 
     175                                         
     176                                        self::parseFilter($criteria["filter"], &$map); 
     177                                         
     178                                        if (count($map['folderName']) == 0) { 
     179                                                $folders = $this->get_folders_list(); 
     180                                                foreach ($folders as $folder) 
     181                                                        if (isset($folder['folder_id']))  
     182                                                                $map['folderName'][] = $folder['folder_id']; 
     183                                        } 
     184 
     185                                        foreach ($map['folderName'] as $folder) { 
     186                                                $this->mbox = $this->open_mbox($folder); 
     187                                                 
     188                                                foreach ($map['labelId'] as $label) { 
     189                                                        $messagesLabeleds = imap_search($this->mbox, 'UNDELETED KEYWORD "$Label'.$label.'"', SE_UID); 
     190                                                         
     191                                                        foreach ($messagesLabeleds as $messageLabeled) { 
     192                                                                if (count($map['messageNumber']) > 0 && !in_array($messageLabeled, $map['messageNumber'])) 
     193                                                                        continue; 
     194                                                                         
     195                                                                $result[] = array ( 
     196                                                                        'id' => $folder . '/' . $messageLabeled . '#' . $label,  
     197                                                                        'folderName' => $folder, 
     198                                                                        'messageNumber' => $messageLabeled, 
     199                                                                        'labelId' => $label 
     200                                                                ); 
     201                                                        } 
     202                                                } 
     203                                                 
     204                                                imap_close($this->mbox); 
     205                                                $this->mbox = false; 
     206                                        } 
     207                                } 
     208                                 
     209                                return $result; 
     210                        } 
     211                         
     212                        case 'followupflagged': 
     213                        { 
     214                         
     215                                $result = array ( ); 
     216                                if (isset($criteria["filter"]) && is_array($criteria['filter'])) { 
     217                                        //melhorar o tratamento do filter com a lista de todos os labelIds dado pelo interceptor 
     218                                        $map = array( 
     219                                                'id' => array(), 
     220                                                'folderName' => array(), 
     221                                                'messageNumber' => array() 
     222                                        ); 
     223                                         
     224                                        self::parseFilter($criteria["filter"], &$map); 
     225                                         
     226                                        if (empty($map['folderName'])) { 
     227                                                $folders = $this->get_folders_list(); 
     228                                                foreach ($folders as $folder) 
     229                                                        if (isset($folder['folder_id']))  
     230                                                                $map['folderName'][] = $folder['folder_id']; 
     231                                        } 
     232 
     233                                        foreach ($map['folderName'] as $folder) { 
     234                                                $this->mbox = $this->open_mbox($folder); 
     235                                                 
     236                                                foreach ($map['id'] as $followupflagged) { 
     237                                                        $messagesFlaggeds = imap_search($this->mbox, 'UNDELETED KEYWORD "$Followupflag'.$followupflagged.'"', SE_UID); 
     238                                                         
     239                                                        foreach ($messagesFlaggeds as $messageFlagged) { 
     240                                                                if (count($map['messageNumber']) > 0 && !in_array($messageFlagged, $map['messageNumber'])) 
     241                                                                        continue; 
     242                                                                         
     243                                                                $result[] = array ( 
     244                                                                        'id' => $folder . '/' . $messageFlagged . '#' . $followupflagged,  
     245                                                                        'folderName' => $folder, 
     246                                                                        'messageNumber' => $messageFlagged 
     247                                                                ); 
     248                                                        } 
     249                                                } 
     250                                                 
     251                                                imap_close($this->mbox); 
     252                                                $this->mbox = false; 
     253                                        } 
     254                                } 
     255                                                 
     256                                return $result;                          
     257                        } 
    36258                } 
    37  
    38                 break; 
    39             } 
    40             case 'message': 
    41             { 
    42                 //begin: for grid        
    43                 $page  = $criteria['page']; //{1}    get the requested page 
    44                 $limit = $criteria['rows']; //{10}   get how many rows we want to have into the grid 
    45                 $sidx  = $criteria['sidx']; //{id}   get index row - i.e. user click to sort 
    46                 $sord  = $criteria['sord']; //{desc} get the direction 
    47  
    48                 $filter = $criteria['filter']; 
    49  
    50                 if( !$sidx ) $sidx = 1; 
    51  
    52                 $folder_name = str_replace( '.', $this->imap_delimiter, $context['folder'] ); 
    53                  
    54                 $count = imap_num_msg( $this->open_mbox( $folder_name ) ); 
    55  
    56                 $total_pages = $count > 0 ? ceil( $count/$limit ) : 0; 
    57  
    58                 if( $page > $total_pages ) 
    59                     $page = $total_pages; 
    60  
    61                 $start = $limit * $page - $limit; 
    62  
    63                 // do not put $limit*($page - 1) 
    64                 //end: for grid 
    65  
    66                 if( $filter ) 
     259    } 
     260 
     261    public function read( $URI, $justthese = false ) 
     262    { 
     263 
     264                switch( $URI['concept'] ) 
    67265                { 
    68                     if( $filter[0] !== 'msgNumber' ) 
    69                     { 
    70                         for( $i = 0; $i < count($filter); $i++ ) 
    71                         { 
    72                             if( count( $filter[$i] ) === 4 ) 
    73                                 $criteria['isExact'] = ( array_shift( $filter[$i] ) === 'AND' ); 
    74  
    75                             $criteria[ $filter[$i][0] ] = array( 'criteria' => $filter[$i][2], 'filter' => $filter[$i][1] ); 
    76                         } 
    77  
    78                         return $this->searchSieveRule($criteria); 
    79                     } 
    80  
    81                     $msgNumber = array(); 
    82  
    83                     for( $i = $start; $i < $start + $limit && isset( $filter[2][$i] ); $i++ ) 
    84                           $msgNumber[] = $filter[2][$i]; 
    85  
    86                     if( empty( $msgNumber ) ) 
    87                         return( false ); 
    88  
    89                     $result = $this->get_info_msgs( array( 'folder' => $folder_name,  
    90                                                            'msgs_number' => implode( ',', $msgNumber ) ) ); 
    91  
    92                     foreach( $result as $i => $val ) 
    93                         $result[$i] = unserialize( $val ); 
    94  
     266                        case 'message': 
     267                        { 
     268                                return $this->to_utf8(  
     269                                        $this->get_info_msg( array('msg_number'=>$URI['id'], 
     270                                        'msg_folder'=>str_replace( '.', $this->imap_delimiter, $justthese['context']['folder'] )) )  
     271                                ); 
     272                        } 
     273                        case 'labeled': 
     274                        { 
     275                                /** 
     276                                 * id looks like 'folder/subfolder/subsubfolder/65#13', meaning messageId#labelId 
     277                                 */ 
     278                                list($messageId, $labelId) = explode('#', $URI['id']); 
     279                                $folderName = basename($messageId); 
     280                                $messageNumber = dirname($messageId); 
     281                                 
     282                                $result = array(); 
     283 
     284                                if ($folderName && $messageNumber && $labelId) { 
     285                                        $this->mbox = $this->open_mbox($folderName); 
     286                                        $messagesLabeleds = imap_search($this->mbox, 'UNDELETED KEYWORD "$Label'.$labelId.'"', SE_UID); 
     287                                         
     288                                        if (in_array($messageNumber, $messagesLabeleds)) { 
     289                                                $result = array ( 
     290                                                        'id' => $URI['id'],  
     291                                                        'folderName' => $folderName, 
     292                                                        'messageNumber' => $messageNumber, 
     293                                                        'labelId' => $labelId 
     294                                                ); 
     295                                        } 
     296                                        imap_close($this->mbox); 
     297                                        $this->mbox = false; 
     298                                } 
     299                                 
     300                                return $result; 
     301                        } 
     302                         
     303                        case 'followupflagged': 
     304                        { 
     305                                /** 
     306                                 * id looks like 'folder/subfolder/subsubfolder/65#13', meaning messageId#followupflaggedId 
     307                                 */ 
     308                                list($messageId, $followupflaggedId) = explode('#', $URI['id']); 
     309                                $folderName = basename($messageId); 
     310                                $messageNumber = dirname($messageId); 
     311                                 
     312                                $result = array(); 
     313 
     314                                if ($folderName && $messageNumber && $followupflaggedId) { 
     315                                        $this->mbox = $this->open_mbox($folderName); 
     316                                        $messagesFlaggeds = imap_search($this->mbox, 'UNDELETED KEYWORD "$Followupflag'.$followupflaggedId.'"', SE_UID); 
     317                                         
     318                                        if (in_array($messageNumber, $messagesFlaggeds)) { 
     319                                                $result = array ( 
     320                                                        'id' => $URI['id'],  
     321                                                        'folderName' => $folderName, 
     322                                                        'messageNumber' => $messageNumber 
     323                                                ); 
     324                                        } 
     325                                        imap_close($this->mbox); 
     326                                        $this->mbox = false; 
     327                                } 
     328                                 
     329                                return $result; 
     330                        } 
    95331                } 
    96                 else 
     332    } 
     333 
     334    public function create( $URI, $data) 
     335    { 
     336 
     337                switch( $URI['concept'] ) 
    97338                { 
    98                     $result = $this->get_range_msgs2( array( 'folder' => $folder_name, //INBOX 
    99                                          'msg_range_begin' => $start + 1, //?? 
    100                                          'msg_range_end' => $start + $limit, //$limit = $_GET['rows']; // get how many rows we want to have into the grid 
    101                                          'sort_box_type' => 'SORTARRIVAL',  
    102                                          'search_box_type' => 'ALL', 
    103                                                              'sort_box_reverse' => 1 ) ); 
     339                        case 'labeled': 
     340                        { 
     341                                if (isset($data['folderName']) && isset($data['messageNumber']) && isset($data['labelId'])) { 
     342                                        $this->mbox = $this->open_mbox($data['folderName']); 
     343                                        imap_setflag_full($this->mbox, $data['messageNumber'], '$Label' . $data['labelId'], ST_UID); 
     344 
     345                                        imap_close($this->mbox); 
     346                                        $this->mbox = false; 
     347 
     348                                        return array ('id' => $data['folderName'].'/'.$data['messageNumber'].'#'.$data['labelId']); 
     349                                } 
     350                                return array (); 
     351                        } 
     352                        case 'followupflagged': 
     353                        { 
     354                                //tem que gravar no banco primeiro, obter o id e depois mandar gravar no imap passando o id no data 
     355                                if (isset($data['folderName']) && isset($data['messageNumber']) && isset($data['id'])) { 
     356                                        list($messageId, $followupflaggedId) = explode('#', $data['id']); 
     357                                         
     358                                        $this->mbox = $this->open_mbox($data['folderName']); 
     359                                        imap_setflag_full($this->mbox, $data['messageNumber'], '$Followupflag' . $followupflaggedId, ST_UID); 
     360 
     361                                        imap_close($this->mbox); 
     362                                        $this->mbox = false; 
     363 
     364                                        return array ('id' => $data['id']); 
     365                                } 
     366                                return array (); 
     367                        } 
    104368                } 
    105                 //return var_export($result); 
    106  
    107                 $response = array( "page" => $page, "total" => $total_pages, "records" => $count ); 
    108                  
    109                 for ($i=0; $i<count($result); $i++) 
     369        } 
     370 
     371    public function delete( $URI, $justthese = false, $criteria = false ) 
     372    { 
     373                switch( $URI['concept'] ) 
    110374                { 
    111                     $flags_enum = array('Recent', 'Unseen',  'Answered',  'Draft',  'Deleted', 'Flagged'); 
    112  
    113                     foreach ($flags_enum as $key => $flag) 
    114                     { 
    115                         if ( !isset($result[$i][$flag]) || !trim($result[$i][$flag]) || trim($result[$i][$flag]) == '')  
    116                                 unset($flags_enum[$key]); 
    117                         unset($result[$i][$flag]); 
    118                     } 
    119  
    120                     if (array_key_exists($i, $result)) 
    121                     { 
    122                                 $response["rows"][$i] = $result[$i]; 
    123                         $response["rows"][$i]['timestamp'] = ( ( $result[$i]['udate'] + $this->functions->CalculateDateOffset() ) * 1000 ); 
    124                                 $response["rows"][$i]['flags'] = implode(',', $flags_enum); 
    125                                 $response["rows"][$i]['size'] = $response["rows"][$i]['Size']; 
    126 //                      $response["rows"][$i]['udate'] = ( $result[$i]['udate'] + $this->functions->CalculateDateOffset()  * 1000 ); 
    127                                 unset($response["rows"][$i]['Size']); 
    128                     } 
    129                  } 
    130  
    131                 $response = $this->to_utf8($response); 
    132  
    133                 break; 
    134             } 
     375                        case 'labeled': 
     376                        { 
     377                                list($messageId, $labelId) = explode('#', $URI['id']); 
     378                                $folderName = basename($messageId); 
     379                                $messageNumber = dirname($messageId); 
     380                         
     381                                if ($folderName && $messageNumber && $labelId) { 
     382                                        $this->mbox = $this->open_mbox($folderName); 
     383                                        imap_clearflag_full($this->mbox, $messageNumber, '$Label' . $labelId, ST_UID); 
     384 
     385                                        imap_close($this->mbox); 
     386                                        $this->mbox = false; 
     387                                } 
     388                        } 
     389                        case 'followupflagged': 
     390                        { 
     391                                list($messageId, $followupflaggedId) = explode('#', $URI['id']); 
     392                                $folderName = basename($messageId); 
     393                                $messageNumber = dirname($messageId); 
     394                         
     395                                if ($folderName && $messageNumber && $followupflaggedId) { 
     396                                        $this->mbox = $this->open_mbox($folderName); 
     397                                        imap_clearflag_full($this->mbox, $messageNumber, '$Followupflag' . $followupflaggedId, ST_UID); 
     398 
     399                                        imap_close($this->mbox); 
     400                                        $this->mbox = false; 
     401                                } 
     402                        } 
     403                } 
     404 
     405                //TODO - return 
    135406        } 
    136         return $response; 
    137     } 
     407 
     408    public function deleteAll( $URI, $justthese = false, $criteria = false ) // avaliar 
     409    {} 
     410 
     411    public function update( $URI, $data, $criteria = false ) 
     412    { 
     413                //TODO - remove 
     414                //TODO - create 
     415        } 
    138416 
    139417//     public function retrieve( $concept, $id, $parents, $justthese = false, $criteria = false ) 
    140418//     { 
    141 //      return $this->read( array( 'id' => $id,  
     419//                      return $this->read( array( 'id' => $id,  
    142420//                          'concept' => $concept,  
    143421//                          'context' => $parents ), $justthese ); 
    144422//     } 
    145423 
    146     public function read( $URI, $justthese = false ) 
    147     { 
    148  
    149         return $this->to_utf8( $this->get_info_msg( array('msg_number'=>$URI['id'], 
    150                                                                                                           'msg_folder'=>str_replace( '.', $this->imap_delimiter, $justthese['context']['folder'] )) ) ); 
    151     } 
    152  
    153     public function create( $URI, $data ) 
    154     {} 
    155  
    156     public function delete( $URI, $justthese = false, $criteria = false ) 
    157     {} 
    158  
    159     public function deleteAll( $URI, $justthese = false, $criteria = false ) // avaliar 
    160     {} 
    161  
    162     public function update( $URI, $data, $criteria = false ) 
    163     {} 
    164  
    165424    public function replace( $URI, $data, $criteria = false ) 
    166425    {} 
     
    187446    function to_utf8($in)  
    188447    {  
    189         if (is_array($in)) {  
    190                 foreach ($in as $key => $value) {  
    191                         $out[$this->to_utf8($key)] = $this->to_utf8($value);  
     448                if (is_array($in)) {  
     449                        foreach ($in as $key => $value) {  
     450                                $out[$this->to_utf8($key)] = $this->to_utf8($value);  
     451                        }  
     452                } elseif(is_string($in)) {  
     453                                return mb_convert_encoding( $in , 'UTF-8' , 'UTF-8 , ISO-8859-1' );  
     454                } else {  
     455                        return $in;  
    192456                }  
    193         } elseif(is_string($in)) {  
    194                         return mb_convert_encoding( $in , 'UTF-8' , 'UTF-8 , ISO-8859-1' );  
    195         } else {  
    196                 return $in;  
    197         }  
    198         return $out;  
     457                return $out;  
    199458    } 
    200  
     459         
     460             
     461    private static function parseFilter( $filter ,&$map){ 
     462                 
     463                if( !is_array( $filter ) || count($filter) <= 0) return null; 
     464                                         
     465                $op = array_shift( $filter ); 
     466                switch(strtolower($op)) 
     467                { 
     468                        case 'and': { 
     469                                foreach ($filter as $term) 
     470                                        self::parseFilter($term ,&$map); 
     471                                return; 
     472                        } 
     473                        case 'in': { 
     474                                $map[$filter[0]] = array_merge($map[$filter[0]], $filter[1]); 
     475                                return; 
     476                        } 
     477                        case '=': { 
     478                                $map[$filter[0]][] = $filter[1]; 
     479                        } 
     480                } 
     481        } 
     482         
    201483} 
Note: See TracChangeset for help on using the changeset viewer.