Ignore:
Timestamp:
07/11/12 11:45:10 (12 years ago)
Author:
niltonneto
Message:

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

Location:
branches/2.4
Files:
32 edited
30 copied

Legend:

Unmodified
Added
Removed
  • branches/2.4

  • branches/2.4/prototype/modules/calendar/alarms.php

    r6378 r6754  
    77require_once ROOTPATH.'/modules/calendar/constants.php'; 
    88require_once ROOTPATH.'/api/parseTPL.php'; 
     9 
     10use prototype\api\Config as Config; 
    911 
    1012$target = (gmdate('U') - 300 ).'000'; 
  • branches/2.4/prototype/modules/calendar/css/layout.css

    r6501 r6754  
    227227.new-event-win ul.attendee-permissions-list, li.attendee-permissions-list{text-align: left;} 
    228228 
    229 li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;}  
     229li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;} 
    230230 
    231231p.request-update{display: inline; position: relative; top: 2px;} 
     
    401401 
    402402label.messagesHelpers{display: block; position: absolute; left: 60px; top: 21px;} 
     403 
    403404/* -- calendar list styles -- */ 
    404405 
  • branches/2.4/prototype/modules/calendar/interceptors/DAViCalAdapter.php

    r6010 r6754  
    11<?php 
    22require_once ROOTPATH.'/modules/calendar/constants.php'; 
     3use prototype\api\Config as Config; 
    34 
    45class DAViCalAdapter {  
  • branches/2.4/prototype/modules/calendar/interceptors/DBMapping.php

    r6588 r6754  
    55 
    66require_once ROOTPATH . '/modules/calendar/interceptors/Helpers.php'; 
     7 
     8use prototype\api\Config as Config; 
    79 
    810class DBMapping extends Helpers { 
     
    147149                        .'(range_start >= \'' . $start[1] . '\' AND range_start <= \'' . $end[1] . '\') OR ' 
    148150                        .'(range_start <= \'' . $start[2] . '\' AND range_end >= \'' . $end[2] . '\')) ' 
    149                 .(!empty($ids) ? ' ' .'AND calendar_object.id NOT IN (\'' . implode('\',\'', $ids) . '\') ' : ' ')  
    150                 .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, '  
    151                 .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) '  
    152                 .'AND (calendar_repeat.object_id = calendar_object.id))'; 
     151                .(!empty($ids) ? ' ' .'AND calendar_object.id NOT IN (\'' . implode('\',\'', $ids) . '\') ' : ' ') 
     152                .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, ' 
     153                .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) ' 
     154                .'AND (calendar_repeat.object_id = calendar_object.id))'; 
    153155 
    154156                $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 
     
    206208        //Recurepa as execeções anteriores caso exista 
    207209        if (isset($lastExceptions) && count($lastExceptions) && $lastExceptions) 
    208             foreach ($lastExceptions as $value)  
    209                 array_push($exceptions, $value['occurrence']); 
     210            foreach ($lastExceptions as $value) 
     211                array_push($exceptions, $value['occurrence']); 
    210212 
    211213        $params = array_diff(self::decodeRepeat($repeat, $ranges[0]['rangeStart'], $ranges[0]['rangeEnd']), $exceptions); 
     
    215217        if (!empty($params)) 
    216218            Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES('" . $id . "','0','" . implode("'),('" . $id . "','0','", $params) . "')" . ( empty($exceptions) ? "" : ",('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" )); 
    217         else if(!empty($exceptions))  
    218             Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES ('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" );  
    219    } 
     219        else if(!empty($exceptions)) 
     220            Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES ('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" ); 
     221    }        
    220222 
    221223    public function checkOccurrences($start, $end, $calendarIds) { 
     
    543545 
    544546                if (isset($v['id'])) { 
    545                     $data = self::decodeParticipantsEvent($uri, $v, $criteria, $original);  
    546          
    547                     $result[$i]['statusAttendees'] = isset($data['statusAttendees']) ? $data['statusAttendees'] : false;  
    548                     $result[$i]['sizeAttendees'] = isset($data['sizeAttendees']) ? $data['sizeAttendees'] : false;  
    549                     $result[$i]['participants'] = $data['attendees'];  
    550          
     547                    $data = self::decodeParticipantsEvent($uri, $v, $criteria, $original); 
     548 
     549                    $result[$i]['statusAttendees'] = isset($data['statusAttendees']) ? $data['statusAttendees'] : false; 
     550                    $result[$i]['sizeAttendees'] = isset($data['sizeAttendees']) ? $data['sizeAttendees'] : false; 
     551                    $result[$i]['participants'] = $data['attendees']; 
     552 
    551553                    $attachmentRelation = Controller::find(array('concept' => 'schedulableToAttachment'), false, array('filter' => array('=', 'schedulable', $v['id']))); 
    552554                    if (is_array($attachmentRelation)) { 
     
    571573        return $result; 
    572574    } 
    573  
     575     
    574576 
    575577//TODO: Remover apos suporte a deepness na api 
     
    698700///////////////////////////////////////////////////////////////////////// 
    699701 
    700     static function decodeParticipantsEvent( &$uri, $result, &$criteria, $original) {  
    701         $participants = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $result['id']) ));  
    702                   
    703         if($participants && ($size = count($participants)) < 100){  
    704             if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0){  
    705                self::deepnessFindParticipant($uri, $participants, $criteria, $original);  
    706                 $participants['attendees'] = $participants;  
    707             }  
    708                               
    709         }else if($participants && ($size = count($participants)) > 100){  
    710            $owner = Controller::read( array( 'concept' => 'calendarSignature' ) , false ,array( 'filter' => array('AND', array('=', 'calendar'  ,  $result['calendar']), array('=', 'isOwner', '1'))));  
    711            $owner = Controller::read( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'user', $owner[0]['user'])), 'deepness' => 2));  
    712           
    713            if(is_array($owner))  
    714                $owner = $owner[0];  
    715           
    716            $reference = array_slice($participants, 0, 100);  
    717            $organizer = false;  
    718            $asOwner = false;  
    719                   
    720             foreach($reference as $r => &$v){  
    721                 if($v['id'] == $owner['id']){  
    722                    $v = $owner;  
    723                    $asOwner = true;  
    724                    continue;  
    725                 }  
    726                   
    727                 self::deepnessReadParticipant($uri, $v, $criteria, $original);  
    728           
    729                 if($v['isOrganizer'] == "1" )  
    730                    $organizer = $v;  
    731            }  
    732           
    733            if(!$organizer){  
    734                $organizer = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'isOrganizer', '1')), 'deepness' => 2));  
    735                   
    736                array_push($reference, $organizer[0]);  
    737           
    738            }else if($organizer && ($organizer['id'] != $owner['id']))  
    739                array_merge($reference, $organizer);  
    740          
    741            if(!$asOwner)  
    742                array_push($reference, $owner);  
    743                   
    744            $statusAttendees = array( 'default' => 0, 'accepted' => 0, 'tentative' => 0, 'cancelled' => 0, 'unanswered' => 0, 'delegated' => 0 );  
    745            $statusLabels = array( 'default', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' );  
    746                   
    747            foreach($participants as $k => &$p){  
    748                if(!$organizer && $p['isOrganizer'] == "1"){  
    749                    self::deepnessReadParticipant($uri, $p, $criteria, $original);  
    750                    $reference = array_merge($reference, array($p));  
    751                }  
    752                   
    753                $statusAttendees[$statusLabels[$p['status']]]++;  
    754            }  
    755                   
    756            $participants['statusAttendees'] = $statusAttendees;  
    757            $participants['sizeAttendees'] = $size;  
    758            $participants['attendees'] = $reference;  
    759         }  
    760                           
    761         return $participants;  
    762     }  
    763               
    764     static function dayAlarm( &$uri , &$params , &$criteria , $original ) {     
     702    static function decodeParticipantsEvent( &$uri, $result, &$criteria, $original) { 
     703        $participants = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $result['id']) )); 
     704 
     705        if($participants && ($size = count($participants)) < 100){ 
     706            if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0){ 
     707                self::deepnessFindParticipant($uri, $participants, $criteria, $original); 
     708                 $participants['attendees'] = $participants; 
     709            } 
     710             
     711        }else if($participants && ($size = count($participants)) > 100){ 
     712            $owner = Controller::read( array( 'concept' => 'calendarSignature' ) , false ,array( 'filter' => array('AND', array('=', 'calendar'  ,  $result['calendar']), array('=', 'isOwner', '1')))); 
     713            $owner = Controller::read( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'user', $owner[0]['user'])), 'deepness' => 2)); 
     714 
     715            if(is_array($owner)) 
     716                $owner = $owner[0]; 
     717 
     718            $reference = array_slice($participants, 0, 100); 
     719            $organizer = false; 
     720            $asOwner = false; 
     721 
     722            foreach($reference as $r => &$v){ 
     723                if($v['id'] == $owner['id']){ 
     724                    $v = $owner; 
     725                    $asOwner = true; 
     726                    continue; 
     727                } 
     728 
     729                self::deepnessReadParticipant($uri, $v, $criteria, $original); 
     730 
     731                if($v['isOrganizer'] == "1" ) 
     732                    $organizer = $v; 
     733            } 
     734 
     735            if(!$organizer){ 
     736                $organizer = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'isOrganizer', '1')), 'deepness' => 2)); 
     737 
     738                array_push($reference, $organizer[0]); 
     739 
     740            }else if($organizer && ($organizer['id'] != $owner['id'])) 
     741                array_merge($reference, $organizer); 
     742 
     743            if(!$asOwner) 
     744                array_push($reference, $owner); 
     745 
     746            $statusAttendees = array( 'default' => 0, 'accepted' => 0, 'tentative' => 0, 'cancelled' => 0, 'unanswered' => 0, 'delegated' => 0 ); 
     747            $statusLabels = array( 'default', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ); 
     748 
     749            foreach($participants as $k => &$p){ 
     750                if(!$organizer && $p['isOrganizer'] == "1"){ 
     751                    self::deepnessReadParticipant($uri, $p, $criteria, $original); 
     752                    $reference = array_merge($reference, array($p)); 
     753                } 
     754 
     755                $statusAttendees[$statusLabels[$p['status']]]++; 
     756            } 
     757 
     758            $participants['statusAttendees'] = $statusAttendees; 
     759            $participants['sizeAttendees'] = $size; 
     760            $participants['attendees'] = $reference; 
     761        } 
     762         
     763        return $participants; 
     764    } 
     765     
     766    static function dayAlarm( &$uri , &$params , &$criteria , $original ) { 
    765767        if(isset($criteria['filter'][1]) && $criteria['filter'][1] == 'date') 
    766768        { 
     
    898900        Controller::delete(array('concept' => 'attachment', 'id' => $original['URI']['id'])); 
    899901    } 
    900  
    901     public function decodeDeleteCalendarSignatureAlarm(&$uri, &$params, &$criteria, $original) {  
    902             if ($original['URI']['id'] == '' && isset($original['criteria']['filter'])){  
    903                     Controller::deleteAll(array('concept' => 'calendarSignatureAlarm'), null,$original['criteria']);  
    904                     return false;  
    905             }  
    906     }  
     902     
     903    public function decodeDeleteCalendarSignatureAlarm(&$uri, &$params, &$criteria, $original) { 
     904                if ($original['URI']['id'] == '' && isset($original['criteria']['filter'])){ 
     905                        Controller::deleteAll(array('concept' => 'calendarSignatureAlarm'), null,$original['criteria']); 
     906                        return false; 
     907                } 
     908    } 
     909 
    907910    public function createDefaultSignature(&$uri, &$result, &$criteria, $original) { 
    908911 
     
    963966                //Criaremos uma agenda padrão 
    964967                $cal = array('name' => 'Calendario', 
    965                   'description' => 'Calendario Padrão',  
     968                    'description' => 'Calendario Padrão', 
    966969                    'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
    967970                    'dtstamp' => time() . '000' 
  • branches/2.4/prototype/modules/calendar/interceptors/Notifications.php

    r6331 r6754  
    55require_once ROOTPATH . '/plugins/icalcreator/iCalcreator.class.php'; 
    66require_once ROOTPATH . '/api/parseTPL.php'; 
     7 
     8use prototype\api\Config as Config; 
    79 
    810class Notifications extends Helpers { 
  • branches/2.4/prototype/modules/calendar/js/calendar.codecs.js

    r6588 r6754  
    349349            return { 
    350350                participant : meAttendee(form.attendee),  
    351                 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  
    352                 endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  
     351                startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     352                endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
    353353                allDay: ( !!form.allDay ? 1 : 0 ), 
    354354                schedulable: form.idEvent 
     
    499499 
    500500            var isShared = !objEvent.id ? false : (!!objEvent.calendar) && parseInt(Calendar.signatureOf[objEvent.calendar].isOwner) ? false : true; 
    501             var limitAttendee = false;  
     501            var limitAttendee = false; 
    502502 
    503503            return { 
     
    587587                me: me, 
    588588                delegatedFrom: delegatedFrom, 
    589                 statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants,  
    590                 sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false  
     589                statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 
     590                sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 
    591591            }; 
    592592        }); 
     
    641641    patati['byday'] = day.join(','); 
    642642 
    643     var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat;  
    644    
    645     var date = Date.parseExact( form.startDate + " "+$.trim(form.startHour) , formatString )  
    646               
     643    var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
     644 
     645    var date = Date.parseExact( form.startDate + " "+$.trim(form.startHour) , formatString ) 
     646     
    647647    patati['startTime'] = date.toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'); 
    648  
     648         
    649649    if( !patati['byday'] ) 
    650650        switch(form.frequency) { 
     
    657657                break; 
    658658            case 'yearly': 
    659                 patati['byyearday'] = (1 + date.getDayOfYear());  
     659                patati['byyearday'] = (1 + date.getDayOfYear()); 
    660660                break; 
    661661            default : 
     
    667667         
    668668    if (($(".endRepeat").val() == 'customDate')) 
    669         patati['endTime'] = Date.parseExact( $(".customDateEnd").val() + (" "+$.trim(form.endHour)) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00');  
    670     
    671  patati['interval']  = $(".eventInterval").val(); 
     669        patati['endTime'] = Date.parseExact( $(".customDateEnd").val() + (" "+$.trim(form.endHour)) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'); 
     670         
     671    patati['interval']  = $(".eventInterval").val(); 
    672672 
    673673    /** 
     
    722722            return DataLayer.merge({ 
    723723                "class": form["class"], 
    724                 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  
    725                 endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) ,  
     724                startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     725                endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
    726726                allDay: ( !!form.allDay ? 1 : 0 ),        
    727727                id: form.idEvent, 
  • branches/2.4/prototype/modules/calendar/js/calendar.contentMenu.js

    r6588 r6754  
    2626                var schedulable = DataLayer.get('schedulable', idEvent); 
    2727 
    28                 var isRecurrence = DataLayer.get('repeat', schedulable.repeat).frequency || false;  
    29                   
    30                 var top = $('#divAppbox').scrollTop();   
    31                    
     28                var isRecurrence = DataLayer.get('repeat', schedulable.repeat).frequency || false; 
     29 
     30                var top = $('#divAppbox').scrollTop(); 
     31 
    3232                var template = DataLayer.render( 'templates/menu_context_event.ejs', {event: schedulable.id , 
    33                     top: (event.clientY - 135 + top), left: (event.clientX - 445),   
    34                     signature: Calendar.signatureOf[idCalendar],  
    35                     calendars: Calendar.calendars, isRecurrence: (!isRecurrence || isRecurrence == 'none') ? false : true, 
     33                    top: (event.clientY - 135 + top), left: (event.clientX - 445),  
     34                    signature: Calendar.signatureOf[idCalendar], 
     35                    calendars: Calendar.calendars, isRecurrence: (!isRecurrence || isRecurrence == 'none') ? false : true, 
    3636                    idRecurrence: idRecurrence 
    3737                }); 
    38                  
     38 
    3939                $('#context-menu-event').html(template); 
    40                  
     40 
    4141                var method = function(value){ 
    4242                    switch (value){ 
  • branches/2.4/prototype/modules/calendar/js/calendar.date.js

    r6453 r6754  
    143143                return dateFormat( date, format.replace(/m/g, 'M') ); 
    144144 
    145         },  
    146                   
    147         toString: function(date, format){  
    148                         return dateFormat( date, format.replace(/M/g, 'm') );  
    149         },  
    150           
    151         decodeRange: function(date, range){  
    152                         return (parseInt(date.getTime()) + (range * 60000));  
     145        }, 
     146 
     147        toString: function(date, format){ 
     148                        return dateFormat( date, format.replace(/M/g, 'm') ); 
     149        }, 
     150         
     151        decodeRange: function(date, range){ 
     152                        return (parseInt(date.getTime()) + (range * 60000)); 
    153153        } 
    154154                 
  • branches/2.4/prototype/modules/calendar/js/calendar.shared.js

    r6613 r6754  
    7171                    }); 
    7272            }); 
    73                                  
    74                                  
    75            DataLayer.commit();  
    76            UI.dialogs.sharedCalendar.dialog("close"); 
     73 
     74            DataLayer.commit(); 
     75            UI.dialogs.sharedCalendar.dialog("close"); 
    7776        }; 
    7877 
  • branches/2.4/prototype/modules/calendar/js/helpers.js

    r6734 r6754  
    1313 
    1414function validDateEvent(){ 
    15     
    16     var errors = {  
    17             'emptyInitData': 'Por favor, informe uma data inicial',  
    18             'emptyEndData': 'Por favor, informe uma data final',  
    19             'emptyInitHour': 'Por favor, informe uma hora inicial',  
    20             'emptyEndHour': 'Por favor, informe uma hora final',  
    21               
    22             'invalidInitData' : 'Data inicial inválida',  
    23             'invalidEndData' : 'Data final inválida',  
    24               
    25             'equalData' : 'Hora inicial igual a final',  
    26             'theirData' : 'Data final menor que a inicial',           
    27             'theirHour' : 'Hora final menor que a inicial',  
    28               
    29             'emptyOcurrence' : 'Por favor, informe o número de ocorrências',  
    30             'invalidOcurrence' : 'Por favor, informe um valor válido para a quantidade de ocorrências',  
    31                
    32             'emptyInterval' : 'Por favor, informe o intervalo',  
    33             'invalidInterval' : 'Por favor informe um valor válido para o intervalo'  
    34     };  
     15         
     16        var errors = { 
     17                'emptyInitData': 'Por favor, informe uma data inicial', 
     18                'emptyEndData': 'Por favor, informe uma data final', 
     19                'emptyInitHour': 'Por favor, informe uma hora inicial', 
     20                'emptyEndHour': 'Por favor, informe uma hora final', 
     21                 
     22                'invalidInitData' : 'Data inicial inválida', 
     23                'invalidEndData' : 'Data final inválida', 
     24                 
     25                'equalData' : 'Hora inicial igual a final', 
     26                'theirData' : 'Data final menor que a inicial',          
     27                'theirHour' : 'Hora final menor que a inicial', 
     28                 
     29                'emptyOcurrence' : 'Por favor, informe o número de ocorrências', 
     30                'invalidOcurrence' : 'Por favor, informe um valor válido para a quantidade de ocorrências', 
     31                 
     32                'emptyInterval' : 'Por favor, informe o intervalo', 
     33                'invalidInterval' : 'Por favor informe um valor válido para o intervalo' 
     34        }; 
    3535 
    3636    var start_date = $(".new-event-win.active .start-date").val(); 
     
    4444     
    4545    if(start_date == "") 
    46         return errors['emptyInitData'];  
     46                return errors['emptyInitData']; 
    4747    else if(end_date == "") 
    48         return errors['emptyEndData'];  
     48                return errors['emptyEndData']; 
    4949    else if(!isAllDay && start_time == "") 
    50         return errors['emptyInitHour'];  
     50                return errors['emptyInitHour']; 
    5151    else if(!isAllDay && end_time == "") 
    52         return errors['emptyEndHour'];  
    53                
    54         var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat;  
    55                       
    56         var startDate = Date.parseExact( start_date + " " + $.trim(start_time) , formatString );  
    57         var endDate = Date.parseExact( end_date + " " + $.trim(end_time) , formatString );  
     52                return errors['emptyEndHour']; 
     53         
     54    var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
     55                 
     56    var startDate = Date.parseExact( start_date + " " + $.trim(start_time) , formatString ); 
     57    var endDate = Date.parseExact( end_date + " " + $.trim(end_time) , formatString ); 
    5858 
    5959    if(startDate == null || startDate.getTime() < 0 ) 
    60         return errors['invalidInitData']; 
     60                return errors['invalidInitData']; 
    6161    if(endDate == null || endDate.getTime() < 0) 
    62         return errors['invalidEndData'];  
    63               
    64         if(isAllDay){  
    65                 startDate.clearTime();  
    66                 endDate.clearTime();  
    67                 if(endDate.compareTo(startDate) == -1)  
    68                         return errors['theirData'];  
    69         }else{  
    70                 var condition = endDate.compareTo(startDate);  
    71                                 if(condition != 1){  
    72                                         if(condition < 0){  
    73                                                 startDate.clearTime();  
    74                                                 endDate.clearTime();  
    75                                                 condition = endDate.compareTo(startDate);                                 
    76                                                 return (errors[ condition == 0 ? 'theirHour' : 'theirData'] );  
    77                                         }  
    78                                         else  
    79                                                 return errors['equalData'];  
    80                                 } 
    81         } 
     62                return errors['invalidEndData']; 
     63         
     64        if(isAllDay){ 
     65                startDate.clearTime(); 
     66                endDate.clearTime(); 
     67                if(endDate.compareTo(startDate) == -1) 
     68                        return errors['theirData']; 
     69        }else{ 
     70                var condition = endDate.compareTo(startDate); 
     71                if(condition != 1){ 
     72                        if(condition < 0){ 
     73                                startDate.clearTime(); 
     74                                endDate.clearTime(); 
     75                                condition = endDate.compareTo(startDate);                                
     76                                return (errors[ condition == 0 ? 'theirHour' : 'theirData'] ); 
     77                        } 
     78                        else 
     79                                return errors['equalData']; 
     80                } 
     81        } 
    8282     
    83    if (customDate)      
    84               if ( !($('.new-event-win.active .customDateEnd').val().length) )  
    85                  return errors['emptyEndData'];  
    86             
    87    if (occurrences){ 
    88        if ( !($('.occurrencesEnd').val().length) )  
    89           return errors['emptyOcurrence'];  
    90        else if (parseInt($('.occurrencesEnd').val(),10) <= 0 || parseInt($('.occurrencesEnd').val(),10).toString() == "NaN")  
    91           return errors['invalidOcurrence'];  
    92    }  
     83    if (customDate)     
     84                if ( !($('.new-event-win.active .customDateEnd').val().length) ) 
     85                   return errors['emptyEndData']; 
     86 
     87    if (occurrences){ 
     88                if ( !($('.occurrencesEnd').val().length) )  
     89                   return errors['emptyOcurrence']; 
     90                else if (parseInt($('.occurrencesEnd').val(),10) <= 0 || parseInt($('.occurrencesEnd').val(),10).toString() == "NaN") 
     91                   return errors['invalidOcurrence']; 
     92        } 
    9393 
    9494    if (!($('.new-event-win.active p.input-group.finish_event.repeat-in').hasClass('hidden'))){ 
    9595        if (!eventInterval.length) 
    96            return errors['emptyInterval'];  
     96            return errors['emptyInterval']; 
    9797        else if (parseInt(eventInterval,10) < 1 || parseInt(eventInterval,10).toString() == "NaN") 
    98            return errors['invalidInterval'];  
     98            return errors['invalidInterval']; 
    9999    }     
    100100    return false; 
     
    337337                    $('.qtip-active').find('input[name="'+acl_names[aclsParticipant.charAt(i)]+'"]').attr('checked', true); 
    338338                } 
     339                                                         
     340            $('.qtip .button').button(); 
    339341                                         
    340                                          
    341                 $('.qtip .button').button();                                     
    342342        }; 
    343343        }else{ 
     
    402402        position: 'center',  
    403403        close: function(event, ui) { 
    404             /** 
     404                /** 
    405405                 * Remove tooltip possivelmente existente 
    406406                 */ 
    407             if ($('.qtip.qtip-blue.qtip-active').length)  
    408                 $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                 
    409         attendees  = {}; 
    410  
     407                if ($('.qtip.qtip-blue.qtip-active').length) 
     408                        $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                
     409                attendees  = {}; 
    411410        }, 
    412411        beforeClose: function(event, ui) { 
     
    442441                                zebraDiscardEventDialog = false; 
    443442                            } 
    444                                  
    445                                 /**                                      
    446                                 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la  
    447                                 * com ESC, para que o evento ESC não seja propagado para fechamento da  
    448                                 * janela de edição de eventos, deve ser setada uma flag indicando que  
    449                                 * já existe uma janela de confirmação aberta.  
    450                                 */  
     443                                                                         
     444                            /** 
     445                            * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
     446                            * com ESC, para que o evento ESC não seja propagado para fechamento da 
     447                            * janela de edição de eventos, deve ser setada uma flag indicando que 
     448                            * já existe uma janela de confirmação aberta. 
     449                            */ 
    451450                            if (!clicked) { 
    452451                                window.setTimeout(function() { 
     
    462461            //DataLayer.rollback(); 
    463462            return canDiscardEventDialog; 
    464         },  
    465     dragStart: function(event, ui) {  
    466             if ($('.qtip.qtip-blue.qtip-active').length)  
    467                     $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     463        }, 
     464        dragStart: function(event, ui) { 
     465                if ($('.qtip.qtip-blue.qtip-active').length) 
     466                        $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
    468467        } 
    469468    }); 
     
    473472} 
    474473                 
    475 var tabs = UI.dialogs.addEvent.children('.content').tabs({  
    476         select: function(event, ui) {  
    477                 if ($('.qtip.qtip-blue.qtip-active').length)  
    478                         $('.qtip.qtip-blue.qtip-active').qtip('destroy');  
    479         }         
    480         }); 
     474var tabs = UI.dialogs.addEvent.children('.content').tabs({ 
     475        select: function(event, ui) {  
     476                if ($('.qtip.qtip-blue.qtip-active').length) 
     477                        $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     478        }        
     479        }); 
    481480var calendar = DataLayer.get('calendar', objEvent.calendar); 
    482481                                 
     
    493492 
    494493    UI.dialogs.addEvent.find('#calendar_addevent_details3').html(repeatHtml); 
    495     $(".date").datepicker({  
    496                 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy')  
    497                 });  
     494    $(".date").datepicker({ 
     495                dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy') 
     496                }); 
    498497                   
    499498    if(objEvent.repeat)  
     
    675674} 
    676675 
    677 /*Seleciona a agenda padrão para visualização/edição de um evento*/  
    678 if(objEvent.id)  
    679     UI.dialogs.addEvent.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change');  
    680                  
     676/*Seleciona a agenda padrão para visualização/edição de um evento*/ 
     677if(objEvent.id) 
     678    UI.dialogs.addEvent.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change'); 
     679 
    681680/*Adicionar alarms padrões, quando alterado a agenda do usuário*/                
    682681UI.dialogs.addEvent.find('select[name="calendar"]').change(function(){ 
     
    704703} 
    705704 
    706 var participant =  UI.dialogs.addEvent.find('dd.me input[name="attendee[]"]').val();  
    707         var calendar = $(this).val();  
    708            
    709         if( !parseInt(Calendar.signatureOf[calendar].isOwner) ){  
    710         var signature = Calendar.signatureOf[calendar];  
     705    var participant =  UI.dialogs.addEvent.find('dd.me input[name="attendee[]"]').val(); 
     706    var calendar = $(this).val(); 
     707     
     708    if( !parseInt(Calendar.signatureOf[calendar].isOwner) ){ 
     709        var signature = Calendar.signatureOf[calendar]; 
    711710        var organizer = DataLayer.get('calendarSignature', { 
    712711            filter: ['AND', ['=','calendar',signature.calendar.id], ['=','isOwner','1']],  
     
    15541553    if(acls.remove) 
    15551554        UI.dialogs.addEvent.find('.button.remove').show(); 
    1556                  
    1557     UI.dialogs.addEvent.find('.button.cancel').show(); 
     1555     
     1556    UI.dialogs.addEvent.find('.button.cancel').show();   
    15581557} 
    15591558 
     
    15611560 
    15621561/*Seleciona a agenda padrão para criação de um evento*/ 
    1563 if(!objEvent.id){  
    1564     var selectedCalendar = (objEvent.calendar != undefined) ? objEvent.calendar : (User.preferences.defaultCalendar ? User.preferences.defaultCalendar : myCalendar());  
    1565     UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change');  
    1566 }  
     1562if(!objEvent.id){ 
     1563    var selectedCalendar = (objEvent.calendar != undefined) ? objEvent.calendar : (User.preferences.defaultCalendar ? User.preferences.defaultCalendar : myCalendar()); 
     1564    UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change'); 
     1565} 
    15671566UI.dialogs.addEvent.find(':input').change(function(event){ 
    15681567    if (event.keyCode != '27' && event.keyCode != '13') 
     
    16971696    var signatures = []; 
    16981697    var previewActiveCalendarConf = 0; 
    1699     var calendarAlarms = [];  
    1700  
     1698        var calendarAlarms = []; 
     1699         
    17011700    for (var i=0; i<Calendar.signatures.length; i++) { 
    17021701        calendars[i]  = Calendar.signatures[i].calendar; 
     
    17221721        var populateAccordionOnActive = function(event, ui) { 
    17231722            var nowActive = (typeof(event) == 'number') ? event : $(event.target).accordion( "option", "active" ); 
    1724             if (nowActive === false)  
    1725                         return; 
     1723            if (nowActive === false) 
     1724                        return; 
    17261725            dataColorPicker.colorsDefined = { 
    17271726                border: '#'+signatures[nowActive].borderColor,  
     
    17461745                }); 
    17471746            form_content.find('.button').button(); 
    1748             jQuery('.preferences-alarms-list').find('.button.remove').click(function(el){  
    1749                         calendarAlarms[calendarAlarms.length] = $(this).parent('li').find('input[name="alarmId[]"]').val();  
    1750                         $(this).parent().remove();  
    1751                 });              
     1747            jQuery('.preferences-alarms-list').find('.button.remove').click(function(el){ 
     1748                        calendarAlarms[calendarAlarms.length] = $(this).parent('li').find('input[name="alarmId[]"]').val(); 
     1749                        $(this).parent().remove(); 
     1750                }); 
    17521751         
    17531752                DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 
     
    18681867    var template_content = jQuery('#configure_tab').html( template ).find('.configure-calendars-win'); 
    18691868    template_content.find('.button').button().filter('.save').click(function(evt){ 
    1870         if(calendarAlarms.length)  
    1871                 DataLayer.removeFilter('calendarSignatureAlarm', {filter: ['IN','id', calendarAlarms]}); 
     1869        if(calendarAlarms.length) 
     1870                DataLayer.removeFilter('calendarSignatureAlarm', {filter: ['IN','id', calendarAlarms]});         
    18721871        template_content.find('form').submit(); 
    18731872        $tabs.tabs( "remove", "#configure_tab"); 
     
    18771876            refresh_calendars(); 
    18781877        }); 
    1879         if(calendarAlarms.length)  
    1880                 Calendar.load();  
     1878        if(calendarAlarms.length) 
     1879                Calendar.load(); 
    18811880    }).end().filter('.cancel').click(function(evt){ 
    18821881        $tabs.tabs( "remove", "#configure_tab"); 
     
    19041903 
    19051904} else { 
    1906                 $('.positionHelper').css('display','none');  
    1907         $('.cal-list-options-btn').removeClass('fg-menu-open ui-state-active'); 
     1905        $('.positionHelper').css('display','none'); 
     1906    $('.cal-list-options-btn').removeClass('fg-menu-open ui-state-active'); 
    19081907    $tabs.tabs("select", "#configure_tab"); 
    19091908    $('.accordion-user-calendars').accordion( "activate" , previewActiveCalendarConf ); 
     
    20702069        var meu_container = $(".calendars-list").html( html ); 
    20712070         
    2072         var doMenu = function(){  
    2073         $('ul.list-calendars .cal-list-options-btn').each(function(){  
    2074                         $(this).menu({     
    2075                         content: $(this).next().html(),  
    2076                         width: '120',  
    2077                         positionOpts: {  
    2078                                 posX: 'left',    
    2079                                 posY: 'bottom',  
    2080                                 offsetX: 0,  
    2081                                 offsetY: 0,  
    2082                                 directionH: 'right',  
    2083                                 directionV: 'down',    
    2084                                 detectH: true, // do horizontal collision detection     
    2085                                 detectV: true, // do vertical collision detection  
    2086                                 linkToFront: false  
    2087                         },  
    2088                         flyOut: true,  
    2089                         showSpeed: 100,  
    2090                         crumbDefaultText: '>'  
    2091                         });  
    2092                 });  
    2093         }  
    2094         doMenu();  
    2095         $('#divAppbox').on('scroll',function(){  
    2096                 if ($('.cal-list-options-btn.fg-menu-open.ui-state-active')){                     
    2097                         var offset = $('.cal-list-options-btn.fg-menu-open.ui-state-active').offset();  
    2098                         if (offset)  
    2099                                 $('.positionHelper').css('top',offset.top);  
    2100                 }  
    2101         });          
    2102         $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();});  
    2103  
     2071        var doMenu = function(){ 
     2072                $('ul.list-calendars .cal-list-options-btn').each(function(){  
     2073                        $(this).menu({    
     2074                        content: $(this).next().html(),  
     2075                        width: '120',  
     2076                        positionOpts: {  
     2077                                posX: 'left',   
     2078                                posY: 'bottom',  
     2079                                offsetX: 0,  
     2080                                offsetY: 0,  
     2081                                directionH: 'right',  
     2082                                directionV: 'down',   
     2083                                detectH: true, // do horizontal collision detection    
     2084                                detectV: true, // do vertical collision detection  
     2085                                linkToFront: false  
     2086                        },  
     2087                        flyOut: true,  
     2088                        showSpeed: 100,  
     2089                        crumbDefaultText: '>'  
     2090                        });  
     2091                }); 
     2092        } 
     2093        doMenu(); 
     2094        $('#divAppbox').on('scroll',function(){ 
     2095                if ($('.cal-list-options-btn.fg-menu-open.ui-state-active')){                    
     2096                        var offset = $('.cal-list-options-btn.fg-menu-open.ui-state-active').offset(); 
     2097                        if (offset) 
     2098                                $('.positionHelper').css('top',offset.top); 
     2099                } 
     2100        }); 
     2101        $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();});          
     2102         
    21042103        meu_container.find(".button.new-calendar").button({ 
    21052104            icons: { 
     
    25442543// não há resultados     
    25452544 
    2546 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || '');  
     2545var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 
    25472546 
    25482547if ((((typeof(results) == 'undefined') || (!results.events_list )) && selecteds) &&(keyword != '' && keyword != null)) { 
    2549     $(currentView).html(  
    2550                 '<div title="Lista de eventos" class="events-list events-list-win active empty">' +  
    2551                 '<label>Não foi encontrado nenhum evento correspondente à sua pesquisa.</label>' +  
    2552                 '</div>'  
     2548    $(currentView).html( 
     2549                '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 
     2550                '<label>Não foi encontrado nenhum evento correspondente à sua pesquisa.</label>' + 
     2551                '</div>' 
    25532552        ); 
    25542553// há resultados e Agendas Selecionadas 
    25552554} else{  
    25562555    if(typeof(results) != 'undefined'){ 
    2557                 results['page_index'] = page_index;  
    2558                 results['keyword'] = keyword;  
    2559                                                   
    2560                 DataLayer.render( 'templates/event_list.ejs', results, function( html ){  
    2561                                                   
    2562                         $(currentView).html( html );  
    2563                         $('.events-list-win .menu-container .button').button();  
    2564                                                                                                                                
    2565                         $(".event-details-item").parent().click(function(){  
    2566                  
    2567                         $(this).siblings("div.details-event-list").toggleClass("hidden")  
    2568                         .find('.button.delete').click(function(){  
    2569                                 var eventId = $(this).siblings('[name="eventid"]').val();  
    2570                                 var calendarId = $(this).siblings('[name="calendarid"]').val();  
    2571                  
    2572                                 remove_event(eventId, calendarId);  
    2573                         })  
    2574                         .end().find('.button.edit').click(function(){                             
    2575                                 eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true );                                         
    2576                         });  
    2577                           
    2578                         });  
    2579                         paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search',  !!view ? view : User.preferences.defaultCalView);                                       
     2556                results['page_index'] = page_index; 
     2557                results['keyword'] = keyword; 
     2558                                 
     2559                DataLayer.render( 'templates/event_list.ejs', results, function( html ){ 
     2560                         
     2561                        $(currentView).html( html ); 
     2562                        $('.events-list-win .menu-container .button').button(); 
     2563                                                                                                                         
     2564                        $(".event-details-item").parent().click(function(){ 
     2565 
     2566                        $(this).siblings("div.details-event-list").toggleClass("hidden") 
     2567                        .find('.button.delete').click(function(){ 
     2568                                var eventId = $(this).siblings('[name="eventid"]').val(); 
     2569                                var calendarId = $(this).siblings('[name="calendarid"]').val(); 
     2570 
     2571                                remove_event(eventId, calendarId); 
     2572                        }) 
     2573                        .end().find('.button.edit').click(function(){                            
     2574                                eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true );                                        
     2575                        }); 
     2576 
     2577                        }); 
     2578                        paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search',  !!view ? view : User.preferences.defaultCalView); 
    25802579                }); 
    25812580    }else{ 
    2582         $(currentView).html(  
    2583                 '<div title="Lista de eventos" class="events-list events-list-win active empty">' +  
    2584                 '<input type="hidden" name="page_index" value="'+page_index+'"></inpunt>'+  
    2585                 '<input type="hidden" name="keyword" value="'+keyword+'"></inpunt>'+  
    2586                 '<label class="empty-result">Não foram encontrados eventos neste intervalo.</label>' +  
    2587                 '</div>'  
    2588                 );  
    2589         paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView);  
    2590     }  
    2591 }  
    2592       if(currentView != '#tab_events_list_')  
    2593           $tabs.tabs("select", currentView);  
     2581                $(currentView).html( 
     2582                        '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 
     2583                        '<input type="hidden" name="page_index" value="'+page_index+'"></inpunt>'+ 
     2584                        '<input type="hidden" name="keyword" value="'+keyword+'"></inpunt>'+ 
     2585                        '<label class="empty-result">Não foram encontrados eventos neste intervalo.</label>' + 
     2586                        '</div>' 
     2587                        ); 
     2588                paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView); 
     2589    } 
     2590} 
     2591        if(currentView != '#tab_events_list_') 
     2592            $tabs.tabs("select", currentView); 
    25942593} 
    25952594 
     
    28062805 
    28072806    } 
    2808 }  
    2809                   
    2810 function messageHelper(msg, isShow){  
    2811     if(isShow)  
    2812         new $.Zebra_Dialog('<span style="width: 50px; height: 50px;">'+  
    2813                             '<img src="'+DataLayer.dispatchPath+'/modules/calendar/img/loading.gif"></img>'+  
    2814                         '</span><label class="messagesHelpers"> '+ msg +' </label>' , {  
    2815                         'buttons':  false,  
    2816                         'modal': true,  
    2817                         'overlay_opacity': '0.5',  
    2818                         'keyboard': false,  
    2819                         'overlay_close': false,  
    2820                         'type': false,  
    2821                         'custom_class': 'messagesHelpersExpressoCalendar'  
    2822                         }  
    2823                     );  
    2824     else{  
    2825         $('.messagesHelpersExpressoCalendar').remove();  
    2826         $('.ZebraDialogOverlay').remove();  
    2827     }  
    2828 }  
     2807} 
     2808 
     2809function messageHelper(msg, isShow){ 
     2810    if(isShow) 
     2811        new $.Zebra_Dialog('<span style="width: 50px; height: 50px;">'+ 
     2812                            '<img src="'+DataLayer.dispatchPath+'/modules/calendar/img/loading.gif"></img>'+ 
     2813                        '</span><label class="messagesHelpers"> '+ msg +' </label>' , { 
     2814                        'buttons':  false, 
     2815                        'modal': true, 
     2816                        'overlay_opacity': '0.5', 
     2817                        'keyboard': false, 
     2818                        'overlay_close': false, 
     2819                        'type': false, 
     2820                        'custom_class': 'messagesHelpersExpressoCalendar' 
     2821                        } 
     2822                    ); 
     2823    else{ 
     2824        $('.messagesHelpersExpressoCalendar').remove(); 
     2825        $('.ZebraDialogOverlay').remove(); 
     2826    } 
     2827} 
  • branches/2.4/prototype/modules/calendar/templates/attendee_add.ejs

    r6656 r6754  
    33        %> 
    44        <dl class="block-attendee-list attendees-list"> 
    5                 <dt class="me"><%= data.event.me.user ? data.event.me.user.name : data.event.me.name %></dt>  
     5                <dt class="me"><%= data.event.me.user ? data.event.me.user.name : data.event.me.name %></dt> 
    66                <dd class="me"> 
    77                    <select class="status" name="status" <%= data.event.isAttendee ? '' : 'disabled' %>> 
     
    3939                <dd class="attendee-list"> 
    4040                        <ul class="attendee-list"> 
    41                             <% if (data.event.isAttendee && !data.event.acl.organization){ %>  
    42                                 <label for="attendee" title="<%=  data.event.me.user ? data.event.me.user.mail : data.event.me.mail %>" class="mail hidden"></label>  
    43                             <%}%> 
     41                            <% if (data.event.isAttendee && !data.event.acl.organization){ %> 
     42                                <label for="attendee" title="<%=  data.event.me.user ? data.event.me.user.mail : data.event.me.mail %>" class="mail hidden"></label> 
     43                            <%}%> 
     44                             
    4445                                <li class="organizer <%= (data.event.acl.organization) ? "hidden" : "" %>">  
    4546                                        <div style="overflow:hidden; width:100%; display:table;"> 
     
    148149                <% if (data.event && data.event.attendee.length > 0) { %> 
    149150                  <ul class="attendees-count"> 
    150                     <li><label>Sim:</label><%=data.event.statusParticipants.accepted%></li>  
     151                    <li><label>Sim:</label><%=data.event.statusParticipants.accepted%></li> 
    151152                    <li><label>Não:</label><%=data.event.statusParticipants.cancelled%></li> 
    152153                    <li><label>Talvez:</label><%=data.event.statusParticipants.tentative%></li> 
    153154                    <li><label>Aguardando:</label><%=data.event.statusParticipants.unanswered%></li> 
    154                   </ul>  
    155   <% } %>  
    156   <% if (data.event && data.event.sizeAttendeeLimit){%>  
    157       <ul class="attendees-count">  
    158           <li>Evento com muitos participantes, exibindo os 100 primeiros!</li>  
    159       </ul>      
     155                  </ul>      
     156            <% } %> 
     157            <% if (data.event && data.event.sizeAttendeeLimit){%> 
     158                <ul class="attendees-count"> 
     159                    <li>Evento com muitos participantes, exibindo os 100 primeiros!</li> 
     160                </ul> 
    160161            <% } %> 
    161162                </dd> 
  • branches/2.4/prototype/modules/calendar/templates/event_add.ejs

    r6586 r6754  
    225225    <div title="" class="menu-container footer-container menu-addevent"> 
    226226            <% if (data.event.id) { %> 
    227                         <a title="Exportar" class="button export" href="#">Exportar</a>  
    228                         <a title="Excluir" class="button delete" href="#">Excluir</a>  
     227                        <a title="Exportar" class="button export" href="#">Exportar</a> 
     228                        <a title="Excluir" class="button delete" href="#">Excluir</a> 
    229229            <% } %> 
    230                 <a title="Cancelar" class="button cancel" href="#">Cancelar</a>  
    231             <a title="Salvar" class="button save" href="#">Salvar</a>  
     230                <a title="Cancelar" class="button cancel" href="#">Cancelar</a> 
     231            <a title="Salvar" class="button save" href="#">Salvar</a> 
    232232    </div> 
    233233</div> 
  • branches/2.4/prototype/modules/calendar/templates/event_list.ejs

    r6586 r6754  
    168168                                                                <input name="eventid" type="hidden" value="<%=_event.id%>"></input> 
    169169                                                                <input name="calendarid" type="hidden" value="<%=_event.calendar%>"></input> 
    170                                                                 <a title="Excluir" class="button delete" href="#">Excluir</a>  
    171                                                                 <a title="Editar" class="button edit" href="#">Editar</a> 
     170                                                                <a title="Excluir" class="button delete" href="#">Excluir</a> 
     171                                                                <a title="Editar" class="button edit" href="#">Editar</a> 
    172172                                                        </div> 
    173173                                                </div> 
  • branches/2.4/prototype/modules/calendar/templates/index.ejs

    r6586 r6754  
    102102<body> 
    103103        <div id="wrap" class="expresso-calendar-container" style="text-align:left;"> 
    104                 <div title="Configurações" class="block-horizontal-toolbox"> 
     104                <div title="Configura&ccedil;&otilde;es" class="block-horizontal-toolbox"> 
    105105                        <a class="button config-menu main-config-menu" href="#"></a> 
    106106                        <div class="main-config-menu-content hidden">  
  • branches/2.4/prototype/modules/filters/edit-filter.ejs

    r6387 r6754  
    124124                                        %> 
    125125                                </select> 
     126                                <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 
     127                                <label><%= get_lang("Alert message filter by sender")%></label> 
    126128                        </fieldset> 
    127129                        <fieldset> 
  • branches/2.4/prototype/modules/filters/filter-list.ejs

    r6728 r6754  
    44        data.rules = (data.rules || []); 
    55        for (var i=0; i<data.rules.length; i++) { 
    6                         if(data.rules[i].id != "vacation") continue;  
    7     %>  
    8             <li class="rule vacation" title="vacation">  
    9                     <strong class="title <%= (data.rules[i].enabled == "true")? 'enable':'disable' %>"><%= (data.rules[i].name ? data.rules[i].name : data.rules[i].id)%></strong>  
    10                     <input type="hidden" class="id" value="<%= data.rules[i].id %>">  
    11                     <dl class="rule-briefing">  
    12                             <dt><%= get_lang("Criteria")%>:</dt>  
    13                             <dd class="rule-briefing-criteria">  
    14                                     <ul class="rule-briefing-criteria-list">  
    15                                             <li><br></li>  
    16                                     </ul>  
    17                             </dd>  
    18                             <dt><%= get_lang("Actions")%>:</dt>  
    19                             <dd class="rule-briefing-action">  
    20                                     <ul class="rule-briefing-action-list">  
    21                                     <%   
    22                                             for (var k=0; k<data.rules[i].actions.length; k++) {  
    23                                                     if(data.rules[i].actions[k].type == "addflag") {   
    24                                     %>                
    25                                                             <li><strong> (<%= get_lang("The filter is active for alerts") %>) </strong></li>  
    26                                     <%                
    27                                                             continue;  
    28                                                     }  
    29                                     %>  
    30                                             <li><strong><%= get_lang(data.rules[i].actions[k].type) %>:</strong> <%= (data.rules[i].actions[k].type == 'setflag') ? get_lang(data.rules[i].actions[k].parameter) : data.rules[i].actions[k].parameter %></li>  
    31                                     <%  
    32                                             }  
    33                                     %>  
    34                                     </ul>  
    35                             </dd>  
    36                     </dl>  
    37                     <ul class="menu-control">  
    38                             <li><a href="#<%= data.rules[i].name %>" class="button update" title="<%= get_lang("Change rule")%> '<%= data.rules[i].name %>'"></a></li>  
    39                             <li><a href="#<%= data.rules[i].name %>" class="button enable<%= (data.rules[i].enabled == "true")? '': ' hidden' %>" title="<%= get_lang("Disable rule")%>"></a></li>  
    40                             <li><a href="#<%= data.rules[i].name %>" class="button disable<%= (data.rules[i].enabled  == "true")? ' hidden': '' %>" title="<%= get_lang("Enable rule")%>"></a></li>  
    41                             <li><a href="#<%= data.rules[i].name %>" class="button close" title="<%= get_lang("Delete rule")%> '<%= data.rules[i].name %>'"></a></li>  
    42                             <li class="select" ><input type="checkbox"/></li>  
    43                     </ul>  
    44             </li>  
    45 <%  
    46     }  
    47 %>  
    48 <%  
    49     for (var i=0; i<data.rules.length; i++) {  
    50             if(typeof data.rules[i].criteria == "undefined" && data.rules[i].id != "vacation") continue;  
    51             if(data.rules[i].id == "vacation") continue; 
    52  
     6                if(data.rules[i].id != "vacation") continue; 
     7        %> 
     8                <li class="rule vacation" title="vacation"> 
     9                        <strong class="title <%= (data.rules[i].enabled == "true")? 'enable':'disable' %>"><%= (data.rules[i].name ? data.rules[i].name : data.rules[i].id)%></strong> 
     10                        <input type="hidden" class="id" value="<%= data.rules[i].id %>"> 
     11                        <dl class="rule-briefing"> 
     12                                <dt><%= get_lang("Criteria")%>:</dt> 
     13                                <dd class="rule-briefing-criteria"> 
     14                                        <ul class="rule-briefing-criteria-list"> 
     15                                                <li><br></li> 
     16                                        </ul> 
     17                                </dd> 
     18                                <dt><%= get_lang("Actions")%>:</dt> 
     19                                <dd class="rule-briefing-action"> 
     20                                        <ul class="rule-briefing-action-list"> 
     21                                        <%  
     22                                                for (var k=0; k<data.rules[i].actions.length; k++) { 
     23                                                        if(data.rules[i].actions[k].type == "addflag") {  
     24                                        %>               
     25                                                                <li><strong> (<%= get_lang("The filter is active for alerts") %>) </strong></li> 
     26                                        <%               
     27                                                                continue; 
     28                                                        } 
     29                                        %> 
     30                                                <li><strong><%= get_lang(data.rules[i].actions[k].type) %>:</strong> <%= (data.rules[i].actions[k].type == 'setflag') ? get_lang(data.rules[i].actions[k].parameter) : data.rules[i].actions[k].parameter %></li> 
     31                                        <% 
     32                                                } 
     33                                        %> 
     34                                        </ul> 
     35                                </dd> 
     36                        </dl> 
     37                        <ul class="menu-control"> 
     38                                <li><a href="#<%= data.rules[i].name %>" class="button update" title="<%= get_lang("Change rule")%> '<%= data.rules[i].name %>'"></a></li> 
     39                                <li><a href="#<%= data.rules[i].name %>" class="button enable<%= (data.rules[i].enabled == "true")? '': ' hidden' %>" title="<%= get_lang("Disable rule")%>"></a></li> 
     40                                <li><a href="#<%= data.rules[i].name %>" class="button disable<%= (data.rules[i].enabled  == "true")? ' hidden': '' %>" title="<%= get_lang("Enable rule")%>"></a></li> 
     41                                <li><a href="#<%= data.rules[i].name %>" class="button close" title="<%= get_lang("Delete rule")%> '<%= data.rules[i].name %>'"></a></li> 
     42                                <li class="select" ><input type="checkbox"/></li> 
     43                        </ul> 
     44                </li> 
     45<% 
     46        } 
    5347%> 
    54                 <% if(data.rules[i].id == "") continue; %>  
    55             <li class="rule" title="<%= data.rules[i].id %>">  
     48<% 
     49        for (var i=0; i<data.rules.length; i++) { 
     50                if(typeof data.rules[i].criteria == "undefined" && data.rules[i].id != "vacation") continue; 
     51                if(data.rules[i].id == "vacation") continue; 
     52         
     53%> 
     54                <% if(data.rules[i].id == "") continue; %> 
     55                <li class="rule" title="<%= data.rules[i].id %>"> 
    5656                        <strong class="title <%= (data.rules[i].enabled == "true")? 'enable':'disable' %>"><%= (data.rules[i].name ? data.rules[i].name : data.rules[i].id)%></strong> 
    5757                        <input type="hidden" class="id" value="<%= data.rules[i].id %>"> 
     
    8080                                        <%  
    8181                                                for (var k=0; k<data.rules[i].actions.length; k++) { 
     82                                                        if(data.rules[i].actions[k].type == "addflag") {  
     83                                        %>               
     84                                                                <li><strong> (<%= get_lang("The filter is active for alerts") %>) </strong></li> 
     85                                        <%               
     86                                                                continue; 
     87                                                        } 
    8288                                        %> 
    8389                                                <li><strong><%= get_lang(data.rules[i].actions[k].type) %>:</strong> <%= (data.rules[i].actions[k].type == 'setflag') ? get_lang(data.rules[i].actions[k].parameter) : data.rules[i].actions[k].parameter %></li> 
  • branches/2.4/prototype/modules/filters/filters.js

    r6646 r6754  
    1 /* Verifica se a regra fora de escritório está ativa */ 
     1/*  
     2 * Retorna as regras por remetente e que o usuário deseja ser avisado  
     3 */ 
     4function getFromAlertRules() {  
     5        var filters = DataLayer.get("filter"); 
     6        fromRules = []; 
     7        var alertMessage; 
     8        var active; 
     9        for (var index in filters) { 
     10                alertMessage = filters[index]['alertMessage'];           
     11                active = filters[index]['enabled']; 
     12                for(var criterias in filters[index]['actions']) { 
     13                        if (filters[index]['actions'][criterias]['type'] == 'fileinto' && alertMessage == 'true' && active == 'true') 
     14                                fromRules[fromRules.length] = filters[index]['actions'][criterias]['parameter']; 
     15                } 
     16        } 
     17        return fromRules; 
     18} 
     19 
     20/*  
     21 * Verifica se a regra Fora de escritório está ativa 
     22 */ 
    223function outOfficeVerify() {     
    324        DataLayer.remove('filter', false); 
     
    930                        outoffice = true; 
    1031                if(filters[index].id == "vacation" && filters[index].enabled == "true"){ 
    11                         write_msg(get_lang("Attention, you are in out of office mode."), true);  
     32                        write_msg(get_lang("Attention, you are in out of office mode."), true); 
    1233                        outoffice_active = true; 
    1334                        break; 
     
    1839} 
    1940 
    20  
    21 /* Valida as informações do formulário de filtro de mensagens */ 
     41/*  
     42 * Valida os campos do formulário da tela de filtros para salvar. 
     43 */ 
    2244valid_save = function(){ 
    2345        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); 
     
    5375                                        error = true; 
    5476                                        return; 
    55                                 }        
     77                                } 
    5678                        }); 
    5779                        if(error){ 
     
    6385        var criteria_list = list_container.find('[name="criteriaValue[]"]'); 
    6486        var er_num = /^[0-9]+$/; 
    65          
     87 
    6688        if($(".sizeRule").val() != "" && er_num.test($(".sizeRule").val()) == false) { 
    6789                $.Zebra_Dialog(get_lang("Size rule must be a number"),{ 
     
    7496        } 
    7597        $.each(criteria_list, function(index, value){ 
    76                 criteria += $.trim($(criteria_list[index]).val()); 
     98                if(($(criteria_list[index]).val() != "" && index != 5) || ($(criteria_list[index]).is(':checked'))){ 
     99                        criteria += $.trim($(criteria_list[index]).val()); 
     100                } 
    77101        }); 
    78102        if(criteria == ""){ 
     
    101125                                } 
    102126                        }); 
     127                        return false; 
     128                } 
     129        } 
     130        /*Validação ao salvar filtro com alerta*/ 
     131        var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]'); 
     132        if(list_container.find('.alertMessage').is(':checked')){ 
     133                if($(criteria_list[0]).val() != "" && $('.select-folderlist').find('[type="radio"]').is(':checked') && $(criteria_operator_list[0]).find('option:selected').val() != "!*"){ 
     134                        var hasValue = false; 
     135                        $.each(criteria_list, function(index, value){ 
     136                                if(($(criteria_list[index]).val() != "" && index != 0 && index != 5) || ($(criteria_list[index]).is(':checked'))){ 
     137                                        if($('.fields-isexact').find(':checked').val() == 'or'){ 
     138                                                hasValue = true; 
     139                                        } 
     140                                } 
     141                        }); 
     142                        if(hasValue){ 
     143                                $.Zebra_Dialog('<strong>'+get_lang('Filter with alert')+'</strong><br>'+get_lang('If more than one criterion for the filter, the "Meeting all the criteria" must be selected')); 
     144                                return false; 
     145                        }  
     146                }else{ 
     147                        $.Zebra_Dialog('<strong>'+get_lang('Filter with alert')+'</strong><br>'+get_lang('The filter should be set as a criteria "Sender" and action "Archive folder"')); 
    103148                        return false; 
    104149                } 
     
    132177date2Time = function (timestamp) { 
    133178        var date = new Date(); 
     179        if( typeof timestamp === "string" ) 
     180            timestamp = parseInt( timestamp, 10 ); 
    134181        if ((date.getTime() - timestamp) < (24*60*60*1000)) { 
    135182                return '<span class="timable" title="'+timestamp+'"> </span>'; 
     
    143190 
    144191keys = function( object ){ 
    145    
     192 
    146193  var array = []; 
    147    
     194 
    148195  for( var key in object ) 
    149196       array[ array.length ] = key; 
    150    
     197 
    151198  return( array ); 
    152199 
    153200} 
    154201 
    155 /* Mostra os detalhes do filtro para edição */ 
     202/*  
     203 * Preenche o formulário de filtros com as informações originais para edição 
     204 */ 
    156205showDetails = function( filter ){ 
    157    
     206 
    158207    form.get(0).reset(); 
    159208 
     
    175224                if(filter.actions[i].type == "redirect") 
    176225                        actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter); 
    177                 if(filter.actions[i].type == "reject")   
     226                if(filter.actions[i].type == "reject") 
    178227                        actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter); 
    179228                if(filter.actions[i].type == "fileinto" || filter.actions[i].type == "setflag") 
    180229                        actions.parent().find('[value="'+filter.actions[i].parameter+'"]').attr("selected", "selected"); 
    181230    } 
    182         isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True");       
     231        isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True"); 
     232         
     233        if (filter.alertMessage == 'true') $('.alertMessage').attr('checked', 'True'); 
    183234} 
    184235 
    185236 
    186237DataLayer.codec( "filter", "detail", { 
    187    
     238 
    188239  decoder: function( form ){ 
    189       if( form.vacation ) 
     240          if( form.vacation ) 
    190241          return { 
    191242                criteria: [{ value: "vacation", operator: "", field: "vacation" }], 
     
    199250 
    200251        var apply_messages_ = keys(selectedMessages); 
    201          
     252 
    202253        action = ''; 
    203          
     254 
    204255    return { 
    205256                name: form.name ? form.name.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;') : nameObj.val().replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'), 
    206257                isExact: ( form.isExact === "and" ), 
    207                 criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){   
     258                criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 
    208259                        return (!form.criteriaValue[i]) ? null: 
    209                         {  
     260                        { 
    210261                                        value:  form.criteriaValue[i].replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'), 
    211262                                        operator: criteriaOperator, 
     
    215266                actions: $.map( form.actionType || [], function( type, i ){ 
    216267                        var the_parameter = form.actionParameter[i]; 
    217                          
     268 
    218269                        !the_parameter ? the_parameter = form.actionParameter[i+1] : ""; 
     270 
     271                        if (type == 'alertMessage') {  
     272                                //if(!$('[value="alertMessage"]').parent().hasClass("hidden")){ 
     273                                        type = 'addflag'; 
     274                                        the_parameter = '$FilteredMessage'; 
     275                                //}else{ 
     276                                //      return; 
     277                                //} 
     278                        }  
    219279                        if (type == 'fileinto') {  
    220280                                the_parameter = form.valueFileInto; 
     
    223283                                the_parameter = form.messageReject; 
    224284                        } 
    225                         if (type == 'fileintoInbox') {  
     285                        if (type == 'fileintoInbox') { 
    226286                                if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){ 
    227287                                        type = 'fileinto'; 
     
    238298                                the_parameter = form.addressRedirect; 
    239299                        } 
    240                         if (type == 'setflag') {  
     300                        if (type == 'setflag') { 
    241301                                the_parameter = form.valueSetFlag; 
    242302                                action = form.valueSetFlag; 
     
    247307                }), 
    248308                enabled : true, 
     309                alertMessage: $('.alertMessage').is(':checked'), 
     310                //applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ? 
     311                //keys( selectedMessages ) : allMessages : "" 
    249312                applyMessages: apply_messages_  
     313                //applyMessages: "" 
    250314    }; 
    251315  }, 
    252    
     316 
    253317  encoder: function( filters ){ 
    254318        var rules = []; 
     
    260324 
    261325  } 
    262    
     326 
    263327}); 
    264328 
    265329/* Codec do datalayer */ 
    266330DataLayer.codec( "folder", "select", { 
    267    
     331 
    268332  decoder:function(){ 
    269      
     333 
    270334  }, 
    271335  encoder:function( data ){ 
    272   
     336 
    273337      var tree1 = [], tree2 = [], tree3 = []; 
    274338 
     
    295359 
    296360      } 
    297        
     361 
    298362      return {folders: [ tree1, tree2, tree3 ]}; 
    299363 
     
    301365 
    302366}); 
     367 
     368 
     369fromRules = getFromAlertRules(); 
    303370 
    304371var BASE_PATH = '../prototype/'; 
     
    310377var allMessages = false; 
    311378 
    312 /* Bloqueio de usuários na tela de mensagem do ExpressoMail */ 
    313 function block_user_email(email) {  
     379/*  
     380 * Bloqueia usuário por email - utilizado na tela de mensagens do ExpressoMail 
     381 */ 
     382function block_user_email(email) { 
    314383        delete selectedMessages; 
    315384        var idd = urlencode(email); 
     
    324393                                        $.Zebra_Dialog(get_lang("Lock User") + " " + email + " " + get_lang("removed")); 
    325394                                        list_filters(); 
     395                                        getFromAlertRules(); 
    326396                                }); 
    327397                                return true; 
     
    331401        } 
    332402        if(confirm(get_lang("Want to block the user") + " " + email + "?")){ 
    333                 DataLayer.put( 'filter', idd,  
    334                                         { name: email, isExact: false,  
     403                DataLayer.put( 'filter', idd, 
     404                                        { name: email, isExact: false, 
    335405                                                criteria:{ 0: {value: email, operator: "=", field: "from"} }, 
    336                                                 actions: { 0: {parameter: "INBOX" + cyrus_delimiter + "Spam", type: "fileinto"}},  
    337                                                 enabled: true,  
     406                                                actions: { 0: {parameter: "INBOX" + cyrus_delimiter + "Spam", type: "fileinto"}}, 
     407                                                enabled: true, 
    338408                                                id: email, 
    339                                                 block: true  
     409                                                block: true 
    340410                                        }); 
    341411                DataLayer.commit("filter", false, function(){ 
    342412                        $.Zebra_Dialog(get_lang("User") + " " + email + " " + get_lang("blocked")); 
    343413                        list_filters(); 
    344                 }); 
    345                  
     414                        getFromAlertRules(); 
     415                }); 
     416 
    346417        } 
    347418} 
    348419 
    349 /* Gerencia o grid das mensagens da caixa de entrada */ 
     420 
     421DataLayer.codec( 'message', 'jqGrid', { 
     422 
     423      encoder: function( data ){ 
     424 
     425          return( data ); 
     426 
     427      } 
     428}); 
     429 
     430/* Gerencia o grid das mensagens da caixa de entrada  
     431 * Mostra o grid de mensagens para aplicar a regra nas mensagens da caixa de entrada. 
     432 */ 
    350433function showGridMessages(thiss) { 
    351434        var criteria_list = list_container.find('[name="criteriaValue[]"]'); 
     
    366449        var options = ["from", "to", "subject", "body", "size"]; 
    367450        var criterias_ = new Array(); 
    368         var j = 0;               
    369         for (i in criteria_) { 
    370                 if(criteria_[i] != "") { 
    371                         (j == 0) ? criterias_[j] = {"0": options[i], "1": criteria_value_[i], "2": criteria_[i]} : criterias_[j] = {"0": "OR", "1": options[i], "2": criteria_value_[i], "3": criteria_[i]};  
    372                         j++; 
    373                 }        
    374         } 
     451 
     452        for (i in criteria_) 
     453                if(criteria_[i] != "") 
     454                    criterias_.push( criterias_.length ?  {"0": "OR", "1": options[i], "2": criteria_value_[i], "3": criteria_[i]} : {"0": options[i], "1": criteria_value_[i], "2": criteria_[i]} ); 
     455 
    375456        showGridButton = thiss.parent(); 
    376 //      .html('buscando mensagens...'); 
    377         showGridButton.siblings("#filtergrid-container").block({   
    378                                                         message: '<div id="loading-content"><div class="image"></div></div>',   
    379                                                         css: {   
    380                                                                 backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)',   
    381                                                                 backgroundRepeat: 'no-repeat',  
    382                                                                 backgroundPosition: 'center',  
    383                                                                 backgroundColor: 'transparent',  
    384                                                                 width: '32px',  
    385                                                                 height: '32px',  
    386                                                                 border:'none'   
    387                                                         },  
    388                                                         overlayCSS: {   
    389                                                                 backgroundColor: '#CCC',   
    390                                                                 opacity:         0.5  
    391                                                         }   
    392                                                 });  
    393  
    394         $.ajax({   
    395                 url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": criterias_} ), 
    396                 dataType: 'json', 
    397                 success: function(data){ 
    398                         allMessages = data; 
    399  
    400                         var parametro =  { "filter": ( data != false ? [ "msgNumber", "IN", data ] : criterias_ ) }; 
    401                          
    402                         if (typeof grid !== "undefined") {  
    403                                 grid.jqGrid( 'setGridParam', { url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( parametro ) } ).trigger( 'reloadGrid' );  
    404                                 //return; 
    405                         } 
    406                         grid = showGridButton.siblings("#filtergrid-container").removeClass('empty-container') 
    407                         .html('<table class="hidden fields-search-messages-grid" id="fields-search-messages-grid"><tr><td/></tr></table><div class="hidden fields-search-messages-grid-pager" id="fields-search-messages-grid-pager"></div>') 
    408                         .children(".fields-search-messages-grid, .fields-search-messages-grid-pager").removeClass('hidden').filter(".fields-search-messages-grid").trigger( 'reloadGrid' ).jqGrid({ 
    409                                 //url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": [ "msgNumber", "IN", data ]} ), 
    410                                 url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( parametro ), 
    411                                 datatype: "json", 
    412                                 mtype: 'GET', 
    413                                 colNames:['#', 'De', 'Assunto', 'Data', 'Tamanho'], 
    414                                 colModel:[ 
    415                                         {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false}, 
    416                                         {name:'from.email',index:'msg_number', width:130, sortable:false}, 
    417                                         {name:'subject',index:'subject', width:250, sortable:false}, 
    418                                         {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time}, 
    419                                         {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size} 
    420                                 ], 
    421                                 jsonReader : { 
    422                                         root:"rows", 
    423                                         page: "page", 
    424                                         total: "total", 
    425                                         records: "records", 
    426                                         repeatitems: false, 
    427                                         id: "0" 
    428                                 }, 
    429                                 rowNum:10, 
    430                                 //rowList:[10,25,50], 
    431                                 rowList:[10], 
    432                                 pager: '#fields-search-messages-grid-pager', 
    433                                 sortname: 'id', 
    434                                 viewrecords: true, 
    435                                 sortorder: "desc", 
    436                                 multiselect: true, 
    437                                 autowidth: true, 
    438                                 reloadAfterEdit: true, 
    439                                 reloadAfterSubmit: true, 
    440                                 height:200, 
    441                                 loadComplete: function(data) { 
    442                           //                            // aplica o contador 
    443                           //                            jQuery('.timable').each(function (i) { 
    444                           //                                    jQuery(this).countdown({ 
    445                           //                                            since: new Date(parseInt(this.title)),  
    446                           //                                            significant: 1, 
    447                           //                                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',  
    448                           //                                            description: ' atr&aacute;s' 
    449                           //                                    }); 
    450                           //                            }); 
    451                                 }, 
    452                                 onSelectRow: function (id, selected) { 
    453                                         if( selected )  
    454                                         { 
    455                                                 selectedMessages[ id ] = true; 
    456                                         } 
    457                                         else 
    458                                         { 
    459                                                 delete selectedMessages[ id ]; 
    460                                         } 
    461                                 }, 
    462                                 onSelectAll: function (id, selected) {                                   
    463                                         for (i in id) { 
    464                                                 if(selected) 
    465                                                         selectedMessages[id[i]] = true; 
    466                                                 else 
    467                                                         delete selectedMessages[id[i]];  
    468                                         } 
    469                                 }, 
    470                                 caption: 'Mensagens que atendem aos crit&eacute;rios' 
    471                         }); // end jqGrid 
    472                 } // end success 
    473         }); // end ajax 
     457 
     458        showGridButton.siblings("#filtergrid-container").block({ 
     459                                                        message: '<div id="loading-content"><div class="image"></div></div>', 
     460                                                        css: { 
     461                                                                backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 
     462                                                                backgroundRepeat: 'no-repeat', 
     463                                                                backgroundPosition: 'center', 
     464                                                                backgroundColor: 'transparent', 
     465                                                                width: '32px', 
     466                                                                height: '32px', 
     467                                                                border:'none' 
     468                                                        }, 
     469                                                        overlayCSS: { 
     470                                                                backgroundColor: '#CCC', 
     471                                                                opacity:         0.5 
     472                                                        } 
     473                                                }); 
     474 
     475        var data = DataLayer.get( 'message', { filter: criterias_, criteria: { properties: { context: { folder: 'INBOX' } } } }, true ); 
     476 
     477        DataLayer.register( 'criterias', 'message:jqGrid', function( crit ){ 
     478 
     479                    crit.properties = { context: { folder: 'INBOX' } }; 
     480 
     481                    return { filter: [ "msgNumber", "IN", data ], criteria: crit }; 
     482        }); 
     483 
     484        allMessages = data; 
     485 
     486        if (typeof grid !== "undefined") { 
     487                grid.jqGrid( 'setGridParam', { url: 'message:jqGrid', postData: data } ).trigger( 'reloadGrid' ); 
     488                //return; 
     489        } 
     490        grid = showGridButton.siblings("#filtergrid-container").removeClass('empty-container') 
     491        .html('<table class="hidden fields-search-messages-grid" id="fields-search-messages-grid"><tr><td/></tr></table><div class="hidden fields-search-messages-grid-pager" id="fields-search-messages-grid-pager"></div>') 
     492        .children(".fields-search-messages-grid, .fields-search-messages-grid-pager").removeClass('hidden').filter(".fields-search-messages-grid").trigger( 'reloadGrid' ).jqGrid({ 
     493                url: 'message:jqGrid', 
     494                datatype: "json", 
     495                mtype: 'GET', 
     496                colNames:['#', 'De', 'Assunto', 'Data', 'Tamanho'], 
     497                colModel:[ 
     498                        {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false}, 
     499                        {name:'from.email',index:'msg_number', width:130, sortable:false}, 
     500                        {name:'subject',index:'subject', width:250, sortable:false}, 
     501                        {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time}, 
     502                        {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size} 
     503                ], 
     504                jsonReader : { 
     505                        root:"rows", 
     506                        page: "page", 
     507                        total: "total", 
     508                        records: "records", 
     509                        repeatitems: false, 
     510                        id: "0" 
     511                }, 
     512                rowNum:10, 
     513                //rowList:[10,25,50], 
     514                rowList:[10], 
     515                pager: '#fields-search-messages-grid-pager', 
     516                sortname: 'id', 
     517                viewrecords: true, 
     518                sortorder: "desc", 
     519                multiselect: true, 
     520                autowidth: true, 
     521                reloadAfterEdit: true, 
     522                reloadAfterSubmit: true, 
     523                height:200, 
     524                loadComplete: function(data) { 
     525          //                            // aplica o contador 
     526          //                            jQuery('.timable').each(function (i) { 
     527          //                                    jQuery(this).countdown({ 
     528          //                                            since: new Date(parseInt(this.title)), 
     529          //                                            significant: 1, 
     530          //                                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}', 
     531          //                                            description: ' atr&aacute;s' 
     532          //                                    }); 
     533          //                            }); 
     534                }, 
     535                onSelectRow: function (id, selected) { 
     536                        if( selected ) 
     537                        { 
     538                                selectedMessages[ id ] = true; 
     539                        } 
     540                        else 
     541                        { 
     542                                delete selectedMessages[ id ]; 
     543                        } 
     544                }, 
     545                onSelectAll: function (id, selected) { 
     546                        for (i in id) { 
     547                                if(selected) 
     548                                        selectedMessages[id[i]] = true; 
     549                                else 
     550                                        delete selectedMessages[id[i]]; 
     551                        } 
     552                }, 
     553                caption: 'Mensagens que atendem aos crit&eacute;rios' 
     554        }); // end jqGrid 
    474555} 
    475556 
    476557/* Gerencia a listagem de filtros do usuário */ 
     558/*  
     559 * Lista os filtros para o usuário 
     560 */ 
    477561function list_filters(html){ 
    478562        outOfficeVerify(); 
     
    486570        } 
    487571        list_container = $(".expresso-window-filters").dialog({ 
     572                title: get_lang('Filters'), 
    488573            width:700, 
    489574            modal: true, 
     
    493578                    event.stopPropagation(); 
    494579                        if(list_container.find(".cancel").length) 
    495                                 list_container.find(".cancel").trigger('click');         
     580                                list_container.find(".cancel").trigger('click'); 
    496581                        $(".dialog-head-buttonpane").hide(); 
    497582            }, 
     
    516601        $(".dialog-head-buttonpane").css("padding", "5px"). 
    517602        find(".header-buttonpane").html("<a href='#' class='button add' title='"+get_lang("Add new rule")+"'>"+get_lang("New rule")+"</a>"+(!outoffice ? "<a href='#' class='button add vacation' title='"+get_lang("Add rule out of office")+"'>"+get_lang("Out of office")+"</a>" : "")).find(".button").button(); 
    518          
     603 
    519604        $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); 
    520605        var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true)); 
    521606        list_container.html(list).find(".button").button(); 
    522          
     607 
    523608        list_container.find(".rule-list").selectable({ 
    524609                selecting: function(event, ui) { 
     
    529614                } 
    530615        }); 
    531          
     616 
    532617        list_container.find( ".menu-control .button" ).filter(".update").button({ 
    533618                icons: { 
     
    542627                                filters = filters[i]; 
    543628                                break; 
    544                         }        
     629                        } 
    545630                } 
    546631                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ 
     
    571656                                        else 
    572657                                                return; 
    573                                         DataLayer.commit( 'filter', false,function(){                                            
    574                                                 if($('#gbox_fields-search-messages-grid').length > 0 && action != '') {  
     658                                        DataLayer.commit( 'filter', false,function(data){ 
     659                                                if(filters['alertMessage'] == "true"){ 
     660                                                        if(filters['alertMessage'] != $('.alertMessage').is(':checked').toString()){ 
     661                                                                /**RETIRA FLAG*/ 
     662                                                                removeMessagesFlag(filters['id']); 
     663                                                        } 
     664                                                } 
     665                                                if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { 
    575666                                                        for (var index in selectedMessages) { 
    576667                                                                set_message_flag(index, action, false); 
     
    578669                                                } 
    579670                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     671                                                getFromAlertRules(); 
    580672                                        }); 
    581                                 }).end().filter('.button.search').click(function() {                             
     673                                }).end().filter('.button.search').click(function() { 
    582674                                        /* Valida se o usuário preencheu as informações */ 
    583675                                        if(valid_save()) 
     
    595687                                        DataLayer.commit( 'filter', false,function(){ 
    596688                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     689                                                getFromAlertRules(); 
    597690                                        }); 
    598691                                }); 
     
    607700                text: false 
    608701        }).click(function(){ 
    609                 var id = $(this).parents("li.rule").find('.id').val();           
     702                var id = $(this).parents("li.rule").find('.id').val(); 
    610703                DataLayer.put( 'filter', id, { enabled: false  }); 
     704                /**RETIRA FLAG*/ 
     705                removeMessagesFlag(id); 
    611706                DataLayer.commit("filter", false,function(){ 
    612707                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     708                        getFromAlertRules(); 
    613709                }); 
    614710        }).end() 
     
    624720                DataLayer.commit("filter", false,function(){ 
    625721                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     722                        getFromAlertRules(); 
    626723                }); 
    627724        }).end() 
    628          
     725 
    629726        .filter(".close").button({ 
    630727                icons: { 
     
    644741                                        DataLayer.remove('filter', false); 
    645742                                        DataLayer.get('filter'); 
     743                                        /**RETIRA FLAG*/ 
     744                                        removeMessagesFlag(filter_name); 
    646745                                        DataLayer.remove( 'filter', filter_name); 
     746 
    647747                                        DataLayer.commit("filter", false,function(){ 
    648748                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     749                                                getFromAlertRules(); 
    649750                                        }); 
    650751                                }else{ 
     
    654755                }); 
    655756        }).end().removeClass("ui-button-icon-only"); 
    656          
     757 
    657758        $(".button.allenable").click(function(){ 
    658759                container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 
    659                         DataLayer.put( 'filter', o.innerHTML, { enabled: true  }); 
     760                        DataLayer.put( 'filter', urlencode(o.innerHTML), { enabled: true  }); 
    660761                }); 
    661762                DataLayer.commit("filter", false, function(){ 
    662763                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    663                 }); 
    664         }); 
    665          
     764                        getFromAlertRules(); 
     765                }); 
     766        }); 
     767 
    666768        $(".button.alldisable").click(function(){ 
    667769                container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 
    668                         DataLayer.put( 'filter', o.innerHTML, { enabled: false  }); 
     770                        DataLayer.put( 'filter', urlencode(o.innerHTML), { enabled: false  }); 
     771                        /**RETIRA FLAG*/ 
     772                        removeMessagesFlag(o.innerHTML); 
    669773                }); 
    670774                DataLayer.commit("filter", false, function(){ 
    671775                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    672                 }); 
    673         }); 
    674          
     776                        getFromAlertRules(); 
     777                }); 
     778        }); 
     779 
    675780        $(".button.alldelete").click(function(){ 
    676781                $.Zebra_Dialog(get_lang("Are you sure to delete the filters?"),{ 
     
    683788                                        DataLayer.remove('filter', false); 
    684789                                        DataLayer.get('filter'); 
    685                                         container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){                                          
    686                                                 removeMessagesFlag(urlencode(o.innerHTML));       
    687                                                 filter_Name = urlencode(o.innerHTML.replace(".", "_"));  
    688                                                 DataLayer.remove( 'filter', (filter_Name) ); 
     790                                        container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 
     791                                                /**RETIRA FLAG*/ 
     792                                                removeMessagesFlag(urlencode(o.innerHTML));      
     793                                                filter_Name = urlencode(o.innerHTML.replace(".", "_")); 
     794                                                DataLayer.remove( 'filter', (filter_Name) ); 
    689795                                        }); 
    690796                                        DataLayer.commit("filter", false,function(){ 
    691797                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     798                                                getFromAlertRules(); 
    692799                                        }); 
    693800                                }else{ 
     
    697804                }); 
    698805        }); 
    699          
     806 
    700807        var aa = 0; 
    701          
     808 
    702809        list_container.parent().find(".button.add:first").click(function(){ 
    703810                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 
     
    721828                                        return; 
    722829                                DataLayer.commit( 'filter',false,function(){ 
    723                                         if($('#gbox_fields-search-messages-grid').length > 0 && action != '') {  
     830                                        if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { 
    724831                                                for (var index in selectedMessages) { 
    725832                                                        set_message_flag(index, action, false); 
     
    727834                                        } 
    728835                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     836                                        getFromAlertRules(); 
    729837                                }); 
    730                         }).end().filter('.button.search').click(function() {                             
     838                        }).end().filter('.button.search').click(function() { 
    731839                                if(valid_save()) 
    732840                                        showGridMessages($(this)); 
     
    737845        }); 
    738846        list_container.parent().find(".button.add.vacation").click(function(){ 
    739          
     847 
    740848                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 
    741849                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ 
     
    745853                        list_container.find(".button").button().filter(".back").click(function(){ 
    746854                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    747                         }).end().filter(".submit").click(function(){                     
     855                        }).end().filter(".submit").click(function(){ 
    748856                                if(list_container.find(".vacation-details-container .filter-textarea").val().length <= 0){ 
    749857                                                $.Zebra_Dialog(get_lang('Write a message')); 
     
    753861                                        DataLayer.commit( 'filter',false,function(){ 
    754862                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     863                                                getFromAlertRules(); 
    755864                                        }); 
    756865                                } 
    757866                        }); 
    758                 });      
     867                }); 
    759868        }); 
    760869} 
    761870 
    762 /* Inicializa os filtros e chama o list_filters */ 
     871 
     872/* Inicializa os filtros e chama o list_filters  
     873 * Inicia a funcionalidade de filtros de mensagens 
     874 */ 
    763875function  init_filters(){ 
    764876        var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {}); 
    765877        list_filters(html); 
    766878} 
     879 
     880/* 
     881 * Ao excluir filtro, desabilitar filtro ou retirar a ação Alerta de um filtro 
     882 * esta função é chamada para retirar as flags que caracterizam uma mensagem como alertada pelos Filtros por Remetente  
     883 */ 
     884function removeMessagesFlag(id){ 
     885        var filters_c = DataLayer.get('filter', urlencode(id)); 
     886        var folder = ''; 
     887        var from = '';   
     888        if(filters_c['actions']) 
     889        for(var i=0; i < filters_c['actions'].length; i++){ 
     890                if(filters_c['actions'][i].type == 'fileinto'){ 
     891                        folder = filters_c['actions'][i].parameter; 
     892                } 
     893        } 
     894        $.each(fromRules, function(index, value) { 
     895                if(value == folder){ 
     896                        for(var i=0; i < filters_c['criteria'].length; i++){ 
     897                                if(filters_c['criteria'][i].field == 'from'){ 
     898                                        from = filters_c['criteria'][i].value; 
     899                                } 
     900                        } 
     901                        cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){});  
     902                        return false; 
     903                } 
     904        }); 
     905} 
  • branches/2.4/prototype/modules/filters/interceptors/FilterMapping.php

    r6590 r6754  
    4141*/ 
    4242 
    43 use prototype\api\Config as Config;  
     43use prototype\api\Config as Config; 
    4444 
    4545/** 
     
    224224                        $script_criteria .= ")";  
    225225 
    226                         $script_action = " {\r\n "; 
     226                        //$script_action = " {\r\n "; 
     227                        /* Somente para controlar que o addFlag virá antes de qualquer ação. Modificar isso depois */ 
     228                        $action_addFlag = ''; 
    227229                         
    228230                        if( is_array($action) ) 
     
    230232                        { 
    231233                                switch ($action[$k]['type']) { 
     234                                        case 'setflag': 
     235                                                $require_flag = true; 
     236                                                $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter']; 
     237                                                break; 
     238                                        case 'addflag':  
     239                                                $require_flag = true; 
     240                                                $action_addFlag = "addflag \"" . $action[$k]['parameter'] . "\";\r\n "; 
     241                                                break; 
    232242                                        case 'redirect': 
    233243                                                break; 
     
    245255                                                $vacation = true; 
    246256                                                continue; 
    247                                         case 'setflag': 
    248                                                 $require_flag = true; 
    249                                                 $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter']; 
    250                                                 break; 
    251257                                        case 'discard': 
    252258                                                break; 
    253259                                } 
    254                                 if ($vacation == false) $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n "; 
     260                                if ($vacation == false && $action[$k]['type'] != 'addflag') $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n "; 
    255261                        } 
    256                         $script_action .= "}"; 
    257262                         
     263                        /* ATENÇÃO: Colocar sempre o comando addflag antes de qualquer outro no caso de ações compostas no Sieve */ 
     264                        if ($action_addFlag != '') $script_action = $action_addFlag . $script_action;  
     265                         
     266                        $script_action = "{\r\n " . $script_action . "}"; 
     267                        $action_addFlag = ''; 
    258268                        if($vacation == false) 
    259269                                $script_rules .= $script_match . $script_criteria . $script_action . "\r\n"; 
     
    263273                        $script_match = ""; 
    264274                        $script_criteria = "";   
     275                        $script_action = ""; 
    265276                        $data['applyMessages'] = "";                                                     
    266277                } 
     
    295306 
    296307                $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data; 
    297                  
     308 
    298309                return( $content ); 
    299310        } 
     
    697708                return( $return ); 
    698709        } 
     710 
     711        /**  
     712         * Método que insere no ldap as informações do vacation  
     713         *  
     714         * @license    http://www.gnu.org/copyleft/gpl.html GPL  
     715         * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)  
     716         * @sponsor     Caixa Econômica Federal  
     717         * @author     Cristiano Corrêa Schmidt  
     718         * @param      <$uri>  
     719         * @param      <$result>  
     720         * @param      <$criteria>  
     721         * @param      <$original>  
     722         * @return     <void>  
     723         * @access     public  
     724         */  
     725        public function verifyVacationRule( &$uri , &$params , &$criteria , $original  )  
     726        {  
     727            if( $original['properties']['id'] === 'vacation' )  
     728            {  
     729 
     730                $user = Controller::read(array('concept' => 'user' , 'id' => config::me('uidNumber') , 'service' => 'OpenLDAP'));  
     731                $ldapConf = Config::service('OpenLDAP', 'config');  
     732                $con = ldap_connect( $ldapConf['host'] );  
     733                ldap_set_option( $con,LDAP_OPT_PROTOCOL_VERSION, 3 );  
     734                ldap_bind( $con, $ldapConf['user'], $ldapConf['password']);  
     735 
     736                $info = array();  
     737                if(!in_array('Vacation', $user['objectClass']))  
     738                        $info['objectClass'] = 'Vacation';  
     739 
     740                $info['vacationActive'] = strtoupper($original['properties']['enabled']);  
     741 
     742                if(isset($original['properties']['actions']) && isset($original['properties']['actions'][0]['parameter']))  
     743                        $info['vacationInfo']   = $original['properties']['actions'][0]['parameter'];  
     744                else if( !isset($user['vacationInfo']) )  
     745                {  
     746                    $rules = $this->getRules();  
     747                    if(is_array($rules))  
     748                        foreach ($rules as $rule)  
     749                        if($rule['id'] === 'vacation')  
     750                                $info['vacationInfo'] = $rule['actions'][0]['parameter'];  
     751                }  
     752 
     753                if(!in_array('Vacation', $user['objectClass']))  
     754                        ldap_mod_add ( $con , $user['dn'] ,  $info );  
     755                else  
     756                        ldap_modify ( $con , $user['dn'] ,  $info );  
     757 
     758 
     759                ldap_close($con);  
     760 
     761            }  
     762          
     763        } 
     764 
     765        /**  
     766         * Método que remove do ldap as informações do vacation  
     767         *  
     768         * @license    http://www.gnu.org/copyleft/gpl.html GPL  
     769         * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)  
     770         * @sponsor     Caixa Econômica Federal  
     771         * @author     Cristiano Corrêa Schmidt  
     772         * @param      <$uri>  
     773         * @param      <$result>  
     774         * @param      <$criteria>  
     775         * @param      <$original>  
     776         * @return     <void>  
     777         * @access     public  
     778         */  
     779        public function deleteVacationRule( &$uri , &$params , &$criteria , $original  )  
     780        {          
     781            if( $original['URI']['id'] === 'vacation' )  
     782            {  
     783                $user = Controller::read(array('concept' => 'user' , 'id' => config::me('uidNumber') , 'service' => 'OpenLDAP'));  
     784                $ldapConf = Config::service('OpenLDAP', 'config');  
     785                $con = ldap_connect( $ldapConf['host'] );  
     786                ldap_set_option( $con,LDAP_OPT_PROTOCOL_VERSION, 3 );  
     787                ldap_bind( $con, $ldapConf['user'], $ldapConf['password']);  
     788                $info = array();  
     789                $info['vacationActive'] = 'FALSE';  
     790                $info['vacationInfo'] = "";  
     791                ldap_modify ( $con , $user['dn'] ,  $info );  
     792                ldap_close($con);  
     793            }  
     794        } 
    699795} 
  • branches/2.4/prototype/modules/mail/css/followupflag.css

    r6167 r6754  
    5353.followupflag-container .background-color  {margin:0; outline: 0; width: 100px; -moz-border-radius: 5px; -webkit-border-radius:5px; float: left; } 
    5454.flag-edit { background: #00820F; width: 8px; height: 6px; float:left; margin: 4px 0 -3px 5px; } 
    55 .flag-edited{ width: 8px; height: 6px;} 
     55.flag-edited{ width: 8px; height: 6px; } 
    5656.colorpicker { float: right; margin: -15px 0 0 0; } 
    5757 
     
    209209span.removeLabeledMsg {margin:0 5px 0 5px;font-weight: bold;} 
    210210span.removeLabeledMsg:hover {cursor: pointer;} 
     211 
     212.freeow .gray:hover .background { 
     213    border-color: #BBB; 
     214} 
     215.minimize-alarm { 
     216        background: url("../img/minimizar.png") no-repeat scroll 0 0 transparent; 
     217        height: 16px; 
     218    position: relative; 
     219    width: 16px; 
     220        float:right;  
     221        margin-right:5px; 
     222} 
     223.maximize-alarm { 
     224        background: url("../img/maximizar.png") no-repeat scroll 0 0 transparent; 
     225        height: 16px; 
     226    position: relative; 
     227    width: 16px; 
     228        float:right;  
     229        margin-right:5px; 
     230} 
     231.content-alarm ul { 
     232        max-height: 100px; 
     233        overflow: auto; 
     234} 
     235.content-alarm { 
     236        margin-top: 5px; 
     237} 
     238.title-alarm { 
     239    margin-left: 90px; 
     240        font-size: 16px; 
     241} 
     242.alert-options { 
     243        border: none; 
     244} 
     245.confirm-alarm { 
     246        float:right; 
     247} 
     248.freeow .gray h2 { 
     249        font-size: 12px; 
     250} 
     251.freeow { 
     252        width: 325px; 
     253} 
     254.freeow .gray .content { 
     255        margin: 5px; 
     256} 
     257.freeow .gray .background { 
     258        background-color: #fafafa; 
     259        border: 2px solid #BBB; 
     260} 
     261.freeow .content { 
     262        margin: 5px; 
     263} 
     264 
     265.filtersDeadline .img_title { 
     266        background: url("../img/email.png") no-repeat scroll 0 0 transparent; 
     267        height: 20px; 
     268    position: absolute; 
     269    width: 20px; 
     270        float:left;  
     271        margin-left:40px; 
     272        top: 7px; 
     273} 
     274.alarmDeadline .img_title { 
     275        background: url("../img/flagDefault4.png") no-repeat scroll 0 0 transparent; 
     276        height: 10px; 
     277    position: absolute; 
     278    width: 10px; 
     279        float:left;  
     280        margin-left:42px; 
     281        top: 11px; 
     282} 
     283.doneDeadline .img_title { 
     284        background: url("../img/flagDone.png") no-repeat scroll 0 0 transparent; 
     285        height: 10px; 
     286    position: absolute; 
     287    width: 10px; 
     288        float:left;  
     289        margin-left:43px; 
     290        top: 11px; 
     291} 
     292.search-result-item {  
     293        border: none; 
     294} 
     295.td-label-search { 
     296        border: none; 
     297} 
  • branches/2.4/prototype/modules/mail/interceptors/Attachments.php

    r6130 r6754  
    4747* @since      Classe disponibilizada na versão 2.4 
    4848*/ 
     49 
     50use prototype\api\Config as Config; 
     51 
    4952class Attachments {      
    5053         
  • branches/2.4/prototype/modules/mail/interceptors/FollowupflagSecure.php

    r5611 r6754  
    11<?php 
     2 
     3use prototype\api\Config as Config; 
     4 
    25class FollowupflagSecure {       
    36         
  • branches/2.4/prototype/modules/mail/interceptors/Helpers.php

    r6653 r6754  
    11<?php 
    22include_once ROOTPATH."/../expressoMail1_2/inc/class.imap_functions.inc.php"; 
     3 
     4use prototype\api\Config as Config; 
    35 
    46class Helpers {     
     
    4143                                $labeledsIds[] = $e['id']; 
    4244                } 
    43                  
    4445                Controller::delete( array( 'concept' => 'labeled', 'service' => 'Imap' ), false, array( 'filter' => array( 'IN', 'id', $labeledsIds )) ); 
    4546 
     
    205206                 
    206207                if(empty($params['messageId']))  
    207                     throw new Exception('#FollowupflagMessageIdError');  
    208                 else  
    209                     $params = Controller::create($imap_uri, $params); 
     208                    throw new Exception('#FollowupflagMessageIdError'); 
     209                else  
     210                    $params = Controller::create($imap_uri, $params); 
    210211 
    211212                if (!$params) 
     
    219220                 * deste interceptor. 
    220221                 */ 
    221  
    222  
    223  
    224  
     222                 
     223            
     224             
     225             
    225226                if ($original['URI']['service'] == 'PostgreSQL') return $result; 
    226227                 
     
    268269        //followupflagged:PostgreSQL.after.find 
    269270        public function doImapFind( &$uri , &$result , &$criteria , $original ){ 
    270  
    271                 $imap_uri = $uri; 
     271             
     272                $imap_uri = $uri; 
    272273                $imap_uri['service'] = 'Imap'; 
    273274                $imap_criteria = $original['criteria']; 
  • branches/2.4/prototype/modules/mail/interceptors/LabelSecure.php

    r5540 r6754  
    11<?php 
     2 
     3use prototype\api\Config as Config; 
     4 
    25class LabelSecure {      
    36 
  • branches/2.4/prototype/modules/mail/js/foldertree.js

    r6635 r6754  
    233233                        // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 
    234234                        else if(folder_to_move == "border_tr"){ 
    235                                 var id_msg = border_id.split("_")[0];  
     235                                var id_msg = border_id.split("_")[0]; 
    236236                                folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 
     237                                alternate_border(border_id); 
    237238                                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 
    238239                                return refresh(); 
  • branches/2.4/prototype/modules/mail/js/followupflag.js

    r6653 r6754  
    1 MsgsCallbackFollowupflag = {  
    2                   
    3     '#FollowupflagMessageIdError': function(){  
    4         alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id.');  
    5     },  
    6     '#FollowupflagLimitError': function(){  
    7         alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: limite de flags atingido para esta pasta.');  
    8     },  
    9     '#FollowupflagParamsError': function(){  
    10         alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários.');  
    11     }  
    12       
    13 }  
     1MsgsCallbackFollowupflag = { 
     2 
     3    '#FollowupflagMessageIdError': function(){ 
     4        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id.'); 
     5    }, 
     6    '#FollowupflagLimitError': function(){ 
     7        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: limite de flags atingido para esta pasta.'); 
     8    }, 
     9    '#FollowupflagParamsError': function(){ 
     10        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários.'); 
     11    } 
     12     
     13} 
    1414 
    1515function updateCacheFollowupflag(msgNumber, msgFolder, op){ 
     
    265265                                        updateCacheFollowupflag(selectedMessageIds, folders, true); 
    266266                                        winElement.dialog("close"); 
    267                                         alarmFollowupflagged(); 
     267                                        alarmFollowupflagged('followupflagAlarms'); 
    268268                                }); 
    269269                                winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true); 
     
    342342                DataLayer.commit(false, false, function(){ 
    343343                        winElement.dialog("close"); 
    344                         alarmFollowupflagged(); 
     344                        alarmFollowupflagged('followupflagAlarms'); 
    345345                }); 
    346346                 
     
    485485 
    486486/** 
    487  * constrói as duas possíveis janela de alerta, utilizando o mesmo template 
     487 * constrói as três possíveis janelas de alerta, utilizando o mesmo template 
     488 * para o parametro alert_type, espera-se vazio, followupflagAlarms ou filtersAlarms 
     489 * vazio: quando serão carregadas todas as modais de alarmes 
     490 * followupflagAlarms: quando serão carregadas as modais referentes à sinalizações 
     491 * filtersAlarms: quando será carregada a modal de filtros (nesse caso o parametro filter_list deve conter a lista de mensagens a ser exibida na modal) 
    488492 */ 
    489 function alarmFollowupflagged(){ 
    490     $('.followupflag-alarm').remove(); 
    491         var toIterate = [ 
    492                 { 
    493                         attrDeadline: 'doneDeadline',  
    494                         caption: {singular:'You have one undone message today:',  
    495                         plural:"You have %1 undone messages today:" 
    496                         }, 
    497                         onOk: function(event){ 
    498                                 if($(event.target).parents('.doneDeadline').find('[name="stopAlert"]').is(':checked')){ 
    499                                         $.cookie("fadeCompleted", (new Date).toString("dd/MM/yyyy"), {  
    500                                                 expires: 1  
    501                                         }); 
    502                                 } 
    503                         }, 
    504                         enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
    505                 }, 
    506                 { 
    507                         attrDeadline: 'alarmDeadline', 
    508                         caption: { 
    509                                 singular:'You have a follow up due for today:',  
    510                                 plural:'You have %1 follow ups due for today:' 
    511                         }, 
    512                         onOk: function(event){ 
    513                                 if($(event.target).parents('.alarmDeadline').find('[name="stopAlert"]').is(':checked')){ 
    514                                         $.cookie("fadeAlarm", (new Date).toString("dd/MM/yyyy"), {  
    515                                                 expires: 1  
    516                                         }); 
    517                                 } 
    518                         }, 
    519                         enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
    520                 } 
    521         ]; 
     493function alarmFollowupflagged(alert_type, filter_list){ 
     494        switch(alert_type){ 
     495                // carregar modais de sinalizadores 
     496                case 'followupflagAlarms': 
     497                        $('.doneDeadline').remove(); 
     498                        $('.alarmDeadline').remove(); 
     499                        var toIterate = [ 
     500                                { 
     501                                        attrDeadline: 'doneDeadline',  
     502                                        caption: {singular:'You have one undone message today:',  
     503                                        plural:"You have %1 undone messages today:" 
     504                                        }, 
     505                                        title: get_lang('Done'), 
     506                                        enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
     507                                }, 
     508                                { 
     509                                        attrDeadline: 'alarmDeadline', 
     510                                        caption: { 
     511                                                singular:'You have a follow up due for today:',  
     512                                                plural:'You have %1 follow ups due for today:' 
     513                                        }, 
     514                                        title: get_lang('Follow ups'), 
     515                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
     516                                } 
     517                        ]; 
     518                        break; 
     519                // carregar modal de filtros 
     520                case 'filtersAlarms': 
     521                        $('.filtersDeadline').remove(); 
     522                        var toIterate = [ 
     523                                { 
     524                                        attrDeadline: 'filtersDeadline', 
     525                                        caption: { 
     526                                                singular:'You have an archived message:',  
     527                                                plural:'You have %1 messages archived:' 
     528                                        }, 
     529                                        title: get_lang('Filter by sender'), 
     530                                        enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 
     531                                } 
     532                        ]; 
     533                        break; 
     534                // carregar todas as modais 
     535                default: 
     536                        $('.gray').remove(); 
     537                        var toIterate = [ 
     538                                { 
     539                                        attrDeadline: 'filtersDeadline', 
     540                                        caption: { 
     541                                                singular:'You have an archived message:',  
     542                                                plural:'You have %1 messages archived:' 
     543                                        }, 
     544                                        title: get_lang('Filter by sender'), 
     545                                        enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 
     546                                }, 
     547                                { 
     548                                        attrDeadline: 'doneDeadline',  
     549                                        caption: {singular:'You have one undone message today:',  
     550                                        plural:"You have %1 undone messages today:" 
     551                                        }, 
     552                                        title: get_lang('Done'), 
     553                                        enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
     554                                },                               
     555                                { 
     556                                        attrDeadline: 'alarmDeadline', 
     557                                        caption: { 
     558                                                singular:'You have a follow up due for today:',  
     559                                                plural:'You have %1 follow ups due for today:' 
     560                                        }, 
     561                                        title: get_lang('Follow ups'), 
     562                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
     563                                } 
     564                        ]; 
     565                        break; 
     566        } 
    522567        var i = 0; 
     568        // recupera e monta os dados para serem exibidos nas modais de alarmes 
    523569        while (it = toIterate.pop()){ 
    524570                if (!it.enable) continue; 
    525  
    526                 var alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 
     571                 
     572                var alarmInRange = {}; 
     573                // caso for alarme de sinalizadores 
     574                if(it.attrDeadline == 'doneDeadline' || it.attrDeadline == 'alarmDeadline'){ 
     575                        alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 
     576                        if(alarmInRange.length > 0){ 
     577                                for(var i=0; i<alarmInRange.length; i++){ 
     578                                        if(alarmInRange[i].isDone == 1){ 
     579                                                 alarmInRange.splice(i,1); 
     580                                                 i--; 
     581                                        } 
     582                                } 
     583                        } 
     584                         
     585                        if(alarmInRange.length > 0){ 
     586                                var messages_alarm = []; 
     587                                for(var i=0; i<alarmInRange.length; i++){ 
     588                                        var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 
     589                                        if(date) 
     590                                                alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 
     591                                         
     592                                        if(alarmInRange[i]['followupflag']['id'] < 7){ 
     593                                                var nameFollowupflag = get_lang(alarmInRange[i]['followupflag']['name']); 
     594                                        }else{ 
     595                                                var nameFollowupflag = alarmInRange[i]['followupflag']['name']; 
     596                                        } 
     597                                        var li_alarm = alarmInRange[i][it.attrDeadline] + ' - ' + nameFollowupflag + ' - ' + truncate(alarmInRange[i]['message']['headers']['subject'], 15); 
     598                                        messages_alarm.push({ 
     599                                                "msg_number" : alarmInRange[i]['messageNumber'], 
     600                                                "msg_folder" : alarmInRange[i]['folderName'], 
     601                                                "a"                      : li_alarm 
     602                                        });                              
     603                                } 
     604                        } 
     605                }  
     606                // caso for alarme de filtros 
     607                else if(filter_list){ 
     608                        alarmInRange = filter_list; 
     609                        if(alarmInRange.length > 0){ 
     610                                var messages_alarm = []; 
     611                                for(var i=0; i<alarmInRange.length; i++){ 
     612                                        var d = new Date(alarmInRange[i]['udate']*1000); 
     613                                        var dia = d.getDate(); 
     614                                        if(dia < 10){ 
     615                                                dia = "0" + dia; 
     616                                        } 
     617                                        var mes = (d.getMonth()) + 1; 
     618                                        if(mes < 10){ 
     619                                                mes = "0" + mes; 
     620                                        } 
     621                                        var ano = d.getFullYear(); 
     622                                        var dtFormatada = dia + '/' + mes + '/' + ano; 
     623                                        alarmInRange[i]['udate'] = dtFormatada; 
     624                                                 
     625                                        var li_alarm = alarmInRange[i]['udate'] + ' ' + alarmInRange[i]['smalldate'] + ' - ' + alarmInRange[i]['from'] + ' - ' + truncate(alarmInRange[i]['subject'], 15); 
     626                                        messages_alarm.push({ 
     627                                                "msg_number" : alarmInRange[i]['msg_number'], 
     628                                                "msg_folder" : alarmInRange[i]['msg_folder'], 
     629                                                "a"                      : li_alarm 
     630                                        });                              
     631                                } 
     632                        } 
     633                } 
     634                                 
    527635                if(alarmInRange.length > 0){ 
    528                         for(var i=0; i<alarmInRange.length; i++){ 
    529                                 if(alarmInRange[i].isDone == 1){ 
    530                                  alarmInRange.splice(i,1); 
    531                                  i--; 
    532                                 } 
    533                         } 
    534                 } 
    535                 if(alarmInRange.length > 0){ 
    536                         for(var i=0; i<alarmInRange.length; i++){ 
    537                                 var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 
    538                                 if(date) 
    539                                         alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 
    540                         } 
     636                        // monta o subtitulo da modal 
    541637                        var caption = (alarmInRange.length == 1) ? 
    542638                                get_lang(it.caption.singular): 
    543639                                get_lang(it.caption.plural, alarmInRange.length); 
    544                                  
     640                        // monta o array de dados a ser passado para o template  
    545641                        var data = { 
    546                                 alarmInRange : alarmInRange,  
     642                                alarmInRange : messages_alarm,  
    547643                                caption: caption,  
    548                                 it : it 
     644                                type: it.attrDeadline, 
     645                                captions: it.caption 
    549646                        }; 
     647                        // tipo de modal a ser exibida 
     648                        var type_alarm = it.attrDeadline; 
     649                        //função chamada ao clicar no botão Ok da modal 
     650                        var ok_function = function(event, type, type_cookie){ 
     651                                if($(event.target).parents('.'+type).find('[name="stopAlert"]').is(':checked')){ 
     652                                        $.cookie(type_cookie, (new Date).toString("dd/MM/yyyy"), {  
     653                                                expires: 1  
     654                                        }); 
     655                                } 
     656                        } 
     657                        // carrega o template dos alarmes e cria a modal utilizando o plugin freeow 
    550658                        var dialogText = DataLayer.render("../prototype/modules/mail/templates/followupflag_alarm_list.ejs", data); 
     659                        var titulo = '<div class="header-alarm"><span class="img_title"></span><span class="title-alarm"><strong>'+it.title+'</strong></span><span name="header-icon" class="maximize-alarm"></span></div>'; 
     660                        $("#freeow").freeow(titulo, dialogText, { 
     661                                classes: ["gray", type_alarm], 
     662                                autoHide: false,  
     663                                startStyle: null, 
     664                                onClick: function(event){ 
     665                                        var type = ''; 
     666                                        var type_cookie = ''; 
     667                                        if($(this).hasClass('alarmDeadline')){ 
     668                                                type = 'alarmDeadline'; 
     669                                                type_cookie = 'fadeAlarm'; 
     670                                        }else if($(this).hasClass('doneDeadline')){ 
     671                                                type = 'doneDeadline'; 
     672                                                type_cookie = 'fadeCompleted'; 
     673                                        }else if($(this).hasClass('filtersDeadline')){ 
     674                                                type = 'filtersDeadline'; 
     675                                                type_cookie = 'fadeFilterAlarm'; 
     676                                        } 
     677                                        if($(event.target).hasClass('stop-alert-alarm')){ 
     678                                                return; 
     679                                        } 
     680                                        if($(event.target).hasClass('minimize-alarm')){ 
     681                                                $('.'+type).find('.content-alarm').hide(); 
     682                                                $(event.target).removeClass('minimize-alarm').addClass('maximize-alarm'); 
     683                                                return; 
     684                                        } 
     685                                        if($(event.target).hasClass('maximize-alarm')){ 
     686                                                $('.'+type).find('.content-alarm').show(); 
     687                                                $(event.target).removeClass('maximize-alarm').addClass('minimize-alarm'); 
     688                                                return; 
     689                                        } 
     690                                        if($(event.target).hasClass('confirm-alarm')){ 
     691                                                ok_function(event, type, type_cookie); 
     692                                                $('.'+type).remove(); 
     693                                                return; 
     694                                        } 
     695                                        return false; 
     696                                } 
     697                        }); 
     698                        // elementos do freeow desnecessários 
     699                        $('.gray .background .content p').remove(); 
     700                        $('.gray .icon').remove(); 
     701                        $('.gray .close').remove(); 
    551702                         
    552                         /** 
    553                          * A última dialog criada é a dialog mais ao alto 
    554                          */ 
    555                         var offsetHeight = $('.ZebraDialog.right-bottom:last').length ?  
    556                                 $(window).height() - $('.ZebraDialog.right-bottom:last').position().top : 0; 
    557  
    558                         /** 
    559                          * Se for a primeira, desloca para cima do rodapé do grid 
    560                          * caso contrário desloca para um pouco acima da última dialog criada 
    561                          */ 
    562                         offsetHeight = !offsetHeight ? 35 : offsetHeight + 20 ;                  
    563                         var dialog = new $.Zebra_Dialog(dialogText, { 
    564                                 'buttons':  ['Ok'], 
    565                                 'modal': false, 
    566                                 'vcenter_short_message': false, 
    567                                 'position': ['right - 20', 'bottom - ' + offsetHeight.toString() ], 
    568                                 'custom_class': 'right-bottom followupflag-alarm '+it.attrDeadline 
    569                         }).dialog; 
    570                         $(".ZebraDialog.followupflag-alarm .ZebraDialog_Button0").click(it.onOk); 
    571                         $(".ZebraDialog.followupflag-alarm .display-options .more").click(function(event) { 
    572                                 $(event.target).parents('.followupflag-alarm').find('.message-list').css('height', 'auto'); 
    573                         }); 
     703                        // botão ok da modal com jquery button 
     704                        $('.content-alarm button').button(); 
    574705                }                
    575706        } 
     707         
     708        // controle de qual janela de alarme estará maximizada 
     709        $('.gray').find('.content-alarm').hide(); 
     710        $('.gray').find('.header-alarm [name="header-icon"]').removeClass('minimize-alarm').addClass('maximize-alarm'); 
     711         
     712        if($('.gray').length > 0){ 
     713                if($('.gray').hasClass('filtersDeadline')){ 
     714                        $('.filtersDeadline').find('.content-alarm').show(); 
     715                        $('.filtersDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm'); 
     716                }else if($('.gray').hasClass('alarmDeadline')){ 
     717                        $('.alarmDeadline').find('.content-alarm').show(); 
     718                        $('.alarmDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');         
     719                }else if($('.gray').hasClass('doneDeadline')){ 
     720                        $('.doneDeadline').find('.content-alarm').show(); 
     721                        $('.doneDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');  
     722                } 
     723        } 
     724         
    576725} 
     726                 
    577727$('#main_table').ready(function(){ 
    578     alarmFollowupflagged(); 
     728        handlerMessageFilter = function (data) { 
     729                alarmFollowupflagged(null, data); 
     730        } 
     731        /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 
     732        cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 
    579733}); 
     734 
  • branches/2.4/prototype/modules/mail/js/label.js

    r6653 r6754  
    127127                                var hasLabel = true; 
    128128                                $.each(data, function(index, value) { 
    129                                  
    130                                 hasLabel = typeof value == 'object' ? false : value; 
    131  
     129                                         
     130                                        hasLabel = typeof value == 'object' ? false : value; 
     131                                         
    132132                                }); 
    133133                                         
     
    166166                                                 
    167167                                                draw_tree_labels(); 
    168                                                 var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true);  
    169                                                 updateMessageLabels(msgsReference); 
     168                                                var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true); 
     169                                                updateMessageLabels(msgsReference); 
    170170                                 
    171171                                                /** 
     
    207207                 
    208208        DataLayer.remove('label', id); 
    209          
     209 
    210210        DataLayer.commit(false, false, function(data){ 
    211211                $.contextMenu( 'destroy', ".table_box tbody tr"); 
    212212                loadMenu(); 
    213                 updateMessageLabels(msgsReference);              
     213                updateMessageLabels(msgsReference);      
    214214        }); 
    215215        winElement.find(".label-list li:first").trigger("click"); 
  • branches/2.4/prototype/modules/mail/templates/followupflag_alarm_list.ejs

    r5738 r6754  
    1 <p class="title"><strong><%= data.caption %> </strong></p> 
    2  
    3 <ul class="message-list"> 
    4 <% 
    5 for(var i=0; i<data.alarmInRange.length; i++){ 
    6         var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].messageNumber+"&msg_folder="+data.alarmInRange[i].folderName+"&alarm=true', show_msg);"; 
    7         if(data.alarmInRange[i].followupflag.id < 7){ 
    8                 var nameFollowupflag = get_lang(data.alarmInRange[i].followupflag.name); 
    9         }else{ 
    10                 var nameFollowupflag = data.alarmInRange[i].followupflag.name; 
     1<div class="content-alarm"> 
     2        <span class="subtitle-alarm"> 
     3                <strong><%=data.caption %></strong> 
     4        </span> 
     5        <ul class="message-list"> 
     6        <% 
     7        for(var i=0; i<data.alarmInRange.length; i++){ 
     8                if(data.type == 'filtersDeadline') 
     9                        var openMessageScript = "$(this).parent().remove(); var msgs_count = $('.filtersDeadline').find('.message-item').length; if(msgs_count == 0){ $('.filtersDeadline').remove(); } $('.subtitle-alarm').find('strong').html((msgs_count == 1)?get_lang('"+data.captions.singular+"'):get_lang('"+data.captions.plural+"', msgs_count)); cExecute('$this.imap_functions.open_flagged_msg&msg_number="+data.alarmInRange[i].msg_number+"&msg_folder="+data.alarmInRange[i].msg_folder+"&alarm=true', show_msg);"; 
     10                else     
     11                        var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].msg_number+"&msg_folder="+data.alarmInRange[i].msg_folder+"&alarm=true', show_msg);"; 
     12        %> 
     13                <li class="message-item"> 
     14                        <a onclick="<%=openMessageScript%>"> 
     15                                <%= data.alarmInRange[i].a %> 
     16                        </a> 
     17                </li> 
     18        <% 
    1119        } 
    12 %> 
    13         <li class="message-item"> 
    14                 <a onclick="<%=openMessageScript%>"> 
    15                         <%= (it.attrDeadline == 'alarmDeadline') ? data.alarmInRange[i].alarmDeadline : data.alarmInRange[i].doneDeadline %> - <%= nameFollowupflag %> - <%= data.alarmInRange[i].message.headers.subject %> 
    16                 </a> 
    17         </li> 
    18 <% 
    19 } 
    20 %> 
    21 </ul>  
    22  
    23 <fieldset class="alert-options"> 
    24         <input type="checkbox" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 
    25 </fieldset> 
     20        %> 
     21        </ul>  
     22        <fieldset class="alert-options"> 
     23                <input type="checkbox" class="stop-alert-alarm" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 
     24                <button class="confirm-alarm">Ok</button> 
     25        </fieldset> 
     26</div> 
  • branches/2.4/prototype/modules/mail/templates/label_list.ejs

    r6723 r6754  
    1414                                                background: <%= (data.labels[i].backgroundColor) ? data.labels[i].backgroundColor : '#ffffff' %>; float:right;"></div> 
    1515 
    16                                 <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div>  
    17                     <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div>  
     16                                <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div> 
     17                                <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div> 
    1818                        </li> 
    1919                <%}%> 
  • branches/2.4/prototype/modules/mail/templates/label_listitem.ejs

    r6723 r6754  
    55                <input type="hidden" value="<%= data.id%>" name="labelItemId" class="id-item-list" /> 
    66                <span class="text-list"><%= data.name %></span> 
    7                 <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div>  
    8             <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div> 
     7                <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div> 
     8                <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div> 
    99                                         
    1010        </li> 
  • branches/2.4/prototype/modules/mail/templates/new_message.ejs

    r6220 r6754  
    6161                                </td> 
    6262                                <td class="value" style="width: 100%;"> 
    63                                         <textarea class="new-message-input to" name="input_to" style="width:99%; resize: none;"></textarea> 
     63                                        <div class="email-area ui-corner-all"> 
     64                                                <input class="new-message-input to email-text" name="input_aux_to" type="text" value="" autocomplete="off"/>     
     65                                        </div> 
     66                                        <textarea class="new-message-input to" name="input_to" style="width:99%; resize: none;display : none;"></textarea> 
    6467                                </td> 
    6568                        </tr> 
     
    7174                                </td> 
    7275                                <td class="value"> 
    73                                         <textarea class="new-message-input cc" name="input_cc" style="width:99%; resize: none;"></textarea> 
     76                                        <div class="email-area ui-corner-all"> 
     77                                                <input class="new-message-input cc email-text" name="input_aux_cc" type="text" value="" autocomplete="off"/>     
     78                                        </div> 
     79                                        <textarea class="new-message-input cc" name="input_cc" style="width:99%; resize: none;display : none;"></textarea> 
    7480                                </td> 
    7581                        </tr> 
     
    8187                                </td> 
    8288                                <td class="value"> 
    83                                         <textarea class="new-message-input cco" name="input_cco" style="width:99%; resize: none;"></textarea> 
     89                                        <div class="email-area ui-corner-all"> 
     90                                                <input class="new-message-input cco email-text" name="input_aux_cco" type="text" value="" autocomplete="off"/>   
     91                                        </div> 
     92                                        <textarea class="new-message-input cco" name="input_cco" style="width:99%; resize: none;display : none;"></textarea> 
    8493                                </td> 
    8594                        </tr> 
     
    8998                                </td> 
    9099                                <td class="value"> 
    91                                         <input name="input_subject" class="new-message-input subject" style="width:99.2%;"></input> 
     100                                        <input name="input_subject" class="new-message-input subject" style="width:99.2%; border-radius: 5px;"></input> 
    92101                                </td> 
    93102                        </tr> 
  • branches/2.4/prototype/modules/mail/templates/quickAddContact.ejs

    r6690 r6754  
    1 <div style="width:auto;">         
    2         <table>  
    3                 <tr>  
    4                         <td>  
    5                                 <span><%=get_lang('Nickname')%>:</span>  
    6                         </td>  
    7                         <td>  
    8                                 <input type="text" value="<%=data.nick%>" maxlength="50" id="quickAddOne_nickName" style="width:205px;"/>  
    9                         </td>  
    10                 </tr>  
    11                   
    12                 <tr>  
    13                         <td>  
    14                                 <span><%=get_lang('First Name')%>:</span>  
    15                         </td>  
    16                         <td>  
    17                                 <input type="text" value="<%=data.fname%>" maxlength="50" id="quickAddOne_firstName" style="width:205px;" class="required-field"/>  
    18                         </td>  
    19                 </tr>  
    20                   
    21                 <tr>  
    22                         <td>  
    23                                 <span><%=get_lang('Last Name')%>:</span>  
    24                         </td>  
    25                         <td>  
    26                                 <input type="text" value="<%=data.lname%>" maxlength="50" id="quickAddOne_lastName" style="width:205px;"/>  
    27                         </td>  
    28                 </tr>  
    29                   
    30                 <tr>  
    31                         <td>  
    32                                 <span><%=get_lang('Email')%>:</span>  
    33                         </td>  
    34                         <td>  
    35                                 <input type="text" value="<%=data.email%>" maxlength="50" id="quickAddOne_email" style="width:205px;" class="required-field"/>  
    36                         </td>  
    37                 </tr>  
    38         </table>  
     1<div style="width:auto;">        
     2        <table> 
     3                <tr> 
     4                        <td> 
     5                                <span><%=get_lang('Nickname')%>:</span> 
     6                        </td> 
     7                        <td> 
     8                                <input type="text" value="<%=data.nick%>" maxlength="50" id="quickAddOne_nickName" style="width:205px;"/> 
     9                        </td> 
     10                </tr> 
     11                 
     12                <tr> 
     13                        <td> 
     14                                <span><%=get_lang('First Name')%>:</span> 
     15                        </td> 
     16                        <td> 
     17                                <input type="text" value="<%=data.fname%>" maxlength="50" id="quickAddOne_firstName" style="width:205px;" class="required-field"/> 
     18                        </td> 
     19                </tr> 
     20                 
     21                <tr> 
     22                        <td> 
     23                                <span><%=get_lang('Last Name')%>:</span> 
     24                        </td> 
     25                        <td> 
     26                                <input type="text" value="<%=data.lname%>" maxlength="50" id="quickAddOne_lastName" style="width:205px;"/> 
     27                        </td> 
     28                </tr> 
     29                 
     30                <tr> 
     31                        <td> 
     32                                <span><%=get_lang('Email')%>:</span> 
     33                        </td> 
     34                        <td> 
     35                                <input type="text" value="<%=data.email%>" maxlength="50" id="quickAddOne_email" style="width:205px;" class="required-field"/> 
     36                        </td> 
     37                </tr> 
     38        </table> 
    3939</div> 
Note: See TracChangeset for help on using the changeset viewer.