From 0548cf5770c1c726d278fd9c42d02f53d2a83963 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 12 Oct 2009 19:16:42 +0000 Subject: [PATCH] - added roles to UI - enabling again resource booking without direct booking permission (status is then unknown, not accepted) --- calendar/inc/class.calendar_bo.inc.php | 17 +++- calendar/inc/class.calendar_so.inc.php | 2 +- calendar/inc/class.calendar_uiforms.inc.php | 105 ++++++++++---------- calendar/setup/egw_de.lang | 7 ++ calendar/setup/egw_en.lang | 7 ++ calendar/setup/etemplates.inc.php | 6 +- calendar/templates/default/edit.xet | 19 +++- calendar/templates/default/list.xet | 4 +- resources/inc/class.bo_resources.inc.php | 32 +++--- 9 files changed, 120 insertions(+), 79 deletions(-) diff --git a/calendar/inc/class.calendar_bo.inc.php b/calendar/inc/class.calendar_bo.inc.php index 8ae86db633..003ecf861a 100644 --- a/calendar/inc/class.calendar_bo.inc.php +++ b/calendar/inc/class.calendar_bo.inc.php @@ -122,6 +122,17 @@ class calendar_bo MCAL_M_SATURDAY => 'Saturday', MCAL_M_SUNDAY => 'Sunday', ); + /** + * Standard iCal attendee roles + * + * @var array + */ + var $roles = array( + 'REQ-PARTICIPANT' => 'Requested', + 'CHAIR' => 'Chair', + 'OPT-PARTICIPANT' => 'Optional', + 'NON-PARTICIPANT' => 'None', + ); /** * @var array $resources registered scheduling resources of the calendar (gets chached in the session for performance reasons) */ @@ -1547,8 +1558,12 @@ class calendar_bo // add role, if not a regular participant if ($role != 'REQ-PARTICIPANT') { + if (isset($this->roles[$role])) + { + $role = $this->roles[$role]; + } // allow to use cats as roles (beside regular iCal ones) - if (substr($role,0,6) == 'X-CAT-' && ($cat_id = (int)substr($role,6)) > 0) + elseif (substr($role,0,6) == 'X-CAT-' && ($cat_id = (int)substr($role,6)) > 0) { $role = $GLOBALS['egw']->categories->id2name($cat_id); } diff --git a/calendar/inc/class.calendar_so.inc.php b/calendar/inc/class.calendar_so.inc.php index 317af680c4..32ffb697f9 100644 --- a/calendar/inc/class.calendar_so.inc.php +++ b/calendar/inc/class.calendar_so.inc.php @@ -888,7 +888,7 @@ ORDER BY cal_user_type, cal_usre_id if (strlen($status) > 1 && preg_match('/^.([0-9]*)(.*)$/',$status,$matches)) { if ((int)$matches[1] > 0) $quantity = (int)$matches[1]; - $role = $matches[2]; + if ($matches[2]) $role = $matches[2]; $status = $status[0]; } } diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php index 8a6ee29162..fd2cd5dfbb 100644 --- a/calendar/inc/class.calendar_uiforms.inc.php +++ b/calendar/inc/class.calendar_uiforms.inc.php @@ -129,13 +129,9 @@ class calendar_uiforms extends calendar_ui { $res_data = $this->bo->resources[$uid[0]]; list($id,$quantity) = explode(':',substr($uid,1)); - $participants[$uid] = $participant_types[$uid[0]][$id] = ($res_data['new_status'] ? ExecMethod($res_data['new_status'],$id) : 'U'). - ((int) $quantity > 1 ? (int)$quantity : ''); - // if new_status == 'x', resource is not bookable - if(strpos($participant_types[$uid[0]][$id],'x') !== false) + if (($status = $res_data['new_status'] ? ExecMethod($res_data['new_status'],$id) : 'U')) { - unset($participant_types[$uid[0]][$id]); - unset($participants[$uid]); + $participants[$uid] = $participant_types[$uid[0]][$id] = $status.((int) $quantity > 1 ? (int)$quantity : ''); } } } @@ -233,12 +229,14 @@ class calendar_uiforms extends calendar_ui $event['recur_data'] = 1 << (int)date('w',$event['start']); } $event['participants'] = $event['participant_types'] = array(); +_debug_array($content['participants']); foreach($content['participants'] as $key => $data) { switch($key) { case 'delete': // handled in default case 'quantity': // handled in new_resource + case 'role': // handled in add, account or resource case 'cal_resources': break; @@ -248,21 +246,22 @@ class calendar_uiforms extends calendar_ui if (($email = $_POST['exec']['participants']['resource']['query']) && (preg_match('/^(.*<)?([a-z0-9_.-]+@[a-z0-9_.-]{5,})>?$/i',$email,$matches))) { + $status = calendar_so::combine_status('U',$content['participants']['quantity'],$content['participants']['role']); // check if email belongs to account or contact --> prefer them over just emails if (($data = $GLOBALS['egw']->accounts->name2id($matches[2],'account_email'))) { - $event['participants'][$data] = $event['participant_types']['u'][$data] = 'U'; + $event['participants'][$data] = $event['participant_types']['u'][$data] = $status; } elseif ((list($data) = ExecMethod2('addressbook.addressbook_bo.search',array( 'email' => $matches[2], 'email_home' => $matches[2], ),true,'','','',false,'OR'))) { - $event['participants']['c'.$data['id']] = $event['participant_types']['c'][$data['id']] = 'U'; + $event['participants']['c'.$data['id']] = $event['participant_types']['c'][$data['id']] = $status; } else { - $event['participants']['e'.$email] = $event['participant_types']['e'][$email] = 'U'; + $event['participants']['e'.$email] = $event['participant_types']['e'][$email] = $status; } } elseif (!$content['participants']['account'] && !$content['participants']['resource']) @@ -282,37 +281,21 @@ class calendar_uiforms extends calendar_ui } foreach($this->bo->resources as $type => $data) if ($data['app'] == $app) break; $uid = $this->bo->resources[$type]['app'] == $app ? $type.$id : false; - // check if new entry is no contact or no account + // check if new entry is no account (or contact entry of an account) if ($app != 'addressbook' || !($data = $GLOBALS['egw']->accounts->name2id($id,'person_id'))) { - $quantity = $content['participants']['quantity'] ? $content['participants']['quantity'] : 1; - if ($app == "resources" && !empty($id)) { - $bores = CreateObject('resources.bo_resources'); - $selectedres = $bores->read($id); - $cats = $bores->acl->get_cats(EGW_ACL_DIRECT_BOOKING); - if (is_array($cats) && $selectedres['bookable'] == 1 && - $selectedres['cat_id'] && array_key_exists($selectedres['cat_id'],$cats)) - { - if ($selectedres['quantity'] && $selectedres['quantity'] < $quantity) { - $msg .= lang('You requested more than available for the selected resource:').$selectedres['name']." ".lang('quantity').":".$selectedres['quantity']." < $quantity"; - break; - } - // to do: Test for overbooking/maybe this is handled sufficient by the conflict handling of dates - #$msg = lang('The resource you selected is already overbooked:').$selectedres['name']; - } else { - // you are not allowed to book, or the resource is overbooked already - $msg .= lang('You are not allowed to book the resource selected:').$selectedres['name']; - break; - } - } if ($uid && $id) { $status = isset($this->bo->resources[$type]['new_status']) ? ExecMethod($this->bo->resources[$type]['new_status'],$id) : 'U'; - $event['participants'][$uid] = $event['participant_types'][$type][$id] = $status.((int) $quantity > 1 ? (int)$quantity : ''); - } - else - { - unset($quantity); + if ($status) + { + $event['participants'][$uid] = $event['participant_types'][$type][$id] = + calendar_so::combine_status($status,$content['participants']['quantity'],$content['participants']['role']); + } + else + { + $msg .= lang('Permission denied!'); + } } break; } @@ -321,7 +304,7 @@ class calendar_uiforms extends calendar_ui foreach(is_array($data) ? $data : explode(',',$data) as $uid) { if ($uid) $event['participants'][$uid] = $event['participant_types']['u'][$uid] = - $uid == $this->bo->user ? 'A' : 'U'; + calendar_so::combine_status($uid == $this->bo->user ? 'A' : 'U',1,$content['participants']['role']); } break; @@ -387,6 +370,7 @@ class calendar_uiforms extends calendar_ui break; } } +_debug_array($event['participants']); } $preserv = array( 'view' => $view, @@ -633,7 +617,7 @@ class calendar_uiforms extends calendar_ui } $js .= 'window.close();'; echo "\n"; - $GLOBALS['egw']->common->egw_exit(); + common::egw_exit(); } return $this->edit($event,$preserv,$msg,$js,$event['id'] ? $event['id'] : $content['link_to']['to_id']); } @@ -772,6 +756,7 @@ class calendar_uiforms extends calendar_ui 'recur_type' => &$this->bo->recur_types, 'status' => $this->bo->verbose_status, 'duration' => $this->durations, + 'role' => $this->bo->roles, 'action' => array( 'copy' => array('label' => 'Copy', 'title' => 'Copy this event'), 'ical' => array('label' => 'Export', 'title' => 'Download this event as iCal'), @@ -799,7 +784,7 @@ class calendar_uiforms extends calendar_ui else { $GLOBALS['egw']->framework->render('

