forked from extern/egroupware
Add history logging to calendar
This commit is contained in:
parent
30db6582f7
commit
de4a0e9239
@ -858,6 +858,8 @@ class calendar_boupdate extends calendar_bo
|
||||
}
|
||||
$set_recurrences = false;
|
||||
$set_recurrences_start = 0;
|
||||
$old_event = $this->read($event['id'], $event['recurrence']);
|
||||
|
||||
if (($cal_id = $this->so->save($event,$set_recurrences,$set_recurrences_start,0,$event['etag'])) && $set_recurrences && $event['recur_type'] != MCAL_RECUR_NONE)
|
||||
{
|
||||
$save_event['id'] = $cal_id;
|
||||
@ -867,6 +869,10 @@ class calendar_boupdate extends calendar_bo
|
||||
}
|
||||
if ($updateTS) $GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,$event['id'] ? 'modify' : 'add',time());
|
||||
|
||||
// Update history
|
||||
$tracking = new calendar_tracking($this);
|
||||
$tracking->track($event, $old_event);
|
||||
|
||||
return $cal_id;
|
||||
}
|
||||
|
||||
@ -1056,6 +1062,7 @@ class calendar_boupdate extends calendar_bo
|
||||
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.
|
||||
"($cal_id, $uid, $status, $recur_date)");
|
||||
}
|
||||
$old_event = $this->read($cal_id, $recur_date);
|
||||
if (($Ok = $this->so->set_status($cal_id,is_numeric($uid)?'u':$uid[0],is_numeric($uid)?$uid:substr($uid,1),$status,$recur_date ? $this->date2ts($recur_date,true) : 0,$role)))
|
||||
{
|
||||
if ($updateTS) $GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,'modify',time());
|
||||
@ -1071,6 +1078,12 @@ class calendar_boupdate extends calendar_bo
|
||||
if (isset($recur_date)) $event = $this->read($event['id'],$recur_date); //re-read the actually edited recurring event
|
||||
$this->send_update($status2msg[$status],$event['participants'],$event);
|
||||
}
|
||||
|
||||
// Update history
|
||||
if (!is_array($event)) $event = $this->read($cal_id);
|
||||
$tracking = new calendar_tracking($this);
|
||||
$tracking->track($event, $old_event);
|
||||
|
||||
}
|
||||
return $Ok;
|
||||
}
|
||||
@ -1098,6 +1111,10 @@ class calendar_boupdate extends calendar_bo
|
||||
{
|
||||
$this->so->delete($cal_id);
|
||||
$GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,'delete',time());
|
||||
|
||||
// Update history
|
||||
$tracking = new calendar_tracking($this);
|
||||
$tracking->track($event, $event, null, true);
|
||||
|
||||
// delete all links to the event
|
||||
egw_link::unlink(0,'calendar',$cal_id);
|
||||
@ -2060,4 +2077,4 @@ class calendar_boupdate extends calendar_bo
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
182
calendar/inc/class.calendar_tracking.inc.php
Normal file
182
calendar/inc/class.calendar_tracking.inc.php
Normal file
@ -0,0 +1,182 @@
|
||||
<?php
|
||||
/**
|
||||
* Calendar - history and notifications
|
||||
*
|
||||
* @link http://www.egroupware.org
|
||||
* @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 $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Calendar - tracking object
|
||||
*/
|
||||
class calendar_tracking extends bo_tracking
|
||||
{
|
||||
/**
|
||||
* Application we are tracking (required!)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $app = 'calendar';
|
||||
/**
|
||||
* Name of the id-field, used as id in the history log (required!)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $id_field = 'id';
|
||||
/**
|
||||
* Name of the field with the creator id, if the creator of an entry should be notified
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $creator_field = 'creator';
|
||||
/**
|
||||
* Name of the field with the id(s) of assinged users, if they should be notified
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $assigned_field;
|
||||
/**
|
||||
* Translate field-name to 2-char history status
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
var $field2history = array(
|
||||
'owner' => 'owner',
|
||||
'category' => 'category',
|
||||
'priority' => 'priority',
|
||||
'public' => 'public',
|
||||
'title' => 'title',
|
||||
'description' => 'description',
|
||||
'location' => 'location',
|
||||
'reference' => 'reference',
|
||||
'modifier' => 'modifier',
|
||||
'non_blocking' => 'non_blocking',
|
||||
'special' => 'special',
|
||||
'creator' => 'creator',
|
||||
'recurrence' => 'recurrence',
|
||||
'tz_id' => 'tz_id',
|
||||
|
||||
'start' => 'start',
|
||||
'end' => 'end',
|
||||
|
||||
'participants' => array('user_id', 'status', 'role', 'recur'),
|
||||
'participants-c' => array('user_id', 'status', 'quantity', 'role', 'recur'),
|
||||
|
||||
// Custom fields added in constructor
|
||||
);
|
||||
|
||||
/**
|
||||
* Translate field name to label
|
||||
*/
|
||||
public $field2label = array(
|
||||
'owner' => 'owner',
|
||||
'category' => 'category',
|
||||
'priority' => 'priority',
|
||||
'public' => 'public',
|
||||
'title' => 'title',
|
||||
'description' => 'description',
|
||||
'location' => 'location',
|
||||
'reference' => 'reference',
|
||||
'modifier' => 'modifier',
|
||||
'non_blocking' => 'non blocking',
|
||||
'special' => 'special',
|
||||
'creator' => 'creator',
|
||||
'recurrence' => 'recurrence',
|
||||
'tz_id' => 'tz_id',
|
||||
|
||||
'start' => 'start',
|
||||
'end' => 'end',
|
||||
|
||||
'participants' => 'Participants: User, Status, Role',
|
||||
'participants-c'=> 'Participants: User, Status, Quantity, Role'
|
||||
|
||||
// Custom fields added in constructor
|
||||
);
|
||||
|
||||
/**
|
||||
* Should the user (passed to the track method or current user if not passed) be used as sender or get_config('sender')
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
var $prefer_user_as_sender = true;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param calendar_bo &$calendar_bo
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // calling the constructor of the extended class
|
||||
|
||||
$custom = config::get_customfields('calendar', true);
|
||||
if(is_array($custom)) {
|
||||
foreach($custom as $name => $settings) {
|
||||
$this->field2history['#'.$name] = '#'.$name;
|
||||
$this->field2label['#'.$name] = $settings['label'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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']) {
|
||||
unset($data['start']); unset($data['end']);
|
||||
unset($old['start']); unset($old['end']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Do some magic with the participants and recurrance.
|
||||
* If this is one of a recurring event, append the recur_date to the participant field so we can
|
||||
* filter by it later.
|
||||
*/
|
||||
$recur_prefix = $data['recur_date'] ? $data['recur_date'] : '';
|
||||
if(is_array($data['participants'])) {
|
||||
$participants = $data['participants'];
|
||||
$data['participants'] = array();
|
||||
foreach($participants as $id => $status) {
|
||||
calendar_so::split_status($status, $quantity, $role);
|
||||
$field = ($id[0] == 'c' ? 'participants-c' : 'participants');
|
||||
$data[$field][] = array(
|
||||
'user_id' => $id[0] == 'c' ? substr($id,1) : $id,
|
||||
'status' => $status,
|
||||
'quantity' => $quantity,
|
||||
'role' => $role,
|
||||
'recur' => $data['recur_date'] ? $data['recur_date'] : 0,
|
||||
);
|
||||
}
|
||||
}
|
||||
if(is_array($old['participants'])) {
|
||||
$participants = $old['participants'];
|
||||
$old['participants'] = array();
|
||||
foreach($participants as $id => $status) {
|
||||
calendar_so::split_status($status, $quantity, $role);
|
||||
$field = ($id[0] == 'c' ? 'participants-c' : 'participants');
|
||||
$old[$field][] = array(
|
||||
'user_id' => $id[0] == 'c' ? substr($id,1) : $id,
|
||||
'status' => $status,
|
||||
'quantity' => $quantity,
|
||||
'role' => $role,
|
||||
'recur' => $data['recur_date'] ? $data['recur_date'] : 0,
|
||||
);
|
||||
}
|
||||
}
|
||||
parent::track($data,$old,$user,$deleted, $changed_fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides parent because calendar_boupdates handles the notifications
|
||||
*/
|
||||
public function do_notifications($data,$old,$deleted=null) {
|
||||
return true;
|
||||
}
|
||||
}
|
@ -45,7 +45,7 @@ class calendar_uiforms extends calendar_ui
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $tabs = 'general|description|participants|recurrence|custom|links|alarms';
|
||||
var $tabs = 'general|description|participants|recurrence|custom|links|alarms|history';
|
||||
|
||||
/**
|
||||
* default locking time for entries, that are opened by another user
|
||||
@ -1137,6 +1137,10 @@ class calendar_uiforms extends calendar_ui
|
||||
{
|
||||
$etpl->set_cell_attribute('button[cancel]','onclick','');
|
||||
}
|
||||
|
||||
// Setup history tab
|
||||
$this->setup_history($content, $sel_options);
|
||||
|
||||
//echo "content="; _debug_array($content);
|
||||
//echo "preserv="; _debug_array($preserv);
|
||||
//echo "readonlys="; _debug_array($readonlys);
|
||||
@ -1728,4 +1732,66 @@ class calendar_uiforms extends calendar_ui
|
||||
$tmp = new etemplate('calendar.cat_acl');
|
||||
$tmp->exec('calendar.calendar_uiforms.cat_acl',$content,null,$readonlys,$preserv);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up the required fields to get the history tab
|
||||
*/
|
||||
public function setup_history(&$content, &$sel_options) {
|
||||
$status = 'history_status';
|
||||
|
||||
$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')),
|
||||
|
||||
'start' => 'date-time',
|
||||
'end' => 'date-time',
|
||||
|
||||
// Participants
|
||||
'participants' => array(
|
||||
'select-account',
|
||||
$sel_options['status'],
|
||||
$sel_options['role']
|
||||
),
|
||||
'participants-c' => array(
|
||||
'link:addressbook',
|
||||
$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']) {
|
||||
$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
|
||||
history_old_value LIKE \'%' . bo_tracking::ONE2N_SEPERATOR . $content['recurrence'] . '\')))'
|
||||
);
|
||||
}
|
||||
|
||||
// Translate labels
|
||||
$tracking = new calendar_tracking();
|
||||
foreach($tracking->field2label as $field => $label) {
|
||||
$sel_options[$status][$field] = lang($label);
|
||||
}
|
||||
// Get custom field options
|
||||
$custom = config::get_customfields('calendar', true);
|
||||
if(is_array($custom)) {
|
||||
foreach($custom as $name => $settings) {
|
||||
if(!is_array($settings['values'])) {
|
||||
$content['history']['status-widgets']['#'.$name] = $settings['type'];
|
||||
} elseif($settings['values']['@']) {
|
||||
$content['history']['status-widgets']['#'.$name] = customfields_widget::_get_options_from_file($settings['values']['@']);
|
||||
} else {
|
||||
$content['history']['status-widgets']['#'.$name] = $settings['values'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
/**
|
||||
* eGroupWare - eTemplates for Application calendar
|
||||
* http://www.egroupware.org
|
||||
* generated by soetemplate::dump4setup() 2009-12-03 17:35
|
||||
* generated by soetemplate::dump4setup() 2010-02-12 13:10
|
||||
*
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @package calendar
|
||||
@ -16,8 +16,8 @@ $templ_data[] = array('name' => 'calendar.cat_acl','template' => '','lang' => ''
|
||||
|
||||
$templ_data[] = array('name' => 'calendar.conflicts','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:3:{i:0;a:3:{s:4:"type";s:5:"label";s:5:"label";s:20:" Scheduling conflict";s:4:"span";s:9:",size120b";}i:1;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"c1";s:4:",top";}i:1;a:4:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"name";s:34:"conflicts[$row][icon_participants]";s:5:"label";s:38:"@conflicts[$row][tooltip_participants]";s:7:"no_lang";s:1:"1";}s:1:"B";a:4:{s:4:"type";s:5:"image";s:4:"name";s:27:"conflicts[$row][icon_recur]";s:5:"label";s:28:"@conflicts[$row][text_recur]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"name";s:21:"conflicts[$row][time]";s:7:"no_lang";s:1:"1";}s:1:"D";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:5:"label";s:4:"name";s:22:"conflicts[$row][title]";s:7:"no_lang";s:1:"1";s:4:"size";s:1:"b";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"name";s:41:"conflicts[$row][conflicting_participants]";s:7:"no_lang";s:1:"1";}s:4:"help";s:23:"conflict[$row][tooltip]";}}}s:4:"rows";i:1;s:4:"cols";i:4;}i:2;a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:15:"Ignore conflict";s:4:"name";s:14:"button[ignore]";s:4:"help";s:37:"Saves the event ignoring the conflict";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[reedit]";s:5:"label";s:13:"Re-Edit event";s:4:"help";s:30:"Allows to edit the event again";}i:3;a:4:{s:4:"type";s:6:"button";s:5:"label";s:15:"Freetime search";s:4:"name";s:16:"button[freetime]";s:4:"help";s:88:"Find free timeslots where the selected participants are availible for the given timespan";}}}','size' => '','style' => '','modified' => '1119080124',);
|
||||
|
||||
$templ_data[] = array('name' => 'calendar.edit','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:6:{i:0;a:6:{s:2:"h1";s:6:",!@msg";s:2:"c2";s:2:"th";s:1:"A";s:3:"100";s:2:"h4";s:8:",!@owner";s:1:"B";s:3:"300";s:2:"h2";s:2:"28";}i:1;a:4:{s:1:"A";a:5:{s:4:"type";s:4:"html";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";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{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:"size";s:6:"80,255";s:4:"name";s:5:"title";s:4:"span";s:3:"all";s:6:"needed";s:1:"1";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:3;a:4:{s:1:"A";a:5:{s:4:"type";s:3:"tab";s:4:"span";s:3:"all";s:5:"label";s:63:"General|Description|Participants|Recurrence|Custom|Links|Alarms";s:4:"name";s:63:"general|description|participants|recurrence|custom|links|alarms";s:4:"help";s:158:"Location, Start- and Endtimes, ...|Full description|Participants, Resources, ...|Repeating Event Information|Custom fields|Links, Attachments|Alarm management";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:5:"owner";s:8:"readonly";s:1:"1";}s:1:"C";a:7:{s:4:"type";s:9:"date-time";s:5:"label";s:7:"Updated";s:4:"name";s:8:"modified";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:5:"align";s:5:"right";s:4:"span";s:8:",noBreak";}s:1:"D";a:6:{s:4:"type";s:14:"select-account";s:5:"label";s:2:"by";s:4:"name";s:8:"modifier";s:8:"readonly";s:1:"1";s:5:"align";s:5:"right";s:4:"span";s:8:",noBreak";}}i:5;a:4:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";s:4:"span";s:1:"3";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:22:"saves the changes made";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:17:"apply the changes";}i:3;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:4:"help";s:16:"Close the window";s:7:"onclick";s:15:"window.close();";}i:4;a:5:{s:4:"type";s:6:"select";s:4:"name";s:6:"action";s:4:"help";s:39:"Execute a further action for this entry";s:4:"size";s:10:"Actions...";s:8:"onchange";s:34:"this.form.submit(); this.value=\'\';";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"Delete this event";s:7:"onclick";s:36:"return confirm(\'Delete this event\');";s:5:"align";s:5:"right";}}}s:4:"rows";i:5;s:4:"cols";i:4;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '.end_hide { display: block; white-space: nowrap; margin-left: 10px; }
|
||||
.noBreak { white-space: nowrap; }','modified' => '1199959741',);
|
||||
$templ_data[] = array('name' => 'calendar.edit','template' => '','lang' => '','group' => '0','version' => '1.7.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:6:{s:2:"h1";s:6:",!@msg";s:2:"c2";s:2:"th";s:1:"A";s:3:"100";s:2:"h4";s:8:",!@owner";s:1:"B";s:3:"300";s:2:"h2";s:2:"28";}i:1;a:4:{s:1:"A";a:5:{s:4:"type";s:4:"html";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";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{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:"size";s:6:"80,255";s:4:"name";s:5:"title";s:4:"span";s:3:"all";s:6:"needed";s:1:"1";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:3;a:4:{s:1:"A";a:5:{s:4:"type";s:3:"tab";s:4:"span";s:3:"all";s:5:"label";s:71:"General|Description|Participants|Recurrence|Custom|Links|Alarms|History";s:4:"name";s:71:"general|description|participants|recurrence|custom|links|alarms|history";s:4:"help";s:173:"Location, Start- and Endtimes, ...|Full description|Participants, Resources, ...|Repeating Event Information|Custom fields|Links, Attachments|Alarm management|Change history";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:5:"owner";s:8:"readonly";s:1:"1";}s:1:"C";a:7:{s:4:"type";s:9:"date-time";s:5:"label";s:7:"Updated";s:4:"name";s:8:"modified";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:5:"align";s:5:"right";s:4:"span";s:8:",noBreak";}s:1:"D";a:6:{s:4:"type";s:14:"select-account";s:5:"label";s:2:"by";s:4:"name";s:8:"modifier";s:8:"readonly";s:1:"1";s:5:"align";s:5:"right";s:4:"span";s:8:",noBreak";}}i:5;a:4:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";s:4:"span";s:1:"3";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:22:"saves the changes made";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:17:"apply the changes";}i:3;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:4:"help";s:16:"Close the window";s:7:"onclick";s:15:"window.close();";}i:4;a:5:{s:4:"type";s:6:"select";s:4:"name";s:6:"action";s:4:"help";s:39:"Execute a further action for this entry";s:4:"size";s:10:"Actions...";s:8:"onchange";s:34:"this.form.submit(); this.value=\'\';";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"Delete this event";s:7:"onclick";s:36:"return confirm(\'Delete this event\');";s:5:"align";s:5:"right";}}}s:4:"rows";i:5;s:4:"cols";i:4;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '.end_hide { display: block; white-space: nowrap; margin-left: 10px; }
|
||||
.noBreak { white-space: nowrap; }','modified' => '1265901781',);
|
||||
|
||||
$templ_data[] = array('name' => 'calendar.edit.alarms','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:3:{i:0;a:5:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";s:2:"h1";s:16:"20,@no_add_alarm";s:2:"c2";s:4:",top";s:2:"h2";s:8:",!@alarm";}i:1;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"before the event";}s:1:"B";a:10:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"8";i:1;a:4:{s:4:"type";s:13:"select-number";s:4:"size";s:4:",0,7";s:4:"name";s:15:"new_alarm[days]";s:4:"help";s:4:"days";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"size";s:18:",,,new_alarm[days]";s:5:"label";s:4:"days";}i:3;a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:16:"new_alarm[hours]";s:4:"size";s:5:",0,23";s:4:"help";s:5:"hours";}i:4;a:3:{s:4:"type";s:5:"label";s:4:"size";s:19:",,,new_alarm[hours]";s:5:"label";s:5:"hours";}i:5;a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:15:"new_alarm[mins]";s:4:"size";s:7:",0,55,5";s:4:"help";s:7:"Minutes";}i:6;a:3:{s:4:"type";s:5:"label";s:4:"size";s:18:",,,new_alarm[mins]";s:5:"label";s:7:"Minutes";}i:7;a:5:{s:4:"type";s:6:"select";s:4:"name";s:16:"new_alarm[owner]";s:7:"no_lang";s:1:"1";s:5:"label";s:3:"for";s:4:"help";s:31:"Select who should get the alarm";}i:8;a:3:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[add_alarm]";s:5:"label";s:9:"Add alarm";}}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Alarms";}s:1:"B";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";}i:1;a:5:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Time";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"before the event";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"All participants";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Action";}}i:2;a:5:{s:1:"A";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:12:"${row}[time]";s:8:"readonly";s:1:"1";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"name";s:14:"${row}[offset]";s:7:"no_lang";s:1:"1";}s:1:"C";a:4:{s:4:"type";s:8:"checkbox";s:5:"align";s:6:"center";s:4:"name";s:11:"${row}[all]";s:8:"readonly";s:1:"1";}s:1:"D";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"${row}[owner]";s:8:"readonly";s:1:"1";}s:1:"E";a:7:{s:4:"type";s:6:"button";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:5:"align";s:6:"center";s:4:"name";s:27:"delete_alarm[$row_cont[id]]";s:4:"help";s:17:"Delete this alarm";s:7:"onclick";s:36:"return confirm(\'Delete this alarm\');";}}}s:4:"rows";i:2;s:4:"cols";i:5;s:4:"name";s:5:"alarm";s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:2;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' => '1118780740',);
|
||||
|
||||
@ -27,6 +27,8 @@ $templ_data[] = array('name' => 'calendar.edit.description','template' => '','la
|
||||
|
||||
$templ_data[] = array('name' => 'calendar.edit.general','template' => '','lang' => '','group' => '0','version' => '1.7.002','data' => 'a:1:{i:0;a:4:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"hbox";i:1;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:8:{i:0;a:7:{s:1:"A";s:2:"95";s:2:"c1";s:3:"row";s:2:"c2";s:3:"row";s:2:"c4";s:3:"row";s:2:"c5";s:7:"row_off";s:2:"c6";s:3:"row";s:2:"c7";s:3:"row";}i:1;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:6:"needed";s:1:"1";s:4:"name";s:5:"start";s:4:"type";s:9:"date-time";}i:2;a:6:{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";}}}i:2;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:6:{s:7:"no_lang";s:1:"1";s:8:"onchange";s:220:"set_style_by_class(\'table\',\'end_hide\',\'display\',this.value == \'\' ? \'block\' : \'none\'); 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";}i:2;a:3:{s:4:"name";s:3:"end";s:4:"type";s:9:"date-time";s:4:"span";s:9:",end_hide";}}}i:3;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:6:{s:5:"label";s:15:"Freetime search";s:7:"onclick";s:85:"ajax_submit(this.form,\'calendar.calendar_uiforms.ajax_freetimesearch\'); return false;";s:5:"width";s:1:"0";s:4:"name";s:8:"freetime";s:4:"type";s:10:"buttononly";s:4:"help";s:88:"Find free timeslots where the selected participants are availible for the given timespan";}}i:4;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:4:{s:4:"size";s:4:",255";s:4:"name";s:8:"location";s:4:"type";s:4:"text";s:4:"span";s:15:",inputFullWidth";}}i:5;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:2:{s:4:"type";s:15:"select-priority";s:4:"name";s:8:"priority";}}i:6;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:5:{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";}}i:7;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:4:{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:4:"cols";i:2;s:4:"rows";i:7;s:4:"size";s:8:"100%,210";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"210";}}i:2;a:6:{s:5:"class";s:6:"row_on";s:5:"align";s:5:"right";s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"vbox";i:1;a:4:{s:4:"size";s:11:",,,category";s:4:"type";s:5:"label";s:5:"label";s:10:"Categories";s:4:"span";s:7:",row_on";}i:2;a:3:{s:4:"type";s:10:"select-cat";s:4:"name";s:8:"category";s:4:"size";s:1:"9";}}}}','size' => '','style' => '','modified' => '1181145149',);
|
||||
|
||||
$templ_data[] = array('name' => 'calendar.edit.history','template' => '','lang' => '','group' => '0','version' => '1.7.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:10:"historylog";s:4:"name";s:7:"history";s:4:"size";s:14:"history_status";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:17:"100%,250,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"250";i:6;s:4:"auto";}}}','size' => '100%,250,,,,,auto','style' => '','modified' => '1265901708',);
|
||||
|
||||
$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.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:18:"${row}[role_label]";}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',);
|
||||
|
Loading…
Reference in New Issue
Block a user