diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php index 367f53d0da..80b39d52bd 100644 --- a/calendar/inc/class.calendar_uiforms.inc.php +++ b/calendar/inc/class.calendar_uiforms.inc.php @@ -1477,19 +1477,14 @@ function replace_eTemplate_onsubmit() } // Allow admins to restore deleted events - $config = config::read('phpgwapi'); - if($config['calendar_delete_history'] && $event['deleted'] ) + if($GLOBALS['egw_info']['server']['calendar_delete_history'] && $event['deleted'] ) { $content['deleted'] = $preserv['deleted'] = null; $etpl->set_cell_attribute('button[save]', 'label', 'Recover'); $etpl->set_cell_attribute('button[apply]', 'disabled', true); - if(!$GLOBALS['egw_info']['user']['apps']['admin'] && $config['calendar_delete_history'] != 'user_purge') - { - $readonlys['button[delete]'] = true; - } } // Allow users to prevent notifications? - $etpl->set_cell_attribute('no_notifications', 'disabled', !$config['calendar_allow_no_notification']); + $etpl->set_cell_attribute('no_notifications', 'disabled', !$GLOBALS['egw_info']['server']['calendar_allow_no_notification']); // Setup history tab $this->setup_history($content, $sel_options); diff --git a/calendar/inc/class.calendar_uilist.inc.php b/calendar/inc/class.calendar_uilist.inc.php index 92305741f5..e6ea62b8bd 100644 --- a/calendar/inc/class.calendar_uilist.inc.php +++ b/calendar/inc/class.calendar_uilist.inc.php @@ -1,11 +1,11 @@ - * @copyright (c) 2005-9 by RalfBecker-At-outdoor-training.de + * @copyright (c) 2005-11 by RalfBecker-At-outdoor-training.de * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ @@ -41,7 +41,7 @@ class calendar_uilist extends calendar_ui var $date_filters = array( 'after' => 'After current date', 'before' => 'Before current date', - 'all' => 'All events', + 'all' => 'All events', 'custom' => 'Selected range', ); @@ -75,12 +75,12 @@ class calendar_uilist extends calendar_ui { // set the defaults for the home-page $this->__construct(array( - 'date' => $this->bo->date2string($this->bo->now_su), - 'cat_id' => 0, - 'filter' => 'all', - 'owner' => $this->user, + 'date' => $this->bo->date2string($this->bo->now_su), + 'cat_id' => 0, + 'filter' => 'all', + 'owner' => $this->user, 'multiple' => 0, - 'view' => $this->bo->cal_prefs['mainscreen_showevents'], + 'view' => $this->bo->cal_prefs['mainscreen_showevents'], )); egw_session::appsession('calendar_list','calendar',''); // in case there's already something set @@ -97,50 +97,43 @@ class calendar_uilist extends calendar_ui $etpl = new etemplate('calendar.list'); - if (is_array($content) && $content['nm']['rows']['delete']) + if (is_array($content)) { - // handle a single delete like delete with the checkboxes - list($id) = @each($content['nm']['rows']['delete']); - $content['action'] = 'delete'; - $content['nm']['rows']['checked'] = array($id); - } - if (is_array($content) && $content['nm']['rows']['timesheet']) - { - // handle a single timesheet like timesheet with the checkboxes - list($id) = @each($content['nm']['rows']['timesheet']); - $content['action'] = 'timesheet-add'; - $content['nm']['rows']['checked'] = array($id); - } - if (is_array($content) && isset($content['nm']['rows']['document'])) // handle insert in default document button like an action - { - list($id) = @each($content['nm']['rows']['document']); - $content['action'] = 'document'; - $content['nm']['rows']['checked'] = array($id); - } - - // Handle actions - if ($content['action'] != '') - { - // Allow merge using the date range filter - if(strpos($content['action'],'document') !== false && !count($content['nm']['rows']['checked']) && !$content['use_all']) { - $content['nm']['rows']['checked'][] = $this->get_merge_range($content['nm']); - } - if (!count($content['nm']['rows']['checked']) && !$content['use_all']) { - $msg = lang('You need to select some events first'); - } - else + // handle a single button like actions + foreach(array('delete','timesheet','document') as $button) { - if ($this->action($content['action'],$content['nm']['rows']['checked'],$content['use_all'], - $success,$failed,$action_msg,'calendar_list',$msg, $content['no_notifications'])) + if ($content['nm']['rows'][$button]) { - $msg .= lang('%1 event(s) %2',$success,$action_msg); - } - elseif(is_null($msg)) - { - $msg .= lang('%1 event(s) %2, %3 failed because of insufficent rights !!!',$success,$action_msg,$failed); + list($id) = each($content['nm']['rows'][$button]); + $content['nm']['action'] = $button; + $content['nm']['selected'] = array($id); + } + } + // Handle actions + if ($content['nm']['action']) + { + // Allow merge using the date range filter + if(strpos($content['nm']['action'],'document') !== false && + !count($content['nm']['selected']) && !$content['nm']['select_all']) { + $content['nm']['selected'][] = $this->get_merge_range($content['nm']); + } + if (!count($content['nm']['selected']) && !$content['nm']['select_all']) + { + $msg = lang('You need to select some events first'); + } + else + { + if ($this->action($content['nm']['action'],$content['nm']['selected'],$content['nm']['select_all'], + $success,$failed,$action_msg,'calendar_list',$msg, $content['no_notifications'])) + { + $msg .= lang('%1 event(s) %2',$success,$action_msg); + } + elseif(is_null($msg)) + { + $msg .= lang('%1 event(s) %2, %3 failed because of insufficent rights !!!',$success,$action_msg,$failed); + } } } - $content['nm']['rows']['checked'] = array(); } $content = array( 'nm' => egw_session::appsession('calendar_list','calendar'), @@ -149,17 +142,18 @@ class calendar_uilist extends calendar_ui if (!is_array($content['nm'])) { $content['nm'] = array( - 'get_rows' => 'calendar.calendar_uilist.get_rows', - 'filter_no_lang' => True, // I set no_lang for filter (=dont translate the options) - 'no_filter2' => True, // I disable the 2. filter (params are the same as for filter) - 'no_cat' => True, // I disable the cat-selectbox -// 'bottom_too' => True,// I show the nextmatch-line (arrows, filters, search, ...) again after the rows - 'filter' => 'after', - 'order' => 'cal_start',// IO name of the column to sort after (optional for the sortheaders) - 'sort' => 'ASC',// IO direction of the sort: 'ASC' or 'DESC' - 'default_cols' => '!week,weekday,cal_title,cal_description,recure,cal_location,cal_owner,cat_id,pm_id', + 'get_rows' => 'calendar.calendar_uilist.get_rows', + 'filter_no_lang' => True, // I set no_lang for filter (=dont translate the options) + 'no_filter2' => True, // I disable the 2. filter (params are the same as for filter) + 'no_cat' => True, // I disable the cat-selectbox + 'filter' => 'after', + 'order' => 'cal_start',// IO name of the column to sort after (optional for the sortheaders) + 'sort' => 'ASC',// IO direction of the sort: 'ASC' or 'DESC' + 'default_cols' => '!week,weekday,cal_title,cal_description,recure,cal_location,cal_owner,cat_id,pm_id', 'filter_onchange' => "set_style_by_class('table','custom_hide','visibility',this.value == 'custom' ? 'visible' : 'hidden'); if (this.value != 'custom') this.form.submit();", - 'header_left' => 'calendar.list.dates', + 'header_left' => 'calendar.list.dates', + 'row_id' => 'row_id', // set in get rows "$event[id]:$event[recur_date]" + 'actions' => $this->get_actions(), ); } if ($_GET['search']) { @@ -169,48 +163,15 @@ class calendar_uilist extends calendar_ui { $this->adjust_for_search($_REQUEST['keywords'],$content['nm']); } - $sel_options = array( - 'action' => array( - 'delete' => array('label' => 'Delete', 'title' => 'Delete this event'), - 'ical' => array('label' => 'Export (iCal)', 'title' => 'Download this event as iCal'), - ), - 'filter' => &$this->date_filters - ); + $sel_options['filter'] = &$this->date_filters; - // More actions - if($GLOBALS['egw_info']['apps']['timesheet']) { - $sel_options['action']['timesheet-add'] = array('label' => 'Create timesheet', 'title' => 'Create a timesheet entry from this event'); - } - // Add in deleted for admins - $config = config::read('phpgwapi'); - if($config['calendar_delete_history']) - { - $sel_options['action']['undelete'] = array('label' => 'Un-Delete', 'title' => 'Recover this event'); - if(!$GLOBALS['egw_info']['user']['apps']['admin'] && $config['calendar_delete_history'] != 'user_purge') - { - unset($sel_options['action']['delete']); - $content['nm']['no_delete'] = true; - } - } - foreach($this->bo->verbose_status as $key => $value) - { - if($key == 'G') continue; - $sel_options['action'][lang('Change your participant status')]['status-'.$key] = $value; - } - // Merge print - if ($GLOBALS['egw_info']['user']['preferences']['calendar']['document_dir']) - { - $sel_options['action'][lang('Insert in document').':'] = calendar_merge::get_documents($GLOBALS['egw_info']['user']['preferences']['calendar']['document_dir']); - } // add scrollbar to long describtion, if user choose so in his prefs if ($this->prefs['limit_des_lines'] > 0 || (string)$this->prefs['limit_des_lines'] == '') { $content['css'] .= ''; } - unset($sel_options['action'][lang('Change your participant status')]['G']); - $GLOBALS['egw_info']['flags']['java_script'] .= $this->get_javascript(); $html = $etpl->exec('calendar.calendar_uilist.listview',$content,$sel_options,$readonlys,'',$home ? -1 : 0); @@ -302,7 +263,7 @@ class calendar_uilist extends calendar_ui 'offset' => (int) $params['start'], 'num_rows'=> $params['num_rows'], 'order' => $params['order'] ? $params['order'].' '.$params['sort'] : 'cal_start', - 'cfs' => $params['csv_export'] ? array() : $cfs, + 'cfs' => $params['csv_export'] ? array() : $cfs, ); switch($params['filter']) { @@ -367,12 +328,27 @@ class calendar_uilist extends calendar_ui { $search_params['users'] = explode(',',$this->owner); } - $rows = array(); + $rows = $js_integration_data = array(); foreach((array) $this->bo->search($search_params) as $event) { - $readonlys['view['.$event['id'].']'] = !($readonlys['edit['.$event['id'].']'] = !$this->bo->check_perms(EGW_ACL_EDIT,$event)); + if (($readonlys['edit['.$event['id'].']'] = !$this->bo->check_perms(EGW_ACL_EDIT,$event))) + { + $event['class'] .= 'rowNoEdit '; + } + // show only edit or view icon, not both + $readonlys['view['.$event['id'].']'] = !$readonlys['edit['.$event['id'].']']; + // Delete disabled for other applications - $readonlys['delete['.$event['id'].']'] = !$this->bo->check_perms(EGW_ACL_DELETE,$event) || !is_numeric($event['id']) || $params['no_delete']; + if (($readonlys['delete['.$event['id'].']'] = !$this->bo->check_perms(EGW_ACL_DELETE,$event) || !is_numeric($event['id']))) + { + $event['class'] .= 'rowNoDelete '; + } + + // mark deleted events + if ($event['deleted']) + { + $event['class'] .= 'rowDeleted '; + } // Filemanager disabled for other applications $readonlys['filemanager['.$event['id'].']'] = !is_numeric($event['id']); @@ -388,7 +364,7 @@ class calendar_uilist extends calendar_ui } if (empty($event['description'])) $event['description'] = ' '; // no description screws the titles horz. alignment if (empty($event['location'])) $event['location'] = ' '; // no location screws the owner horz. alignment - + // respect category permissions if(!empty($event['category'])) { @@ -409,6 +385,15 @@ class calendar_uilist extends calendar_ui $icons = calendar_uiviews::integration_get_icons($app,$app_id,$event); } } + else + { + $is_private = !$this->bo->check_perms(EGW_ACL_READ,$event); + } + if ($is_private) + { + $readonlys['filemanager['.$event['id'].']'] = $readonlys['view['.$event['id'].']'] = true; // no view icon + $event['class'] .= 'rowNoView '; + } $event['app'] = 'calendar'; $event['app_id'] = $event['id']; @@ -417,12 +402,24 @@ class calendar_uilist extends calendar_ui if($app && $app_id) { $popup = calendar_uiviews::integration_get_popup($app,$app_id); - + // Need to strip off 'onclick' $event['edit_link'] = preg_replace('/ ?onclick="(.+)"/i', '$1', $popup); $event['app'] = $app; $event['app_id'] = $app_id; + + // populate js_integration_data, if not already set + if (!isset($js_integration_data[$app])) + { + $js_integration_data[$app] = calendar_bo::integration_get_data($app,'edit_link'); + if (!is_array($js_integration_data[$app]) || !isset($js_integration_data[$app]['edit'])) + { + $js_integration_data[$app]['edit'] = egw_link::get_registry($app, 'edit'); + $js_integration_data[$app]['edit_id'] = egw_link::get_registry($app, 'edit_id'); + $js_integration_data[$app]['edit_popup'] = egw_link::get_registry($app, 'edit_popup'); + } + } } elseif ($event['recur_type'] != MCAL_RECUR_NONE) { @@ -432,13 +429,21 @@ class calendar_uilist extends calendar_ui else { $view_link = egw::link('/index.php',array('menuaction'=>'calendar.calendar_uiforms.edit','cal_id'=>$event['id'],'date'=>$this->bo->date2string($event['start']))); - $event['edit_link'] = $this->popup($view_link).'; return false;'; + $event['edit_link'] = $this->popup($view_link).'; return false;'; } + // set id for grid + $event['row_id'] = $event['id'].($event['recur_type'] ? ':'.$event['recur_date'] : ''); + $rows[] = $event; unset($app); unset($app_id); } + // set js_calendar_integration object, for app.js cal_open() function + $GLOBALS['egw_info']['flags']['java_script'] = ''; + $wv=0; $dv=0; $params['options-selectcols']['week'] = lang('Week'); @@ -448,11 +453,11 @@ class calendar_uilist extends calendar_ui $rows['format'] = '32'; // prefix date with week-number $wv=1; } - if (!(strpos($this->cal_prefs['nextmatch-calendar.list.rows'],'weekday')===FALSE)) - { - $rows['format'] = '16'; + if (!(strpos($this->cal_prefs['nextmatch-calendar.list.rows'],'weekday')===FALSE)) + { + $rows['format'] = '16'; $dv=1; - } + } if ($wv && $dv) { $rows['format'] = '64'; @@ -467,47 +472,56 @@ class calendar_uilist extends calendar_ui } /** - * apply an action to multiple events - * - * @param string/int $action 'delete', 'ical', 'print', 'email' - * @param array $checked event id's to use if !$use_all - * @param boolean $use_all if true use all events of the current selection (in the session) - * @param int &$success number of succeded actions - * @param int &$failed number of failed actions (not enought permissions) - * @param string &$action_msg translated verb for the actions, to be used in a message like %1 events 'deleted' - * @param string/array $session_name 'calendar_list' - * @return boolean true if all actions succeded, false otherwise - */ - function action($action,$checked,$use_all,&$success,&$failed,&$action_msg,$session_name,&$msg,$skip_notification=false) - { + * apply an action to multiple events + * + * @param string/int $action 'delete', 'ical', 'print', 'email' + * @param array $checked event id's to use if !$use_all + * @param boolean $use_all if true use all events of the current selection (in the session) + * @param int &$success number of succeded actions + * @param int &$failed number of failed actions (not enought permissions) + * @param string &$action_msg translated verb for the actions, to be used in a message like %1 events 'deleted' + * @param string/array $session_name 'calendar_list' + * @return boolean true if all actions succeded, false otherwise + */ + function action($action,$checked,$use_all,&$success,&$failed,&$action_msg,$session_name,&$msg,$skip_notification=false) + { //echo '