'.lang('Permission denied')."

\n",null,true); - $GLOBALS['egw']->common->egw_exit(); + common::egw_exit(); } } $event =& $this->default_add_event(); @@ -840,7 +825,6 @@ class calendar_uiforms extends calendar_ui } $view = $preserv['view'] = $preserv['view'] || $event['id'] && !$this->bo->check_perms(EGW_ACL_EDIT,$event); //echo "view=$view, event="; _debug_array($event); - // shared locking of entries to edit if (!$view && ($locktime = $GLOBALS['egw_info']['server']['Lock_Time_Calender']) && $event['id']) { @@ -855,7 +839,7 @@ class calendar_uiforms extends calendar_ui { $msg .= ' '.lang('This entry is currently opened by %1!', (($lock_uid = $GLOBALS['egw']->accounts->name2id(substr($lock['owner'],7),'account_email')) ? - $GLOBALS['egw']->common->grab_owner_name($lock_uid) : $lock['owner'])); + common::grab_owner_name($lock_uid) : $lock['owner'])); } elseif($lock) { @@ -898,20 +882,36 @@ class calendar_uiforms extends calendar_ui foreach($participants as $id => $status) { $uid = $type == 'u' ? $id : $type.$id; + calendar_so::split_status($status,$quantity,$role); $preserv['participants'][$row] = $content['participants'][$row] = array( 'app' => $name == 'accounts' ? ($GLOBALS['egw']->accounts->get_type($id) == 'g' ? 'Group' : 'User') : $name, 'uid' => $uid, - 'status' => $status[0], - 'old_status' => $status[0], - 'quantity' => substr($status,1), + 'status' => $status, + 'old_status' => $status, + 'quantity' => $quantity > 1 || $uid[0] == 'r' ? $quantity : '', // only display quantity for resources or if > 1 + 'role' => $role, ); - $readonlys[$row.'[quantity]'] = $type == 'u' || !isset($this->bo->resources[$type]['max_quantity']); + // replace iCal roles with a nicer label and remove regular REQ-PARTICIPANT + if (isset($this->bo->roles[$role])) + { + $content['participants'][$row]['role'] = lang($this->bo->roles[$role]); + } + // allow third party apps to use categories for roles + elseif(substr($role,0,6) == 'X-CAT-') + { + $content['participants'][$row]['role'] = $GLOBALS['egw']->categories->id2name(substr($role,6)); + } + else + { + $content['participants'][$row]['role'] = lang(str_replace('X-','',$role)); + } + //echo "

