- fixed bug in creation of recur-exception for the first recurence

- recuring events: instead of edit+edit-series / delete/delete-series buttons use just edit/delete and a new exception button
This commit is contained in:
Ralf Becker 2005-11-23 21:39:37 +00:00
parent 5c71cc8378
commit 27c3c7ecb3
7 changed files with 58 additions and 48 deletions

View File

@ -94,7 +94,8 @@ class bocalupdate extends bocal
// - new events need start, end and title // - new events need start, end and title
// - updated events cant set start, end or title to empty // - updated events cant set start, end or title to empty
if (!$event['id'] && (!$event['start'] || !$event['end'] || !$event['title']) || if (!$event['id'] && (!$event['start'] || !$event['end'] || !$event['title']) ||
$event['id'] && (isset($event['start']) && !$event['start'] || isset($event['end']) && !$event['end'] || isset($event['title']) && !$event['title'])) $event['id'] && (isset($event['start']) && !$event['start'] || isset($event['end']) && !$event['end'] ||
isset($event['title']) && !$event['title']))
{ {
return false; return false;
} }
@ -153,6 +154,7 @@ class bocalupdate extends bocal
foreach((array) $overlapping_events as $k => $overlap) foreach((array) $overlapping_events as $k => $overlap)
{ {
if ($overlap['id'] == $event['id'] || // that's the event itself if ($overlap['id'] == $event['id'] || // that's the event itself
$overlap['id'] == $event['reference'] || // event is an exception of overlap
$overlap['non_blocking']) // that's a non_blocking event $overlap['non_blocking']) // that's a non_blocking event
{ {
continue; continue;

View File

@ -523,9 +523,11 @@ ORDER BY cal_user_type, cal_usre_id
// check if the recure-information changed // check if the recure-information changed
$this->db->select($this->repeats_table,'*',array('cal_id' => $cal_id),__LINE__,__FILE__); $this->db->select($this->repeats_table,'*',array('cal_id' => $cal_id),__LINE__,__FILE__);
$old_recur = $this->db->row(true); $old_recur = $this->db->row(true);
$old_exceptions = $old_recur['recur_exception'] ? explode(',',$old_recur['recur_exception']) : array();
$exceptions = $event['recur_exception'] ? explode(',',$event['recur_exception']) : array();
$set_recurrences = $event['recur_type'] != $old_recur['recur_type'] || $event['recur_data'] != $old_recur['recur_data'] || $set_recurrences = $event['recur_type'] != $old_recur['recur_type'] || $event['recur_data'] != $old_recur['recur_data'] ||
$event['recur_interval'] != $old_recur['recur_interval'] || $event['recur_enddate'] != $old_recur['recur_enddate'] || $event['recur_interval'] != $old_recur['recur_interval'] || $event['recur_enddate'] != $old_recur['recur_enddate'] ||
$event['recur_exeption'] != $old_recur['recur_exeption']; count(array_diff($old_exceptions,$exceptions)); // exception deleted
} }
if($event['recur_type'] != MCAL_RECUR_NONE) if($event['recur_type'] != MCAL_RECUR_NONE)
{ {
@ -620,7 +622,8 @@ ORDER BY cal_user_type, cal_usre_id
if (!$old_start) if (!$old_start)
{ {
if ($change_since !== false) $this->db->select($this->dates_table,'MIN(cal_start) AS cal_start,MIN(cal_end) AS cal_end',array('cal_id'=>$cal_id),__LNE__,__FILE__); if ($change_since !== false) $this->db->select($this->dates_table,'MIN(cal_start) AS cal_start,MIN(cal_end) AS cal_end',
array('cal_id'=>$cal_id),__LINE__,__FILE__);
// if no recurrence found, create one with the new dates // if no recurrence found, create one with the new dates
if ($change_since === false || !($row = $this->db->row(true)) || !$row['cal_start'] || !$row['cal_end']) if ($change_since === false || !($row = $this->db->row(true)) || !$row['cal_start'] || !$row['cal_end'])
{ {

View File

@ -68,13 +68,13 @@ class uiforms extends uical
{ {
$extra_participants = $_GET['participants'] ? explode(',',$_GET['participants']) : array(); $extra_participants = $_GET['participants'] ? explode(',',$_GET['participants']) : array();
$owner = (int) (isset($_GET['owner']) ? $_GET['owner'] : $this->owner); $owner = isset($_GET['owner']) ? $_GET['owner'] : $this->owner;
if (!$owner || !is_numeric($owner) || $GLOBALS['egw']->accounts->get_type($owner) != 'u' || if (!$owner || !is_numeric($owner) || $GLOBALS['egw']->accounts->get_type($owner) != 'u' ||
!$this->bo->check_perms(EGW_ACL_ADD,0,$owner)) !$this->bo->check_perms(EGW_ACL_ADD,0,$owner))
{ {
if ($owner) // make an owner who is no user or we have no add-rights a participant if ($owner) // make an owner who is no user or we have no add-rights a participant
{ {
$extra_participants[] = $owner; $extra_participants += explode(',',$owner);
} }
$owner = $this->user; $owner = $this->user;
} }
@ -136,17 +136,7 @@ class uiforms extends uical
list($button) = @each($content['button']); list($button) = @each($content['button']);
unset($content['button']); unset($content['button']);
$view = $content['view'] && $button != 'edit' && $button != 'edit_series'; $view = $content['view'] && $button != 'edit' && $button != 'exception';
// if we edit a single recurrance, we need to remember it for save and need to reset the recur information
if ($button == 'edit' && $content['recur_type'] != MCAL_RECUR_NONE)
{
$content['edit_single'] = $content['start'];
$content['recur_type'] = MCAL_RECUR_NONE;
foreach(array('recur_enddate','recur_interval','recur_exception','recur_data') as $name)
{
unset($content[$name]);
}
}
if ($view && $button == 'vcal') if ($view && $button == 'vcal')
{ {
$msg = $this->export($content['id'],true); $msg = $this->export($content['id'],true);
@ -285,7 +275,16 @@ class uiforms extends uical
); );
switch($button) switch($button)
{ {
case 'edit_series': case 'exception': // create an exception in a recuring event
$preserv['edit_single'] = $content['start'];
$event['recur_type'] = MCAL_RECUR_NONE;
foreach(array('recur_enddate','recur_interval','recur_exception','recur_data') as $name)
{
unset($event[$name]);
}
break;
case 'edit':
if ($content['recur_type'] != MCAL_RECUR_NONE) if ($content['recur_type'] != MCAL_RECUR_NONE)
{ {
// need to reload start and end of the serie // need to reload start and end of the serie
@ -343,9 +342,11 @@ class uiforms extends uical
// now we need to add the original start as recur-execption to the series // now we need to add the original start as recur-execption to the series
$recur_event = $this->bo->read($event['reference']); $recur_event = $this->bo->read($event['reference']);
$recur_event['recur_exception'][] = $content['edit_single']; $recur_event['recur_exception'][] = $content['edit_single'];
unset($recur_event['start']); unset($recur_event['end']); // no update necessary
$this->bo->update($recur_event,true); // no conflict check here $this->bo->update($recur_event,true); // no conflict check here
unset($recur_event); unset($recur_event);
unset($event['edit_single']); // if we further edit it, it's just a single event unset($event['edit_single']); // if we further edit it, it's just a single event
unset($preserv['edit_single']);
} }
else // conflict or error, we need to reset everything to the state befor we tried to save it else // conflict or error, we need to reset everything to the state befor we tried to save it
{ {
@ -391,21 +392,14 @@ class uiforms extends uical
break; break;
case 'delete': case 'delete':
case 'delete_series': if ($this->bo->delete($event['id'],(int)$content['edit_single']))
if (!$this->bo->check_perms(EGW_ACL_DELETE,$event)) break;
if (!$content['edit_series'] && $button == 'delete' && $event['recur_type'] != MCAL_RECUR_NONE) // delete a single event from a recuring event
{ {
$this->bo->delete($event['id'],$event['start']); $msg = lang('Event deleted');
$js = 'opener.location.href=\''.addslashes($GLOBALS['egw']->link('/index.php',array(
'menuaction' => $content['referer'],
'msg' => $msg,
))).'\';';
} }
else
{
$this->bo->delete($event['id']);
}
$msg = lang('Event deleted');
$js = 'opener.location.href=\''.addslashes($GLOBALS['egw']->link('/index.php',array(
'menuaction' => $content['referer'],
'msg' => $msg,
))).'\';';
break; break;
case 'freetime': case 'freetime':
@ -596,7 +590,6 @@ class uiforms extends uical
{ {
$name = $this->bo->resources[$type]['app']; $name = $this->bo->resources[$type]['app'];
} }
// _debug_array($participants);
foreach($participants as $id => $status) foreach($participants as $id => $status)
{ {
$content['participants'][$name][] = $id . (substr($status,1) > 1 ? (':'.substr($status,1)) : ''); $content['participants'][$name][] = $id . (substr($status,1) > 1 ? (':'.substr($status,1)) : '');
@ -677,7 +670,15 @@ class uiforms extends uical
unset($readonlys['general|description|participants|recurrence|custom|links|alarms']); unset($readonlys['general|description|participants|recurrence|custom|links|alarms']);
$readonlys['button[save]'] = $readonlys['button[apply]'] = $readonlys['freetime'] = true; $readonlys['button[save]'] = $readonlys['button[apply]'] = $readonlys['freetime'] = true;
$readonlys['link'] = $readonlys['link_to'] = $readonlys['customfields'] = true; $readonlys['link_to'] = $readonlys['customfields'] = true;
if ($event['recur_type'] != MCAL_RECUR_NONE)
{
$etpl->set_cell_attribute('button[edit]','help','Edit this series of recuring events');
$etpl->set_cell_attribute('button[delete]','help','Delete this series of recuring events');
$onclick =& $etpl->get_cell_attribute('button[delete]','onclick');
$onclick = str_replace('Delete this event','Delete this series of recuring events',$onclick);
}
} }
else else
{ {
@ -693,14 +694,12 @@ class uiforms extends uical
{ {
$etpl->disable_cells('custom_mail'); $etpl->disable_cells('custom_mail');
} }
if (!($readonlys['button[edit_series]'] = $readonlys['button[edit]'] = !$view || !$this->bo->check_perms(EGW_ACL_EDIT,$event))) if (!($readonlys['button[exception]'] = $readonlys['button[edit]'] = !$view || !$this->bo->check_perms(EGW_ACL_EDIT,$event)))
{ {
$readonlys['button[edit_series]'] = $event['recur_type'] == MCAL_RECUR_NONE; $readonlys['button[exception]'] = $event['recur_type'] == MCAL_RECUR_NONE;
}
if (!($readonlys['button[delete_series]'] = $readonlys['button[delete]'] = !$event['id'] || !$this->bo->check_perms(EGW_ACL_DELETE,$event)))
{
$readonlys['button[delete_series]'] = !$view || $event['recur_type'] == MCAL_RECUR_NONE;
} }
$readonlys['button[delete]'] = !$event['id'] || !$this->bo->check_perms(EGW_ACL_DELETE,$event);
if ($event['id'] || $this->bo->check_perms(EGW_ACL_EDIT,$event)) // new event or edit rights to the event ==> allow to add alarm for all users if ($event['id'] || $this->bo->check_perms(EGW_ACL_EDIT,$event)) // new event or edit rights to the event ==> allow to add alarm for all users
{ {
$sel_options['owner'][0] = lang('All participants'); $sel_options['owner'][0] = lang('All participants');
@ -729,7 +728,8 @@ class uiforms extends uical
//echo "preserv="; _debug_array($preserv); //echo "preserv="; _debug_array($preserv);
//echo "readonlys="; _debug_array($readonlys); //echo "readonlys="; _debug_array($readonlys);
//echo "sel_options="; _debug_array($sel_options); //echo "sel_options="; _debug_array($sel_options);
$GLOBALS['egw_info']['flags']['app_header'] = lang('calendar') . ' - ' . ($event['id'] ? ($view ? lang('View') : lang('Edit')) : lang('Add')); $GLOBALS['egw_info']['flags']['app_header'] = lang('calendar') . ' - ' . ($event['id'] ? ($view ? lang('View') :
($content['edit_single'] ? lang('Edit exception') : lang('Edit'))) : lang('Add'));
$GLOBALS['egw_info']['flags']['java_script'] .= "<script>\n$js\n</script>\n"; $GLOBALS['egw_info']['flags']['java_script'] .= "<script>\n$js\n</script>\n";
$etpl->exec('calendar.uiforms.process_edit',$content,$sel_options,$readonlys,$preserv,$preserv['no_popup'] ? 0 : 2); $etpl->exec('calendar.uiforms.process_edit',$content,$sel_options,$readonlys,$preserv,$preserv['no_popup'] ? 0 : 2);
} }

View File

@ -1,5 +1,5 @@
<?php <?php
// eTemplates for Application 'calendar', generated by soetemplate::dump4setup() 2005-11-23 11:13 // eTemplates for Application 'calendar', generated by soetemplate::dump4setup() 2005-11-23 21:53
/* $Id$ */ /* $Id$ */
@ -11,6 +11,8 @@ $templ_data[] = array('name' => 'calendar.edit','template' => '','lang' => '','g
$templ_data[] = array('name' => 'calendar.edit','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:7:{s:2:"h1";s:6:",!@msg";s:2:"c2";s:2:"th";s:1:"A";s:3:"100";s:2:"c4";s:3:"row";s:2:"h4";s:8:",!@owner";s:1:"B";s:3:"300";s:2:"h2";s:2:"28";}i:1;a:3:{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";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:2;a:3:{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";}}i:3;a:3:{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";}}i:4;a:3:{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:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"align";s:5:"right";i:1;a:5:{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";}i:2;a:4:{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";}}}i:5;a:3:{s:1:"A";a:11:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"8";s:4:"span";s:1:"2";i:1;a:4:{s:4:"type";s:6:"button";s:4:"name";s:19:"button[edit_series]";s:5:"label";s:11:"Edit series";s:4:"help";s:35:"Edit this series of recuring events";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[edit]";s:5:"label";s:4:"Edit";s:4:"help";s:15:"Edit this event";}i:3;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[copy]";s:5:"label";s:4:"Copy";s:4:"help";s:15:"Copy this event";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[vcal]";s:5:"label";s:6:"Export";s:4:"help";s:27:"Download this event as iCal";}i:5;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:6;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:7;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";s:4:"help";s:16:"Close the window";}i:8;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:11:"custom_mail";s:5:"label";s:21:"mail all participants";s:4:"help";s:59:"compose a mail to all participants after the event is saved";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:5:"align";s:5:"right";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"button";s:4:"name";s:21:"button[delete_series]";s:5:"label";s:13:"Delete series";s:4:"help";s:37:"Delete this series of recuring events";s:7:"onclick";s:56:"return confirm(\'Delete this series of recuring events\');";}i:2;a:5:{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:4:"rows";i:5;s:4:"cols";i:3;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1118477069',); $templ_data[] = array('name' => 'calendar.edit','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:7:{s:2:"h1";s:6:",!@msg";s:2:"c2";s:2:"th";s:1:"A";s:3:"100";s:2:"c4";s:3:"row";s:2:"h4";s:8:",!@owner";s:1:"B";s:3:"300";s:2:"h2";s:2:"28";}i:1;a:3:{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";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:2;a:3:{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";}}i:3;a:3:{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";}}i:4;a:3:{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:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"align";s:5:"right";i:1;a:5:{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";}i:2;a:4:{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";}}}i:5;a:3:{s:1:"A";a:11:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"8";s:4:"span";s:1:"2";i:1;a:4:{s:4:"type";s:6:"button";s:4:"name";s:19:"button[edit_series]";s:5:"label";s:11:"Edit series";s:4:"help";s:35:"Edit this series of recuring events";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[edit]";s:5:"label";s:4:"Edit";s:4:"help";s:15:"Edit this event";}i:3;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[copy]";s:5:"label";s:4:"Copy";s:4:"help";s:15:"Copy this event";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[vcal]";s:5:"label";s:6:"Export";s:4:"help";s:27:"Download this event as iCal";}i:5;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:6;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:7;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";s:4:"help";s:16:"Close the window";}i:8;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:11:"custom_mail";s:5:"label";s:21:"mail all participants";s:4:"help";s:59:"compose a mail to all participants after the event is saved";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:5:"align";s:5:"right";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"button";s:4:"name";s:21:"button[delete_series]";s:5:"label";s:13:"Delete series";s:4:"help";s:37:"Delete this series of recuring events";s:7:"onclick";s:56:"return confirm(\'Delete this series of recuring events\');";}i:2;a:5:{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:4:"rows";i:5;s:4:"cols";i:3;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1118477069',);
$templ_data[] = array('name' => 'calendar.edit','template' => '','lang' => '','group' => '0','version' => '1.0.1.003','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:7:{s:2:"h1";s:6:",!@msg";s:2:"c2";s:2:"th";s:1:"A";s:3:"100";s:2:"c4";s:3:"row";s:2:"h4";s:8:",!@owner";s:1:"B";s:3:"300";s:2:"h2";s:2:"28";}i:1;a:3:{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";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:2;a:3:{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";}}i:3;a:3:{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";}}i:4;a:3:{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:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"align";s:5:"right";i:1;a:5:{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";}i:2;a:4:{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";}}}i:5;a:3:{s:1:"A";a:11:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"8";s:4:"span";s:1:"2";i:1;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[edit]";s:5:"label";s:4:"Edit";s:4:"help";s:15:"Edit this event";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[exception]";s:5:"label";s:9:"Exception";s:4:"help";s:42:"Create an exception at this recuring event";}i:3;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[copy]";s:5:"label";s:4:"Copy";s:4:"help";s:15:"Copy this event";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[vcal]";s:5:"label";s:6:"Export";s:4:"help";s:27:"Download this event as iCal";}i:5;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:6;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:7;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";s:4:"help";s:16:"Close the window";}i:8;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:11:"custom_mail";s:5:"label";s:21:"mail all participants";s:4:"help";s:59:"compose a mail to all participants after the event is saved";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";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:3;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1132776053',);
$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:3:{s:4:"type";s:13:"select-number";s:4:"size";s:4:",0,7";s:4:"name";s:15:"new_alarm[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:3:{s:4:"type";s:13:"select-number";s:4:"name";s:16:"new_alarm[hours]";s:4:"size";s:5:",0,23";}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:3:{s:4:"type";s:13:"select-number";s:4:"name";s:15:"new_alarm[mins]";s:4:"size";s:7:",0,55,5";}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%,200,,,,,auto";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' => '1118780740',); $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:3:{s:4:"type";s:13:"select-number";s:4:"size";s:4:",0,7";s:4:"name";s:15:"new_alarm[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:3:{s:4:"type";s:13:"select-number";s:4:"name";s:16:"new_alarm[hours]";s:4:"size";s:5:",0,23";}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:3:{s:4:"type";s:13:"select-number";s:4:"name";s:15:"new_alarm[mins]";s:4:"size";s:7:",0,55,5";}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%,200,,,,,auto";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' => '1118780740',);
$templ_data[] = array('name' => 'calendar.edit.custom','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:2:{i:0;a:1:{s:2:"c1";s:4:",top";}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:12:"customfields";s:4:"name";s:12:"customfields";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:17:"100%,200,,,,,auto";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' => '1118737582',); $templ_data[] = array('name' => 'calendar.edit.custom','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:2:{i:0;a:1:{s:2:"c1";s:4:",top";}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:12:"customfields";s:4:"name";s:12:"customfields";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:17:"100%,200,,,,,auto";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' => '1118737582',);

View File

@ -45,6 +45,7 @@ copy of: calendar de Kopie von:
copy this event calendar de Kopiert diesen Termin copy this event calendar de Kopiert diesen Termin
countries calendar de Länder countries calendar de Länder
country calendar de Land country calendar de Land
create an exception at this recuring event calendar de Erzeugt eine Ausnahme an diesem wiederholenden Termin
create new links calendar de Neue Verknüpfung erstellen create new links calendar de Neue Verknüpfung erstellen
csv calendar de CSV csv calendar de CSV
csv-fieldname calendar de CSV-Feldname csv-fieldname calendar de CSV-Feldname
@ -76,6 +77,7 @@ do you wish to autoload calendar holidays files dynamically? admin de Sollen die
download calendar de Herunterladen download calendar de Herunterladen
download this event as ical calendar de Termin als iCal herunterladen download this event as ical calendar de Termin als iCal herunterladen
duration of the meeting calendar de Dauer des Termins duration of the meeting calendar de Dauer des Termins
edit exception calendar de Ausname bearbeiten
edit series calendar de Serie bearbeiten edit series calendar de Serie bearbeiten
edit this event calendar de Diesen Termin bearbeiten edit this event calendar de Diesen Termin bearbeiten
edit this series of recuring events calendar de Diese Serie von wiederholenden Terminen bearbeiten edit this series of recuring events calendar de Diese Serie von wiederholenden Terminen bearbeiten
@ -96,6 +98,7 @@ event deleted calendar de Termin gel
event details follow calendar de Details zum Termin folgen event details follow calendar de Details zum Termin folgen
event saved calendar de Termin gespeichert event saved calendar de Termin gespeichert
event will occupy the whole day calendar de Termin nimmt den ganzen Tag ein event will occupy the whole day calendar de Termin nimmt den ganzen Tag ein
exception calendar de Ausnahme
exceptions calendar de Ausnahmen exceptions calendar de Ausnahmen
existing links calendar de Bestehende Verknüpfungen existing links calendar de Bestehende Verknüpfungen
export calendar de Exportieren export calendar de Exportieren

View File

@ -45,6 +45,7 @@ copy of: calendar en Copy of:
copy this event calendar en Copy this event copy this event calendar en Copy this event
countries calendar en Countries countries calendar en Countries
country calendar en Country country calendar en Country
create an exception at this recuring event calendar en Create an exception at this recuring event
create new links calendar en Create new links create new links calendar en Create new links
csv calendar en CSV csv calendar en CSV
csv-fieldname calendar en CSV-Fieldname csv-fieldname calendar en CSV-Fieldname
@ -76,6 +77,7 @@ do you wish to autoload calendar holidays files dynamically? admin en Do you wis
download calendar en Download download calendar en Download
download this event as ical calendar en Download this event as iCal download this event as ical calendar en Download this event as iCal
duration of the meeting calendar en Duration of the meeting duration of the meeting calendar en Duration of the meeting
edit exception calendar en Edit exception
edit series calendar en Edit series edit series calendar en Edit series
edit this event calendar en Edit this event edit this event calendar en Edit this event
edit this series of recuring events calendar en Edit this series of recuring events edit this series of recuring events calendar en Edit this series of recuring events
@ -96,6 +98,7 @@ event deleted calendar en Event deleted
event details follow calendar en Event Details follow event details follow calendar en Event Details follow
event saved calendar en Event saved event saved calendar en Event saved
event will occupy the whole day calendar en Event will occupy the whole day event will occupy the whole day calendar en Event will occupy the whole day
exception calendar en Exception
exceptions calendar en Exceptions exceptions calendar en Exceptions
existing links calendar en Existing links existing links calendar en Existing links
export calendar en Export export calendar en Export

View File

@ -57,7 +57,7 @@
</rows> </rows>
</grid> </grid>
</template> </template>
<template id="calendar.edit.participants" template="" lang="" group="0" version="1.0.1.002"> <template id="calendar.edit.participants" template="" lang="" group="0" version="1.0.1.003">
<grid width="100%" height="200" class="row_on" overflow="auto"> <grid width="100%" height="200" class="row_on" overflow="auto">
<columns> <columns>
<column width="95"/> <column width="95"/>
@ -68,7 +68,7 @@
<rows> <rows>
<row class="row" valign="top" disabled="@view"> <row class="row" valign="top" disabled="@view">
<description options=",,,participants" value="Participants"/> <description options=",,,participants" value="Participants"/>
<listbox type="select-account" rows="14" id="participants[accounts]"/> <listbox type="select-account" rows="14" options="calendar+" id="participants[accounts]"/>
<description value="Resources" align="right"/> <description value="Resources" align="right"/>
<resources_select options="14" id="participants[resources]"/> <resources_select options="14" id="participants[resources]"/>
</row> </row>
@ -250,7 +250,7 @@
</rows> </rows>
</grid> </grid>
</template> </template>
<template id="calendar.edit" template="" lang="" group="0" version="1.0.1.002"> <template id="calendar.edit" template="" lang="" group="0" version="1.0.1.003">
<grid width="100%"> <grid width="100%">
<columns> <columns>
<column width="100"/> <column width="100"/>
@ -303,8 +303,8 @@
</row> </row>
<row> <row>
<hbox span="2"> <hbox span="2">
<button id="button[edit_series]" label="Edit series" statustext="Edit this series of recuring events"/>
<button id="button[edit]" label="Edit" statustext="Edit this event"/> <button id="button[edit]" label="Edit" statustext="Edit this event"/>
<button id="button[exception]" label="Exception" statustext="Create an exception at this recuring event"/>
<button id="button[copy]" label="Copy" statustext="Copy this event"/> <button id="button[copy]" label="Copy" statustext="Copy this event"/>
<button id="button[vcal]" label="Export" statustext="Download this event as iCal"/> <button id="button[vcal]" label="Export" statustext="Download this event as iCal"/>
<button label="Save" id="button[save]" statustext="saves the changes made"/> <button label="Save" id="button[save]" statustext="saves the changes made"/>
@ -312,10 +312,7 @@
<button id="button[cancel]" label="Cancel" onclick="window.close();" statustext="Close the window"/> <button id="button[cancel]" label="Cancel" onclick="window.close();" statustext="Close the window"/>
<checkbox id="custom_mail" label="mail all participants" statustext="compose a mail to all participants after the event is saved"/> <checkbox id="custom_mail" label="mail all participants" statustext="compose a mail to all participants after the event is saved"/>
</hbox> </hbox>
<hbox align="right"> <button label="Delete" id="button[delete]" statustext="Delete this event" onclick="return confirm('Delete this event');" align="right"/>
<button id="button[delete_series]" label="Delete series" statustext="Delete this series of recuring events" onclick="return confirm('Delete this series of recuring events');"/>
<button label="Delete" id="button[delete]" statustext="Delete this event" onclick="return confirm('Delete this event');"/>
</hbox>
</row> </row>
</rows> </rows>
</grid> </grid>