diff --git a/calendar/inc/class.bocalupdate.inc.php b/calendar/inc/class.bocalupdate.inc.php
index 2c2b7c44e0..57a7aa8191 100644
--- a/calendar/inc/class.bocalupdate.inc.php
+++ b/calendar/inc/class.bocalupdate.inc.php
@@ -94,7 +94,8 @@ class bocalupdate extends bocal
// - new events need start, end and title
// - updated events cant set start, end or title to empty
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;
}
@@ -153,6 +154,7 @@ class bocalupdate extends bocal
foreach((array) $overlapping_events as $k => $overlap)
{
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
{
continue;
diff --git a/calendar/inc/class.socal.inc.php b/calendar/inc/class.socal.inc.php
index beb9dc5db4..1c26b16986 100644
--- a/calendar/inc/class.socal.inc.php
+++ b/calendar/inc/class.socal.inc.php
@@ -523,9 +523,11 @@ ORDER BY cal_user_type, cal_usre_id
// check if the recure-information changed
$this->db->select($this->repeats_table,'*',array('cal_id' => $cal_id),__LINE__,__FILE__);
$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'] ||
$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)
{
@@ -620,7 +622,8 @@ ORDER BY cal_user_type, cal_usre_id
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 ($change_since === false || !($row = $this->db->row(true)) || !$row['cal_start'] || !$row['cal_end'])
{
diff --git a/calendar/inc/class.uiforms.inc.php b/calendar/inc/class.uiforms.inc.php
index b05eab13ee..aa0db81b21 100644
--- a/calendar/inc/class.uiforms.inc.php
+++ b/calendar/inc/class.uiforms.inc.php
@@ -68,13 +68,13 @@ class uiforms extends uical
{
$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' ||
!$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
{
- $extra_participants[] = $owner;
+ $extra_participants += explode(',',$owner);
}
$owner = $this->user;
}
@@ -136,17 +136,7 @@ class uiforms extends uical
list($button) = @each($content['button']);
unset($content['button']);
- $view = $content['view'] && $button != 'edit' && $button != 'edit_series';
- // 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]);
- }
- }
+ $view = $content['view'] && $button != 'edit' && $button != 'exception';
if ($view && $button == 'vcal')
{
$msg = $this->export($content['id'],true);
@@ -285,7 +275,16 @@ class uiforms extends uical
);
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)
{
// 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
$recur_event = $this->bo->read($event['reference']);
$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
unset($recur_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
{
@@ -391,21 +392,14 @@ class uiforms extends uical
break;
case 'delete':
- case 'delete_series':
- 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
+ if ($this->bo->delete($event['id'],(int)$content['edit_single']))
{
- $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;
case 'freetime':
@@ -596,7 +590,6 @@ class uiforms extends uical
{
$name = $this->bo->resources[$type]['app'];
}
-// _debug_array($participants);
foreach($participants as $id => $status)
{
$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']);
$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
{
@@ -693,14 +694,12 @@ class uiforms extends uical
{
$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;
- }
- 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[exception]'] = $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
{
$sel_options['owner'][0] = lang('All participants');
@@ -729,7 +728,8 @@ class uiforms extends uical
//echo "preserv="; _debug_array($preserv);
//echo "readonlys="; _debug_array($readonlys);
//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'] .= "\n";
$etpl->exec('calendar.uiforms.process_edit',$content,$sel_options,$readonlys,$preserv,$preserv['no_popup'] ? 0 : 2);
}
diff --git a/calendar/setup/etemplates.inc.php b/calendar/setup/etemplates.inc.php
index f29c2ccaa3..5be28afe42 100644
--- a/calendar/setup/etemplates.inc.php
+++ b/calendar/setup/etemplates.inc.php
@@ -1,5 +1,5 @@
'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.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.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',);
diff --git a/calendar/setup/phpgw_de.lang b/calendar/setup/phpgw_de.lang
index 8e9df24379..af1c060040 100644
--- a/calendar/setup/phpgw_de.lang
+++ b/calendar/setup/phpgw_de.lang
@@ -45,6 +45,7 @@ copy of: calendar de Kopie von:
copy this event calendar de Kopiert diesen Termin
countries calendar de Länder
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
csv calendar de CSV
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 this event as ical calendar de Termin als iCal herunterladen
duration of the meeting calendar de Dauer des Termins
+edit exception calendar de Ausname bearbeiten
edit series calendar de Serie bearbeiten
edit this event calendar de Diesen Termin 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 saved calendar de Termin gespeichert
event will occupy the whole day calendar de Termin nimmt den ganzen Tag ein
+exception calendar de Ausnahme
exceptions calendar de Ausnahmen
existing links calendar de Bestehende Verknüpfungen
export calendar de Exportieren
diff --git a/calendar/setup/phpgw_en.lang b/calendar/setup/phpgw_en.lang
index a22c2397f2..3f6bd6346b 100644
--- a/calendar/setup/phpgw_en.lang
+++ b/calendar/setup/phpgw_en.lang
@@ -45,6 +45,7 @@ copy of: calendar en Copy of:
copy this event calendar en Copy this event
countries calendar en Countries
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
csv calendar en CSV
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 this event as ical calendar en Download this event as iCal
duration of the meeting calendar en Duration of the meeting
+edit exception calendar en Edit exception
edit series calendar en Edit series
edit this event calendar en Edit this event
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 saved calendar en Event saved
event will occupy the whole day calendar en Event will occupy the whole day
+exception calendar en Exception
exceptions calendar en Exceptions
existing links calendar en Existing links
export calendar en Export
diff --git a/calendar/templates/default/edit.xet b/calendar/templates/default/edit.xet
index 9f0993ea25..35aa64695c 100644
--- a/calendar/templates/default/edit.xet
+++ b/calendar/templates/default/edit.xet
@@ -57,7 +57,7 @@
-
+
@@ -68,7 +68,7 @@
-
+
@@ -250,7 +250,7 @@
-
+
@@ -303,8 +303,8 @@
-
+
@@ -312,10 +312,7 @@
-
-
-
-
+