diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php index 4ba83b0446..8832902382 100644 --- a/calendar/inc/class.calendar_uiforms.inc.php +++ b/calendar/inc/class.calendar_uiforms.inc.php @@ -239,7 +239,7 @@ class calendar_uiforms extends calendar_ui unset($event['alarm']['delete_alarm']); unset($event['duration']); - if (in_array($button,array('ignore','freetime','reedit'))) // called from conflict display + if (in_array($button,array('ignore','freetime','reedit','confirm_edit_single'))) { // no conversation necessary, event is already in the right format } @@ -430,6 +430,22 @@ class calendar_uiforms extends calendar_ui //error_log(__METHOD__.$button.'#'.array2string($content['edit_single']).'#'); + $ignore_conflicts = $edit_series_confirmed = false; + + switch((string)$button) + { + case 'ignore': + $ignore_conflicts = true; + $button = $event['button_was']; // save or apply + unset($event['button_was']); + break; + + case 'confirm_edit_series': + $edit_series_confirmed = true; + $button = $event['button_was']; // save or apply + unset($event['button_was']); + } + switch((string)$button) { case 'exception': // create an exception in a recuring event @@ -462,11 +478,6 @@ class calendar_uiforms extends calendar_ui $event['title'] = lang('Copy of:').' '.$event['title']; break; - case 'ignore': - $ignore_conflicts = true; - $button = $event['button_was']; // save or apply - unset($event['button_was']); - // fall through case 'mail': case 'save': case 'print': @@ -543,6 +554,93 @@ class calendar_uiforms extends calendar_ui } else // we edited a non-reccuring event or the whole series { + if ($event['recur_type'] != MCAL_RECUR_NONE && + ($old_event = $this->bo->read($event['id']))) + { + // we edit a existing series event + if ($event['start'] != $old_event['start'] || + $event['whole_day'] != $old_event['whole_day']) + { + if(!($next_occurrence = $this->bo->read($event['id'], $this->bo->now_su + 1, true))) + { + $msg = lang("Error: You can't shift a series from the past!"); + $noerror = false; + break; + } + if ($edit_series_confirmed) + { + if (!empty($event['whole_day'])) + { + // Adjust start to 0:00 + $time = new egw_time($event['start']); + $time->setTime(0, 0, 0); + $event['start'] = egw_time::to($time, 'ts'); + $time = new egw_time($next_occurrence['start']); + $time->setTime(0, 0, 0); + $next_occurrence['start'] = egw_time::to($time, 'ts'); + } + $orig_event = $event; + $time = new egw_time($this->bo->now_su); + $time->setTime(0, 0, 0); + $old_event['recur_enddate'] = egw_time::to($time, 'ts'); + $offset = $event['start'] - $old_event['start']; + $event['start'] = $next_occurrence['start'] + $offset; + $event['end'] = $next_occurrence['end'] + $offset; + foreach ($old_event['recur_exception'] as $key => $exdate) + { + if ($exdate > $this->bo->now_su) + { + unset($old_event['recur_exception'][$key]); + $event['recur_exception'][$key] += $offset; + } + else + { + unset($event['recur_exception'][$key]); + } + } + if ($old_event['start'] > $this->bo->now_su) + { + // delete the original event + if (!$this->bo->delete($old_event['id'])) + { + $msg = lang("Error: Can't delete original series!"); + $noerror = false; + break; + } + } + elseif (!$this->bo->update($old_event,true)) + { + $msg .= ($msg ? ', ' : '') .lang('Error: the entry has been updated since you opened it for editing!').'
'. + lang('Copy your changes to the clipboard, %1reload the entry%2 and merge them.','',''); + $noerror = false; + $event = $orig_event; + break; + } + unset($orig_event); + unset($event['uid']); + unset($event['id']); + $event['alarm'] = array(); + } + else + { + $event['button_was'] = $button; // remember for confirm + return $this->confirm_edit_series($event,$preserv); + } + } + else + { + $edit_series_confirmed = false; + } + } + else + { + $edit_series_confirmed = false; + } $conflicts = $this->bo->update($event,$ignore_conflicts,true,false,true,$messages); unset($event['ignore']); } @@ -565,10 +663,54 @@ class calendar_uiforms extends calendar_ui 'cal_id' => $content['id'], 'referer' => $referer, ))).'">',''); - $noerror=false; + $noerror = false; } elseif ($conflicts > 0) { + if ($edit_series_confirmed && + ($event = $this->bo->read($conflicts))) + { + // set the alarms again + foreach ($old_event['alarm'] as $alarm) + { + $alarm['time'] += $offset; + unset($alarm['id']); + if (($next_occurrence = $this->bo->read($event['id'], $this->bo->now_su + $offset, true)) && + $alarm['time'] < $next_occurrence['start']) + { + $alarm['time'] = $next_occurrence['start'] - $alarm['offset']; + } + $this->bo->save_alarm($event['id'], $alarm); + } + // attach all future exceptions to the new series + $events =& $this->bo->search(array( + 'query' => array('cal_uid' => $old_event['uid']), + 'filter' => 'owner', // return all possible entries + 'daywise' => false, + 'date_format' => 'ts', + )); + foreach ((array)$events as $exception) + { + if ($exception['recurrence'] > $this->bo->now_su) + { + $exception['recurrence'] += $offset; + $exception['reference'] = $event['id']; + $exception['uid'] = $event['uid']; + $exception['start'] += $offset; + $exception['end'] += $offset; + $exception['whole_day'] = $event['whole_day']; + $alarms = array(); + foreach ($exception['alarm'] as $id => &$alarm) + { + $alarm['time'] = $exception['start'] - $alarm['offset']; + $alarms[] = $alarm; + } + $event['alarm'] = $alarms; + $this->bo->update($exception, true, true, true); + } + } + } + $msg = lang('Event saved').($msg ? ', '.$msg : ''); // writing links for new entry, existing ones are handled by the widget itself @@ -654,15 +796,15 @@ class calendar_uiforms extends calendar_ui case 'add_alarm': $time = ($content['actual_date'] ? $content['actual_date'] : $content['start']); + $offset = DAY_s * $content['new_alarm']['days'] + HOUR_s * $content['new_alarm']['hours'] + 60 * $content['new_alarm']['mins']; if ($event['recur_type'] != MCAL_RECUR_NONE && - ($next_occurrence = $this->bo->read($event['id'], $this->bo->now_su, true)) && + ($next_occurrence = $this->bo->read($event['id'], $this->bo->now_su + $offset, true)) && $time < $next_occurrence['start']) { $time = $next_occurrence['start']; } if ($this->bo->check_perms(EGW_ACL_EDIT,!$content['new_alarm']['owner'] ? $event : 0,$content['new_alarm']['owner'])) { - $offset = DAY_s * $content['new_alarm']['days'] + HOUR_s * $content['new_alarm']['hours'] + 60 * $content['new_alarm']['mins']; $alarm = array( 'offset' => $offset, 'time' => $time - $offset, @@ -675,7 +817,7 @@ class calendar_uiforms extends calendar_ui } elseif ($event['id']) // save the alarm immediatly { - if(($alarm_id = $this->bo->save_alarm($event['id'],$alarm))) + if (($alarm_id = $this->bo->save_alarm($event['id'],$alarm))) { $alarm['id'] = $alarm_id; $event['alarm'][$alarm_id] = $alarm; @@ -1196,16 +1338,17 @@ function replace_eTemplate_onsubmit() $GLOBALS['egw']->js->set_onload($onload); - $readonlys['recur_exception'] = !count($content['recur_exception']); // otherwise we get a delete button + $readonlys['recur_exception'] = true; if ($event['recur_type'] != MCAL_RECUR_NONE) { + $readonlys['recur_exception'] = !count($content['recur_exception']); // otherwise we get a delete button $onclick =& $etpl->get_cell_attribute('button[delete]','onclick'); // $onclick = 'delete_series('.$event['id'].');'; $onclick = str_replace('Delete this event','Delete this series of recuring events',$onclick); // some fundamental values of an existing series should not be changed by the user - $readonlys['start'] = $readonlys['whole_day'] = true; + //$readonlys['start'] = $readonlys['whole_day'] = true; $readonlys['recur_type'] = $readonlys['recur_data'] = true; $readonlys['recur_interval'] = $readonlys['tzid'] = true; } @@ -1346,6 +1489,21 @@ function replace_eTemplate_onsubmit() $etpl->exec('calendar.calendar_uiforms.process_edit',$content,false,false,array_merge($event,$preserv),$preserv['no_popup'] ? 0 : 2); } + + /** + * displays a confirmation window for changed start dates of series events + * + * @param array $event + * @param array $preserv data to preserv + */ + function confirm_edit_series($event,$preserv) + { + $etpl = CreateObject('etemplate.etemplate','calendar.confirm_edit_series'); + + $GLOBALS['egw_info']['flags']['app_header'] = lang('calendar') . ' - ' . lang('Start of Series Event Changed'); + + $etpl->exec('calendar.calendar_uiforms.process_edit',$content,false,false,array_merge($event,$preserv),$preserv['no_popup'] ? 0 : 2); + } /** * Callback for freetimesearch button in edit diff --git a/calendar/lang/egw_de.lang b/calendar/lang/egw_de.lang index a8e3d5d5cd..50f3c7f012 100644 --- a/calendar/lang/egw_de.lang +++ b/calendar/lang/egw_de.lang @@ -6,7 +6,7 @@ %1 records read (not yet imported, you may go back and uncheck test import) calendar de %1 Datensätze gelesen (noch nicht importiert, Sie können zurück gehen und Test Import ausschalten) %1 weeks calendar de %1 Wochen (%1 events in %2 seconds) calendar de (%1 Termine in %2 Sekunden -, exceptions preserved calendar de und Ausnahmen erhalten +, exceptions preserved calendar de und Ausnahmen erhalten please note: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.
holidays are %3 automatic installed from %4. you can changed it in %5. calendar de Bitte beachten: Der Kalender verwendet die Feiertages des Landes, welches auf %1 eingestellt ist. Das können Sie in Ihren %2 ändern.
Feiertage werden %3 automatisch von %4 installiert, was in %5 änderbar ist. a non blocking event will not conflict with other events calendar de Ein nicht blockierender Termin ergibt keine Konflikt mit anderen Terminen accept or reject an invitation calendar de Einladung zu- oder absagen @@ -80,6 +80,7 @@ copy this event calendar de Kopiert diesen Termin copy your changes to the clipboard, %1reload the entry%2 and merge them. calendar de Kopieren Sie ihre Änderungen in die Zwischenablage, %1laden den Eintrag neu%2 und fügen diese wieder ein. countries calendar de Länder country calendar de Land +create a new series calendar de Neu Serie anlegen create an exception for the given date calendar de Erzeugt eine Ausnahme am angegebenen Datum create exception calendar de Ausnahme erzeugen create new links calendar de Neue Verknüpfung erstellen @@ -116,12 +117,13 @@ display status of events calendar de Status von Terminen anzeigen displayed view calendar de Ansicht displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar de Soll Ihre Standard-Kalender-Ansicht auf der Startseite angezeigt werden (die Seite die sich nach dem Login öffnet oder wenn Sie auf Home klicken)? do not include events of group members calendar de Zeige nicht die Termine der Gruppenmitglieder +do you really want to change the start of this series? if you do, the original series will be terminated as of today and a new series for the future reflecting your changes will be created. calendar de Wollen Sie wirklich den Beginn dieses Serientermins ändern? Wenn Sie das tun, so wird die bestehende Serie heute beendet und fü die Zukunft ein neuer Wiederholungstermin mit Ihren Änderungen erzeugt. do you want a weekview with or without weekend? calendar de Möchten Sie eine Wochenansicht mit oder ohne Wochenende? do you want to be notified about changes of appointments you modified? calendar de Wollen Sie auch über eigene Änderungen Benachrichtigt werden? do you want to be notified about new or changed appointments? you are not notified about changes you made yourself.
you can limit the notifications to certain changes only. each item includes all notifications listed above. all modifications include changes of title, description, participants, but no participant responses. if the owner of an event requested any notifcations, he will always get participant responses like acceptions or rejections too. calendar de Möchten Sie über neue oder geänderte Termine informiert werden? Sie werden NICHT über Änderungen informiert, die Sie selbst anwenden.
Sie können die Benachrichtigungen auf bestimmte Änderungen beschränken. Jede Auswahl beinhaltet die oben aufgeführten Benachrichtigungen. Alle Änderungen beinhalten Änderungen des Titels, der Beschreibung, der Teilnehmer, aber keine Antworten der Teilnehmer. Falls der Besitzer eines Termins eine Benachrichtigung angefordert hat, werden auch die Teilnehmer-Antworten (Annahmen oder Absagen) zur Verfügung gestellt. do you want to be notified about new or changed appointments? you be notified about changes you make yourself.
you can limit the notifications to certain changes only. each item includes all the notification listed above it. all modifications include changes of title, description, participants, but no participant responses. if the owner of an event requested any notifcations, he will always get the participant responses like acceptions and rejections too. calendar de Möchten Sie über neue oder geänderte Termine informiert werden? Sie werden NICHT über Änderungen informiert, die Sie selbst anwenden.
Sie können die Benachrichtigungen auf bestimmte Änderungen beschränken. Jede Auswahl beinhaltet die oben aufgeführten Benachrichtigungen. Alle Änderungen beinhalten Änderungen des Titels, der Beschreibung, der Teilnehmer, aber keine Antworten der Teilnehmer. Falls der Besitzer eines Termins eine Benachrichtigung angefordert hat, werden auch die Teilnehmer-Antworten (Annahmen oder Absagen) zur Verfügung gestellt. do you want to edit this event as an exception or the whole series? calendar de Wollen Sie diesen Termin als Ausnahme bearbeiten oder die ganze Serie? -do you want to keep the series exceptions in your calendar? calendar de Wollen Sie die Ausnahmen dieses Serientermins behalten? +do you want to keep the series exceptions in your calendar? calendar de Wollen Sie die Ausnahmen dieses Serientermins in Ihrem Kalender behalten? do you want to receive a regulary summary of your appointsments via email?
the summary is sent to your standard email-address on the morning of that day or on monday for weekly summarys.
it is only sent when you have any appointments on that day or week. calendar de Möchten Sie eine regelmäßige Zusammenfassung Ihrer Termine via E-Mail erhalten?
Die Zusammenfassung wird täglich (jeden Morgen), oder für eine wöchentliche Zusammenfassung Montags an Ihre Standard E-Mail Adresse gesendet.
Die Benachrichtigung wird nur versendet, wenn Sie am nächsten Tag oder in der nächsten Woche auch einen Termin haben. do you wish to autoload calendar holidays files dynamically? admin de Sollen die Feiertage automatisch geladen werden? download calendar de Herunterladen @@ -223,6 +225,7 @@ invalid email-address "%1" for user %2 calendar de Ungültige E-Mail-Adresse "%1 invitations calendar de Einladungen invite calendar de Einladen keep exceptions calendar de Ausnahmen behalten +keep the series unchanged. calendar de Terminserie unverändert lassen. last calendar de letzte lastname of person to notify calendar de Nachname der zu benachrichtigenden Person length of the time interval calendar de Länge des Zeitintervalls @@ -387,7 +390,8 @@ submit to repository calendar de Übertragen zu EGroupware.org sun calendar de So tentative calendar de Vorläufige Zusage test import (show importable records only in browser) calendar de Test Import (zeigt importierte Datensätze nur im Webbrowser an) -the exceptions are deleted together with the series. calendar de Die Ausnahmen werden mit dem Serientermin gelöscht. +the exceptions are deleted together with the series. calendar de Die Ausnahmen werden mit der Terminserie gelöscht. +the original series will be terminated today and a new series be created. calendar de Der bestehende Serietermin wird heute beendet und eine neue Terminserie erstellt. the resource you selected is already overbooked: calendar de Die Ressource, die Sie buchen möchten, ist bereits überbucht. this day is shown as first day in the week or month view. calendar de Dieser Tag wird als erster in der Wochen- oder Monatsansicht angezeigt this defines the end of your dayview. events after this time, are shown below the dayview. calendar de Diese Zeit definiert das Ende des Arbeitstags in der Tagesansicht. Alle späteren Einträge werden darunter dargestellt. diff --git a/calendar/lang/egw_en.lang b/calendar/lang/egw_en.lang index 2422cd71f1..40ad2ec834 100644 --- a/calendar/lang/egw_en.lang +++ b/calendar/lang/egw_en.lang @@ -14,7 +14,9 @@ accepted calendar en Accepted access denied to the calendar of %1 !!! calendar en Access denied to the calendar of %1 !!! action that caused the notify: added, canceled, accepted, rejected, ... calendar en Action that caused the notify: Added, Canceled, Accepted, Rejected, ... actions calendar en Actions +actions... calendar en Actions... add alarm calendar en Add alarm +add timesheet entry calendar en Add timesheet entry added calendar en Added added by synchronisation calendar en Added by synchronisation after %1 calendar en After %1 @@ -28,6 +30,7 @@ alarms calendar en Alarms all categories calendar en All categories all day calendar en All day all events calendar en All events +all exceptions are converted into single events. calendar en All exceptions are converted into single events. all future calendar en All future all incl. rejected calendar en All incl. rejected all participants calendar en All participants @@ -77,6 +80,7 @@ copy this event calendar en Copy this event copy your changes to the clipboard, %1reload the entry%2 and merge them. calendar en Copy your changes to the clipboard, %1reload the entry%2 and merge them. countries calendar en Countries country calendar en Country +create a new series calendar en Create a new series create an exception for the given date calendar en Create an exception for the given date create exception calendar en Create exception create new links calendar en Create new links @@ -99,6 +103,7 @@ default type of resources application selected in the calendar particpants resea default type of resources selection calendar en Default type of resources selection default week view calendar en Default week view delegated calendar en Delegated +delete exceptions calendar en Delete exceptions delete selected events calendar en Delete selected events delete series calendar en Delete series delete this alarm calendar en Delete this alarm @@ -112,11 +117,13 @@ display status of events calendar en Display status of events displayed view calendar en Displayed view displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar en Displays your default calendar view on the start page (page you get when you enter eGroupWare or click on the homepage icon)? do not include events of group members calendar en Do not include events of group members +do you really want to change the start of this series? if you do, the original series will be terminated as of today and a new series for the future reflecting your changes will be created. calendar en Do you really want to change the start of this series? If you do, the original series will be terminated as of today and a new series for the future reflecting your changes will be created. do you want a weekview with or without weekend? calendar en Do you want a weekview with or without weekend? do you want to be notified about changes of appointments you modified? calendar en Do you want to be notified about changes of appointments you modified? do you want to be notified about new or changed appointments? you are not notified about changes you made yourself.
you can limit the notifications to certain changes only. each item includes all notifications listed above. all modifications include changes of title, description, participants, but no participant responses. if the owner of an event requested any notifcations, he will always get participant responses like acceptions or rejections too. calendar en Do you want to be notified about new or changed appointments? You are NOT notified about changes you made yourself.
You can limit the notifications to certain changes only. Each item includes all notifications listed above. All modifications include changes of title, description, participants, but no participant responses. If the owner of an event requested any notifications, he will always get participant responses like acceptions or rejections too. do you want to be notified about new or changed appointments? you be notified about changes you make yourself.
you can limit the notifications to certain changes only. each item includes all the notification listed above it. all modifications include changes of title, description, participants, but no participant responses. if the owner of an event requested any notifcations, he will always get the participant responses like acceptions and rejections too. calendar en Do you want to be notified about new or changed appointments? You be notified about changes you make yourself.
You can limit the notifications to certain changes only. Each item includes all the notification listed above it. All modifications include changes of title, description, participants, but no participant responses. If the owner of an event requested any notifcations, he will always get the participant responses like acceptions and rejections too. do you want to edit this event as an exception or the whole series? calendar en Do you want to edit this event as an exception or the whole series? +do you want to keep the series exceptions in your calendar? calendar en Do you want to keep the series exceptions in your calendar? do you want to receive a regulary summary of your appointsments via email?
the summary is sent to your standard email-address on the morning of that day or on monday for weekly summarys.
it is only sent when you have any appointments on that day or week. calendar en Do you want to receive regularly a summary of your appointments via email?
The summary is sent to your standard email-address on the morning of that day or on Monday for weekly summaries.
It is only sent when you have any appointments on that day or week. do you wish to autoload calendar holidays files dynamically? admin en Do you wish to auto-load calendar holidays files dynamically? download calendar en Download @@ -156,6 +163,7 @@ export calendar en Export extended calendar en Extended extended updates always include the complete event-details. ical's can be imported by certain other calendar-applications. calendar en Extended updates always include the complete event-details. iCal's can be imported by certain other calendar-applications. fieldseparator calendar en Field separator +filemanager calendar en Filemanager filename calendar en File name filename of the download calendar en File name of the download find free timeslots where the selected participants are availible for the given timespan calendar en Find free time slots where the selected participants are available for the given time span @@ -216,6 +224,8 @@ interval calendar en Interval invalid email-address "%1" for user %2 calendar en Invalid email-address "%1" for user %2 invitations calendar en Invitations invite calendar en Invite +keep exceptions calendar en Keep exceptions +keep the series unchanged. calendar en Keep the series unchanged. last calendar en Last lastname of person to notify calendar en Last name of a person to notify length of the time interval calendar en Length of the time interval @@ -240,6 +250,7 @@ monthly (by day) calendar en Monthly (by day) monthview calendar en Month view multiple week view calendar en Multiple week view needs action calendar en Needs action +new calendar en New new search with the above parameters calendar en New search with the above parameters no automatic purging admin en No automatic purging no events found calendar en No events found @@ -326,6 +337,7 @@ search string for the events calendar en Search string for the events select a %1 calendar en Select a %1 select a time calendar en Select a time select an action calendar en Select an action +select an action... calendar en Select an action... select multiple contacts for a further action calendar en Select multiple contacts for a further action select resources calendar en Select resources select who should get the alarm calendar en Select who should get the alarm @@ -378,6 +390,8 @@ submit to repository calendar en Submit to Repository sun calendar en Sun tentative calendar en Tentative test import (show importable records only in browser) calendar en Test Import (show importable records only in browser) +the exceptions are deleted together with the series. calendar en The exceptions are deleted together with the series. +the original series will be terminated today and a new series be created. calendar en The original series will be terminated today and a new series be created. the resource you selected is already overbooked: calendar en The resource you selected is already overbooked: this day is shown as first day in the week or month view. calendar en This day is shown as first day in the week or month view. this defines the end of your dayview. events after this time, are shown below the dayview. calendar en This defines the end of your day view. Events after this time, are shown below the day view. diff --git a/calendar/setup/etemplates.inc.php b/calendar/setup/etemplates.inc.php index e4985dcda6..55318b2fdd 100644 --- a/calendar/setup/etemplates.inc.php +++ b/calendar/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * eGroupWare - eTemplates for Application calendar * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2010-05-20 11:16 + * generated by soetemplate::dump4setup() 2010-06-09 19:36 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package calendar @@ -14,6 +14,8 @@ $templ_version=1; $templ_data[] = array('name' => 'calendar.cat_acl','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:3:{i:0;a:4:{s:4:"type";s:8:"groupbox";s:4:"size";s:1:"1";s:5:"label";s:12:"Category ACL";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:140:"Category ACL only restrict adding a category to an event or changing status of a participant. It does NOT change the visibility of an event!";}}i:1;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:7:"row,top";}i:1;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Category";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:24:"Restrict add category to";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:22:"Restrict set status to";}}i:2;a:3:{s:1:"A";a:3:{s:4:"type";s:10:"select-cat";s:4:"name";s:14:"${row}[cat_id]";s:4:"size";s:10:"Select one";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"size";s:6:"5,both";s:4:"name";s:11:"${row}[add]";}s:1:"C";a:3:{s:4:"type";s:14:"select-account";s:4:"size";s:6:"5,both";s:4:"name";s:14:"${row}[status]";}}}s:4:"rows";i:2;s:4:"cols";i:3;s:4:"name";s:4:"rows";s:7:"options";a:0:{}}i:2;a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:3:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";}i:2;a:3:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";}i:3;a:3:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";}}}','size' => '','style' => '','modified' => '1259850038',); +$templ_data[] = array('name' => 'calendar.confirm_edit_series','template' => '','lang' => '','group' => '0','version' => '1.7.003','data' => 'a:1:{i:0;a:7:{s:4:"rows";s:1:"1";s:4:"cols";s:1:"1";s:4:"name";s:20:"#confirm_edit_series";s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:5:{s:5:"class";s:12:"promptheader";s:4:"name";s:14:"#dialog-header";s:4:"type";s:4:"hbox";s:4:"size";s:1:"1";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:30:"This event is part of a series";}}i:2;a:6:{s:5:"class";s:6:"prompt";s:4:"name";s:14:"dialog-content";s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:189:"Do you really want to change the start of this series? If you do, the original series will be terminated as of today and a new series for the future reflecting your changes will be created.";}i:2;a:6:{s:5:"align";s:6:"center";s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:5:"label";s:19:"Create a new series";s:4:"name";s:27:"button[confirm_edit_series]";s:4:"type";s:6:"button";s:4:"help";s:73:"The original series will be terminated today and a new series be created.";}i:2;a:4:{s:5:"label";s:13:"Re-Edit event";s:4:"name";s:14:"button[reedit]";s:4:"type";s:6:"button";s:4:"help";s:30:"Allows to edit the event again";}i:3;a:4:{s:5:"label";s:6:"Cancel";s:4:"name";s:14:"button[cancel]";s:4:"type";s:6:"button";s:4:"help";s:26:"Keep the series unchanged.";}}}}}','size' => '','style' => '','modified' => '1276104491',); + $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.delete_series','template' => '','lang' => '','group' => '0','version' => '1.7.003','data' => 'a:1:{i:0;a:8:{s:4:"type";s:4:"vbox";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"1";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:30:"This event is part of a series";}s:4:"name";s:14:"#dialog-header";s:4:"span";s:13:",promptheader";}i:2;a:6:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:59:"Do you want to keep the series exceptions in your calendar?";}s:4:"span";s:7:",prompt";s:4:"name";s:14:"dialog-content";i:2;a:6:{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:"Keep exceptions";s:4:"help";s:48:"All exceptions are converted into single events.";s:4:"name";s:30:"button[delete_keep_exceptions]";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:17:"Delete exceptions";s:4:"help";s:52:"The exceptions are deleted together with the series.";s:4:"name";s:25:"button[delete_exceptions]";}i:3;a:3:{s:4:"type";s:10:"buttononly";s:5:"label";s:6:"Cancel";s:7:"onclick";s:64:"document.getElementById(\'delete_series\').style.display = \'none\';";}s:5:"align";s:6:"center";}}s:4:"name";s:14:"#delete_series";}}','size' => '','style' => '','modified' => '1273136129',);