Implement new 'change startdate of series events' approach

This commit is contained in:
Jörg Lehrke 2010-06-09 18:00:11 +00:00
parent 5c2c6b071c
commit 625603d59f
4 changed files with 194 additions and 16 deletions

View File

@ -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!').'<br />'.
lang('Copy your changes to the clipboard, %1reload the entry%2 and merge them.','<a href="'.
htmlspecialchars(egw::link('/index.php',array(
'menuaction' => 'calendar.calendar_uiforms.edit',
'cal_id' => $content['id'],
'referer' => $referer,
))).'">','</a>');
$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,
))).'">','</a>');
$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

View File

@ -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
<b>please note</b>: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.<br />holidays are %3 automatic installed from %4. you can changed it in %5. calendar de <b>Bitte beachten</b>: Der Kalender verwendet die Feiertages des Landes, welches auf %1 eingestellt ist. Das können Sie in Ihren %2 ändern.<br />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.<br>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.<br />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.<br>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.<br />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?<br>the summary is sent to your standard email-address on the morning of that day or on monday for weekly summarys.<br>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?<br>Die Zusammenfassung wird täglich (jeden Morgen), oder für eine wöchentliche Zusammenfassung Montags an Ihre Standard E-Mail Adresse gesendet.<br> 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 <u>only</u> in browser) calendar de Test Import (zeigt importierte Datensätze <u>nur</u> 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.

View File

@ -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.<br>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.<br>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.<br>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.<br>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?<br>the summary is sent to your standard email-address on the morning of that day or on monday for weekly summarys.<br>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?<br>The summary is sent to your standard email-address on the morning of that day or on Monday for weekly summaries.<br>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 <u>only</u> in browser) calendar en Test Import (show importable records <u>only</u> 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.

View File

@ -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',);