$uid ($quantity): $role --> {$content['participants'][$row]['role']}

\n"; $readonlys[$row.'[status]'] = !$this->bo->check_status_perms($uid,$event); $readonlys["delete[$uid]"] = $preserv['hide_delete'] || !$this->bo->check_perms(EGW_ACL_EDIT,$event); // todo: make the participants available as links with email as title if ($name == 'accounts') { - $content['participants'][$row++]['title'] = $GLOBALS['egw']->common->grab_owner_name($id); + $content['participants'][$row++]['title'] = common::grab_owner_name($id); } elseif (($info = $this->bo->resource_info($uid))) { @@ -944,7 +944,7 @@ class calendar_uiforms extends calendar_ui { $readonlys[$row.'[quantity]'] = $readonlys["delete[$member]"] = true; } - $content['participants'][$row++]['title'] = $GLOBALS['egw']->common->grab_owner_name($member); + $content['participants'][$row++]['title'] = common::grab_owner_name($member); } } } @@ -1515,7 +1515,6 @@ class calendar_uiforms extends calendar_ui #error_log(__METHOD__.print_r($content,true)); if (is_numeric($cal_id = $content ? $content : $_REQUEST['cal_id'])) { - #if (!($ical =& ExecMethod2('calendar.calendar_ical.exportVCal',$cal_id,'2.0','PUBLISH',false))) if (!($ical =& $boical->exportVCal(array($cal_id),'2.0','PUBLISH',false))) { $msg = lang('Permission denied'); @@ -1524,9 +1523,9 @@ class calendar_uiforms extends calendar_ui } else { - $GLOBALS['egw']->browser->content_header('event.ics','text/calendar',bytes($ical)); + html::content_header('event.ics','text/calendar',bytes($ical)); echo $ical; - $GLOBALS['egw']->common->egw_exit(); + common::egw_exit(); } } if (is_array($content)) @@ -1546,10 +1545,9 @@ class calendar_uiforms extends calendar_ui else { $ical =& $boical->exportVCal($events,'2.0','PUBLISH',false); - #$ical =& ExecMethod2('calendar.calendar_ical.exportVCal',$events,'2.0'/*$content['version']*/,'PUBLISH',false); - $GLOBALS['egw']->browser->content_header($content['file'] ? $content['file'] : 'event.ics','text/calendar',bytes($ical)); + html::content_header($content['file'] ? $content['file'] : 'event.ics','text/calendar',bytes($ical)); echo $ical; - $GLOBALS['egw']->common->egw_exit(); + common::egw_exit(); } } if (!is_array($content)) @@ -1566,8 +1564,7 @@ class calendar_uiforms extends calendar_ui $content['msg'] = $msg; $GLOBALS['egw_info']['flags']['app_header'] = lang('calendar') . ' - ' . lang('iCal Export'); - $etpl = CreateObject('etemplate.etemplate','calendar.export'); - + $etpl = new etemplate('calendar.export'); $etpl->exec('calendar.calendar_uiforms.export',$content); } diff --git a/calendar/setup/egw_de.lang b/calendar/setup/egw_de.lang index ad0d0e6b48..35785ebba4 100644 --- a/calendar/setup/egw_de.lang +++ b/calendar/setup/egw_de.lang @@ -50,7 +50,9 @@ calendar-fieldname calendar de Kalender Feldname can't add alarms in the past !!! calendar de Kann keine Alarme in der Vergangenheit setzen !!! can't aquire lock! calendar de Kann Termin nicht sperren! canceled calendar de Abgesagt +chair calendar de Vorsitz charset of file calendar de Zeichensatz der Datei +check all calendar de Alle auswählen close the window calendar de Schließt das Fenster compose a mail to all participants after the event is saved calendar de Schreibe eine Mail an alle Teilnehmer nachdem der Termin gespeichert wurde conflict calendar de Konflikt @@ -79,6 +81,7 @@ default length of newly created events. the length is in minutes, eg. 60 for 1 h default type of resources application selected in the calendar particpants research form. calendar de Vorgabe für die gewählte Anwendung bei der Ressourcensuche im Kartenreiter Teilnehmer default type of resources selection calendar de Vorgabe für die Ressourcensuche default week view calendar de Vorgabe Wochenansicht +delete selected events calendar de Ausgewählte Termine löschen delete series calendar de Serie löschen delete this alarm calendar de Diesen Alarm löschen delete this event calendar de Diesen Termin löschen @@ -228,6 +231,7 @@ one week calendar de eine Woche one year calendar de ein Jahr only the initial date of that recuring event is checked! calendar de Nur das Startdatum diese wiederholenden Termins wird geprüft! open todo's: calendar de unerledigte Aufgaben: +optional calendar de Optional overlap holiday calendar de überlappender Feiertag owner too calendar de Auch Besitzer participants calendar de Teilnehmer @@ -258,10 +262,12 @@ repeating event information calendar de Informationen zu sich wiederholenden Ere repeating interval, eg. 2 to repeat every second week calendar de Wiederholungsintervall, zB. 2 für jeder zweite Woche repetition calendar de Wiederholung repetitiondetails (or empty) calendar de Details der Wiederholung (oder leer) +requested calendar de Erforderlich reset calendar de Zurücksetzen resources calendar de Ressourcen resources except conflicting ones calendar de Ressourcen ausgenommen bereits gebuchte resources with conflict detection calendar de Ressourcen mit bereits gebuchten +role calendar de Rolle rule calendar de Regel sat calendar de Sa saves the changes made calendar de Speichert die Änderungen @@ -269,6 +275,7 @@ saves the event ignoring the conflict calendar de Speichert den Konflikt ignorie scheduling conflict calendar de Terminüberschneidung select a %1 calendar de %1 auswählen select a time calendar de eine Zeit auswählen +select multiple contacts for a further action calendar de Mehrere Adressen für weiteren Befehl auswählen select resources calendar de Ressourcen auswählen select who should get the alarm calendar de Auswählen wer den Alarm erhalten soll selected range calendar de Ausgewählter Zeitraum diff --git a/calendar/setup/egw_en.lang b/calendar/setup/egw_en.lang index 36cd0ae8f7..8348710619 100644 --- a/calendar/setup/egw_en.lang +++ b/calendar/setup/egw_en.lang @@ -50,7 +50,9 @@ calendar-fieldname calendar en calendar-Fieldname can't add alarms in the past !!! calendar en Can't add alarms in the past !!! can't aquire lock! calendar en Can't aquire lock! canceled calendar en Canceled +chair calendar en Chair charset of file calendar en Charset of file +check all calendar en Check all close the window calendar en Close the window compose a mail to all participants after the event is saved calendar en compose a mail to all participants after the event is saved conflict calendar en Conflict @@ -79,6 +81,7 @@ default length of newly created events. the length is in minutes, eg. 60 for 1 h default type of resources application selected in the calendar particpants research form. calendar en Default type of resources application selected in the calendar particpants research form. default type of resources selection calendar en Default type of resources selection default week view calendar en default week view +delete selected events calendar en Delete selected events delete series calendar en Delete series delete this alarm calendar en Delete this alarm delete this event calendar en Delete this event @@ -228,6 +231,7 @@ one week calendar en one week one year calendar en one year only the initial date of that recuring event is checked! calendar en Only the initial date of that recuring event is checked! open todo's: calendar en open ToDo's: +optional calendar en Optional overlap holiday calendar en overlap holiday owner too calendar en Owner too participants calendar en Participants @@ -258,10 +262,12 @@ repeating event information calendar en Repeating Event Information repeating interval, eg. 2 to repeat every second week calendar en repeating interval, eg. 2 to repeat every second week repetition calendar en Repetition repetitiondetails (or empty) calendar en Repetitiondetails (or empty) +requested calendar en Requested reset calendar en Reset resources calendar en Resources resources except conflicting ones calendar en Resources except conflicting ones resources with conflict detection calendar en Resources with conflict detection +role calendar en Role rule calendar en Rule sat calendar en Sat saves the changes made calendar en saves the changes made @@ -269,6 +275,7 @@ saves the event ignoring the conflict calendar en Saves the event ignoring the c scheduling conflict calendar en Scheduling conflict select a %1 calendar en select a %1 select a time calendar en select a time +select multiple contacts for a further action calendar en Select multiple contacts for a further action select resources calendar en Select resources select who should get the alarm calendar en Select who should get the alarm selected range calendar en Selected range diff --git a/calendar/setup/etemplates.inc.php b/calendar/setup/etemplates.inc.php index ef601e8c8f..f877b870c9 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() 2009-10-03 09:29 + * generated by soetemplate::dump4setup() 2009-10-12 21:06 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package calendar @@ -27,7 +27,7 @@ $templ_data[] = array('name' => 'calendar.edit.general','template' => '','lang' $templ_data[] = array('name' => 'calendar.edit.links','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:7:{s:1:"A";s:2:"95";s:2:"c1";s:2:"th";s:2:"h1";s:6:",@view";s:2:"c2";s:3:"row";s:2:"h2";s:6:",@view";s:2:"c3";s:2:"th";s:2:"c4";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"type";s:5:"label";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";s:4:"type";s:7:"link-to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"type";s:5:"label";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";s:4:"type";s:9:"link-list";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"cols";i:2;s:4:"rows";i:4;s:4:"size";s:17:"100%,210,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"210";i:6;s:4:"auto";}}}','size' => '100%,210,,,,,auto','style' => '','modified' => '1231922193',); -$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.3.004','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:5:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";}i:1;a:5:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:27:"User or group,calendar+,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";}s:1:"D";a:3:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";}s:1:"E";a:1:{s:4:"type";s:5:"label";}}i:2;a:5:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:5:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";}s:1:"D";a:4:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;}s:1:"E";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"delete[$row_cont[uid]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:5;s:4:"size";s:17:"100%,210,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"210";i:6;s:4:"auto";}}}','size' => '100%,210,,,,,auto','style' => '','modified' => '1248274661',); +$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:6:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";s:1:"D";s:2:"70";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:27:"User or group,calendar+,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:4:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";s:5:"align";s:6:"center";}s:1:"D";a:3:{s:4:"type";s:6:"select";s:4:"name";s:4:"role";s:4:"span";s:11:",selectRole";}s:1:"E";a:4:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";s:5:"align";s:6:"center";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";s:5:"align";s:6:"center";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Role";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:5:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";s:8:"readonly";s:1:"1";s:5:"align";s:6:"center";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[role]";}s:1:"E";a:4:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;}s:1:"F";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"delete[$row_cont[uid]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:6;s:4:"size";s:17:"100%,210,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"210";i:6;s:4:"auto";}}}','size' => '100%,210,,,,,auto','style' => '.selectRole select { width: 100%; }','modified' => '1248274661',); $templ_data[] = array('name' => 'calendar.edit.print','template' => '','lang' => '','group' => '0','version' => '1.6.001','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:6:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";s:1:"D";s:24:",@hide_status_recurrence";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:27:"User or group,calendar+,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:3:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"All future";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";}s:1:"D";a:3:{s:4:"type";s:8:"checkbox";s:4:"name";s:25:"${row}[status_recurrence]";s:5:"align";s:6:"center";}s:1:"E";a:4:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;}s:1:"F";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"delete[$row_cont[uid]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:6;s:4:"size";s:17:"100%,200,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,,,,auto','style' => '','modified' => '1229280346',); @@ -43,7 +43,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.7.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:1:{s:2:"h1";s:6:",!@msg";}i:1;a:1:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:10:",redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:9:"nextmatch";s:4:"size";s:18:"calendar.list.rows";s:4:"name";s:2:"nm";}}i:3;a:1:{s:1:"A";a:9:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:6:"needed";s:1:"1";s:5:"align";s:5:"right";i:1;a:6:{s:4:"type";s:6:"button";s:4:"name";s:9:"deleteall";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"help";s:23:"Delete selected Envents";s:7:"onclick";s:43:"return confirm(\'Delete selected Envents?\');";}i:2;a:7:{s:4:"type";s:6:"button";s:4:"size";s:9:"arrow_ltr";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:7:"onclick";s:70:"toggle_all(this.form,form::name(\'nm[rows][checked][]\')); return false;";s:4:"span";s:14:",checkAllArrow";}}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '.noWrap { white-space: nowrap; }','modified' => '1250536279',); +$templ_data[] = array('name' => 'calendar.list','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:1:{s:2:"h1";s:6:",!@msg";}i:1;a:1:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:10:",redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:9:"nextmatch";s:4:"size";s:18:"calendar.list.rows";s:4:"name";s:2:"nm";}}i:3;a:1:{s:1:"A";a:9:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:6:"needed";s:1:"1";s:5:"align";s:5:"right";i:1;a:6:{s:4:"type";s:6:"button";s:4:"name";s:9:"deleteall";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"help";s:22:"Delete selected events";s:7:"onclick";s:42:"return confirm(\'Delete selected events?\');";}i:2;a:7:{s:4:"type";s:6:"button";s:4:"size";s:9:"arrow_ltr";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:7:"onclick";s:70:"toggle_all(this.form,form::name(\'nm[rows][checked][]\')); return false;";s:4:"span";s:14:",checkAllArrow";}}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '.noWrap { white-space: nowrap; }','modified' => '1250536279',); $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',); diff --git a/calendar/templates/default/edit.xet b/calendar/templates/default/edit.xet index af5dac21aa..c69c339356 100644 --- a/calendar/templates/default/edit.xet +++ b/calendar/templates/default/edit.xet @@ -69,12 +69,13 @@ -