diff --git a/calendar/inc/class.calendar_boupdate.inc.php b/calendar/inc/class.calendar_boupdate.inc.php index d37edaef24..41ba152f0e 100644 --- a/calendar/inc/class.calendar_boupdate.inc.php +++ b/calendar/inc/class.calendar_boupdate.inc.php @@ -1020,8 +1020,6 @@ class calendar_boupdate extends calendar_bo // Update history $tracking = new calendar_tracking($this); - $event['category'] = implode(',', $this->get_categories($event['category'])); - $old_event['category'] = implode(',', $this->get_categories($old_event['category'])); if (empty($event['id']) && !empty($cal_id)) $event['id']=$cal_id; $tracking->track($event, $old_event); diff --git a/calendar/inc/class.calendar_tracking.inc.php b/calendar/inc/class.calendar_tracking.inc.php index 100827fa9e..4ac2d1083f 100644 --- a/calendar/inc/class.calendar_tracking.inc.php +++ b/calendar/inc/class.calendar_tracking.inc.php @@ -6,7 +6,7 @@ * @author Nathan Gray * @package calendar * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License - * @version $Id: class.addressbook_tracking.inc.php 29164 2010-02-09 21:56:39Z jlehrke $ + * @version $Id$ */ /** @@ -52,7 +52,6 @@ class calendar_tracking extends bo_tracking 'description' => 'description', 'location' => 'location', 'reference' => 'reference', - 'modifier' => 'modifier', 'non_blocking' => 'non_blocking', 'special' => 'special', 'creator' => 'creator', @@ -64,13 +63,14 @@ class calendar_tracking extends bo_tracking 'participants' => array('user_id', 'status', 'role', 'recur'), 'participants-c' => array('user_id', 'status', 'quantity', 'role', 'recur'), + 'participants-r' => array('user_id', 'status', 'quantity', 'role', 'recur'), // Custom fields added in constructor ); /** - * Translate field name to label - */ + * Translate field name to label + */ public $field2label = array( 'owner' => 'owner', 'category' => 'category', @@ -80,18 +80,18 @@ class calendar_tracking extends bo_tracking 'description' => 'description', 'location' => 'location', 'reference' => 'reference', - 'modifier' => 'modifier', 'non_blocking' => 'non blocking', 'special' => 'special', 'creator' => 'creator', - 'recurrence' => 'recurrence', - 'tz_id' => 'tz_id', + 'recurrence'=> 'recurrence', + 'tz_id' => 'timezone', 'start' => 'start', 'end' => 'end', 'participants' => 'Participants: User, Status, Role', - 'participants-c'=> 'Participants: User, Status, Quantity, Role' + 'participants-c'=> 'Participants: User, Status, Quantity, Role', + 'participants-r'=> 'Participants: Resource, Status, Quantity', // Custom fields added in constructor ); @@ -114,14 +114,15 @@ class calendar_tracking extends bo_tracking } /** - * Tracks the changes in one entry $data, by comparing it with the last version in $old - * Overrides parent to reformat participants into a format parent can handle - */ + * Tracks the changes in one entry $data, by comparing it with the last version in $old + * Overrides parent to reformat participants into a format parent can handle + */ public function track(array $data,array $old=null,$user=null,$deleted=null,array $changed_fields=null) - { + { // Don't try to track dates on recurring events. // It won't change for the base event, and any change to the time creates an exception - if($data['recur_type']) { + if($data['recur_type']) + { unset($data['start']); unset($data['end']); unset($old['start']); unset($old['end']); } @@ -132,14 +133,17 @@ class calendar_tracking extends bo_tracking * filter by it later. */ $recur_prefix = $data['recur_date'] ? $data['recur_date'] : ''; - if(is_array($data['participants'])) { + if(is_array($data['participants'])) + { $participants = $data['participants']; $data['participants'] = array(); - foreach($participants as $id => $status) { + foreach($participants as $uid => $status) + { calendar_so::split_status($status, $quantity, $role); - $field = ($id[0] == 'c' ? 'participants-c' : 'participants'); + calendar_so::split_user($uid, $user_type, $user_id); + $field = is_numeric($uid) ? 'participants' : 'participants-'.$user_type; $data[$field][] = array( - 'user_id' => $id[0] == 'c' ? substr($id,1) : $id, + 'user_id' => $user_id, 'status' => $status, 'quantity' => $quantity, 'role' => $role, @@ -147,14 +151,17 @@ class calendar_tracking extends bo_tracking ); } } - if(is_array($old['participants'])) { + if(is_array($old['participants'])) + { $participants = $old['participants']; $old['participants'] = array(); - foreach($participants as $id => $status) { + foreach($participants as $uid => $status) + { calendar_so::split_status($status, $quantity, $role); - $field = ($id[0] == 'c' ? 'participants-c' : 'participants'); + calendar_so::split_user($uid, $user_type, $user_id); + $field = is_numeric($uid) ? 'participants' : 'participants-'.$user_type; $old[$field][] = array( - 'user_id' => $id[0] == 'c' ? substr($id,1) : $id, + 'user_id' => $user_id, 'status' => $status, 'quantity' => $quantity, 'role' => $role, @@ -166,9 +173,10 @@ class calendar_tracking extends bo_tracking } /** - * Overrides parent because calendar_boupdates handles the notifications - */ - public function do_notifications($data,$old,$deleted=null) { + * Overrides parent because calendar_boupdates handles the notifications + */ + public function do_notifications($data,$old,$deleted=null) + { return true; } } diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php index 2dbf0de178..033f5ad661 100644 --- a/calendar/inc/class.calendar_uiforms.inc.php +++ b/calendar/inc/class.calendar_uiforms.inc.php @@ -2260,13 +2260,16 @@ function replace_eTemplate_onsubmit() $content['history'] = array( 'id' => $content['id'], 'app' => 'calendar', - 'status-widgets' => array( - 'owner' => 'select-account', - 'cat_id' => 'select-cat', - 'non_blocking' => array(''=>lang('No'), 1=>lang('Yes')), + 'status-widgets' => array( + 'owner' => 'select-account', + 'creator' => 'select-account', + 'category' => 'select-cat', + 'non_blocking' => array(''=>lang('No'), 1=>lang('Yes')), + 'public' => array(''=>lang('No'), 1=>lang('Yes')), - 'start' => 'date-time', - 'end' => 'date-time', + 'start' => 'date-time', + 'end' => 'date-time', + 'tz_id' => 'select-timezone', // Participants 'participants' => array( @@ -2280,12 +2283,19 @@ function replace_eTemplate_onsubmit() 'label', $sel_options['role'] ), + 'participants-r' => array( + 'link:resources', + $sel_options['status'], + 'label', + $sel_options['role'] + ), ), ); // Get participants for only this one, if it's recurring. The date is on the end of the value. - if($content['recur_type'] || $content['recurrence']) { + if($content['recur_type'] || $content['recurrence']) + { $content['history']['filter'] = array( '(history_status NOT LIKE \'participants%\' OR (history_status LIKE \'participants%\' AND ( history_new_value LIKE \'%' . bo_tracking::ONE2N_SEPERATOR . $content['recurrence'] . '\' OR @@ -2295,7 +2305,8 @@ function replace_eTemplate_onsubmit() // Translate labels $tracking = new calendar_tracking(); - foreach($tracking->field2label as $field => $label) { + foreach($tracking->field2label as $field => $label) + { $sel_options[$status][$field] = lang($label); } // custom fields are now "understood" directly by historylog widget diff --git a/etemplate/inc/class.boetemplate.inc.php b/etemplate/inc/class.boetemplate.inc.php index 6f9c4c5c81..4b867b6c4d 100644 --- a/etemplate/inc/class.boetemplate.inc.php +++ b/etemplate/inc/class.boetemplate.inc.php @@ -1,10 +1,10 @@ - * @copyright 2002-10 by RalfBecker@outdoor-training.de + * @copyright 2002-11 by RalfBecker@outdoor-training.de * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package etemplate * @subpackage api @@ -488,7 +488,15 @@ class boetemplate extends soetemplate */ public function widgetExists($type) { - return isset(self::$types[$type]) || $this->haveExtension($type); + if (isset(self::$types[$type])) return true; + + list($main,$sub) = explode('-',$type); + + if ($this->haveExtension($main) && $this->loadExtension($main) && ($extension = self::$extensions[$main])) + { + return $type == $main || is_array($extension->human_name) && isset($extension->human_name[$type]); + } + return false; } /** diff --git a/etemplate/inc/class.historylog_widget.inc.php b/etemplate/inc/class.historylog_widget.inc.php index ec8d0d343d..7d457a01ed 100644 --- a/etemplate/inc/class.historylog_widget.inc.php +++ b/etemplate/inc/class.historylog_widget.inc.php @@ -79,14 +79,15 @@ class historylog_widget if($type == 'select-cat') { list($rows,$type1,$type2,$type3,$type4,$type5,$type6) = explode(',',$options); - $type6 = true; + $type6 = 2; $options = implode(',',array($rows,$type1,$type2,$type3,$type4,$type5,$type6)); } $cell = etemplate::empty_cell($type,$cell['name'],array('readonly' => true,'size' => $options)); if (is_array($type)) { + list($t) = explode(':',$type[0]); if (isset($type[0]) && // numeric indexed array --> multiple values of 1:N releation - $tmpl->widgetExists($type[0])) + $tmpl->widgetExists($t)) { $cell['type'] = 'vbox'; $cell['size'] = '0,,0,0'; diff --git a/etemplate/inc/class.select_widget.inc.php b/etemplate/inc/class.select_widget.inc.php index 22df511ecf..60b95be6b7 100644 --- a/etemplate/inc/class.select_widget.inc.php +++ b/etemplate/inc/class.select_widget.inc.php @@ -189,7 +189,7 @@ class select_widget } elseif ($id) // Display id of no longer existing cat { - $cell['sel_options'][$id] = lang('Missing: %1',$id); + $cell['sel_options'][$id] = $type6 == '2' ? $id : lang('Missing: %1',$id); } } }