Changeset 6876


Ignore:
Timestamp:
07/25/12 17:05:36 (10 years ago)
Author:
acoutinho
Message:

Ticket #2966 - Criacao e edicao de tarefas / suporte a anexos, alarmes, participantes e mapa de disponibilidade

Location:
sandbox/2.4.2-expresso1
Files:
3 added
17 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.4.2-expresso1/expressoCalendar/setup/tables_current.inc.php

    r6832 r6876  
    122122                'tzid' => array('type' => 'varchar', 'precision' => '50' ,'nullable' => True), 
    123123                'transp' => array( 'type' => 'int', 'precision' => '2', 'nullable' => FALSE , 'default' => 0 ), 
    124                 'sequence' => array( 'type' => 'int', 'precision' => '8', 'nullable' => FALSE , 'default' => 0 ) 
     124                'sequence' => array( 'type' => 'int', 'precision' => '8', 'nullable' => FALSE , 'default' => 0 ), 
     125                'due' => array( 'type' => 'int', 'precision' => '8', 'nullable' => FALSE , 'default' => 0 ), 
     126                'percentage' => array( 'type' => 'int', 'precision' => '8', 'nullable' => FALSE , 'default' => 0 ), 
     127                'status' => array( 'type' => 'int', 'precision' => '8', 'nullable' => FALSE , 'default' => 0 ), 
     128                'priority' => array( 'type' => 'int', 'precision' => '8', 'nullable' => FALSE , 'default' => 2 ) 
    125129            ), 
    126130            'pk' => array('id'), 
  • sandbox/2.4.2-expresso1/expressoCalendar/setup/tables_update.inc.php

    r6832 r6876  
    128128                $oProc->query("ALTER TABLE calendar_object ADD COLUMN status smallint DEFAULT 0;"); 
    129129 
    130                 $oProc->query("ALTER TABLE calendar ADD COLUMN type smallint DEFAULT 0;"); 
     130                $oProc->query("ALTER TABLE calendar_object ADD COLUMN due smallint DEFAULT 0;"); 
     131 
     132        $oProc->query("ALTER TABLE calendar ADD COLUMN type smallint DEFAULT 0;"); 
    131133                $oProc->query("ALTER TABLE calendar_signature ADD COLUMN type smallint DEFAULT 0;"); 
    132134 
  • sandbox/2.4.2-expresso1/prototype/config/schedulable.ini

    r6797 r6876  
    5959percentage = percentage 
    6060status = status 
     61due = due 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/constants.php

    r6797 r6876  
    5656define('CALENDAR_ACL_SHARED', 's'); 
    5757define('CALENDAR_ACL_REQUIRED', 'p'); 
     58 
     59define('PRIORITY_HIGH', 1); 
     60define('PRIORITY_NORMAL', 2); 
     61define('PRIORITY_LOW', 3); 
     62 
     63define('STATUS_TODO_NEED_ACTION', 1); 
     64define('STATUS_TODO_IN_PROGRESS', 2); 
     65define('STATUS_TODO_COMPLETED', 3); 
     66define('STATUS_TODO_CANCELLED', 4); 
    5867?> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/css/layout.css

    r6811 r6876  
    217217/* -- event details styles -- */ 
    218218 
    219 .new-event-win.active { 
     219.new-event-win.active, .new-task-win.active { 
    220220         width:700px;height:510px;text-align:left; 
    221221} 
    222222 
    223 .new-event-win > .content.ui-tabs.ui-widget-content { 
     223.new-event-win > .content.ui-tabs.ui-widget-content, .new-task-win > .content.ui-tabs.ui-widget-content { 
    224224        border: none; 
    225225} 
    226226 
    227 .new-event-win ul.attendee-permissions-list, li.attendee-permissions-list{text-align: left;} 
     227.new-event-win ul.attendee-permissions-list, li.attendee-permissions-list, .new-task-win ul.attendee-permissions-list{text-align: left;} 
    228228 
    229229li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;} 
     
    234234p.request-update label{width: 150px !important;} 
    235235 
    236 .new-event-win .menu-addevent { 
     236.new-event-win .menu-addevent, .new-task-win .menu-addevent { 
    237237        text-align: right; 
    238238} 
    239239 
    240 fieldset.block-add-attendee .add-attendee-search { max-width: 250px; margin: 5px;} 
    241 fieldset.block-add-attendee .add-attendee-search input { max-width: 220px; width: 220px; padding: 0 0 0 7px;} 
     240.new-event-win fieldset.block-add-attendee .add-attendee-search { max-width: 250px; margin: 5px;} 
     241.new-task-win fieldset.block-add-attendee .add-attendee-search { max-width: 323px; margin: 5px;} 
     242 
     243.new-event-win fieldset.block-add-attendee .add-attendee-search input { max-width: 220px; width: 220px; padding: 0 0 0 7px;} 
     244.new-task-win fieldset.block-add-attendee .add-attendee-search input { max-width: 290px; width: 290px; padding: 0 0 0 7px;} 
     245 
     246 
    242247fieldset.block-add-attendee .search-result-list { width: 255px; max-height: 215px; overflow: auto;} 
    243248fieldset.block-add-attendee .search-result-list .ui-widget-content { border: none;} 
     
    249254.block-attendee-list, .block-add-attendee { float:left;} 
    250255.block-attendee-list { width:400px; margin-right: 5px; } 
    251 .block-add-attendee { width:260px; margin-right: 5px; } 
     256.new-event-win .block-add-attendee { width:260px; margin-right: 5px; } 
     257.new-task-win .block-add-attendee { width:335px; margin-right: 5px; } 
    252258.block-attendee-list dd, .block-add-attendee dd { border: 1px solid #BFBFBF; } 
    253259.block-attendee-list dt, .block-add-attendee dt { background-color:#FFF; margin: 5px 0 -6px 5px; font-weight: bold; display: table;  position: relative;} 
     
    263269} 
    264270 
    265 dl.block-add-attendee dd.add-attendee { 
     271.new-event-win dl.block-add-attendee dd.add-attendee { 
    266272        width: 260px; 
     273        min-height: 260px; 
     274        display: block; 
     275} 
     276 
     277.new-task-win dl.block-add-attendee dd.add-attendee { 
     278        width: 343px; 
    267279        min-height: 260px; 
    268280        display: block; 
     
    740752/* -- alarm dysplay -- */ 
    741753 
    742 .new-event-alarm{ 
     754.new-event-alarm, .new-task-alarm{ 
    743755        margin: 5px;     
    744756        font: bold; 
    745757} 
    746758 
    747 .title-event-alarm{ 
     759.title-event-alarm, .title-task-alarm{ 
    748760        margin: 5px; 
    749761} 
    750762 
    751 .description-event-alarm{ 
     763.description-event-alarm, .description-task-alarm{ 
    752764        margin: 5px; 
    753765} 
    754766 
    755 .inicialize-event-alarm{ 
     767.inicialize-event-alarm, .inicialize-task-alarm{ 
    756768        margin: 5px; 
    757769} 
     
    856868.ui-dialog .ui-button-text-only .ui-button-text { padding: 0.4em 1em; } 
    857869 
    858 .new-event-win fieldset { border: none; margin: 0; padding: 0; } 
    859 .new-event-win fieldset.tab-level2 { padding: 0px 5px; } 
    860 .new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 
     870.new-event-win fieldset, .new-task-win fieldset { border: none; margin: 0; padding: 0; } 
     871.new-event-win fieldset.tab-level2, .new-task-win fieldset.tab-level2 { padding: 0px 5px; } 
     872.new-event-win fieldset fieldset, .new-task-win fieldset.tab-level2 fieldset, 
     873.new-task-win fieldset fieldset, .new-task-win fieldset.tab-level2 fieldset{ padding: 5px 0; } 
    861874 
    862875.hidden { 
     
    899912} 
    900913 
    901 .new-event-win div.div-addtask { padding: 0; width: 770px; border: 0;} 
     914.new-task-win div.div-addtask { padding: 0; width: 770px; border: 0;} 
    902915.new-event-win form.form-addevent { padding: 9px; } 
    903916 
    904917.ui-dialog .ui-dialog-content { padding: 0; } 
    905 .new-event-win div.div-addevent { padding: 0; width: 700px; border: 0;} 
    906 .new-event-win form.form-addevent { padding: 9px; } 
     918.new-event-win div.div-addevent, .new-task-win div.div-addtask { padding: 0; width: 700px; border: 0;} 
     919.new-event-win form.form-addevent, .new-task-win form.form-addtask { padding: 9px; } 
    907920 
    908921.expresso-calendar-container input[type="text"] { height: 18px; } 
     
    927940 
    928941.expresso-calendar-container input.h1, 
    929 .new-event-win input.h1 { 
     942.new-event-win input.h1, .new-task-win input.h1 { 
    930943        font-size: 150%; 
    931944        font-weight: bold; 
     
    934947} 
    935948 
    936 .new-event-win textarea { 
     949.new-event-win textarea, .new-task-win textarea { 
    937950        width:600px; 
    938951        height: 210px; 
     
    943956span.input-group { display: block; } 
    944957/*p.input-group label { vertical-align: top; }*/ 
    945 .new-event-win p.input-group label { display: inline-block; width: 65px;} 
    946 .new-event-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 
     958.new-event-win p.input-group label, .new-task-win p.input-group label { display: inline-block; width: 65px;} 
     959.new-event-win p.input-group label.input-group, .new-task-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 
    947960 
    948961input.number {text-align: right} 
     
    964977.new-event-win fieldset.event-repeat-container label,  
    965978.new-event-win p.input-group.event-repeat-weekly label,  
    966 .new-event-win p.input-group.event-repeat-monthly label { 
     979.new-event-win p.input-group.event-repeat-monthly label, 
     980.new-task-win fieldset.task-repeat-container label,  
     981.new-task-win p.input-group.task-repeat-weekly label,  
     982.new-task-win p.input-group.task-repeat-monthly label 
     983{ 
    967984        width: auto;  
    968985} 
     
    971988.new-event-win fieldset.search-field, 
    972989.new-event-win fieldset.block-add-attendee-permissions, 
    973 .new-event-win fieldset.block-attendee-list { 
     990.new-event-win fieldset.block-attendee-list, 
     991.new-task-win fieldset.input-field-rounded, 
     992.new-task-win fieldset.search-field, 
     993.new-task-win fieldset.block-add-attendee-permissions, 
     994.new-task-win fieldset.block-attendee-list 
     995{ 
    974996        border:1px solid #CFCFCF; 
    975997} 
    976998 
    977 .new-event-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 
    978 .new-event-win fieldset.block-attendee-list ul {  height:160px; overflow: auto;} 
     999.new-event-win fieldset.block-attendee-list, .new-task-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 
     1000.new-event-win fieldset.block-attendee-list ul, .new-task-win fieldset.block-attendee-list ul {  height:160px; overflow: auto;} 
    9791001 
    9801002 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/css/style.css

    r6811 r6876  
    4545.ui-dialog .ui-button-text-only .ui-button-text { padding: 0.4em 1em; } 
    4646 
    47 .new-event-win fieldset { border: none; margin: 0; padding: 0; } 
    48 .new-event-win fieldset.tab-level2 { padding: 0px 5px; min-height: 310px; max-height: 310px; overflow: auto;} 
    49 .new-event-win .overflow_add_calender { overflow: auto; max-height: 320px; } 
    50 .new-event-win fieldset#calendar_addevent_details7 { overflow: hidden} 
    51 .new-event-win fieldset#calendar_addevent_details5 .button-files-upload{margin: 15px 0 0 0} 
    52 .new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 
     47.new-event-win fieldset, .new-task-win fieldset { border: none;        margin: 0; padding: 0; } 
     48.new-event-win fieldset.tab-level2, .new-task-win fieldset.tab-level2 { padding: 0px 5px; min-height: 310px; max-height: 310px; overflow: auto;} 
     49.new-event-win .overflow_add_calender, .new-task-win .overflow_add_calender { overflow: auto; max-height: 320px; } 
     50.new-event-win fieldset#calendar_addevent_details7, .new-task-win fieldset#calendar_addevent_details7 { overflow: hidden} 
     51.new-event-win fieldset#calendar_addevent_details5 .button-files-upload, .new-task-win fieldset#calendar_addevent_details5 .button-files-upload{margin: 15px 0 0 0} 
     52.new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset, .new-task-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 
    5353 
    5454.hidden { 
     
    9292 
    9393.ui-dialog .ui-dialog-content { padding: 0; } 
    94 .new-event-win div.div-addevent { padding: 0; width: 700px; border: 0;} 
    95 .new-event-win form.form-addevent { padding: 9px; } 
     94.new-event-win div.div-addevent{ padding: 0; width: 700px; border: 0;} 
     95.new-task-win div.div-addtask { padding: 0; width: 774px; border: 0;} 
     96.new-event-win form.form-addevent, .new-task-win form.form-addtask { padding: 9px; } 
    9697 
    9798.expresso-calendar-container input[type="text"] { height: 18px; } 
     
    116117 
    117118.expresso-calendar-container input.h1, 
    118 .new-event-win input.h1 { 
     119.new-event-win input.h1, 
     120.new-task-win input.h1{ 
    119121        font-size: 150%; 
    120122        font-weight: bold; 
     
    123125} 
    124126 
    125 .new-event-win textarea { 
     127.expresso-calendar-container input.h1, 
     128.new-task-win input.h1 { 
     129        font-size: 150%; 
     130        font-weight: bold; 
     131        width: 64%; 
     132        height: 150%; 
     133} 
     134 
     135.new-event-win textarea, .new-task-win textarea { 
    126136        width:600px; 
    127137        height: 210px; 
     
    132142span.input-group { display: block; } 
    133143/*p.input-group label { vertical-align: top; }*/ 
    134 .new-event-win p.input-group label { display: inline-block; width: 65px;} 
    135 .new-event-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 
     144.new-event-win p.input-group label, .new-task-win p.input-group label { display: inline-block; width: 65px;} 
     145.new-event-win p.input-group label.input-group, .new-task-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 
    136146 
    137147input.number {text-align: right} 
     
    153163.new-event-win fieldset.event-repeat-container label,  
    154164.new-event-win p.input-group.event-repeat-weekly label,  
    155 .new-event-win p.input-group.event-repeat-monthly label { 
     165.new-event-win p.input-group.event-repeat-monthly label, 
     166.new-task-win fieldset.task-repeat-container label,  
     167.new-task-win p.input-group.task-repeat-weekly label,  
     168.new-task-win p.input-group.task-repeat-monthly label 
     169{ 
    156170        width: auto;  
    157171} 
     
    160174.new-event-win fieldset.search-field, 
    161175.new-event-win fieldset.block-add-attendee-permissions, 
    162 .new-event-win fieldset.block-attendee-list { 
     176.new-event-win fieldset.block-attendee-list, 
     177.new-task-win fieldset.input-field-rounded, 
     178.new-task-win fieldset.search-field, 
     179.new-task-win fieldset.block-add-attendee-permissions, 
     180.new-task-win fieldset.block-attendee-list{ 
    163181        border:1px solid #CFCFCF; 
    164182} 
    165183 
    166 .new-event-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 
    167 .new-event-win fieldset.block-attendee-list ul {  height:160px; overflow: auto;} 
     184.new-event-win fieldset.block-attendee-list, .new-task-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 
     185.new-event-win fieldset.block-attendee-list ul, .new-task-win fieldset.block-attendee-list ul {  height:160px; overflow: auto;} 
    168186 
    169187 
     
    475493} 
    476494 
     495.calendar-addevent-details-txt-timezone, .calendar-addtask-details-txt-timezone{width: 227px;}  
     496 
    477497.div-addtask #calendar_addtask_details1 .time-previsao { width: 40px; } 
    478498 
     
    483503.div-addtask #calendar_addtask_details1 .end-time{ width: 40px; } 
    484504.div-addtask #calendar_addtask_details1 .end-date{ width: 80px; } 
    485 .div-addtask #calendar_addtask_details1 .previsao-termino { margin: 0 0 0 50px; } 
     505.div-addtask #calendar_addtask_details1 .previsao-termino { margin: 0 0 0 5px; } 
    486506.div-addtask #calendar_addtask_details1 .subitem { margin: 5px; display: block;} 
    487507.div-addtask #calendar_addtask_details1 .subitem .span_done{ margin: 0 30px;} 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/interceptors/DBMapping.php

    r6832 r6876  
    1616            $params['summary'] = 'Evento sem título'; 
    1717 
    18         if (!is_numeric($params['startTime'])) 
    19             $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']); 
    20  
    21         if (!is_numeric($params['endTime'])) { 
    22             $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']); 
    23  
    24             if ($params['allDay']) 
    25                 $params['endTime'] = $params['endTime'] + 86400000; 
    26         } 
    27  
    28         $params['rangeEnd'] = $params['endTime']; 
    29         $params['rangeStart'] = $params['startTime']; 
    30  
    31         /////////////////////////////////////////////////////////////////// 
    32  
    33         $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 
    34         $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] : time() . '000'; 
    35         $params['uid'] = isset($params['uid']) ? $params['uid'] : self::_makeUid(); 
    36     } 
     18        if (!is_numeric($params['startTime'])) 
     19            $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']); 
     20 
     21        if (!is_numeric($params['endTime'])) { 
     22            $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']); 
     23 
     24            if ($params['allDay']) 
     25                $params['endTime'] = $params['endTime'] + 86400000; 
     26        } 
     27 
     28        if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due'])) 
     29            $params['due'] = self::parseTimeDate($params['due'], $params['timezone']); 
     30 
     31 
     32        $params['rangeEnd'] = $params['endTime']; 
     33        $params['rangeStart'] = $params['startTime']; 
     34 
     35        /////////////////////////////////////////////////////////////////// 
     36 
     37        $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 
     38        $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] : time() . '000'; 
     39        $params['uid'] = isset($params['uid']) ? $params['uid'] : self::_makeUid(); 
     40        } 
    3741 
    3842    static function parseTimeDate($time, $timezone) { 
     
    136140                .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 
    137141                .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 
     142        .'calendar_object.priority as "priority", calendar_object.due as "due", ' 
     143        .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 
    138144                .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 
    139145                .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 
     
    422428    public function encodeUpdateSchedulable(&$uri, &$params, &$criteria, $original) { 
    423429 
    424         $event = Controller::read(array('concept' => 'schedulable', 'id' => $params['id'])); 
    425          
    426         if (isset($params['startTime'])) { 
    427  
    428             if (!is_numeric($params['startTime'])) 
    429                 $params['startTime'] = self::parseTimeDate($params['startTime'], $event['timezone']); 
    430  
    431             $params['rangeStart'] = $params['startTime']; 
    432         }if (isset($params['endTime'])) { 
    433  
    434             if (!is_numeric($params['endTime'])) { 
    435                 $params['endTime'] = self::parseTimeDate($params['endTime'], $event['timezone']); 
    436  
    437             if ((isset($params['allDay']) && $params['allDay']) || ( !isset($params['allDay']) && $event['allDay'])) 
    438                 $params['endTime'] = $params['endTime'] + 86400000; 
    439             } 
    440             $params['rangeEnd'] = $params['endTime']; 
    441         } 
     430        $event = Controller::read(array('concept' => 'schedulable', 'id' => $params['id'])); 
     431         
     432        if (isset($params['startTime'])) { 
     433 
     434            if (!is_numeric($params['startTime'])) 
     435                $params['startTime'] = self::parseTimeDate($params['startTime'], $event['timezone']); 
     436 
     437            $params['rangeStart'] = $params['startTime']; 
     438        } 
     439 
     440        if (isset($params['endTime'])) { 
     441 
     442            if (!is_numeric($params['endTime'])) { 
     443                $params['endTime'] = self::parseTimeDate($params['endTime'], $event['timezone']); 
     444 
     445            if ((isset($params['allDay']) && $params['allDay']) || ( !isset($params['allDay']) && $event['allDay'])) 
     446                $params['endTime'] = $params['endTime'] + 86400000; 
     447            } 
     448            $params['rangeEnd'] = $params['endTime']; 
     449        } 
     450 
     451 
     452        if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due'])) 
     453            $params['due'] = self::parseTimeDate($params['due'], $event['timezone']); 
    442454    } 
    443455 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js

    r6797 r6876  
    596596}); 
    597597 
     598DataLayer.codec( "schedulable", "task", { 
     599 
     600    decoder: function( evtObj ){ 
     601    Encoder.EncodeType = "entity"; 
     602     
     603    if( notArray = $.type(evtObj) !== "array" ) 
     604        evtObj = [ evtObj ]; 
     605 
     606    var pref = User.preferences; 
     607 
     608    var res = $.map(evtObj, function( form ){ 
     609     
     610        var tzId =  form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 
     611 
     612        formatString = pref.dateFormat + " " + pref.hourFormat; 
     613 
     614        return DataLayer.merge({ 
     615        "class": form["class"], 
     616        startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     617        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) , 
     618        due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     619        allDay: ( !!form.allDay ? 1 : 0 ),       
     620        status: form.taskStatus,       
     621        id: form.idTask, 
     622        location: form.location, 
     623        type: 2, 
     624        percentage: form.percentage, 
     625        priority: form.priority, 
     626        category: form.category, 
     627        summary: form.summary, 
     628        description: form.description, 
     629        timezone: tzId, 
     630        attachments: $.map(form.attachment || [], function( attachment, i ){ 
     631            return { 
     632            attachment: attachment 
     633            } 
     634        }), 
     635        participants: $.map( form.attendee || [], function( attendee, i ){ 
     636 
     637            if( !attendee || attendee === "" ) 
     638            return( null ); 
     639 
     640            var participant = {}; 
     641            participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 
     642 
     643            if( participant.user === User.me.id ){ 
     644            return DataLayer.merge({ 
     645                id: attendee, 
     646                isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     647                alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 
     648                if( alarmTime === "" ) 
     649                    return( null ); 
     650                return !!form.alarmId[i] ? { 
     651                    type: form.alarmType[i],  
     652                    unit: form.alarmUnit[i],  
     653                    time: form.alarmTime[i],  
     654                    id: form.alarmId[i] 
     655                    }: 
     656 
     657                    { 
     658                    type: form.alarmType[i], 
     659                    unit: form.alarmUnit[i],  
     660                    time: form.alarmTime[i] 
     661                    }; 
     662                }), 
     663                status: !!form.status ? form.status : 3 
     664            }, (form.delegatedFrom[i] != '0' && form.delegatedFrom[i] != '')  ? { 
     665                delegatedFrom: form.delegatedFrom[i] 
     666                } : {}); 
     667            }else{ 
     668                return { 
     669                    id: attendee, 
     670                    isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     671                    isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
     672                    }; 
     673            }; 
     674        }) 
     675        }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 
     676    }); 
     677 
     678    return notArray ? res[0] : res; 
     679    }, 
     680 
     681    encoder: function( evtObj ){ 
     682 
     683    var notArray = false; 
     684       
     685    if( notArray = $.type(evtObj) !== "array" ) 
     686        evtObj = [ evtObj ]; 
     687 
     688    var statusParticipants = {},  isAttendee = false, 
     689    
     690    statusLabels = [ '', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ], 
     691 
     692    participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy( User.me ); 
     693     
     694    var delegateAttendee = {}; 
     695     
     696    for( var i = 0; i < statusLabels.length; i++ ) 
     697        statusParticipants[ statusLabels[i] ] = 0; 
     698     
     699    var res = $.map(evtObj, function( objEvent ){            
     700             
     701        if(!(typeof(objEvent) == 'object')) 
     702            return (null); 
     703 
     704        var limitAttendee = false; 
     705 
     706        return { 
     707        "class": objEvent["class"], 
     708        id: objEvent.id, 
     709        location: objEvent.location, 
     710        category: objEvent.category, 
     711        taskStatus: objEvent.status, 
     712        groups: Calendar.groups, 
     713        group: objEvent.group, 
     714        summary: objEvent.summary, 
     715        description: objEvent.description, 
     716        timezone: objEvent.timezone, 
     717        timezones: Timezone.timezones, 
     718        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     719        priority: objEvent.priority, 
     720        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     721        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     722        endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     723        endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     724        dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     725        dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     726        allDay: !!parseInt( objEvent.allDay ), 
     727            historic: [], 
     728        attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     729            var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     730            //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
     731            if(!attach.name) return(null);  
     732             
     733            var ext = attach.name.split('.'); 
     734            attach.name = attach.name.length < 10 ?  attach.name : ( ext.length == 1 ? attach.name.substr(0, 10) : (attach.name.substr(0, 6) + '.' +  ext[ext.length -1])); 
     735            attach.size = formatBytes(attach.size); 
     736            return attach; 
     737        }),                      
     738        attendee: $.map(objEvent.participants || [], function( participant, i ){                         
     739 
     740            if(delegateAttendee[participant]) 
     741                return(null); 
     742 
     743            var attend = DataLayer.get('participant', (participant.id || participant)); 
     744            attend.user = DataLayer.get('user', attend.user); 
     745 
     746            statusParticipants[ statusLabels[attend.status] ]++;     
     747 
     748            if(attend.user.mail == User.me.mail) 
     749                isAttendee = true; 
     750 
     751            if( attend.user.id ===  me.id ){ 
     752                participantInfo.user = { 
     753                    id: attend.id, 
     754                    status : attend.status, 
     755                    delegatedFrom: attend.delegatedFrom || '0', 
     756                    acl: attend.acl, 
     757                    receiveNotification : attend.receiveNotification, 
     758                    alarms : $.map(attend.alarms || [], function( alarm ){ 
     759                    var alarm = DataLayer.get('alarm', alarm); 
     760                    return (alarm == "" ? (null) : alarm); 
     761                    }) 
     762                }; 
     763                me = attend; 
     764                return(null); 
     765            }; 
     766 
     767            var person = { 
     768                id: attend.id, 
     769                name: attend.user.name != 'false' ? attend.user.name : '', 
     770                mail: attend.user.mail, 
     771                status : attend.status, 
     772                isExternal: attend.isExternal, 
     773                acl: attend.acl, 
     774                delegatedFrom: attend.delegatedFrom 
     775            }; 
     776 
     777            if(!!parseInt(attend.delegatedFrom)){ 
     778                delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 
     779                return(null); 
     780            } 
     781 
     782            if( !!parseInt(attend.isOrganizer)){ 
     783                participantInfo.organizer = DataLayer.copy(person); 
     784                return(null); 
     785            };                   
     786 
     787            return (person); 
     788        }), 
     789        organizer: participantInfo.organizer || me, 
     790        alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 
     791        status: !!participantInfo.user ? participantInfo.user.status : 1, 
     792        isAttendee: isAttendee, 
     793        me: me, 
     794        delegatedFrom: delegatedFrom, 
     795        statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 
     796        sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 
     797        }; 
     798    }); 
     799    console.log(res[0]); 
     800    return (notArray ? res[0] : res); 
     801    } 
     802}); 
    598803 
    599804function decodeOwnerCalendar(calendar){ 
     
    10551260                            ] 
    10561261                        ], 
    1057                         ['IN', 'calendar',  Calendar.calendarIds] 
     1262                        ['IN', 'calendar',  $.merge( Calendar.calendarIds, Calendar.groupIds )] 
    10581263                ],  
    10591264            criteria: { 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js

    r6857 r6876  
    942942    callbackAttendee(); 
    943943/** 
    944                                 Opções de delegação do participante/organizer 
    945                         */               
     944Opções de delegação do participante/organizer 
     945*/               
    946946blkAddAtendee.find(".button.participant-delegate").button({ 
    947947    icons: { 
     
    971971 
    972972UI.dialogs.addEvent.find(".attendee-list-add .add-attendee-input input").Watermark("digite um email para convidar"); 
    973 /* Trata a edição de um novo participante adicionado 
    974                         *  
    975                         */ 
     973/*  
     974 * Trata a edição de um novo participante adicionado 
     975 */ 
    976976var hasNewAttendee = false; 
    977977                         
     
    11971197} else if (!skipAddNewLine) {            
    11981198    /** 
    1199                                                 * a) salva como novo usuario externo no banco (apenas com email) e... 
    1200                                                 * adiciona novo contato externo à lista de convidados 
    1201                                                 */ 
     1199    * a) salva como novo usuario externo no banco (apenas com email) e... 
     1200    * adiciona novo contato externo à lista de convidados 
     1201    */ 
    12021202 
    12031203    userId = DataLayer.put('user', { 
     
    15601560} 
    15611561 
    1562 disponibily(objEvent, path, attendees); 
     1562disponibily(objEvent, path, attendees, 'event'); 
    15631563 
    15641564/*Seleciona a agenda padrão para criação de um evento*/ 
     
    15761576 
    15771577UI.dialogs.addEvent.dialog('open'); 
    1578 //$('[href="#calendar_addevent_details7"]').trigger('click'); 
    1579 //$('[href="#calendar_addevent_details2"]').trigger('click'); 
     1578 
    15801579} 
    15811580 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/init.js

    r6857 r6876  
    247247 
    248248                            $('.qtip-active .button.advanced').button().click(function(){ 
    249                                  
    250                                         $(componente).qtip('destroy'); 
    251                                          
     249 
    252250                                var startEvent = new Date(); 
    253251                                        var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')}; 
     
    255253                         
    256254                                                var componente = $(this); 
    257  
    258                                         taskDetails({  
     255                        var description = $('div.qtip div.add-simple-task textarea[name="description"]').val(); 
     256 
     257                                        taskDetails({ 
     258                            summary: $('div.qtip div.add-simple-task input[name="summary"]').val(), 
     259                            description: description == 'Descrição' ? '' : description, 
    259260                                                startTime: startEvent.getTime(), 
    260261                                                endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?   
    261262                                                        (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration))) 
    262263                                        }, true ); 
    263                          
     264 
     265                        $(componente).qtip('destroy'); 
    264266                            }); 
    265267                                                                 
     
    450452                            }else{ 
    451453                                var schedulable = DataLayer.get( "schedulable", evt.id); 
    452                                 schedulable.calendar = evt.calendar; 
     454                                schedulable.group = evt.calendar; 
    453455                                eventDetails( schedulable, true); 
    454456                            } 
    455457                        } 
    456             }else 
    457                                 alert('Editar Tarefa'); 
     458            }else{ 
     459                var task = DataLayer.get( "schedulable", evt.id); 
     460                task.group = evt.calendar; 
     461                taskDetails( task, true); 
     462            } 
    458463                }, 
    459464                 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/load.js

    r6768 r6876  
    5454    } 
    5555 
    56     this.calendarIds = [], this.signatureOf = {}, this.calendars = [], this.calendarOf= {}; 
     56    this.calendarIds = [], this.groupIds = [], this.signatureOf = {}, this.calendars = [], this.groups = [], this.calendarOf = {}, this.groupOf= {}; 
    5757 
    5858    for( var i = 0; i < this.signatures.length; i++ ){ 
    5959        if(this.signatures[i].isOwner == "0") 
    6060            this.signatures[i].permission =  DataLayer.encode('calendarToPermission:detail', this.signatures[i].permission); 
    61         this.signatureOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
     61 
     62        if(this.signatures[i].calendar.type == '1') 
     63           this.signatureOf[ this.groupIds[this.groupIds.length] = ( this.groups[ this.groups.length ] = this.groupOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
     64        else 
     65           this.signatureOf[ this.calendarIds[ this.calendarIds.length] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
    6266    } 
    6367 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/map.disponibility.js

    r6444 r6876  
    88 
    99 
    10 function updateMap(data){ 
    11         var start_date = $(".new-event-win.active .start-date").val(); 
    12         var end_date   = $(".new-event-win.active .end-date").val(); 
    13         var start_time = $(".new-event-win.active .start-time").val(); 
    14         var end_time   = $(".new-event-win.active .end-time").val(); 
    15         var isAllDay   = $('.new-event-win.active input[name="allDay"]').is(':checked'); 
     10function updateMap(viewName){ 
     11        var start_date = $(".new-"+viewName+"-win.active .start-date").val(); 
     12        var end_date   = $(".new-"+viewName+"-win.active .end-date").val(); 
     13        var start_time = $(".new-"+viewName+"-win.active .start-time").val(); 
     14        var end_time   = $(".new-"+viewName+"-win.active .end-time").val(); 
     15        var isAllDay   = $('.new-'+viewName+'-win.active input[name="allDay"]').is(':checked'); 
    1616         
    1717        var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
     
    2121         
    2222         
    23         var event = $("#new_event_map").fullCalendar('clientEvents', 'map')[0]; 
     23        var event = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('clientEvents', 'map')[0]; 
    2424         
    2525         
     
    2828                        event.end = endDate; 
    2929                        event.allDay = isAllDay; 
    30                         $("#new_event_map").fullCalendar( 'updateEvent', event ) 
     30                        $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'updateEvent', event ) 
    3131                } 
    3232                 
     
    3535 
    3636 
    37 function disponibily(objEvent, path, attendees){ 
     37function disponibily(objEvent, path, attendees, viewName){ 
    3838        var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
    3939        var startDate = Date.parseExact( objEvent.startDate + " " + $.trim(objEvent.startHour) , formatString ); 
    4040        var endDate = Date.parseExact( objEvent.endDate + " " + $.trim(objEvent.endHour) , formatString ); 
     41 
     42    var dialogName = {event: 'addEvent', task: 'addTask', activity: 'addActivity'} 
    4143          
    4244        var mapHtml = DataLayer.render( path+'templates/availability_map.ejs', {}); 
    43         $("#calendar_addevent_details7").html(mapHtml); 
    44         $("#new_event_map").fullCalendar(DataLayer.merge({ 
     45        $('#calendar_add'+viewName+'_details7').html(mapHtml); 
     46        $('.new-'+viewName+'-win .map_disponibility').fullCalendar(DataLayer.merge({ 
    4547                height : 300, 
    4648                timeFormat: User.preferences.hourFormat, 
     
    7779                        if(!allDay){ 
    7880                                $('[name="allDay"]').attr("checked", false);  
    79                                 UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden'); 
     81                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 
    8082                                 
    8183                                $('[name="startHour"]').val(start.toString(User.preferences.hourFormat)); 
     
    8587                        }else{ 
    8688                                $('[name="allDay"]').attr("checked", true);  
    87                                 UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden'); 
     89                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 
    8890                        } 
    8991                }, 
     
    98100                                className : "map-event", 
    99101                                backgroundColor : "transparent !important", 
    100                                 editable : objEvent.acl.write || objEvent.acl.organization 
     102                                editable : objEvent.acl ? (objEvent.acl.write || objEvent.acl.organization) : true 
    101103                        } 
    102104                ], 
     
    104106                        if(event.allDay){ 
    105107                                $('[name="allDay"]').attr("checked", true);  
    106                                 UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden'); 
     108                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 
    107109                                 
    108110                                $('[name="startDate"]').val(dateCalendar.toString(event.start, User.preferences.dateFormat));                            
     
    111113                        }else{ 
    112114                                $('[name="allDay"]').attr("checked", false);  
    113                                 UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden'); 
     115                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 
    114116                         
    115117                                $('[name="startHour"]').val(dateCalendar.formatDate(event.start, User.preferences.hourFormat)); 
     
    132134        var eventSource = new Array(); 
    133135        var updateMapView = function(){ 
    134                 updateMap(); 
    135                 var view = $("#new_event_map").fullCalendar('getView'); 
     136                updateMap(viewName); 
     137                var view = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('getView'); 
    136138                var map = {}; 
    137                 $("#new_event_map").fullCalendar( 'removeEventSource', eventSource ); 
     139                $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'removeEventSource', eventSource ); 
    138140                eventSource = new Array();       
    139141                map = {startTime : view.start.getTime(), endTime : view.end.getTime(), attendees: {}, timezone: (objEvent.timezone || User.preferences.timezone)}; 
     
    167169                } 
    168170                if(eventSource.length) 
    169                         $("#new_event_map").fullCalendar( 'addEventSource', eventSource ); 
     171                        $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'addEventSource', eventSource ); 
    170172        };  
    171         $('[href="#calendar_addevent_details7"]').click(function(eventData, eventObject){ 
    172                 $("#new_event_map").fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 
    173                 //if(eventObject == undefined) 
    174                         updateMapView(); 
     173        $('[href="#calendar_add'+viewName+'_details7"]').click(function(eventData, eventObject){ 
     174                $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 
     175                  updateMapView(); 
    175176        });      
    176         $("#new_event_map").find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){ 
     177        $('.new-'+viewName+'-win .map_disponibility').find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){ 
    177178                updateMapView(); 
    178179        }); 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js

    r6815 r6876  
    1 function taskDetails( objEvent, decoded, path, isMail, repeat){ 
     1function taskDetails(objTask, decoded, path, isMail, repeat) { 
     2 
     3    $('.qtip.qtip-blue').remove(); 
    24 
    35    attendees = {}; 
    4          
    5     if(path == undefined) 
    6         path = ""; 
    7                  
    8     if( !decoded ) 
    9         objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); 
    10  
    11     if(!isMail) 
    12         objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 
    13          
    14     if(typeof(objEvent.id) == 'undefined'){ 
    15         objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
    16         objEvent.useAlarmDefault = 1; 
     6 
     7    if (path == undefined) path = ""; 
     8 
     9    if (!decoded) objTask = DataLayer.decode("task:calendar", objTask); 
     10 
     11    if (!isMail) objTask = DataLayer.encode("schedulable:task", objTask); 
     12 
     13    if (typeof (objTask.id) == 'undefined') { 
     14        objTask.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
     15        objTask.useAlarmDefault = 1; 
    1716    } 
    18          
     17 
     18 
     19    if(objTask.me.id == User.me.id){ 
     20        objTask.me.id = DataLayer.put('participant', { 
     21            user: objTask.me.id,  
     22            mail: objTask.me.mail 
     23        }); 
     24        objTask.organizer.id = objTask.me.id; 
     25    } 
     26 
     27    var dependsDelegate = function(reference, inverse){ 
     28        if(inverse){ 
     29            if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
     30                blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
     31        }else{ 
     32            if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
     33                blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val()); 
     34        } 
     35    }; 
     36 
     37    var removeOthers = function(){ 
     38        var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button'); 
     39        if(other.lenght) 
     40            dependsDelegate(other.parents('li'), true); 
     41 
     42        blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 
     43        blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 
     44     
     45    }; 
     46 
     47    var callbackAttendee = function(){ 
     48        var checked = false; 
     49        blkAddAtendee.find("li.not-attendee").addClass('hidden'); 
     50         
     51        blkAddAtendee.find("li .button").filter(".close.new").button({ 
     52            icons: { 
     53            primary: "ui-icon-close" 
     54            }, 
     55            text: false 
     56        }).click(function () { 
     57            DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
     58            if($(this).parent().find('.button.delegate').hasClass('attendee-permissions-change-button')){ 
     59                removeOthers(); 
     60                blkAddAtendee.find('.request-update').addClass('hidden'); 
     61                blkAddAtendee.find('.status option').toggleClass('hidden'); 
     62                         
     63                blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 
     64            } 
     65                 
     66            $(this).parents('li').remove(); 
     67                 
     68            if(blkAddAtendee.find(".attendee-list li").length == 1) 
     69                blkAddAtendee.find("li.not-attendee").removeClass('hidden'); 
     70        }) 
     71        .addClass('tiny disable ui-button-disabled ui-state-disabled') 
     72        .removeClass('new').end() 
     73         
     74        .filter(".delegate.new").button({ 
     75            icons: { 
     76                primary: "ui-icon-transferthick-e-w" 
     77            }, 
     78            text: false 
     79        }).click(function () { 
     80            var me = $(this).parents('li'); 
     81            if($(this).hasClass('attendee-permissions-change-button')){ 
     82                $(this).removeClass('attendee-permissions-change-button')    
     83                .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end();                
     84             
     85                me.find('input[name="delegatedFrom[]"]').val(''); 
     86                dependsDelegate(me, true); 
     87                         
     88                blkAddAtendee.find('.request-update').addClass('hidden'); 
     89                blkAddAtendee.find('.status option').toggleClass('hidden'); 
     90 
     91                blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 
     92                     
     93            }else{ 
     94                removeOthers(); 
     95                 
     96                $(this).addClass('attendee-permissions-change-button')    
     97                .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end();                
     98                 
     99                me.find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
     100                 
     101                dependsDelegate(me, false); 
     102                     
     103                blkAddAtendee.find('.request-update').removeClass('hidden'); 
     104                if(blkAddAtendee.find('.status option.hidden').length == 1) 
     105                    blkAddAtendee.find('.status option').toggleClass('hidden'); 
     106                     
     107                blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 
     108            } 
     109        }) 
     110        .addClass('tiny disable ui-button-disabled ui-state-disabled') 
     111        .removeClass('new').end()             
     112             
     113        .filter(".open-delegate.new").click(function(){ 
     114            if($(this).hasClass('ui-icon-triangle-1-e')){ 
     115                $(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 
     116                $(this).parents('li').find('.list-delegates').removeClass('hidden'); 
     117            }else{ 
     118                $(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 
     119                $(this).parents('li').find('.list-delegates').addClass('hidden'); 
     120            } 
     121             
     122        }).removeClass('new'); 
     123 
     124        UI.dialogs.addTask.find('.attendees-list li').hover( 
     125            function () { 
     126                $(this).addClass("hover-attendee"); 
     127                $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 
     128                .find('.attendee-options').addClass('hover-attendee'); 
     129            }, 
     130            function () { 
     131                $(this).removeClass("hover-attendee"); 
     132                $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 
     133                .find('.attendee-options').removeClass('hover-attendee'); 
     134            } 
     135        );         
     136    } 
     137 
    19138    /** 
    20          * canDiscardEventDialog deve ser true se não houver alterações no evento 
    21         */ 
    22     canDiscardEventDialog = true; 
     139     * canDiscardTaskDialog deve ser true se não houver alterações no task 
     140    */ 
     141    canDiscardTaskDialog = true; 
    23142    /** 
    24          * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
    25          * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 
    26          */ 
    27     zebraDiscardEventDialog = false; 
    28          
    29     /** 
    30                 ACLs do participant 
    31         */ 
    32     acl_names = { 
    33         'w': 'acl-white', 
    34         'i': 'acl-invite-guests', 
    35         'p': 'acl-participation-required' 
    36     }; 
    37  
    38     var dependsDelegate = function(reference, inverse){ 
    39         if(inverse){ 
    40             if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
    41                 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
    42         }else{ 
    43             if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
    44                 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val()); 
    45         } 
    46          
    47     }; 
    48      
    49     var removeOthers = function(){ 
    50         var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button'); 
    51         if(other.lenght){ 
    52             dependsDelegate(other.parents('li'), true); 
    53         } 
    54         blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 
    55         blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 
    56          
    57     }; 
    58          
    59         var html = DataLayer.render( path+'templates/task_add.ejs', { 
    60             event:objEvent 
    61         });      
    62                          
    63         if (!UI.dialogs.addTask) { 
    64  
    65             UI.dialogs.addTask = jQuery('#sandbox').append('<div title="Criar tarefa" class="new-event-win active"> <div>').find('.new-event-win.active').html(html).dialog({ 
    66                 resizable: false,  
    67                 modal:true,  
    68                 autoOpen: false, 
    69                 width:774,  
    70                 position: 'center',  
    71                 close: function(event, ui) { 
    72                         /** 
    73                          * Remove tooltip possivelmente existente 
    74                          */ 
    75                         if ($('.qtip.qtip-blue.qtip-active').length) 
    76                                 $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                
    77                         attendees  = {}; 
    78                 }, 
    79                 beforeClose: function(event, ui) { 
    80                  
    81                     if (!canDiscardEventDialog && !zebraDiscardEventDialog) { 
    82                         zebraDiscardEventDialog = true; 
    83                         window.setTimeout(function() { 
    84                             $.Zebra_Dialog('Suas alterações no evento não foram salvas. Deseja descartar as alterações?', { 
    85                                 'type':     'question', 
    86                                 'overlay_opacity': '0.5', 
    87                                 'buttons':  ['Descartar alterações', 'Continuar editando'], 
    88                                 'onClose':  function(clicked) { 
    89                                     if(clicked == 'Descartar alterações') { 
    90                                         canDiscardEventDialog = true; 
    91                                         /** 
    92                                         *Remoção dos anexos do eventos caso seja cancelado a edição 
    93                                         */ 
    94                                         DataLayer.rollback(); 
    95  
    96                                         var ids = false; 
    97                                         $.each($('.attachment-list input'), function (i, input) { 
    98                                             DataLayer.put('attachment', {id: ''+input.value}); 
    99                                             DataLayer.remove('attachment', ''+input.value); 
    100                                                 ids = true; 
    101                                         }); 
    102                                         if(ids) 
    103                                                 DataLayer.commit(); 
    104                                  
    105                                          
    106                                                                                          
    107                                         UI.dialogs.addTask.dialog('close'); 
    108                                     }else{ 
    109                                         zebraDiscardEventDialog = false; 
    110                                     } 
    111                                                                                  
    112                                     /** 
    113                                     * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
    114                                     * com ESC, para que o evento ESC não seja propagado para fechamento da 
    115                                     * janela de edição de eventos, deve ser setada uma flag indicando que 
    116                                     * já existe uma janela de confirmação aberta. 
    117                                     */ 
    118                                     if (!clicked) { 
    119                                         window.setTimeout(function() { 
    120                                             zebraDiscardEventDialog = false; 
    121                                         }, 200); 
    122                                     } 
    123                                 } 
    124                             }); 
    125                                                                  
    126                         }, 300); 
    127  
    128                     } 
    129                     //DataLayer.rollback(); 
    130                     return canDiscardEventDialog; 
    131                 }, 
    132                 dragStart: function(event, ui) { 
    133                         if ($('.qtip.qtip-blue.qtip-active').length) 
    134                                 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
    135                 } 
    136             }); 
    137                                  
    138         } else { 
    139             UI.dialogs.addTask.html(html); 
    140         } 
    141                  
    142 var tabs = UI.dialogs.addTask.children('.content').tabs({ 
    143         select: function(event, ui) {  
    144                 if ($('.qtip.qtip-blue.qtip-active').length) 
    145                         $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
    146         }        
    147         }); 
    148 var calendar = DataLayer.get('calendar', objEvent.calendar); 
    149                                  
    150 if (calendar.timezone != objEvent.timezone){ 
    151     UI.dialogs.addTask.find('.calendar-addevent-details-txt-timezone').find('option[value="'+objEvent.timezone+'"]').attr('selected','selected').trigger('change'); 
    152     UI.dialogs.addTask.find('.calendar_addevent_details_lnk_timezone').addClass('hidden'); 
    153     $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 
    154                          
     143     * zebraDiscardTaskDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
     144     * já estão aberta na tela, uma vez que não é possivel acessar o task ESC utilizado para fechá-la 
     145     */ 
     146    zebraDiscardTaskDialog = false; 
     147 
     148    var html = DataLayer.render(path + 'templates/task_add.ejs', { 
     149        task: objTask 
     150    }); 
     151 
     152    if (!UI.dialogs.addTask) { 
     153 
     154        UI.dialogs.addTask = jQuery('#sandbox').append('<div title="Criar tarefa" class="new-task-win active"> <div>').find('.new-task-win.active').html(html).dialog({ 
     155            resizable: false, 
     156            modal: true, 
     157            autoOpen: false, 
     158            width: 774, 
     159            position: 'center', 
     160            close: function (event, ui) { 
     161                /** 
     162                 * Remove tooltip possivelmente existente 
     163                 */ 
     164                if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     165                attendees = {}; 
     166            }, 
     167            beforeClose: function (event, ui) { 
     168 
     169                if (!canDiscardTaskDialog && !zebraDiscardTaskDialog) { 
     170                    zebraDiscardTaskDialog = true; 
     171                    window.setTimeout(function () { 
     172                        $.Zebra_Dialog('Suas alterações na tarefa não foram salvas. Deseja descartar as alterações?', { 
     173                            'type': 'question', 
     174                            'overlay_opacity': '0.5', 
     175                            'buttons': ['Descartar alterações', 'Continuar editando'], 
     176                            'onClose': function (clicked) { 
     177                                if (clicked == 'Descartar alterações') { 
     178                                    canDiscardTaskDialog = true; 
     179                                    /** 
     180                                     *Remoção dos anexos da task caso seja cancelado a ediçãoo 
     181                                     */ 
     182                                    DataLayer.rollback(); 
     183 
     184                                    var ids = false; 
     185                                    $.each($('.attachment-list input'), function (i, input) { 
     186                                        DataLayer.put('attachment', { 
     187                                            id: '' + input.value 
     188                                        }); 
     189                                        DataLayer.remove('attachment', '' + input.value); 
     190                                        ids = true; 
     191                                    }); 
     192                                    if (ids) DataLayer.commit(); 
     193 
     194                                    UI.dialogs.addTask.dialog('close'); 
     195                                } else { 
     196                                    zebraDiscardTaskDialog = false; 
     197                                } 
     198 
     199                                /** 
     200                                 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
     201                                 * com ESC, para que o task ESC nÃo seja propagado para fechamento da 
     202                                 * janela de edição de tasks, deve ser setada uma flag indicando que 
     203                                 * já existe uma janela de confirmação aberta. 
     204                                 */ 
     205                                if (!clicked) { 
     206                                    window.setTimeout(function () { 
     207                                        zebraDiscardTaskDialog = false; 
     208                                    }, 200); 
     209                                } 
     210                            } 
     211                        }); 
     212 
     213                    }, 300); 
     214 
     215                } 
     216                //DataLayer.rollback(); 
     217                return canDiscardTaskDialog; 
     218            }, 
     219            dragStart: function (task, ui) { 
     220                if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     221            } 
     222        }); 
     223 
     224    } else { 
     225        UI.dialogs.addTask.html(html); 
     226    } 
     227 
     228    var tabs = UI.dialogs.addTask.children('.content').tabs({ 
     229        select: function (task, ui) { 
     230            if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     231        } 
     232    }); 
     233    var group = DataLayer.get('calendar', objTask.group); 
     234 
     235    if (group.timezone != objTask.timezone) { 
     236        UI.dialogs.addTask.find('.calendar-addtask-details-txt-timezone').find('option[value="' + objTask.timezone + '"]').attr('selected', 'selected').trigger('change'); 
     237        UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').addClass('hidden'); 
     238        $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 
     239 
     240    } 
     241 
     242    UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').click(function (e) { 
     243        $(this).addClass('hidden'); 
     244        $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 
     245        e.prtaskDefault(); 
     246    }); 
     247 
     248    UI.dialogs.addTask.find('.button.remove').button({ 
     249    text:false,  
     250    icons:{ 
     251        primary:'ui-icon-close' 
     252    } 
     253    }).click(function(el){ 
     254        var id; 
     255        if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 
     256        DataLayer.remove('alarm', id); 
     257        $(this).parent().remove().find('li').is(':empty'); 
     258    }); 
     259 
     260    /*Seleciona a agenda padrão para visualização edição de um task*/ 
     261    if (objTask.id) UI.dialogs.addTask.find('option[value="' + objTask.group + '"]').attr('selected', 'selected').trigger('change'); 
     262 
     263    /* Checkbox allday */ 
     264    UI.dialogs.addTask.find('input[name="allDay"]').click(function () { 
     265        $(this).attr("checked") ? UI.dialogs.addTask.find('.start-time, .end-time').addClass('hidden') : UI.dialogs.addTask.find('.start-time, .end-time').removeClass('hidden'); 
     266        updateMap(true); 
     267    }); 
     268 
     269    UI.dialogs.addTask.find('.button').button(); 
     270    UI.dialogs.addTask.find('.button.add').button({ 
     271        icons: { 
     272            secondary: "ui-icon-plus" 
     273        } 
     274    }); 
     275 
     276    // ==== validation tasks ==== 
     277    UI.dialogs.addTask.find(".input-group .h1").Watermark("Tarefa sem título"); 
     278    if (User.preferences.hourFormat.length == 5) { 
     279        UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99", { 
     280            completed: function () { 
     281                updateMap(); 
     282            } 
     283        }); 
     284    } else { 
     285        $.mask.definitions['{'] = '[ap]'; 
     286        $.mask.definitions['}'] = '[m]'; 
     287        UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99 {}", { 
     288            completed: function () { 
     289                $(this).val(date.Calendar.defaultToAmPm($(this).val())); 
     290                $(this).timepicker("refresh"); 
     291                $(this).val($(this).val().replace(/[\.]/gi, "")); 
     292                updateMap(); 
     293            } 
     294        }); 
     295    } 
     296    UI.dialogs.addTask.find(".number").numeric(); 
     297    User.preferences.dateFormat.indexOf('-') > 0 ? UI.dialogs.addTask.find(".date").mask("99-99-9999", { 
     298        completed: function () { 
     299            updateMap(); 
     300        } 
     301    }) : UI.dialogs.addTask.find(".date").mask("99/99/9999", { 
     302        completed: function () { 
     303            updateMap(); 
     304        } 
     305    }); 
     306 
     307    UI.dialogs.addTask.find(".menu-addtask").children(".delete").click(function () { 
     308        $.Zebra_Dialog('Tem certeza que deseja excluir esta tarefa?', { 
     309            'type': 'question', 
     310            'overlay_opacity': '0.5', 
     311            'buttons': ['Sim', 'Não'], 
     312            'onClose': function (clicked) { 
     313                if (clicked == 'Sim') { 
     314                    canDiscardTaskDialog = true; /* Remove por filtro */ 
     315                    DataLayer.removeFilter('schedulable', { 
     316                        filter: ['AND', ['=', 'id', objTask.id], 
     317                            ['=', 'calendar', objTask.group], 
     318                            ['=', 'user', (objTask.me.user ? objTask.me.user.id : objTask.me.id)] 
     319                        ] 
     320                    }); 
     321                    Calendar.rerenderView(true); /********************/ 
     322                    UI.dialogs.addTask.dialog("close"); 
     323                } 
     324            } 
     325        }); 
     326    }).end() 
     327 
     328    .children(".cancel").click(function () { 
     329        UI.dialogs.addTask.dialog("close"); 
     330    }).end() 
     331 
     332    .children(".save").click(function () { /* Validação */ 
     333        /*if (msg = validDateTask()) { 
     334            $(".new-task-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg); 
     335            return false; 
     336        }*/ 
     337 
     338        UI.dialogs.addTask.children().find('form.form-addtask').submit(); 
     339        UI.dialogs.addTask.dialog("close"); 
     340 
     341    }).end() 
     342 
     343    .children(".export").click(function () { 
     344        UI.dialogs.addTask.children().find(".form-export").submit(); 
     345    }); 
     346 
     347    var attendeeHtml = DataLayer.render(path + 'templates/attendees_task.ejs', { 
     348        task: objTask 
     349    }); 
     350 
     351    // load template of attendees 
     352    var blkAddAtendee = UI.dialogs.addTask.find('#calendar_addtask_details6').append(attendeeHtml); 
     353 
     354    if(objTask.attendee.length) 
     355        callbackAttendee(); 
     356 
     357    /* 
     358     *   Opções de delegação do participante/organizer 
     359     */       
     360    blkAddAtendee.find(".button.participant-delegate").button({ 
     361        icons: { 
     362        primary: "ui-icon-transferthick-e-w" 
     363        }, 
     364        text: false 
     365    }).click(function () { 
     366        if($(this).hasClass('attendee-permissions-change-button')){ 
     367        if(!$(this).hasClass('disable')){ 
     368            $(this).removeClass('attendee-permissions-change-button')    
     369            .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end();                
     370            blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 
     371            blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 
     372        } 
     373        }else{                                   
     374        $(this).addClass('attendee-permissions-change-button')    
     375        .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end();                
     376        blkAddAtendee.find('.block-add-attendee.search dt').html('Delegar participação para'); 
     377        blkAddAtendee.find('.block-add-attendee.search').removeClass('hidden'); 
     378        blkAddAtendee.find('.block-add-attendee.search input.search').focus(); 
     379        } 
     380    }) 
     381    .addClass('tiny'); 
     382 
     383    var dates = UI.dialogs.addTask.find('input.date').datepicker({ 
     384        dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 
     385        onSelect: function (selectedDate) { 
     386            updateMap(); 
     387        } 
     388    }); 
     389 
     390    UI.dialogs.addTask.find('input.time').timepicker({ 
     391        closeText: 'Ok', 
     392        hourGrid: 4, 
     393        minuteGrid: 10, 
     394        ampm: ((User.preferences.hourFormat.length > 5) ? true : false), 
     395        timeFormat: "hh:mm tt", 
     396        onSelect: function (selectedDateTime) { 
     397            if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
     398            updateMap(); 
     399        }, 
     400        onClose: function (selectedDateTime) { 
     401            if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
     402        } 
     403    }); 
     404 
     405    blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function (task) { 
     406        blkAddAtendee.find('.add-attendee-search input').keydown(); 
     407    }); 
     408 
     409    blkAddAtendee.find('.add-attendee-search input').keydown(function (task) { 
     410 
     411        if (task.keyCode == '13' || typeof (task.keyCode) == 'undefined') { 
     412            var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 
     413 
     414            /** 
     415             * TODO: trocar por template 
     416             */ 
     417            blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); 
     418            if (!result) { 
     419                blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 
     420            } 
     421 
     422            for (i = 0; i < result.length; i++) 
     423            result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' + result[i].mail + '"]').length) ? false : true; 
     424 
     425            blkAddAtendee.find('ul.search-result-list').append(DataLayer.render(path + 'templates/participants_search_itemlist.ejs', result)); 
     426 
     427            blkAddAtendee.find('ul.search-result-list li').click(function (task, ui) { 
     428                if ($(task.target).is('input')) { 
     429                    old_item = $(task.target).parents('li'); 
     430                    newAttendeeId = DataLayer.put('participant', { 
     431                        user: old_item.find('.id').html(), 
     432                        isExternal: old_item.find('.isExternal').html() 
     433                    }); 
     434 
     435                    attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 
     436 
     437                    blkAddAtendee.find('dd.attendee-list ul.attendee-list').append(DataLayer.render(path + 'templates/participants_add_itemlist.ejs', [{ 
     438                        id: newAttendeeId, 
     439                        name: old_item.find('.name').html(), 
     440                        mail: old_item.find('.mail').html(), 
     441                        isExternal: old_item.find('.isExternal').html(), 
     442                        notEvent: true, 
     443                        isDirty: !! !objTask.id 
     444                    }])).scrollTo('max'); 
     445                    /** 
     446                     * Delegação de participação de um participante com permissão apenas de leitura 
     447                     * 
     448                     */ 
     449                    if (objTask.me.id != objTask.organizer.id) { 
     450 
     451                        blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 
     452                        blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 
     453 
     454                        blkAddAtendee.find('.status option').toggleClass('hidden'); 
     455                        blkAddAtendee.find('option[value=5]').attr('selected', 'selected').trigger('change'); 
     456                        blkAddAtendee.find('.request-update').removeClass('hidden'); 
     457 
     458                        blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
     459 
     460                        blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled'); 
     461                        blkAddAtendee.find(".button.close").button({ 
     462                            icons: { 
     463                                primary: "ui-icon-close" 
     464                            }, 
     465                            text: false 
     466                        }).click(function () { 
     467 
     468                            $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 
     469                            blkAddAtendee.find('.request-update').addClass('hidden'); 
     470                            blkAddAtendee.find('.status option').toggleClass('hidden'); 
     471                            blkAddAtendee.find('option[value=1]').attr('selected', 'selected').trigger('change'); 
     472                            blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button').find('.ui-icon-person').removeClass('attendee-permissions-change').end(); 
     473 
     474                            DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
     475                            $(this).parents('li').remove(); 
     476                        }).addClass('tiny'); 
     477                    } else { 
     478                        callbackAttendee(); 
     479                        old_item.remove(); 
     480                    } 
     481                } 
     482            }); 
     483 
     484            event.preventDefault(); 
     485        } 
     486    }); 
     487 
     488    UI.dialogs.addTask.find('.row.fileupload-buttonbar-task .button').filter('.delete').button({ 
     489        icons: { 
     490            primary: "ui-icon-close" 
     491        }, 
     492        text: 'Excluir' 
     493    }).click(function () { 
     494        $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', { 
     495            'type': 'question', 
     496            'overlay_opacity': '0.5', 
     497            'buttons': ['Sim', 'Não'], 
     498            'onClose': function (clicked) { 
     499                if (clicked == 'Sim') { 
     500 
     501                    var ids = []; 
     502                    $.each($('.attachment-list input'), function (i, input) { 
     503                        DataLayer.remove('schedulableToAttachment', { 
     504                            filter: ['=', 'id', '' + input.value] 
     505                        }); 
     506                    }); 
     507                    $('.attachment-list input').remove(); 
     508                    $('.row.fileupload-buttonbar .attachments-list p').remove(); 
     509                } 
     510            } 
     511        }); 
     512    }).end().filter('.close').button({ 
     513        icons: { 
     514            primary: "ui-icon-close" 
     515        }, 
     516        text: false 
     517    }).click(function () { 
     518        DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 
     519        $(this).parents('p').remove(); 
     520    }).end().filter('.downlaod-archive').button({ 
     521        icons: { 
     522            primary: "ui-icon-arrowthickstop-1-s" 
     523        }, 
     524        text: false 
     525    }); 
     526    var maxSizeFile = 2000000; 
     527    $('#fileupload').fileupload({ 
     528        sequentialUploads: true, 
     529        add: function (e, data) { 
     530            if (data.files[0].size < maxSizeFile) data.submit(); 
     531        }, 
     532        change: function (e, data) { 
     533            $.each(data.files, function (index, file) { 
     534                var attach = {}; 
     535                attach.fileName = file.name; 
     536                var ext = file.name.split('.'); 
     537                if (file.name.length > 10) attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length - 1]; 
     538                attach.fileSize = formatBytes(file.size); 
     539                if (file.size > maxSizeFile) attach.error = 'Tamanho de arquivo nao permitido!!' 
     540 
     541                $('.attachments-list').append(DataLayer.render(path + 'templates/attachment_add_itemlist.ejs', { 
     542                    file: attach 
     543                })); 
     544 
     545                if (file.size < maxSizeFile) { 
     546                    $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 
     547                    $('.attachments-list').find('[type=file]').addClass('hidden'); 
     548 
     549                } else $('.fileinput-button.new').removeClass('new'); 
     550 
     551 
     552                $('.attachments-list').find('.button.close').button({ 
     553                    icons: { 
     554                        primary: "ui-icon-close" 
     555                    }, 
     556                    text: false 
     557                }).click(function () { 
     558                    var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 
     559                    $('.attachment-list').find('input[value="' + idAttach + '"]') 
     560                    $(this).parent().remove(); 
     561                }); 
     562 
     563            }) 
     564        }, 
     565        done: function (e, data) { 
     566            var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 
     567 
     568            if ( !! data.result && data.result != "[]") { 
     569                var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 
     570                $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="' + newAttach['attachment'][0][0].id + '"/>'); 
     571                currentUpload.removeClass('on-complete').parents('p').append('<input type="hidden" name="fileId[]" value="' + newAttach['attachment'][0][0].id + '"/>').find('.status-upload').addClass('ui-icon ui-icon-check'); 
     572            } else currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 
     573        } 
     574    }); 
     575    $('.attachments-list .button').button(); 
     576 
     577    if ( !! window.FormData) $('#fileupload').bind('fileuploadstart', function () { 
     578        var widget = $(this), 
     579            progressElement = $('#fileupload-progress').fadeIn(), 
     580            interval = 500, 
     581            total = 0, 
     582            loaded = 0, 
     583            loadedBefore = 0, 
     584            progressTimer, progressHandler = function (e, data) { 
     585                loaded = data.loaded; 
     586                total = data.total; 
     587            }, 
     588            stopHandler = function () { 
     589                widget.unbind('fileuploadprogressall', progressHandler).unbind('fileuploadstop', stopHandler); 
     590                window.clearInterval(progressTimer); 
     591                progressElement.fadeOut(function () { 
     592                    progressElement.html(''); 
     593                }); 
     594            }, 
     595            formatTime = function (seconds) { 
     596                var date = new Date(seconds * 1000); 
     597                return ('0' + date.getUTCHours()).slice(-2) + ':' + ('0' + date.getUTCMinutes()).slice(-2) + ':' + ('0' + date.getUTCSeconds()).slice(-2); 
     598            }, 
     599 
     600            formatPercentage = function (floatValue) { 
     601                return (floatValue * 100).toFixed(2) + ' %'; 
     602            }, 
     603            updateProgressElement = function (loaded, total, bps) { 
     604                progressElement.html( 
     605                formatBytes(bps) + 'ps | ' + formatTime((total - loaded) / bps) + ' | ' + formatPercentage(loaded / total) + ' | ' + formatBytes(loaded) + ' / ' + formatBytes(total)); 
     606            }, 
     607            intervalHandler = function () { 
     608                var diff = loaded - loadedBefore; 
     609                if (!diff) { 
     610                    return; 
     611                } 
     612                loadedBefore = loaded; 
     613                updateProgressElement( 
     614                loaded, total, diff * (1000 / interval)); 
     615            }; 
     616        widget.bind('fileuploadprogressall', progressHandler).bind('fileuploadstop', stopHandler); 
     617        progressTimer = window.setInterval(intervalHandler, interval); 
     618    }); 
     619 
     620    disponibily(objTask, path, attendees, 'task'); 
     621 
     622    UI.dialogs.addTask.find('.button-add-alarms').click(function () { 
     623        var li_attach = DataLayer.render(path + 'templates/alarms_add_itemlist.ejs', { 
     624            type: 1 
     625        }); 
     626 
     627        jQuery('.task-alarms-list').append(li_attach).find('.button.remove').button({ 
     628            text: false, 
     629            icons: { 
     630                primary: 'ui-icon-close' 
     631            } 
     632        }).click(function (el) { 
     633            $(this).parent().remove().find('li').is(':empty') 
     634        }); 
     635        // valicacao de campos numericos 
     636        $('.number').numeric(); 
     637    }); 
     638 
     639 
     640    UI.dialogs.addTask.dialog('open'); 
    155641} 
    156  
    157 UI.dialogs.addTask.find('.calendar_addevent_details_lnk_timezone').click(function(e){ 
    158     $(this).addClass('hidden'); 
    159     $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 
    160     e.preventDefault(); 
    161 }); 
    162  
    163 /*Seleciona a agenda padrão para visualização/edição de um evento*/ 
    164 if(objEvent.id) 
    165     UI.dialogs.addTask.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change'); 
    166  
    167 /* Checkbox allday */ 
    168  
    169 UI.dialogs.addTask.find('input[name="allDay"]').click(function(){ 
    170     $(this).attr("checked") ?  
    171     UI.dialogs.addTask.find('.start-time, .end-time').addClass('hidden') : 
    172     UI.dialogs.addTask.find('.start-time, .end-time').removeClass('hidden');  
    173     updateMap(true); 
    174 }); 
    175  
    176 UI.dialogs.addTask.find('.button').button(); 
    177 UI.dialogs.addTask.find('.button.add').button({ 
    178     icons: { 
    179         secondary: "ui-icon-plus" 
    180     } 
    181 }); 
    182  
    183 // ==== validation events ==== 
    184 UI.dialogs.addTask.find(".input-group .h1").Watermark("Tarefa sem título"); 
    185 if(User.preferences.hourFormat.length == 5) { 
    186     UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99", { 
    187         completed: function(){ 
    188             updateMap(); 
    189         } 
    190     }); 
    191 } else { 
    192     $.mask.definitions['{']='[ap]'; 
    193     $.mask.definitions['}']='[m]'; 
    194     UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99 {}", { 
    195         completed:function(){ 
    196             $(this).val(date.Calendar.defaultToAmPm($(this).val())); 
    197             $(this).timepicker("refresh"); 
    198             $(this).val($(this).val().replace(/[\.]/gi, "")); 
    199             updateMap(); 
    200         } 
    201     }); 
    202 } 
    203 UI.dialogs.addTask.find(".number").numeric(); 
    204 User.preferences.dateFormat.indexOf('-') > 0 ?  
    205 UI.dialogs.addTask.find(".date").mask("99-99-9999", { 
    206     completed:function(){ 
    207         updateMap(); 
    208     } 
    209 }) :  
    210 UI.dialogs.addTask.find(".date").mask("99/99/9999", { 
    211     completed:function(){ 
    212         updateMap(); 
    213     } 
    214 }); 
    215  
    216 UI.dialogs.addTask.find(".menu-addtask") 
    217 .children(".delete").click(function(){ 
    218     $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 
    219         'type':     'question', 
    220         'overlay_opacity': '0.5', 
    221         'buttons':  ['Sim', 'Não'], 
    222         'onClose':  function(clicked) { 
    223             if(clicked == 'Sim'){ 
    224                 canDiscardEventDialog = true; 
    225                 /* Remove por filtro */ 
    226                 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objEvent.id], ['=', 'calendar', objEvent.calendar], ['=','user',(objEvent.me.user ? objEvent.me.user.id : objEvent.me.id)]]}); 
    227                 Calendar.rerenderView(true); 
    228                 /********************/ 
    229                 UI.dialogs.addTask.dialog("close"); 
    230             } 
    231         } 
    232     }); 
    233 }).end() 
    234              
    235 .children(".cancel").click(function(){ 
    236     UI.dialogs.addTask.dialog("close"); 
    237 }).end() 
    238              
    239 .children(".save").click(function(){ 
    240     /* Validação */ 
    241     var msg = false;                     
    242     if(msg = validDateEvent()){ 
    243         $(".new-event-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);  
    244         return false; 
    245     } 
    246                          
    247     canDiscardEventDialog = true; 
    248                          
    249     var exit = function(event){ 
    250         if(event) 
    251             DataLayer.remove('schedulable', event, false);  
    252  
    253         UI.dialogs.addTask.children().find('form.form-addevent').submit(); 
    254         UI.dialogs.addTask.dialog("close");    } 
    255                          
    256     if(repeat){ 
    257         DataLayer.remove('repeat', false); 
    258         DataLayer.put('repeat', repeat); 
    259         DataLayer.commit('repeat', false, exit(repeat.schedulable)); 
    260     }else 
    261         exit(); 
    262 }).end() 
    263                  
    264 .children(".export").click(function(){ 
    265     UI.dialogs.addTask.children().find(".form-export").submit(); 
    266 }); 
    267  
    268 var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', { 
    269     event:objEvent 
    270 });              
    271          
    272 // load template of attendees 
    273 var blkAddAtendee = UI.dialogs.addTask.find('#calendar_addtask_details6').append(attendeeHtml); 
    274  
    275 var dates = UI.dialogs.addTask.find('input.date').datepicker({ 
    276     dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 
    277     onSelect : function( selectedDate ){ 
    278         updateMap(); 
    279     } 
    280 }); 
    281  
    282 UI.dialogs.addTask.find('input.time').timepicker({  
    283     closeText: 'Ok', 
    284     hourGrid: 4, 
    285     minuteGrid: 10, 
    286     ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 
    287     timeFormat: "hh:mm tt", 
    288     onSelect: function (selectedDateTime){ 
    289         if(!(User.preferences.hourFormat.length == 5)) 
    290             $(this).val(selectedDateTime.replace(/[\.]/gi, ""));                                                                 
    291         updateMap(); 
    292     }, 
    293     onClose : function (selectedDateTime){ 
    294         if(!(User.preferences.hourFormat.length == 5)) 
    295             $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
    296     } 
    297          
    298  
    299 }); 
    300  
    301 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) { 
    302     blkAddAtendee.find('.add-attendee-search input').keydown(); 
    303 }); 
    304                          
    305                          
    306 blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { 
    307  
    308     if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {                  
    309         var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 
    310  
    311         /** 
    312         * TODO: trocar por template 
    313         */ 
    314         blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); 
    315         if (!result) { 
    316             blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 
    317         } 
    318  
    319         for(i=0; i<result.length; i++) 
    320             result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' +  result[i].mail + '"]').length) ? false : true; 
    321                                                                                          
    322         blkAddAtendee.find('ul.search-result-list').append(DataLayer.render( path+'templates/participants_search_itemlist.ejs', result)); 
    323  
    324         blkAddAtendee.find('ul.search-result-list li').click(function(event, ui){ 
    325             if ($(event.target).is('input')) { 
    326                 old_item = $(event.target).parents('li'); 
    327                 newAttendeeId = DataLayer.put('participant', { 
    328                     user: old_item.find('.id').html(),  
    329                     isExternal: old_item.find('.isExternal').html() 
    330                 }); 
    331                                                          
    332                 attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 
    333                                                          
    334                 blkAddAtendee.find('dd.attendee-list ul.attendee-list') 
    335                 .append(DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{ 
    336                     id: newAttendeeId,  
    337                     name: old_item.find('.name').html(),  
    338                     mail: old_item.find('.mail').html(),  
    339                     isExternal: old_item.find('.isExternal').html(),  
    340                     acl: objEvent.acl, 
    341                     isDirty: !!!objEvent.id 
    342                     }])) 
    343                 .scrollTo('max'); 
    344                 /** 
    345                                                         * Delegação de participação de um participante com permissão apenas de leitura 
    346                                                         * 
    347                                                         */ 
    348                 if(!objEvent.acl.organization && !objEvent.acl.write && !objEvent.acl.inviteGuests && objEvent.acl.read ){ 
    349                                                                  
    350                     blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 
    351                     blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 
    352                                                                  
    353                     blkAddAtendee.find('.status option').toggleClass('hidden'); 
    354                     blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 
    355                     blkAddAtendee.find('.request-update').removeClass('hidden'); 
    356  
    357                     blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
    358                                                                  
    359                     blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled'); 
    360                     blkAddAtendee.find(".button.close").button({ 
    361                         icons: { 
    362                             primary: "ui-icon-close" 
    363                         }, 
    364                         text: false 
    365                     }).click(function () { 
    366                                                                          
    367                         $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 
    368                         blkAddAtendee.find('.request-update').addClass('hidden'); 
    369                         blkAddAtendee.find('.status option').toggleClass('hidden'); 
    370                         blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change');                     
    371                         blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button') 
    372                         .find('.ui-icon-person').removeClass('attendee-permissions-change').end();                       
    373                                                                          
    374                         DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
    375                         $(this).parents('li').remove(); 
    376                     }) 
    377                     .addClass('tiny'); 
    378                 }else{ 
    379                     callbackAttendee(); 
    380                     old_item.remove(); 
    381                 } 
    382             } 
    383         }); 
    384  
    385         event.preventDefault(); 
    386     } 
    387 }); 
    388  
    389 UI.dialogs.addTask.find('.row.fileupload-buttonbar .button').filter('.delete').button({ 
    390     icons: { 
    391         primary: "ui-icon-close" 
    392     }, 
    393     text: 'Excluir' 
    394 }).click(function () { 
    395     $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', { 
    396         'type':     'question', 
    397         'overlay_opacity': '0.5', 
    398         'buttons':  ['Sim', 'Não'], 
    399         'onClose':  function(clicked) { 
    400             if(clicked == 'Sim'){ 
    401                  
    402                 var ids = []; 
    403                 $.each($('.attachment-list input'), function (i, input) { 
    404                      DataLayer.remove('schedulableToAttachment', { 
    405                         filter: ['=', 'id', ''+input.value] 
    406                         }); 
    407                 }); 
    408                 $('.attachment-list input').remove(); 
    409                 $('.row.fileupload-buttonbar .attachments-list p').remove(); 
    410             } 
    411         }}); 
    412 }).end() 
    413 .filter('.close').button({ 
    414     icons: { 
    415         primary: "ui-icon-close" 
    416     }, 
    417     text: false 
    418 }).click(function () { 
    419     DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 
    420     $(this).parents('p').remove(); 
    421 }).end() 
    422 .filter('.downlaod-archive').button({ 
    423     icons: { 
    424         primary: "ui-icon-arrowthickstop-1-s" 
    425     }, 
    426     text: false 
    427 }); 
    428 var maxSizeFile = 2000000; 
    429 $('#fileupload').fileupload({ 
    430     sequentialUploads: true, 
    431     add: function (e, data) { 
    432         if(data.files[0].size < maxSizeFile) 
    433             data.submit(); 
    434     }, 
    435     change: function (e, data) { 
    436         $.each(data.files, function (index, file) { 
    437             var attach = {}; 
    438             attach.fileName = file.name; 
    439             var ext = file.name.split('.'); 
    440             if(file.name.length > 10) 
    441                 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) :  file.name.substr(0, 6) + '.' + ext[ext.length -1]; 
    442             attach.fileSize = formatBytes(file.size); 
    443             if(file.size > maxSizeFile) 
    444                 attach.error = 'Tamanho de arquivo nao permitido!!' 
    445                                  
    446             $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', { 
    447                 file : attach 
    448             })); 
    449                                  
    450             if(file.size < maxSizeFile){ 
    451                 $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 
    452                 $('.attachments-list').find('[type=file]').addClass('hidden'); 
    453                                          
    454             }else 
    455                 $('.fileinput-button.new').removeClass('new'); 
    456                                  
    457                                  
    458             $('.attachments-list').find('.button.close').button({ 
    459                 icons: { 
    460                     primary: "ui-icon-close" 
    461                 }, 
    462                 text: false 
    463             }).click(function(){ 
    464                 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 
    465                 $('.attachment-list').find('input[value="'+idAttach+'"]') 
    466                 $(this).parent().remove(); 
    467             });  
    468                                  
    469         }) 
    470         }, 
    471     done: function(e, data){ 
    472         var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 
    473  
    474         if(!!data.result && data.result != "[]"){ 
    475             var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 
    476             $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 
    477             currentUpload.removeClass('on-complete').parents('p') 
    478             .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 
    479             .find('.status-upload').addClass('ui-icon ui-icon-check'); 
    480         }else 
    481             currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 
    482     } 
    483 }); 
    484 $('.attachments-list .button').button(); 
    485  
    486 if(!!window.FormData)                    
    487 $('#fileupload').bind('fileuploadstart', function () { 
    488     var widget = $(this), 
    489     progressElement = $('#fileupload-progress').fadeIn(), 
    490     interval = 500, 
    491     total = 0, 
    492     loaded = 0, 
    493     loadedBefore = 0, 
    494     progressTimer, 
    495     progressHandler = function (e, data) { 
    496         loaded = data.loaded; 
    497         total = data.total; 
    498     }, 
    499     stopHandler = function () { 
    500         widget 
    501         .unbind('fileuploadprogressall', progressHandler) 
    502         .unbind('fileuploadstop', stopHandler); 
    503         window.clearInterval(progressTimer); 
    504         progressElement.fadeOut(function () { 
    505             progressElement.html(''); 
    506         }); 
    507     }, 
    508     formatTime = function (seconds) { 
    509         var date = new Date(seconds * 1000); 
    510         return ('0' + date.getUTCHours()).slice(-2) + ':' + 
    511         ('0' + date.getUTCMinutes()).slice(-2) + ':' + 
    512         ('0' + date.getUTCSeconds()).slice(-2); 
    513     }, 
    514     /* formatBytes = function (bytes) { 
    515             if (bytes >= 1000000000) { 
    516                 return (bytes / 1000000000).toFixed(2) + ' GB'; 
    517             } 
    518             if (bytes >= 1000000) { 
    519                 return (bytes / 1000000).toFixed(2) + ' MB'; 
    520             } 
    521             if (bytes >= 1000) { 
    522                 return (bytes / 1000).toFixed(2) + ' KB'; 
    523             } 
    524             return bytes + ' B'; 
    525         },*/ 
    526     formatPercentage = function (floatValue) { 
    527         return (floatValue * 100).toFixed(2) + ' %'; 
    528     }, 
    529     updateProgressElement = function (loaded, total, bps) { 
    530         progressElement.html( 
    531             formatBytes(bps) + 'ps | ' + 
    532             formatTime((total - loaded) / bps) + ' | ' + 
    533             formatPercentage(loaded / total) + ' | ' + 
    534             formatBytes(loaded) + ' / ' + formatBytes(total) 
    535             ); 
    536     }, 
    537     intervalHandler = function () { 
    538         var diff = loaded - loadedBefore; 
    539         if (!diff) { 
    540             return; 
    541         } 
    542         loadedBefore = loaded; 
    543         updateProgressElement( 
    544             loaded, 
    545             total, 
    546             diff * (1000 / interval) 
    547             ); 
    548     }; 
    549     widget 
    550     .bind('fileuploadprogressall', progressHandler) 
    551     .bind('fileuploadstop', stopHandler); 
    552     progressTimer = window.setInterval(intervalHandler, interval); 
    553 }); 
    554          
    555 if(objEvent.isShared){ 
    556                  
    557     var acls = Calendar.signatureOf[objEvent.calendar].permission.acl; 
    558                  
    559     if(!acls.write){ 
    560         UI.dialogs.addTask.find(':input').attr('disabled', 'disabled'); 
    561         UI.dialogs.addTask.find('.button').hide(); 
    562     } 
    563                  
    564     if(acls.remove) 
    565         UI.dialogs.addTask.find('.button.remove').show(); 
    566      
    567     UI.dialogs.addTask.find('.button.cancel').show();    
    568 } 
    569  
    570 disponibily(objEvent, path, attendees); 
    571  
    572 UI.dialogs.addTask.find('.button-add-alarms').click(function(){ 
    573     var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {type: 1}); 
    574  
    575     jQuery('.task-alarms-list').append(li_attach).find('.button.remove').button({ 
    576         text:false,  
    577         icons:{ 
    578             primary:'ui-icon-close' 
    579         } 
    580     }).click(function(el) { 
    581                 $(this).parent().remove().find('li').is(':empty') 
    582         }); 
    583 // valicacao de campos numericos 
    584 $('.number').numeric(); 
    585 }); 
    586  
    587  
    588 UI.dialogs.addTask.dialog('open'); 
    589 } 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/availability_map.ejs

    r5636 r6876  
    1 <fieldset id="availability_map" class="tab-level2"> 
    2         <div id="new_event_map" class="map" style="width : 100%;"> 
     1<fieldset class="tab-level2"> 
     2        <div class="map_disponibility" style="width : 100%;"> 
    33        </div> 
    44</fieldset> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/participants_add_itemlist.ejs

    r6203 r6876  
    22        <div style="overflow:hidden; width:100%; display:table;"> 
    33                <div class="attendee-options"> 
    4                         <%if( !data[0].isDirty && (data[0].acl.organization || data[0].acl.write || data[0].acl.inviteGuests) ){%> 
     4                        <%if( (!data[0].isDirty && data[0].notEvent) || (!data[0].isDirty && data[0].acl && (data[0].acl.organization || data[0].acl.write || data[0].acl.inviteGuests))){%> 
    55                                <a href="#" class="button delegate attendee-options-button-delegate new">Delegar participação a este participante</a> 
    66                        <%}%> 
    7                         <%if(data[0].acl.organization || data[0].acl.write){%> 
     7                        <%if(!data[0].noEvent && data[0].acl && (data[0].acl.organization || data[0].acl.write)){%> 
    88                                <a class="button edit attendee-options-button-edit new">Editar permissões</a> 
    99                        <%}%> 
     
    1414                <input type="hidden" name="attendee[]" value="<%= data[0].id %>"> 
    1515                <input type="hidden" name="attendeeType[]" value="<%=data[0].isExternal%>"> 
    16                 <input type="hidden" name="attendeeAcl[]" value="r"> 
     16                <%if(!data[0].noEvent){%> 
     17            <input type="hidden" name="attendeeAcl[]" value="r"> 
     18        <%}%> 
    1719                <input type="hidden" name="delegatedFrom[]" value="0"> 
    1820                <label title="<%= data[0].name ? data[0].name : '' %>" class="name"><%= data[0].name ? data[0].name : '' %></label> 
     
    2022 
    2123        </div> 
    22          
    2324</li> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add.ejs

    r6811 r6876  
    11<div title="Criar Tarefa" class="div-addtask content"> 
    2     <form method="POST" action="<%=(data.event.acl.organization || data.event.acl.write) ?  "schedulable:detail" : "schedulable:preview"%>" class="form-addevent content"> 
     2    <form method="POST" action="schedulable:task" class="form-addtask content"> 
    33 
    44        <fieldset id="calendar_addtask_details1"> 
    55                <legend class="hidden">Detalhes da tarefa</legend> 
    66                <p class="input-group"> 
    7                         <input type="text" class="h1" name="summary" <%=(data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> value="<%= (data.event.summary) ? data.event.summary : '' %>"/> 
    8                         <% if( data.event.id ){ %> 
    9                                 <input type="hidden" class="id-event" name="idEvent" value="<%= data.event.id %>"/> 
    10                         <% } %> 
    11                         <% if( data.event.id && data.event.calendar ){ %> 
    12                                 <input type="hidden" class="last-calendar" name="lastCalendar" value="<%= data.event.calendar %>"/> 
    13                         <% } %> 
     7                    <input type="text" class="h1" name="summary" value="<%= (data.task.summary) ? data.task.summary : '' %>"/> 
     8                    <% if( data.task.id ){ %> 
     9                            <input type="hidden" class="id-task" name="idTask" value="<%= data.task.id %>"/> 
     10                    <% } %> 
     11                    <% if( data.task.id && data.task.group ){ %> 
     12                        <input type="hidden" class="last-group" name="lastGroup" value="<%= data.task.group %>"/> 
     13                    <% } %> 
    1414                </p> 
    1515                <p class="input-group date-info"> 
    16                         <input type="text" class="date start-date" value="<%= (data.event.startDate) ? data.event.startDate : '' %>" <%=(data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="startDate" /> 
    17                         <input type="text" class="time start-time<%= (data.event.allDay) ? ' hidden' : '' %>" value="<%= (data.event.startHour) ? data.event.startHour : '' %>" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="startHour" />  
     16                        <input type="text" class="date start-date" value="<%= (data.task.startDate) ? data.task.startDate : '' %>" name="startDate" /> 
     17                        <input type="text" class="time start-time<%= (data.task.allDay) ? ' hidden' : '' %>" value="<%= (data.task.startHour) ? data.task.startHour : '' %>" name="startHour" />  
    1818                        <span>até</span> 
    19                         <input type="text" class="date end-date" value="<%= (data.event.endDate) ? data.event.endDate : '' %>" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="endDate" /> 
    20                         <input type="text" class="time end-time<%= (data.event.allDay) ? ' hidden' : '' %>" value="<%= (data.event.endHour) ? data.event.endHour : '' %>" <%=(data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="endHour" /> 
     19                        <input type="text" class="date end-date" value="<%= (data.task.endDate) ? data.task.endDate : '' %>" name="endDate" /> 
     20                        <input type="text" class="time end-time<%= (data.task.allDay) ? ' hidden' : '' %>" value="<%= (data.task.endHour) ? data.task.endHour : '' %>" name="endHour" /> 
    2121 
    2222                                <span class="previsao-termino">Previsão término:</span> 
    23                                 <input type="text" class="date date-previsao"> 
    24                                 <input type="text" class="time time-previsao"> 
    25  
    26                                 <a href="#" class="calendar_addevent_details_lnk_timezone <%=((!data.event.acl.organization || !data.event.acl.write) && (data.event.id)) ? "hidden" : '' %>">Fuso horário</a> 
     23                                <input type="text" name="dueDate" class="date date-previsao" value="<%= data.task.dueDate %>"> 
     24                                <input type="text" name="dueTime" class="time time-previsao" value="<%= data.task.dueTime %>"> 
     25 
     26                                <a href="#" class="calendar_addtask_details_lnk_timezone">Fuso horário</a> 
    2727                         
    2828                         
     
    3030                        <select name="timezone" class="hidden calendar-addtask-details-txt-timezone"> 
    3131                                <option value="">- None selected -</option> 
    32                                 <% for( var tzId in data.event.timezones ){ %> 
    33                                   <option value="<%= tzId %>" <%= data.timezone === tzId ? 'selected="selected"' : '' %>><%= tzId + ' (' + data.event.timezones[ tzId ] + ')' %></option> 
     32                                <% for( var tzId in data.task.timezones ){ %> 
     33                                  <option value="<%= tzId %>" <%= data.timezone === tzId ? 'selected="selected"' : '' %>><%= tzId + ' (' + data.task.timezones[ tzId ] + ')' %></option> 
    3434                                <% } %> 
    3535                        </select> 
    36                          
    37                         <a class="button suggestion-hours small <%=(data.event.acl.organization || data.event.acl.write || !data.event.isAttendee) ? "hidden" : '' %>" href="#">Sugerir horário</a> 
    38                          
     36 
    3937                </p> 
    4038                                 
     
    4947                 
    5048                <p class="input-group task-type"> 
    51                         <input type="checkbox" name="allDay" value="true" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> <%= (data.event.allDay) ? 'checked="checked"' : '' %>/> 
     49                        <input type="checkbox" name="allDay" value="true" <%= (data.task.allDay) ? 'checked="checked"' : '' %>/> 
    5250                        <label for="allDay">Dia inteiro</label> 
    5351<!-- 
    5452                        <input type="checkbox" class="button-repeat" /> 
    55                         <label for="calendar_addevent_details_chk_repeat">Repetir</label>--> 
     53                        <label for="calendar_addtask_details_chk_repeat">Repetir</label>--> 
    5654                </p> 
    5755                <div class="subitem"> 
    58                                 % Conclusão: <input type="number" class="done" value="1">  
    59                                 <span class="span_done"><input type="checkbox" class="button-repeat" /> Completo<span> 
    60                                 <select style="margin: 0 0 0 20px;"> 
    61                                         <option>Desenvolvimento</option> 
    62                                 </select> 
    63                                 <span style="margin:0 0 0 20px;">Prioridade<span>  
    64                                 <select> 
    65                                         <option>Alta</option> 
    66                                         <option selected="selected">Média</option> 
    67                                         <option>Baixa</option> 
    68                                 </select> 
     56                                % Conclusão: <input type="number" name="percentage" class="done" value="<%= data.task.percentage %>">  
     57                                <span style="margin:0 0 0 5px;">Status:<span>  
     58                <select name="taskStatus" style="margin: 0 0 0 5px;"> 
     59                    <option <%= (data.task.taskStatus == '1') ? 'selected="selected"' : '' %> value="1">Sem ações</option> 
     60                    <option <%= (data.task.taskStatus == '2') ? 'selected="selected"' : '' %> value="2">Em Processo</option> 
     61                    <option <%= (data.task.taskStatus == '3') ? 'selected="selected"' : '' %> value="3">Finalizada</option> 
     62                                        <option <%= (data.task.taskStatus == '4') ? 'selected="selected"' : '' %> value="4">Cancelada</option> 
     63                                </select> 
     64                                <span style="margin:0 0 0 5px;">Prioridade<span>  
     65                                <select name="priority"> 
     66                                        <option <%= (data.task.priority == '1') ? 'selected="selected"' : '' %> value="1">Alta</option> 
     67                                        <option <%= (data.task.priority == '2') ? 'selected="selected"' : '' %> value="2">Normal</option> 
     68                                        <option <%= (data.task.priority == '3') ? 'selected="selected"' : '' %> value="3">Baixa</option> 
     69                                </select> 
     70                <span class="span_done"><img src="../prototype/modules/calendar/img/empty-status.png"/> Completo<span> 
    6971                </div> 
    7072        </fieldset> 
     
    7880        </ul> 
    7981        <fieldset id="calendar_addtask_details2" class="tab-level2"> 
    80                 <legend class="hidden">Detalhes do evento</legend> 
     82                <legend class="hidden">Detalhes da tarefa</legend> 
    8183 
    8284                <p class="input-group"> 
    8385                        <label for="calendar_addtask_details_txtarea_description" class="for-textarea" >Descrição</label> 
    84                         <textarea name="description" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> ><%=(data.event) ? data.event.description : '' %></textarea> 
     86                        <textarea name="description"><%=(data.task) ? data.task.description : '' %></textarea> 
    8587                </p> 
    8688 
    8789                <p class="input-group"> 
    8890                        <label for="calendar_addtask_details_slt_cal">Grupo</label> 
    89                                 <select> 
     91                                <select  name="group" > 
    9092                                        <%  
    91                                           for (var i=0; i< data.event.calendars.length; i++) { 
    92                                           console.log(data); 
    93                                             if(data.event.calendars[i].id != data.event.calendar && Calendar.signatureOf[data.event.calendars[i].id].isOwner != '1' && (!Calendar.signatureOf[data.event.calendars[i].id].permission.acl.write) ) 
    94                                                 continue; 
     93                                          for (var i=0; i< data.task.groups.length; i++) { 
    9594                                        %> 
    96                                               <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>> 
    97                                               <%= data.event.calendars[i].name %> 
     95                                              <option value="<%= data.task.groups[i].id %>" <%= data.task.groups[i].id == data.task.group ? 'selected="selected"':'' %>> 
     96                                              <%= data.task.groups[i].name %> 
    9897                                              </option> 
    9998                                        <% } %> 
    10099                                </select> 
    101                         <!--<select name="calendar" > 
    102                         <%  
    103                           for (var i=0; i< data.event.calendars.length; i++) { 
    104                             if(data.event.calendars[i].id != data.event.calendar && Calendar.signatureOf[data.event.calendars[i].id].isOwner != '1' && !Calendar.signatureOf[data.event.calendars[i].id].permission.acl.write) 
    105                                 continue; 
    106                         %> 
    107                               <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>> 
    108                               <%= data.event.calendars[i].name %> 
    109                               </option> 
    110                         <% } %> 
    111                         </select> 
    112                 --> 
    113100                </p> 
    114101                 
    115102                <fieldset class="hidden"> 
    116103                        <legend class="hidden">Publicidade</legend> 
    117                         <!-- 
    118                         <p class="input-group"> 
    119                                 <label class="input-group">Mostrar-me como</label> 
    120                                 <input type="radio" checked="checked"/> 
    121                                 <label for="calendar_addevent_details_rdo_status1">Dispon?vel</label> 
    122                                 <input type="radio"/> 
    123                                 <label for="calendar_addevent_details_rdo_status2">Ocupado</label> 
    124                         </p> 
    125                         --> 
     104 
    126105                        <p class="input-group"> 
    127106                                <label class="input-group">Privacidade</label> 
     
    142121                <legend class="hidden">Lembretes</legend> 
    143122                 
    144                 <p class="default-alarm-event <%= (!data.event.id && data.event.alarms) ? '' : 'hidden'%>"> 
     123                <p class="default-alarm-task <%= (!data.task.id && data.task.alarms) ? '' : 'hidden'%>"> 
    145124                        <input type="checkbox" name="defaultAlarm" value="true" checked="checked"/> 
    146125                        <label class="input-default-alarm" for="defautAlarm">Usar alarmes padrões</label> 
     
    148127         
    149128                <ul class="task-alarms-list"> 
    150                         <% if (data.event && data.event.alarms) { 
    151                                 for (var i=0; i< data.event.alarms.length; i++) { 
     129                        <% if (data.task && data.task.alarms) { 
     130                                for (var i=0; i< data.task.alarms.length; i++) { 
    152131                        %> 
    153132                        <li class="input-group"> 
    154133                                <label>Avisar-me por </label> 
    155134                                <select name="alarmType[]"> 
    156                                     <option value="alert" <%= data.event.alarms[i].type=='alert' ? 'selected="selected"':'' %>>Alerta</option> 
    157                                     <option value="mail" <%= data.event.alarms[i].type=='mail' ? 'selected="selected"':'' %>>E-mail</option> 
    158                                     <!--<option value="sms" <%= data.event.alarms[i].type=='sms' ? 'selected="selected"':'' %>>SMS</option>--> 
    159                                 </select> 
    160                                 <input type="text" name="alarmTime[]" class="number input-small" value="<%= data.event.alarms[i].time %>"/> 
     135                    <option value="alert" <%= data.task.alarms[i].type=='alert' ? 'selected="selected"':'' %>>Alerta</option> 
     136                    <option value="mail" <%= data.task.alarms[i].type=='mail' ? 'selected="selected"':'' %>>E-mail</option> 
     137                    <!--<option value="sms" <%= data.task.alarms[i].type=='sms' ? 'selected="selected"':'' %>>SMS</option>--> 
     138                                </select> 
     139                                <input type="text" name="alarmTime[]" class="number input-small" value="<%= data.task.alarms[i].time %>"/> 
    161140                                <select name="alarmUnit[]"> 
    162                                         <option value="m" <%= data.event.alarms[i].unit=='m' ? 'selected="selected"':'' %>>Minutos</option> 
    163                                         <option value="h" <%= data.event.alarms[i].unit=='h' ? 'selected="selected"':'' %>>Horas</option> 
    164                                         <option value="d" <%= data.event.alarms[i].unit=='d' ? 'selected="selected"':'' %>>Dias</option> 
    165                                 </select> 
    166                                 <input type="hidden" name="alarmId[]" value="<%=data.event.useAlarmDefault ? '' : data.event.alarms[i].id%>" /> 
    167                                 <input type="hidden" name="isDefaultAlarm[]" value="<%=data.event.useAlarmDefault ? 1 : 0%>" /> 
    168                                 <label> antes de cada evento.</label> 
     141                                        <option value="m" <%= data.task.alarms[i].unit=='m' ? 'selected="selected"':'' %>>Minutos</option> 
     142                                        <option value="h" <%= data.task.alarms[i].unit=='h' ? 'selected="selected"':'' %>>Horas</option> 
     143                                        <option value="d" <%= data.task.alarms[i].unit=='d' ? 'selected="selected"':'' %>>Dias</option> 
     144                                </select> 
     145                                <input type="hidden" name="alarmId[]" value="<%=data.task.useAlarmDefault ? '' : data.task.alarms[i].id%>" /> 
     146                                <input type="hidden" name="isDefaultAlarm[]" value="<%=data.task.useAlarmDefault ? 1 : 0%>" /> 
     147                                <label> antes de cada tasko.</label> 
    169148                                <a class="button remove tiny"></a> 
    170149                        </li> 
     
    193172 
    194173                        <div class="child-bottom"> 
    195                                 <% for(var i=0; i<15; i++){ %> 
    196                                         <div class="child-bottom-each"> 
    197                                                 <div class="date-hour"><span>17/05 - 23:43</span></div> 
    198                                                 <div class="organization"><span>thiago da silva sauro</span></div> 
    199                                         </div> 
    200                                 <% } %> 
     174                            <% for(var i=0; i< data.task.historic.length; i++){ %> 
     175                                <div class="child-bottom-each"> 
     176                                    <div class="date-hour"><span><%= data.task.historic[i].date %></span></div> 
     177                                    <div class="organization"><span><%= data.task.historic[i].description %></span></div> 
     178                                </div> 
     179                            <% } %> 
    201180                        </div> 
    202181 
     
    205184 
    206185        <fieldset class="attachment-list hidden"> 
    207              <%if(data.event && data.event.attachments){ 
    208                 for (var i=0; i< data.event.attachments.length; i++) {%> 
    209                     <input type="hidden" name="fileId[]" value="<%=data.event.attachments[i].id%>"/> 
     186             <%if(data.task && data.task.attachments){ 
     187                for (var i=0; i< data.task.attachments.length; i++) {%> 
     188                    <input type="hidden" name="fileId[]" value="<%=data.task.attachments[i].id%>"/> 
    210189                <%} 
    211190            }%> 
     
    219198        <div class="row fileupload-buttonbar-task"> 
    220199            <div class="button-files-upload"> 
    221                 <!-- The fileinput-button span is used to style the file input field as button --> 
    222                 <%if(data.event.acl.organization || data.event.acl.write){%> 
    223                     <span class="button btn-success fileinput-button"> 
     200                <!-- The fileinput-button span is used to style the file input field as button -->  
     201                      <span class="button btn-success fileinput-button"> 
    224202                    <span><i class="icon-plus icon-white"></i> Adicionar</span> 
    225203                    <input type="file" name="files[]" multiple> 
    226204                </span> 
    227                                 <%}%> 
    228                                 <%if(data.event.acl.organization || data.event.acl.write){%> 
    229                                         <button type="button" class="button btn-danger delete"> 
    230                                                 <i class="icon-trash icon-white"></i> Remover Todos 
    231                                         </button> 
    232                                 <%}%> 
     205                                <button type="button" class="button btn-danger delete"> 
     206                                        <i class="icon-trash icon-white"></i> Remover Todos 
     207                                </button> 
    233208            </div> 
    234209            <div id="fileupload-progress"></div> 
    235210            <div class="files-list"> 
    236211               <ul class="attachments-list"> 
    237                            <%if(data.event && data.event.attachments){ 
    238                                         for (var i=0; i< data.event.attachments.length; i++) { 
    239                                         %> 
    240                                                 <p class="input-group arquive-info"> 
    241                                                         <label class="lbl-archive-nome">Nome:</label> 
    242                                                         <span class="archive-nome"><%=data.event.attachments[i].name%></span> 
    243                                                          
    244                                                         <label class="lbl-archive-size">Tamanho:</label> 
    245                                                         <span class="archive-size"><%=data.event.attachments[i].size%></span> 
    246                                                         <a href="../prototype/getArchive.php?attachment=<%=data.event.attachments[i].id%>" class="button tiny upload downlaod-archive">Download</a> 
    247                                                         <%if(data.event.acl.organization || data.event.acl.write){%> 
    248                                                                 <span class="button close tiny upload edit delete-upload" title="Deletar">Deletar</span> 
    249                                                         <%}%> 
    250                                                         <input type="hidden" name="fileId[]" value="<%=data.event.attachments[i].id%>"/> 
    251                                                 </p> 
    252                                         <%} 
    253                                 }%> 
     212                                <% 
     213                    for (var i=0; i< data.task.attachments.length; i++) { 
     214                                %> 
     215                                        <p class="input-group arquive-info"> 
     216                                                <label class="lbl-archive-nome">Nome:</label> 
     217                                                <span class="archive-nome"><%=data.task.attachments[i].name%></span> 
     218                                                 
     219                                                <label class="lbl-archive-size">Tamanho:</label> 
     220                                                <span class="archive-size"><%=data.task.attachments[i].size%></span> 
     221                                                <a href="../prototype/getArchive.php?attachment=<%=data.task.attachments[i].id%>" class="button tiny upload downlaod-archive">Download</a> 
     222                                                 
     223                                                <span class="button close tiny upload edit delete-upload" title="Deletar">Deletar</span> 
     224                                                 
     225                                                <input type="hidden" name="fileId[]" value="<%=data.task.attachments[i].id%>"/> 
     226                                        </p> 
     227                                <%}%> 
    254228                            
    255229                            
     
    263237</div> 
    264238        <form action="../prototype/modules/calendar/export.php" method="GET" class="form-export content"> 
    265                 <input type="hidden" class="id-task" name="task" value="<%= data.event.id %>"/> 
     239                <input type="hidden" class="id-task" name="task" value="<%= data.task.id %>"/> 
    266240        </form> 
    267 <!--    <div id="calendar_addevent_addattendee"></div>--> 
     241<!--    <div id="calendar_addtask_addattendee"></div>--> 
    268242 
    269243    <div title="" class="menu-container footer-container menu-addtask"> 
    270             <% if (data.event.id) { %> 
     244            <% if (data.task.id) { %> 
    271245                        <a title="Exportar" class="button export" href="#">Exportar</a> 
    272246                        <a title="Excluir" class="button delete" href="#">Excluir</a> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_quick_add.ejs

    r6797 r6876  
    11<div class="add-simple-task"> 
    22 
    3         <input type="text" class="task" name="title" value=""/> 
     3        <input type="text" class="task" name="summary" value=""/> 
    44        <textarea name="description" class="task"></textarea> 
    55 
Note: See TracChangeset for help on using the changeset viewer.