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 @@ -