' . __METHOD__ . "('$action',".print_r($checked,true).','.(int)$use_all.",...)

\n"; $success = $failed = 0; // Split out combined values - if(strpos($action, 'status') !== false) { + if(strpos($action, 'status') !== false) + { list($action, $status) = explode('-', $action); - } elseif (strpos($action, '_') !== false) { + } + elseif (strpos($action, '_') !== false) + { list($action, $settings) = explode('_', $action,2); } - if ($use_all) + if ($use_all) + { + // get the whole selection + $query = is_array($session_name) ? $session_name : egw_session::appsession($session_name,'calendar'); + @set_time_limit(0); // switch off the execution time limit, as for big selections it's too small + $query['num_rows'] = -1; // all + $this->get_rows($query,$checked,$readonlys,($action != 'ical')); // true = only return the id's + } + else { - // get the whole selection - $query = is_array($session_name) ? $session_name : egw_session::appsession($session_name,'calendar'); - @set_time_limit(0); // switch off the execution time limit, as for big selections it's too small - $query['num_rows'] = -1; // all - $this->get_rows($query,$checked,$readonlys,($action != 'ical')); // true = only return the id's - } else { // Pull the date for recurring events $split = array(); - foreach($checked as $key) { - if(!is_array($key) && strpos($key,':') !== false) { + foreach($checked as $key) + { + if(!is_array($key) && strpos($key,':') !== false) + { list($id, $recur_date) = explode(':', $key); $split[] = array( - 'id' => $id, - 'recur_date' => $recur_date + 'id' => $id, + 'recur_date' => $recur_date ); - } else { + } + else + { $split[] = $key; } } @@ -515,45 +529,45 @@ class calendar_uilist extends calendar_ui } // Actions where one action is done to the group - switch($action) + switch($action) { case 'ical': $boical = new calendar_ical(); $ical =& $boical->exportVCal($checked,'2.0','PUBLISH',false); - html::content_header($content['file'] ? $content['file'] : 'event.ics','text/calendar',bytes($ical)); - echo $ical; - common::egw_exit(); + html::content_header($content['file'] ? $content['file'] : 'event.ics','text/calendar',bytes($ical)); + echo $ical; + common::egw_exit(); break; case 'document': $msg = $this->download_document($checked,$settings); $failed = count($checked); - return false; + return false; } // Actions where the action is applied to each entry - if(strpos($action, 'timesheet') !== false) { + if(strpos($action, 'timesheet') !== false) + { $timesheet_bo = new timesheet_bo(); } - foreach($checked as $event) + foreach($checked as $event) { if(!(int)$event['id'] && preg_match('/^([a-z_-]+)([0-9]+)$/i',$event['id'],$matches)) { $app = $matches[1]; $app_id = $matches[2]; - } else { + } + else + { $id = $event['id']; $recur_date = $event['recur_date']; } - switch($action) + switch($action) { case 'delete': $action_msg = lang('deleted'); - if ($id && $this->bo->check_perms(EGW_ACL_DELETE,$id)) + if ($id && $this->bo->delete($id, $recur_date,false,$skip_notification)) { - if($this->bo->delete($id, $recur_date,false,$skip_notification)) - { - $success++; - } + $success++; } else { @@ -562,7 +576,7 @@ class calendar_uilist extends calendar_ui break; case 'undelete': $action_msg = lang('recovered'); - if ($id && ($event = $this->bo->read($id, $recur_date)) && $this->bo->check_perms(EGW_ACL_EDIT,$id) && + if ($id && ($event = $this->bo->read($id, $recur_date)) && $this->bo->check_perms(EGW_ACL_EDIT,$id) && is_array($event) && $event['deleted']) { $event['deleted'] = false; @@ -575,7 +589,7 @@ class calendar_uilist extends calendar_ui $failure++; break; case 'status': - if($id && $event = $this->bo->read($id, $recur_date)) + if($id && ($event = $this->bo->read($id, $recur_date))) { $old_status = $event['participants'][$GLOBALS['egw_info']['user']['account_id']]; calendar_so::split_status($old_status, $quantity, $role); @@ -590,7 +604,9 @@ class calendar_uilist extends calendar_ui $msg = lang('Status changed'); } } - } else { + } + else + { $failure++; } break; @@ -607,7 +623,7 @@ class calendar_uilist extends calendar_ui $result = $this->bo->search($query); $event = $result[$app.$app_id]; } - if(!$event) + if(!$event) { $failure++; continue; @@ -626,20 +642,21 @@ class calendar_uilist extends calendar_ui // Add global categories $categories = explode(',',$event['category']); $global_categories = array(); - foreach($categories as $cat_id) + foreach($categories as $cat_id) { if($GLOBALS['egw']->categories->is_global($cat_id)) { $global_categories[] = $cat_id; } } - if(count($global_categories)) + if(count($global_categories)) { $timesheet['cat_id'] = implode(',', $global_categories); } $timesheet_bo->data = array(); $err = $timesheet_bo->save($timesheet); - if(!$err) { + if(!$err) + { $success++; // Can't link to just one of a recurring series of events @@ -648,7 +665,7 @@ class calendar_uilist extends calendar_ui $link_id = $app ? $app_id : $id; egw_link::link($app ? $app : 'calendar', $link_id, 'timesheet', $timesheet_bo->data['ts_id']); } - } + } else { $failure++; @@ -663,27 +680,6 @@ class calendar_uilist extends calendar_ui return ($failure == 0); } - public function get_javascript() - { - return ''; - } - /** * Get date ranges to select for merging instead of individual events * @@ -691,17 +687,20 @@ class calendar_uilist extends calendar_ui * * @return array of ranges */ - protected function get_merge_range($nm) + protected function get_merge_range($nm) { $checked = array(); - if($nm['filter'] == 'fixed') + if($nm['filter'] == 'fixed') { $checked['start'] = $nm['startdate']; $last = $this->bo->date2array($nm['enddate']); $last['hour'] = '23'; $last['minute'] = $last['sec'] = '59'; $checked['end'] = $this->bo->date2ts($last); - } else { - switch($nm['filter']) { + } + else + { + switch($nm['filter']) + { case 'after': $checked['start'] = $nm['startdate'] ? $nm['startdate'] : strtotime('today'); break; @@ -738,8 +737,119 @@ class calendar_uilist extends calendar_ui { return lang("Document '%1' does not exist or is not readable for you!",$document); } - require_once(EGW_INCLUDE_ROOT.'/calendar/inc/class.calendar_merge.inc.php'); $document_merge = new calendar_merge(); + return $document_merge->download($document,$ids); } + + /** + * Get actions / context menu items + * + * @return array see nextmatch_widget::get_actions() + */ + private function get_actions() + { + $actions = array( + 'open' => array( + 'caption' => 'Open', + 'default' => true, + 'allowOnMultiple' => false, + 'url' => 'menuaction=calendar.calendar_uiforms.edit&cal_id=$id', + 'popup' => egw_link::get_registry('calendar', 'view_popup'), + 'group' => $group=1, + 'onExecute' => 'javaScript:cal_open', + 'disableClass' => 'rowNoView', + ), + 'select_all' => array( + 'caption' => 'Whole query', + 'checkbox' => true, + 'hint' => 'Apply the action on the whole query, NOT only the shown events', + 'group' => ++$group, + ), + 'no_notifications' => array( + 'caption' => 'Do not notify', + 'checkbox' => true, + 'hint' => 'Do not notify of these changes', + 'group' => $group, + ), + ); + $status = $this->bo->verbose_status; + unset($status['G']); + $actions['status'] = array( + 'caption' => 'Change your status', + 'icon' => 'check', + 'prefix' => 'status-', + 'children' => $status, + 'group' => ++$group, + ); + ++$group; // integration with other apps: infolog, calendar, filemanager + if ($GLOBALS['egw_info']['user']['apps']['filemanager']) + { + $actions['filemanager'] = array( + 'icon' => 'filemanager/navbar', + 'caption' => 'Filemanager', + 'url' => 'menuaction=filemanager.filemanager_ui.index&path=/apps/$app/$id', + 'group' => $group, + 'allowOnMultiple' => false, + 'onExecute' => 'javaScript:cal_fix_app_id', + 'disableClass' => 'rowNoView', + ); + } + if ($GLOBALS['egw_info']['user']['apps']['timesheet']) + { + $actions['timesheet'] = array( // interactive add for a single event + 'icon' => 'timesheet/navbar', + 'caption' => 'Timesheet', + 'url' => 'menuaction=timesheet.timesheet_ui.edit&link_app[]=$app&link_id[]=$id', + 'group' => $group, + 'allowOnMultiple' => false, + 'hideOnDisabled' => true, // show only one timesheet action in context menu + 'onExecute' => 'javaScript:cal_fix_app_id', + 'popup' => egw_link::get_registry('timesheet', 'add_popup'), + ); + $actions['timesheet-add'] = array( // automatic add for multiple events + 'icon' => 'timesheet/navbar', + 'caption' => 'Timesheet', + 'group' => $group, + 'allowOnMultiple' => 'only', + 'hideOnDisabled' => true, // show only one timesheet action in context menu + ); + } + $actions['ical'] = array( + 'icon' => 'filesave', + 'caption' => 'Export (iCal)', + 'group' => ++$group, + 'hint' => 'Download this event as iCal', + 'disableClass' => 'rowNoView', + ); + + $actions['documents'] = addressbook_merge::document_action( + $this->bo->cal_prefs['document_dir'], ++$group, 'Insert in document', 'document_', + $this->bo->cal_prefs['default_document'] + ); + + ++$group; + $actions['delete'] = array( + 'caption' => 'Delete', + 'confirm' => 'Delete this event', + 'confirm_multiple' => 'Delete these entries', + 'group' => $group, + 'disableClass' => 'rowNoDelete', + ); + // Add in deleted for admins + if($GLOBALS['egw_info']['server']['calendar_delete_history']) + { + $actions['undelete'] = array( + 'caption' => 'Un-delete', + 'hint' => 'Recover this event', + 'group' => $group, + 'enabled' => 'javaScript:nm_enableClass', + 'enableClass' => 'rowDeleted', + 'hideOnDisabled' => true, + ); + } + + //_debug_array($actions); + return $actions; + } } diff --git a/calendar/js/app.js b/calendar/js/app.js new file mode 100644 index 0000000000..8d74a40111 --- /dev/null +++ b/calendar/js/app.js @@ -0,0 +1,85 @@ +/** + * Calendar - static javaScript functions + * + * @link http://www.egroupware.org + * @author Ralf Becker + * @package calendar + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @version $Id$ + */ + +/** + * Fix calendar specific id: "cal_id:recurrence" or "appId:", replacing $app and $id in url + * + * Cut away the recurrence date from id, and use app from calendar integration + * + * @param _action + * @param _senders + */ +function cal_fix_app_id(_action, _senders) +{ + var app = 'calendar'; + var id = _senders[0].id; + var matches = id.match(/^([0-9]+):([0-9]+)$/); + if (matches) + { + id = matches[1]; + } + else if (matches = id.match(/^([a-z_-]+)([0-9]+)/i)) + { + app = matches[1]; + id = matches[2]; + } + var backup_url = _action.data.url; + + _action.data.url = _action.data.url.replace(/(\$|%24)id/,id); + _action.data.url = _action.data.url.replace(/(\$|%24)app/,app); + + nm_action(_action, _senders); + + _action.data.url = backup_url; // restore url +} + +/** + * Open calendar entry, taking into accout the calendar integration of other apps + * + * calendar_uilist::get_rows sets var js_calendar_integration object + * + * @param _action + * @param _senders + */ +function cal_open(_action, _senders) +{ + var id = _senders[0].id; + var matches = id.match(/^([0-9]+):([0-9]+)$/); + var backup = _action.data; + if (matches) + { + edit_series(matches[1],matches[2]); + return; + } + else if (matches = id.match(/^([a-z_-]+)([0-9]+)/i)) + { + var app = matches[1]; + _action.data.url = window.egw_webserverUrl+'/index.php?'; + var get_params = js_integration_data[app].edit; + get_params[js_integration_data[app].edit_id] = matches[2]; + for(var name in get_params) + _action.data.url += name+"="+encodeURIComponent(get_params[name])+"&"; + + if (js_integration_data[app].edit_popup && + (matches = js_integration_data[app].edit_popup.match(/^(.*)x(.*)$/))) + { + _action.data.width = matches[1]; + _action.data.height = matches[2]; + } + else + { + _action.data.nm_action = 'location'; + } + } + console.log(_action); + nm_action(_action, _senders); + + _action.data = backup; // restore url, width, height, nm_action +} \ No newline at end of file diff --git a/calendar/lang/egw_de.lang b/calendar/lang/egw_de.lang index 7e2435593e..a6059e92dd 100644 --- a/calendar/lang/egw_de.lang +++ b/calendar/lang/egw_de.lang @@ -39,7 +39,7 @@ all incl. rejected calendar de Alle einschl. abgesagte all participants calendar de Alle Teilnehmer allows to edit the event again calendar de Erlaubt den Termin erneut zu bearbeiten always calendar de Immer -apply the action on the whole query, not only the shown events calendar de Befehl auf die ganze Abfrage anwenden, NICHT nur auf die angezeigten Termine +apply the action on the whole query, not only the shown events calendar de Befehl auf die gesamte Abfrage anwenden, NICHT nur auf die angezeigten Termine apply the changes calendar de Übernimmt die Änderungen are you sure you want to delete this country ? calendar de Sind Sie sicher, dass Sie dieses Land löschen möchten? are you sure you want to delete this holiday ? calendar de Sind Sie sicher, dass Sie diesen Feiertag löschen möchten? @@ -81,7 +81,7 @@ category acl common de Kategorie Rechte category acl only restrict adding a category to an event or changing status of a participant. it does not change the visibility of an event! calendar de Kategorie Rechte beschränken nur das Hinzufügen einer Kategorie zu einem Termin oder das Ändern des Status eines Teilnehmers. Sie ändern NICHT die Sichtbarkeit eines Termins! chair calendar de Vorsitz change history calendar de Änderungshistorie -change your participant status calendar de Teilnehmerstatus ändern +change your status calendar de Eigenen Status ändern charset of file calendar de Zeichensatz der Datei check all calendar de Alle auswählen choose a category calendar de Wählen Sie eine Kategorie @@ -137,7 +137,8 @@ display status of events calendar de Status von Terminen anzeigen displayed view calendar de Ansicht displays this calendar view on the home page (page you get when you enter egroupware or click on the home page icon)? calendar de Zeigt diese Ansicht auf der Startseite (Seite die Sie bekommen wenn Sie EGroupware starten oder das Home Icon anklicken)? do not include events of group members calendar de Zeige nicht die Termine der Gruppenmitglieder -do not notify of these changes calendar de Keine Benachrichtigung senden +do not notify calendar de Nicht benachrichtigen +do not notify of these changes calendar de Nicht über diese Änderungen benachrichtigen do you really want to change the start of this series? if you do, the original series will be terminated as of today and a new series for the future reflecting your changes will be created. calendar de Wollen Sie wirklich den Beginn dieses Serientermins ändern? Wenn Sie das tun, so wird die bestehende Serie heute beendet und für die Zukunft ein neuer Wiederholungstermin mit Ihren Änderungen erzeugt. do you want a weekview with or without weekend? calendar de Möchten Sie eine Wochenansicht mit oder ohne Wochenende? do you want to be notified about changes of appointments you modified? calendar de Wollen Sie auch über eigene Änderungen Benachrichtigt werden? @@ -527,10 +528,8 @@ weekview with weekend calendar de Wochenansicht mit Wochenende weekview without weekend calendar de Wochenansicht ohne Wochenende when selected, birthdays and/or holidays will be displayed as events in your calendar. please note that this option only changes the appereance inside of egroupware, but does not change the information being sent via ical or other calendar interfaces. calendar de Wenn ausgewählt werden Geburts- und/oder Feiertage als Ereignisse in Ihrem Kalender angezeigt. Bitte beachten Sie, dass diese Option nur die Erscheinung innerhalb von EGroupware verändert, nicht aber die Informationen, die via iCal oder über andere Kalender-Schnittstellen gesendet werden. which view to show on home page calendar de Welche Ansicht soll auf der Startseite angezeigt werden -while selecting up to x users day- and weekview is not consolidated (5 is used when not set) admin de Für diese Ansicht steht Ihnen nur eine begrenzte Anzahl von Benutzer zur Verfügung. -Der Standard sind 5 Benutzer. Sie können in der Konfiguration diese Einstellung anpassen. +while selecting up to x users day- and weekview is not consolidated (5 is used when not set) admin de Für diese Ansicht steht Ihnen nur eine begrenzte Anzahl von Benutzer zur Verfügung. whole day calendar de ganztägig -whole query calendar de Ganze Abfrage with credentials included calendar de Mit Zugangsdaten im URL wk calendar de KW work day ends on calendar de Arbeitstag endet um diff --git a/calendar/lang/egw_en.lang b/calendar/lang/egw_en.lang index 47c2918f80..9e14bc9ac4 100644 --- a/calendar/lang/egw_en.lang +++ b/calendar/lang/egw_en.lang @@ -37,7 +37,7 @@ all exceptions are converted into single events. calendar en All exceptions are all future calendar en All future all incl. rejected calendar en All incl. rejected all participants calendar en All participants -allow users to prevent change notifications ('Do not notify') calendar en Allow users to prevent change notifications ('Do not notify') +allow users to prevent change notifications ('do not notify') calendar en Allow users to prevent change notifications ('Do not notify') allows to edit the event again calendar en Allows to edit the event again always calendar en Always apply the action on the whole query, not only the shown events calendar en Apply the action on the whole query, NOT only the shown events @@ -82,7 +82,7 @@ category acl common en Category ACL category acl only restrict adding a category to an event or changing status of a participant. it does not change the visibility of an event! calendar en Category ACL only restrict adding a category to an event or changing status of a participant. It does NOT change the visibility of an event! chair calendar en Chair change history calendar en Change history -change your participant status calendar en Change your participant status +change your status calendar en Change your status charset of file calendar en Charset of file check all calendar en Check all choose a category calendar en Choose a category @@ -138,6 +138,7 @@ display status of events calendar en Display status of events displayed view calendar en Displayed view displays this calendar view on the home page (page you get when you enter egroupware or click on the home page icon)? calendar en Displays this calendar view on the home page (page you get when you enter EGroupware or click on the home page icon)? do not include events of group members calendar en Do not include events of group members +do not notify calendar en Do not notify do not notify of these changes calendar en Do not notify of these changes do you really want to change the start of this series? if you do, the original series will be terminated as of today and a new series for the future reflecting your changes will be created. calendar en Do you really want to change the start of this series? If you do, the original series will be terminated as of today and a new series for the future reflecting your changes will be created. do you want a weekview with or without weekend? calendar en Do you want a weekview with or without weekend? @@ -530,7 +531,6 @@ when selected, birthdays and/or holidays will be displayed as events in your cal which view to show on home page calendar en Which view to show on home page while selecting up to x users day- and weekview is not consolidated (5 is used when not set) admin en While selecting up to X users day- and weekview is not consolidated (5 is used when not set) whole day calendar en Whole day -whole query calendar en whole query with credentials included calendar en With credentials included wk calendar en Wk work day ends on calendar en Work day ends on diff --git a/calendar/setup/etemplates.inc.php b/calendar/setup/etemplates.inc.php index b9d6f7f5aa..6d2276ada5 100644 --- a/calendar/setup/etemplates.inc.php +++ b/calendar/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * eGroupWare - eTemplates for Application calendar * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2011-04-08 16:17 + * generated by soetemplate::dump4setup() 2011-04-27 18:44 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package calendar @@ -55,7 +55,7 @@ $templ_data[] = array('name' => 'calendar.freetimesearch.rows','template' => '', $templ_data[] = array('name' => 'calendar.import','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"iCal file";}s:1:"B";a:3:{s:4:"type";s:4:"file";s:4:"name";s:9:"ical_file";s:6:"needed";s:1:"1";}}i:3;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:6:"button";s:5:"label";s:6:"Import";s:4:"name";s:6:"import";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:5:"align";s:6:"center";s:7:"options";a:0:{}}}','size' => '','style' => '','modified' => '1131469789',); -$templ_data[] = array('name' => 'calendar.list','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:4:{s:2:"h2";s:6:",!@msg";s:2:"h1";s:6:",!@css";s:2:"c4";s:7:"noPrint";s:1:"B";s:3:"30%";}i:1;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:4:"span";s:3:"all";s:4:"name";s:3:"css";}}i:2;a:2:{s:1:"A";a:5:{s:5:"align";s:6:"center";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";}s:1:"B";a:5:{s:5:"align";s:6:"center";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";s:4:"type";s:5:"label";s:4:"span";s:10:",redItalic";}}i:3;a:2:{s:1:"A";a:4:{s:4:"name";s:2:"nm";s:4:"size";s:18:"calendar.list.rows";s:4:"type";s:9:"nextmatch";s:4:"span";s:3:"all";}s:1:"B";a:3:{s:4:"name";s:2:"nm";s:4:"size";s:18:"calendar.list.rows";s:4:"type";s:9:"nextmatch";}}i:4;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:5:{s:5:"label";s:11:"whole query";s:8:"onchange";s:121:"if (this.checked==true && !confirm(\'Apply the action on the whole query, NOT only the shown events\')) this.checked=false;";s:4:"name";s:7:"use_all";s:4:"type";s:8:"checkbox";s:4:"help";s:62:"Apply the action on the whole query, NOT only the shown events";}i:2;a:6:{s:8:"onchange";s:16:"do_action(this);";s:7:"no_lang";s:1:"1";s:4:"name";s:6:"action";s:4:"size";s:19:"Select an action...";s:4:"type";s:6:"select";s:4:"help";s:16:"Select an action";}i:3;a:9:{s:5:"label";s:9:"Check all";s:7:"onclick";s:70:"toggle_all(this.form,form::name(\'nm[rows][checked][]\')); return false;";s:6:"needed";s:1:"1";s:4:"name";s:9:"check_all";s:4:"type";s:6:"button";s:4:"size";s:9:"arrow_ltr";s:4:"help";s:9:"Check all";s:4:"span";s:14:",checkAllArrow";s:5:"align";s:5:"right";}}}i:5;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:5:"2,0,0";i:1;a:4:{s:5:"label";s:30:"Do not notify of these changes";s:4:"name";s:16:"no_notifications";s:4:"type";s:8:"checkbox";s:4:"help";s:30:"Do not notify of these changes";}i:2;a:3:{s:8:"onchange";s:16:"do_action(this);";s:7:"no_lang";s:1:"1";s:4:"type";s:5:"label";}}}}s:4:"cols";i:2;s:4:"rows";i:5;s:4:"size";s:4:"100%";}}','size' => '100%','style' => '.noWrap { white-space: nowrap; } +$templ_data[] = array('name' => 'calendar.list','template' => '','lang' => '','group' => '0','version' => '1.9.002','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:5:{s:2:"h2";s:6:",!@msg";s:2:"h1";s:6:",!@css";s:2:"c4";s:7:"noPrint";s:1:"B";s:3:"30%";s:2:"h4";s:34:",!@nm[selectcols]=/legacy_actions/";}i:1;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:4:"span";s:3:"all";s:4:"name";s:3:"css";}}i:2;a:2:{s:1:"A";a:5:{s:5:"align";s:6:"center";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";}s:1:"B";a:5:{s:5:"align";s:6:"center";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";s:4:"type";s:5:"label";s:4:"span";s:10:",redItalic";}}i:3;a:2:{s:1:"A";a:4:{s:4:"name";s:2:"nm";s:4:"size";s:18:"calendar.list.rows";s:4:"type";s:9:"nextmatch";s:4:"span";s:3:"all";}s:1:"B";a:3:{s:4:"name";s:2:"nm";s:4:"size";s:18:"calendar.list.rows";s:4:"type";s:9:"nextmatch";}}i:4;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:5:{s:5:"label";s:13:"Select action";s:7:"onclick";s:141:"if (!egw_objectManager.executeActionImplementation(this, \'popup\')) alert(egw::lang(\'You need to select some entries first!\')); return false;;";s:4:"name";s:14:"legacy_actions";s:4:"type";s:10:"buttononly";s:4:"help";s:13:"Select action";}i:2;a:8:{s:5:"label";s:9:"Check all";s:7:"onclick";s:70:"toggle_all(this.form,form::name(\'nm[rows][checked][]\')); return false;";s:6:"needed";s:1:"1";s:4:"name";s:9:"check_all";s:4:"type";s:6:"button";s:4:"size";s:9:"arrow_ltr";s:4:"help";s:9:"Check all";s:4:"span";s:14:",checkAllArrow";}s:5:"align";s:5:"right";}}}s:4:"cols";i:2;s:4:"rows";i:4;s:4:"size";s:4:"100%";}}','size' => '100%','style' => '.noWrap { white-space: nowrap; } .image16 img { height: 16px; @@ -67,7 +67,7 @@ $templ_data[] = array('name' => 'calendar.list','template' => '','lang' => '','g $templ_data[] = array('name' => 'calendar.list.dates','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:1:{i:0;a:10:{s:4:"type";s:4:"hbox";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:1:"4";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Start";}i:2;a:2:{s:4:"type";s:4:"date";s:4:"name";s:9:"startdate";}i:3;a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"End";}i:4;a:2:{s:4:"type";s:4:"date";s:4:"name";s:7:"enddate";}s:4:"span";s:12:",custom_hide";}}','size' => '','style' => '.custom_hide { visibility: hidden; }','modified' => '1173420675',); -$templ_data[] = array('name' => 'calendar.list.rows','template' => '','lang' => '','group' => '0','version' => '1.9.004','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:3:{s:1:"B";s:3:"40%";s:2:"c1";s:2:"th";s:2:"c2";s:23:"$row_cont[category],top";}i:1;a:13:{s:1:"A";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:5:"label";s:5:"Start";s:4:"name";s:9:"cal_start";s:4:"type";s:20:"nextmatch-sortheader";}i:2;a:3:{s:5:"label";s:3:"End";s:4:"name";s:7:"cal_end";s:4:"type";s:20:"nextmatch-sortheader";}}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:5:"label";s:5:"Title";s:4:"name";s:9:"cal_title";s:4:"type";s:20:"nextmatch-sortheader";}i:2;a:3:{s:5:"label";s:11:"Description";s:4:"name";s:15:"cal_description";s:4:"type";s:20:"nextmatch-sortheader";}}s:1:"C";a:3:{s:5:"label";s:5:"Title";s:4:"name";s:9:"cal_title";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"D";a:3:{s:5:"label";s:11:"Description";s:4:"name";s:15:"cal_description";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"E";a:3:{s:5:"label";s:10:"Recurrence";s:4:"name";s:6:"recure";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"F";a:3:{s:5:"label";s:8:"Category";s:4:"name";s:6:"cat_id";s:4:"type";s:16:"nextmatch-header";}s:1:"G";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:4:{s:5:"label";s:5:"Owner";s:8:"readonly";s:4:"true";s:4:"name";s:9:"cal_owner";s:4:"type";s:20:"nextmatch-sortheader";}i:2;a:3:{s:5:"label";s:8:"Location";s:4:"name";s:12:"cal_location";s:4:"type";s:20:"nextmatch-sortheader";}}s:1:"H";a:4:{s:5:"label";s:5:"Owner";s:8:"readonly";s:4:"true";s:4:"name";s:9:"cal_owner";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"I";a:3:{s:5:"label";s:8:"Location";s:4:"name";s:12:"cal_location";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"J";a:4:{s:5:"label";s:12:"Participants";s:4:"name";s:11:"participant";s:4:"size";s:3:"All";s:4:"type";s:23:"nextmatch-accountfilter";}s:1:"K";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"3";i:1;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:7:"Created";s:4:"name";s:11:"cal_created";}i:2;a:4:{s:4:"type";s:16:"nextmatch-header";s:4:"name";s:11:"cal_creator";s:4:"size";s:7:"Creator";s:5:"label";s:7:"Creator";}i:3;a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Last changed";}}s:1:"L";a:4:{s:5:"label";s:13:"Custom fields";s:8:"readonly";s:4:"true";s:4:"name";s:3:"cfs";s:4:"type";s:22:"nextmatch-customfields";}s:1:"M";a:7:{s:5:"label";s:7:"Actions";s:5:"class";s:7:"noPrint";s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";s:4:"help";s:9:"Check all";s:4:"span";s:8:",noPrint";}i:2;a:8:{s:5:"label";s:9:"Check all";s:7:"onclick";s:60:"toggle_all(this.form,form::name(\'checked[]\')); return false;";s:6:"needed";s:1:"1";s:5:"align";s:5:"right";s:4:"name";s:9:"check_all";s:4:"type";s:6:"button";s:4:"size";s:5:"check";s:4:"help";s:9:"Check all";}s:4:"span";s:8:",noPrint";}}i:2;a:13:{s:1:"A";a:5:{s:4:"name";s:5:"start";s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:5:{s:8:"readonly";s:4:"true";s:4:"name";s:13:"${row}[start]";s:4:"size";s:14:",$cont[format]";s:4:"type";s:9:"date-time";s:4:"span";s:7:",noWrap";}i:2;a:5:{s:8:"readonly";s:4:"true";s:4:"name";s:11:"${row}[end]";s:4:"size";s:14:",$cont[format]";s:4:"type";s:9:"date-time";s:4:"span";s:7:",noWrap";}}s:1:"B";a:6:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"3";i:1;a:6:{s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:4:"size";s:1:"2";s:4:"type";s:4:"hbox";i:1;a:5:{s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[title]";s:4:"size";s:1:"b";s:4:"type";s:5:"label";}i:2;a:5:{s:4:"type";s:5:"label";s:5:"label";s:3:"#%s";s:4:"name";s:10:"${row}[id]";s:4:"size";s:1:"b";s:5:"align";s:5:"right";}}i:2;a:5:{s:7:"no_lang";s:1:"1";s:4:"type";s:3:"box";s:4:"size";s:1:"1";i:1;a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:19:"${row}[description]";s:4:"type";s:5:"label";}s:4:"span";s:16:",listDescription";}i:3;a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:14:"${row}[recure]";s:4:"type";s:5:"label";}s:4:"span";s:9:",listVbox";}s:1:"C";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:2:{s:4:"name";s:13:"${row}[title]";s:4:"type";s:5:"label";}i:2;a:5:{s:4:"type";s:5:"label";s:5:"label";s:3:"#%s";s:4:"name";s:10:"${row}[id]";s:4:"size";s:1:"b";s:5:"align";s:5:"right";}}s:1:"D";a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:19:"${row}[description]";s:4:"type";s:5:"label";}s:1:"E";a:2:{s:4:"name";s:14:"${row}[recure]";s:4:"type";s:5:"label";}s:1:"F";a:3:{s:4:"type";s:10:"select-cat";s:8:"readonly";s:1:"1";s:4:"name";s:16:"${row}[category]";}s:1:"G";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:14:"select-account";s:5:"class";s:6:"noWrap";s:8:"readonly";s:4:"true";s:4:"name";s:13:"${row}[owner]";}i:2;a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:16:"${row}[location]";s:4:"type";s:5:"label";}}s:1:"H";a:4:{s:4:"type";s:14:"select-account";s:5:"class";s:6:"noWrap";s:8:"readonly";s:4:"true";s:4:"name";s:13:"${row}[owner]";}s:1:"I";a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:16:"${row}[location]";s:4:"type";s:5:"label";}s:1:"J";a:4:{s:8:"readonly";s:4:"true";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[parts]";s:4:"type";s:4:"html";}s:1:"K";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"3";i:1;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:15:"${row}[created]";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:15:"${row}[creator]";s:8:"readonly";s:1:"1";}i:3;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:16:"${row}[modified]";s:8:"readonly";s:1:"1";}}s:1:"L";a:2:{s:4:"name";s:4:"$row";s:4:"type";s:17:"customfields-list";}s:1:"M";a:5:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"vbox";i:1;a:8:{s:5:"class";s:7:"noPrint";s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:6:{s:5:"label";s:4:"View";s:7:"onclick";s:206:"window.open(egw::link(\'/index.php\',\'menuaction=calendar.calendar_uiforms.edit&cal_id=$row_cont[id]&date=$row_cont[date]\'),\'425\',\'dependent=yes,width=750,height=450,scrollbars=yes,status=yes\'); return false;";s:4:"name";s:19:"view[$row_cont[id]]";s:4:"type";s:6:"button";s:4:"size";s:4:"view";s:4:"help";s:15:"View this event";}i:2;a:6:{s:4:"type";s:6:"button";s:4:"size";s:9:"timesheet";s:5:"label";s:19:"Add timesheet entry";s:4:"name";s:29:"timesheet[$row_cont[info_id]]";s:7:"onclick";s:267:"window.open(egw::link(\'/index.php\',\'menuaction=timesheet.timesheet_ui.edit&link_app[]=$row_cont[app]&cat_id=$row_cont[category]&link_id[]=$row_cont[app_id]$row_cont[extra_links]\'),\'_blank\',\'dependent=yes,width=600,height=400,scrollbars=yes,status=yes\'); return false;";s:5:"align";s:6:"center";}i:3;a:6:{s:5:"label";s:4:"Edit";s:7:"onclick";s:20:"$row_cont[edit_link]";s:4:"name";s:19:"edit[$row_cont[id]]";s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:4:"help";s:15:"Edit this event";}i:4;a:6:{s:5:"label";s:6:"Delete";s:7:"onclick";s:36:"return confirm(\'Delete this event\');";s:4:"name";s:21:"delete[$row_cont[id]]";s:4:"type";s:6:"button";s:4:"size";s:6:"delete";s:4:"help";s:17:"Delete this event";}i:5;a:5:{s:5:"align";s:5:"right";s:4:"name";s:9:"checked[]";s:4:"size";s:35:"$row_cont[id]:$row_cont[recur_date]";s:4:"type";s:8:"checkbox";s:4:"help";s:45:"Select multiple contacts for a further action";}}i:2;a:4:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"hbox";i:1;a:4:{s:4:"type";s:6:"button";s:4:"size";s:15:"etemplate/merge";s:5:"label";s:5:"merge";s:4:"name";s:45:"document[$row_cont[id]:$row_cont[recur_date]]";}i:2;a:6:{s:5:"label";s:11:"Filemanager";s:4:"size";s:18:"filemanager/navbar";s:4:"type";s:6:"button";s:4:"name";s:26:"filemanager[$row_cont[id]]";s:4:"span";s:8:",image16";s:7:"onclick";s:139:"window.location.href=egw::link(\'/index.php\',\'menuaction=filemanager.filemanager_ui.index&path=/apps/calendar/$row_cont[id]\'); return false;";}}s:4:"span";s:8:",noPrint";}}}s:4:"cols";i:13;s:4:"rows";i:2;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1298450177',); +$templ_data[] = array('name' => 'calendar.list.rows','template' => '','lang' => '','group' => '0','version' => '1.9.004','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:3:{s:1:"B";s:3:"40%";s:2:"c1";s:2:"th";s:2:"c2";s:40:"$row_cont[category] $row_cont[class],top";}i:1;a:13:{s:1:"A";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:5:"label";s:5:"Start";s:4:"name";s:9:"cal_start";s:4:"type";s:20:"nextmatch-sortheader";}i:2;a:3:{s:5:"label";s:3:"End";s:4:"name";s:7:"cal_end";s:4:"type";s:20:"nextmatch-sortheader";}}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:5:"label";s:5:"Title";s:4:"name";s:9:"cal_title";s:4:"type";s:20:"nextmatch-sortheader";}i:2;a:3:{s:5:"label";s:11:"Description";s:4:"name";s:15:"cal_description";s:4:"type";s:20:"nextmatch-sortheader";}}s:1:"C";a:3:{s:5:"label";s:5:"Title";s:4:"name";s:9:"cal_title";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"D";a:3:{s:5:"label";s:11:"Description";s:4:"name";s:15:"cal_description";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"E";a:3:{s:5:"label";s:10:"Recurrence";s:4:"name";s:6:"recure";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"F";a:3:{s:5:"label";s:8:"Category";s:4:"name";s:6:"cat_id";s:4:"type";s:16:"nextmatch-header";}s:1:"G";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:4:{s:5:"label";s:5:"Owner";s:8:"readonly";s:4:"true";s:4:"name";s:9:"cal_owner";s:4:"type";s:20:"nextmatch-sortheader";}i:2;a:3:{s:5:"label";s:8:"Location";s:4:"name";s:12:"cal_location";s:4:"type";s:20:"nextmatch-sortheader";}}s:1:"H";a:4:{s:5:"label";s:5:"Owner";s:8:"readonly";s:4:"true";s:4:"name";s:9:"cal_owner";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"I";a:3:{s:5:"label";s:8:"Location";s:4:"name";s:12:"cal_location";s:4:"type";s:20:"nextmatch-sortheader";}s:1:"J";a:4:{s:5:"label";s:12:"Participants";s:4:"name";s:11:"participant";s:4:"size";s:3:"All";s:4:"type";s:23:"nextmatch-accountfilter";}s:1:"K";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"3";i:1;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:7:"Created";s:4:"name";s:11:"cal_created";}i:2;a:4:{s:4:"type";s:16:"nextmatch-header";s:4:"name";s:11:"cal_creator";s:4:"size";s:7:"Creator";s:5:"label";s:7:"Creator";}i:3;a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Last changed";}}s:1:"L";a:4:{s:5:"label";s:13:"Custom fields";s:8:"readonly";s:4:"true";s:4:"name";s:3:"cfs";s:4:"type";s:22:"nextmatch-customfields";}s:1:"M";a:7:{s:5:"label";s:7:"Actions";s:5:"class";s:7:"noPrint";s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:7:"Actions";s:4:"help";s:9:"Check all";s:4:"span";s:8:",noPrint";s:4:"name";s:14:"legacy_actions";}i:2;a:8:{s:5:"label";s:9:"Check all";s:7:"onclick";s:60:"toggle_all(this.form,form::name(\'checked[]\')); return false;";s:6:"needed";s:1:"1";s:5:"align";s:5:"right";s:4:"name";s:9:"check_all";s:4:"type";s:6:"button";s:4:"size";s:5:"check";s:4:"help";s:9:"Check all";}s:4:"span";s:8:",noPrint";}}i:2;a:13:{s:1:"A";a:5:{s:4:"name";s:5:"start";s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:5:{s:8:"readonly";s:4:"true";s:4:"name";s:13:"${row}[start]";s:4:"size";s:14:",$cont[format]";s:4:"type";s:9:"date-time";s:4:"span";s:7:",noWrap";}i:2;a:5:{s:8:"readonly";s:4:"true";s:4:"name";s:11:"${row}[end]";s:4:"size";s:14:",$cont[format]";s:4:"type";s:9:"date-time";s:4:"span";s:7:",noWrap";}}s:1:"B";a:6:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"3";i:1;a:6:{s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:4:"size";s:1:"2";s:4:"type";s:4:"hbox";i:1;a:5:{s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[title]";s:4:"size";s:1:"b";s:4:"type";s:5:"label";}i:2;a:5:{s:4:"type";s:5:"label";s:5:"label";s:3:"#%s";s:4:"name";s:10:"${row}[id]";s:4:"size";s:1:"b";s:5:"align";s:5:"right";}}i:2;a:5:{s:7:"no_lang";s:1:"1";s:4:"type";s:3:"box";s:4:"size";s:1:"1";i:1;a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:19:"${row}[description]";s:4:"type";s:5:"label";}s:4:"span";s:16:",listDescription";}i:3;a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:14:"${row}[recure]";s:4:"type";s:5:"label";}s:4:"span";s:9:",listVbox";}s:1:"C";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:2:{s:4:"name";s:13:"${row}[title]";s:4:"type";s:5:"label";}i:2;a:5:{s:4:"type";s:5:"label";s:5:"label";s:3:"#%s";s:4:"name";s:10:"${row}[id]";s:4:"size";s:1:"b";s:5:"align";s:5:"right";}}s:1:"D";a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:19:"${row}[description]";s:4:"type";s:5:"label";}s:1:"E";a:2:{s:4:"name";s:14:"${row}[recure]";s:4:"type";s:5:"label";}s:1:"F";a:3:{s:4:"type";s:10:"select-cat";s:8:"readonly";s:1:"1";s:4:"name";s:16:"${row}[category]";}s:1:"G";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:14:"select-account";s:5:"class";s:6:"noWrap";s:8:"readonly";s:4:"true";s:4:"name";s:13:"${row}[owner]";}i:2;a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:16:"${row}[location]";s:4:"type";s:5:"label";}}s:1:"H";a:4:{s:4:"type";s:14:"select-account";s:5:"class";s:6:"noWrap";s:8:"readonly";s:4:"true";s:4:"name";s:13:"${row}[owner]";}s:1:"I";a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:16:"${row}[location]";s:4:"type";s:5:"label";}s:1:"J";a:4:{s:8:"readonly";s:4:"true";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[parts]";s:4:"type";s:4:"html";}s:1:"K";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"3";i:1;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:15:"${row}[created]";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:15:"${row}[creator]";s:8:"readonly";s:1:"1";}i:3;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:16:"${row}[modified]";s:8:"readonly";s:1:"1";}}s:1:"L";a:2:{s:4:"name";s:4:"$row";s:4:"type";s:17:"customfields-list";}s:1:"M";a:5:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"vbox";i:1;a:7:{s:5:"class";s:7:"noPrint";s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";i:1;a:6:{s:5:"label";s:4:"View";s:7:"onclick";s:206:"window.open(egw::link(\'/index.php\',\'menuaction=calendar.calendar_uiforms.edit&cal_id=$row_cont[id]&date=$row_cont[date]\'),\'425\',\'dependent=yes,width=750,height=450,scrollbars=yes,status=yes\'); return false;";s:4:"name";s:19:"view[$row_cont[id]]";s:4:"type";s:6:"button";s:4:"size";s:4:"view";s:4:"help";s:15:"View this event";}i:2;a:6:{s:5:"label";s:4:"Edit";s:7:"onclick";s:20:"$row_cont[edit_link]";s:4:"name";s:19:"edit[$row_cont[id]]";s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:4:"help";s:15:"Edit this event";}i:3;a:6:{s:5:"label";s:6:"Delete";s:7:"onclick";s:36:"return confirm(\'Delete this event\');";s:4:"name";s:21:"delete[$row_cont[id]]";s:4:"type";s:6:"button";s:4:"size";s:6:"delete";s:4:"help";s:17:"Delete this event";}i:4;a:5:{s:5:"align";s:5:"right";s:4:"name";s:9:"checked[]";s:4:"size";s:35:"$row_cont[id]:$row_cont[recur_date]";s:4:"type";s:8:"checkbox";s:4:"help";s:45:"Select multiple contacts for a further action";}}i:2;a:5:{s:4:"size";s:6:"3,,0,0";s:4:"type";s:4:"hbox";i:1;a:4:{s:4:"type";s:6:"button";s:4:"size";s:15:"etemplate/merge";s:5:"label";s:5:"merge";s:4:"name";s:45:"document[$row_cont[id]:$row_cont[recur_date]]";}i:2;a:6:{s:5:"label";s:11:"Filemanager";s:4:"size";s:18:"filemanager/navbar";s:4:"type";s:6:"button";s:4:"name";s:26:"filemanager[$row_cont[id]]";s:4:"span";s:8:",image16";s:7:"onclick";s:139:"window.location.href=egw::link(\'/index.php\',\'menuaction=filemanager.filemanager_ui.index&path=/apps/calendar/$row_cont[id]\'); return false;";}i:3;a:5:{s:4:"type";s:6:"button";s:4:"size";s:9:"timesheet";s:5:"label";s:19:"Add timesheet entry";s:4:"name";s:29:"timesheet[$row_cont[info_id]]";s:7:"onclick";s:267:"window.open(egw::link(\'/index.php\',\'menuaction=timesheet.timesheet_ui.edit&link_app[]=$row_cont[app]&cat_id=$row_cont[category]&link_id[]=$row_cont[app_id]$row_cont[extra_links]\'),\'_blank\',\'dependent=yes,width=600,height=400,scrollbars=yes,status=yes\'); return false;";}}s:4:"span";s:8:",noPrint";}}}s:4:"cols";i:13;s:4:"rows";i:2;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1298450177',); $templ_data[] = array('name' => 'calendar.print','template' => '','lang' => '','group' => '0','version' => '1.6.001','data' => 'a:1:{i:0;a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"hbox";i:1;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:15:{i:0;a:13:{s:1:"A";s:2:"95";s:2:"c2";s:2:"th";s:2:"c5";s:3:"row";s:2:"c6";s:7:"row_off";s:2:"c7";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:2:"c8";s:3:"row";s:2:"c9";s:3:"row";s:2:"h2";s:2:"28";s:2:"c1";s:2:"th";s:3:"c10";s:4:",top";s:3:"c11";s:2:"th";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"image";s:4:"name";s:5:"print";s:7:"onclick";s:15:"window.print();";}s:1:"B";a:4:{s:4:"type";s:5:"label";s:4:"span";s:5:",bold";s:5:"label";s:8:"Calendar";s:4:"size";s:4:"bold";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Title";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"name";s:5:"title";s:4:"size";s:6:"80,255";s:8:"readonly";s:1:"1";s:4:"span";s:3:"all";}}i:3;a:2:{s:1:"A";a:4:{s:5:"width";s:2:"95";s:4:"size";s:8:",,,start";s:4:"type";s:5:"label";s:5:"label";s:5:"Start";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:3:{s:4:"name";s:5:"start";s:4:"type";s:9:"date-time";s:8:"readonly";s:1:"1";}i:2;a:7:{s:5:"label";s:9:"whole day";s:4:"name";s:9:"whole_day";s:4:"size";s:11:",, ,disable";s:4:"type";s:8:"checkbox";s:4:"help";s:31:"Event will occupy the whole day";s:5:"align";s:6:"center";s:8:"readonly";s:1:"1";}}}i:4;a:2:{s:1:"A";a:4:{s:5:"width";s:1:"0";s:4:"size";s:11:",,,duration";s:4:"type";s:5:"label";s:5:"label";s:8:"Duration";}s:1:"B";a:4:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"hbox";i:1;a:7:{s:7:"no_lang";s:1:"1";s:8:"onchange";s:227:"set_style_by_class(\'table\',\'end_hide\',\'visibility\',this.value == \'\' ? \'visible\' : \'hidden\'); if (this.value == \'\') document.getElementById(form::name(\'end[str]\')).value = document.getElementById(form::name(\'start[str]\')).value;";s:4:"name";s:8:"duration";s:4:"size";s:12:"Use end date";s:4:"type";s:6:"select";s:4:"help";s:23:"Duration of the meeting";s:8:"readonly";s:1:"1";}i:2;a:4:{s:4:"name";s:3:"end";s:4:"type";s:9:"date-time";s:4:"span";s:9:",end_hide";s:8:"readonly";s:1:"1";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"size";s:11:",,,location";s:4:"type";s:5:"label";s:5:"label";s:8:"Location";s:5:"width";s:1:"0";}s:1:"B";a:5:{s:4:"size";s:4:",255";s:4:"name";s:8:"location";s:4:"type";s:4:"text";s:4:"span";s:15:",inputFullWidth";s:8:"readonly";s:1:"1";}}i:6;a:2:{s:1:"A";a:4:{s:4:"size";s:11:",,,priority";s:4:"type";s:5:"label";s:5:"label";s:8:"Priority";s:5:"width";s:1:"0";}s:1:"B";a:3:{s:4:"type";s:15:"select-priority";s:4:"name";s:8:"priority";s:8:"readonly";s:1:"1";}}i:7;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Options";s:5:"width";s:1:"0";}s:1:"B";a:6:{s:4:"name";s:12:"non_blocking";s:4:"size";s:11:",, ,disable";s:4:"type";s:8:"checkbox";s:4:"help";s:56:"A non blocking event will not conflict with other events";s:5:"label";s:12:"non blocking";s:8:"readonly";s:1:"1";}}i:8;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:5:{s:4:"name";s:6:"public";s:4:"size";s:3:"0,1";s:4:"type";s:8:"checkbox";s:5:"label";s:7:"Private";s:8:"readonly";s:1:"1";}}i:9;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"Categories";}s:1:"B";a:3:{s:4:"type";s:10:"select-cat";s:4:"name";s:8:"category";s:8:"readonly";s:1:"1";}}i:10;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Description";}s:1:"B";a:3:{s:4:"type";s:8:"textarea";s:4:"name";s:11:"description";s:8:"readonly";s:1:"1";}}i:11;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:13:"custom fields";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:12;a:2:{s:1:"A";a:3:{s:4:"type";s:12:"customfields";s:4:"span";s:3:"all";s:8:"readonly";s:1:"1";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:13;a:2:{s:1:"A";a:3:{s:4:"type";s:8:"template";s:4:"name";s:27:"calendar.print.participants";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:14;a:2:{s:1:"A";a:3:{s:4:"type";s:8:"template";s:4:"span";s:3:"all";s:4:"name";s:20:"calendar.print.links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"cols";i:2;s:4:"rows";i:14;s:4:"size";s:8:"100%,200";}}}','size' => '','style' => '','modified' => '1229596125',); diff --git a/calendar/templates/default/list.xet b/calendar/templates/default/list.xet index dcc66fceef..8c0ebd1769 100644 --- a/calendar/templates/default/list.xet +++ b/calendar/templates/default/list.xet @@ -1,7 +1,7 @@ -