Add 'reset stati options' to calendar

This commit is contained in:
Jörg Lehrke 2010-06-23 14:47:34 +00:00
parent 769debd2bd
commit 16def751e3
4 changed files with 144 additions and 76 deletions

View File

@ -235,6 +235,11 @@ class calendar_hooks
'resources' => lang('resources'),
'addressbook' => lang('addressbook')
);
$reset_stati_on_shifts = array(
'no' => lang('Never'),
'all' => lang('Always'),
'startday' => lang('If start day differs'),
);
if (!$hook_data['setup']) // does not work at setup time
{
$options = array('0' => lang('none'));
@ -446,6 +451,16 @@ class calendar_hooks
'admin' => False,
'default' => '0', // Use event's TZ
),
'reset_stati' => array(
'type' => 'select',
'label' => 'Reset participant stati on event shifts',
'name' => 'reset_stati',
'help' => 'Select whether you want the pariticpant stati reset to unkown, if an event is shifted later on.',
'values' => $reset_stati_on_shifts,
'default' => 'no',
'xmlrpc' => True,
'admin' => False,
),
'notifyAdded' => array(
'type' => 'notify',
'label' => 'Notification messages for added events',

View File

@ -431,7 +431,7 @@ class calendar_uiforms extends calendar_ui
//error_log(__METHOD__.$button.'#'.array2string($content['edit_single']).'#');
$ignore_conflicts = $edit_series_confirmed = false;
$ignore_conflicts = $edit_series_confirmed = $status_reset_to_unknown = false;
switch((string)$button)
{
@ -556,99 +556,120 @@ 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'])))
if ($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 ($event['recur_type'] != MCAL_RECUR_NONE)
{
if(!($next_occurrence = $this->bo->read($event['id'], $this->bo->now_su + 1, true)))
// we edit a existing series event
if ($event['start'] != $old_event['start'] ||
$event['whole_day'] != $old_event['whole_day'])
{
$msg = lang("Error: You can't shift a series from the past!");
$noerror = false;
break;
}
if ($edit_series_confirmed)
{
$orig_event = $event;
$offset = $event['start'] - $old_event['start'];
$event['start'] = $next_occurrence['start'] + $offset;
$event['end'] = $next_occurrence['end'] + $offset;
$event['participants'] = $old_event['participants'];
foreach ($old_event['recur_exception'] as $key => $exdate)
if(!($next_occurrence = $this->bo->read($event['id'], $this->bo->now_su + 1, true)))
{
if ($exdate > $this->bo->now_su)
$msg = lang("Error: You can't shift a series from the past!");
$noerror = false;
break;
}
if ($edit_series_confirmed)
{
$orig_event = $event;
$offset = $event['start'] - $old_event['start'];
$event['start'] = $next_occurrence['start'] + $offset;
$event['end'] = $next_occurrence['end'] + $offset;
$event['participants'] = $old_event['participants'];
foreach ($old_event['recur_exception'] as $key => $exdate)
{
unset($old_event['recur_exception'][$key]);
$event['recur_exception'][$key] += $offset;
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;
$event = $orig_event;
break;
}
}
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;
$event = $orig_event;
break;
$rriter = calendar_rrule::event2rrule($old_event, true);
$rriter->rewind();
$last = $rriter->current();
do
{
$rriter->next_no_exception();
$occurrence = $rriter->current();
}
while ($rriter->valid() &&
egw_time::to($occurrence, 'ts') < $this->bo->now_su &&
($last = $occurrence));
$last->setTime(0, 0, 0);
$old_event['recur_enddate'] = egw_time::to($last, 'ts');
if (!$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
{
$rriter = calendar_rrule::event2rrule($old_event, true);
$rriter->rewind();
$last = $rriter->current();
do
{
$rriter->next_no_exception();
$occurrence = $rriter->current();
}
while ($rriter->valid() &&
egw_time::to($occurrence, 'ts') < $this->bo->now_su &&
($last = $occurrence));
$last->setTime(0, 0, 0);
$old_event['recur_enddate'] = egw_time::to($last, 'ts');
if (!$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;
}
$event['button_was'] = $button; // remember for confirm
return $this->confirm_edit_series($event,$preserv);
}
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;
if ($old_event['start'] != $event['start'] ||
$old_event['end'] != $event['end'] ||
$event['whole_day'] != $old_event['whole_day'])
{
switch ($this->bo->cal_prefs['reset_stati'])
{
case 'no':
break;
case 'startday':
if (date('Ymd', $old_event['start']) == date('Ymd', $event['start'])) break;
default:
$status_reset_to_unknown = true;
foreach((array)$event['participants'] as $uid => $status)
{
calendar_so::split_status($status,$q,$r);
if ($uid[0] != 'c' && $uid[0] != 'e' && $uid != $this->bo->user && $status != 'U')
{
$event['participants'][$uid] = calendar_so::combine_status('U',$q,$r);
// todo: report reset status to user
}
}
}
}
}
}
else
{
$edit_series_confirmed = false;
}
$edit_series_confirmed = false;
$conflicts = $this->bo->update($event,$ignore_conflicts,true,false,true,$messages);
unset($event['ignore']);
}
@ -723,7 +744,22 @@ class calendar_uiforms extends calendar_ui
}
}
$msg = lang('Event saved').($msg ? ', '.$msg : '');
$message = lang('Event saved');
if ($status_reset_to_unknown)
{
foreach((array)$event['participants'] as $uid => $status)
{
if ($uid[0] != 'c' && $uid[0] != 'e' && $uid != $this->bo->user)
{
calendar_so::split_status($status,$q,$r);
$status = calendar_so::combine_status('U',$q,$r);
$this->bo->set_status($event['id'], $uid, $status, 0);
}
}
$message .= lang(', stati of participants reset');
}
$msg = $message . ($msg ? ', ' . $msg : '');
// writing links for new entry, existing ones are handled by the widget itself
if (!$content['id'] && is_array($content['link_to']['to_id']))

View File

@ -7,6 +7,7 @@
%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
, stati of participants reset calendar de , Stati der Teilnehmer zurückgesetzt
<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
@ -35,6 +36,7 @@ all future calendar de Alle zukünftigen
all incl. rejected calendar de Alle einschl. abgesagte
all participants calendar de Alle Teilnehmer
allows to edit the event again calendar de Erlaubt den Termin erneut zu bearbeiten
always calendar de Immer
apply the action on the whole query, not only the shown events calendar de Befehl auf die ganze Abfrage anwenden, NICHT nur auf die angezeigten Termine
apply the changes calendar de Übernimmt die Änderungen
are you sure you want to delete this country ? calendar de Sind Sie sicher, dass Sie dieses Land löschen möchten?
@ -142,12 +144,14 @@ enddate / -time of the meeting, eg. for more then one day calendar de Enddatum u
enddate of the export calendar de Enddatum des Exports
ends calendar de endet
error adding the alarm calendar de Fehler beim Zufügen des Alarms
error: can't delete original series! calendar de Fehler beim Löschen der bestehenden Serie
error: importing the ical calendar de Fehler beim Importieren des iCal
error: no participants selected !!! calendar de Fehler: Keine Teilnehmer ausgewählt !!!
error: ressources reservation in private events is not allowed!!! calendar de Fehler: Die Reservierung von Ressourcen für private Termine ist nicht erlaubt !!!
error: saving the event !!! calendar de Fehler beim Speichern des Termins !!!
error: starttime has to be before the endtime !!! calendar de Fehler: Startzeit muss vor Endzeit liegen !!!
error: the entry has been updated since you opened it for editing! calendar de Fehler: Der Eintrag wurde geändert seit Sie ihn zum Bearbeiten geöffnet haben!
error: you can't shift a series from the past! calendar de Eine abgelaufene Serie kann nicht mehr verschoben werden!
event copied - the copy can now be edited calendar de Termin kopiert - die Kopie kann jetzt bearbeitet werden
event deleted calendar de Termin gelöscht
event details follow calendar de Details zum Termin folgen
@ -214,6 +218,7 @@ ical file calendar de iCal Datei
ical import calendar de iCal Import
ical successful imported calendar de iCal erfolgreich importiert
if checked holidays falling on a weekend, are taken on the monday after. calendar de Wenn ausgewählt werden Feiertage die auf ein Wochenende fallen, am drauf folgenden Montag nachgeholt.
if start day differs calendar de Wenn die Starttage abweichen
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar de Wenn Sie hier kein Passwort angeben, ist die Information für jeden verfügbar, der die Adresse (URL) kennt!!!
ignore conflict calendar de Konflikt ignorieren
import calendar de Importieren
@ -321,6 +326,7 @@ repetitiondetails (or empty) calendar de Details der Wiederholung (oder leer)
requested calendar de Erforderlich
require an acl grant to invite other users and groups admin de Freigabe um andere Benutzer oder Gruppen einzuladen erforderlich
reset calendar de Zurücksetzen
reset participant stati on event shifts calendar de Rücksetzen der Teilnehmerstati beim Verschieben von Terminen
resources calendar de Ressourcen
resources except conflicting ones calendar de Ressourcen ausgenommen bereits gebuchte
resources with conflict detection calendar de Ressourcen mit bereits gebuchten
@ -340,6 +346,7 @@ select an action calendar de Befehl auswählen
select an action... calendar de Aktion auswählen...
select multiple contacts for a further action calendar de mehrere Adressen für weiteren Befehl auswählen
select resources calendar de Ressourcen auswählen
select whether you want the pariticpant stati reset to unkown, if an event is shifted later on. calendar de Wählen Sie aus, in welchem Fall die Teilnehmerstati zurückgesetzt werden sollen, wenn ein Termin verschoben wird.
select who should get the alarm calendar de Auswählen wer den Alarm erhalten soll
selected range calendar de Ausgewählter Zeitraum
series deleted calendar de Serientermin wurde gelöscht
@ -378,6 +385,7 @@ single event calendar de Einzelner Termin
specify where url of the day links to calendar de Gegen Sie an, wohin die URL des Tages linken soll
start calendar de Start
start date/time calendar de Startdatum/ -zeit
start of series event changed calendar de Starttermin der Serie wurde geändert
startdate / -time calendar de Startdatum / -zeit
startdate and -time of the search calendar de Startdatum und -zeit der Suche
startdate of the export calendar de Startdatum des Exports

View File

@ -7,6 +7,7 @@
%1 weeks calendar en %1 weeks
(%1 events in %2 seconds) calendar en (%1 events in %2 seconds)
, exceptions preserved calendar en , exceptions preserved
, stati of participants reset calendar en , stati of participants reset
<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 en <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 change it in %5.
a non blocking event will not conflict with other events calendar en A non blocking event will not conflict with other events
accept or reject an invitation calendar en Accept or reject an invitation
@ -35,6 +36,7 @@ all future calendar en All future
all incl. rejected calendar en All incl. rejected
all participants calendar en All participants
allows to edit the event again calendar en Allows to edit the event again
always calendar en Always
apply the action on the whole query, not only the shown events calendar en Apply the action on the whole query, NOT only the shown events
apply the changes calendar en apply the changes
are you sure you want to delete this country ? calendar en Are you sure you want to delete this Country ?
@ -142,12 +144,14 @@ enddate / -time of the meeting, eg. for more then one day calendar en End date /
enddate of the export calendar en End date of the export
ends calendar en ends
error adding the alarm calendar en Error adding the alarm
error: can't delete original series! calendar en Error: Can't delete original series!
error: importing the ical calendar en Error: importing the iCal
error: no participants selected !!! calendar en Error: no participants selected !!!
error: ressources reservation in private events is not allowed!!! calendar en Error: Resources reservation in private events is not allowed !!!
error: saving the event !!! calendar en Error: saving the event !!!
error: starttime has to be before the endtime !!! calendar en Error: Start time has to be before the end time !!!
error: the entry has been updated since you opened it for editing! calendar en Error: The entry has been updated since you opened it for editing!
error: you can't shift a series from the past! calendar en Error: You can't shift a series from the past!
event copied - the copy can now be edited calendar en Event copied - the copy can now be edited
event deleted calendar en Event deleted
event details follow calendar en Event Details follow
@ -214,6 +218,7 @@ ical file calendar en iCal file
ical import calendar en iCal Import
ical successful imported calendar en iCal successful imported
if checked holidays falling on a weekend, are taken on the monday after. calendar en If checked holidays are falling on a weekend, they are taken on the Monday after.
if start day differs calendar en If start day differs
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar en If you don't set a password here, the information is available to everyone, who knows the URL!!!
ignore conflict calendar en Ignore conflict
import calendar en Import
@ -321,6 +326,7 @@ repetitiondetails (or empty) calendar en Repetition details (or empty)
requested calendar en Requested
require an acl grant to invite other users and groups admin en Require an ACL grant to invite other users and groups
reset calendar en Reset
reset participant stati on event shifts calendar en Reset participant stati on event shifts
resources calendar en Resources
resources except conflicting ones calendar en Resources except conflicting ones
resources with conflict detection calendar en Resources with conflict detection
@ -340,6 +346,7 @@ 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 whether you want the pariticpant stati reset to unkown, if an event is shifted later on. calendar en Select whether you want the pariticpant stati reset to unkown, if an event is shifted later on.
select who should get the alarm calendar en Select who should get the alarm
selected range calendar en Selected range
series deleted calendar en Series deleted
@ -350,6 +357,7 @@ shall the date parameter be accepted (e.g. from calendar module)? calendar en Sh
should new events created as private by default ? calendar en Should new events created as private by default ?
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar en Should not logged in persons be able to see your Free/Busy information? You can set an extra password, different from your normal password, to protect this information. The Free/Busy information is in iCal format and only includes the times when you are busy. It does not include the event-name, description or locations. The URL to your Free/Busy information is %1.
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is <a href="http://213.183.76.121/egroupware/calendar/freebusy.php?user=mkk" target="_blank">http://213.183.76.121/egroupware/calendar/freebusy.php?user=mkk</a>. calendar en Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is <a href="http://213.183.76.121/egroupware/calendar/freebusy.php?user=mkk" target="_blank">http://213.183.76.121/egroupware/calendar/freebusy.php?user=mkk</a>.
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is <a href="https://www.serveahead.de/trunk/calendar/freebusy.php?user=admin" target="_blank">https://www.serveahead.de/trunk/calendar/freebusy.php?user=admin</a>. calendar en Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is <a href="https://www.serveahead.de/trunk/calendar/freebusy.php?user=admin" target="_blank">https://www.serveahead.de/trunk/calendar/freebusy.php?user=admin</a>.
should the grid be shown in the calendar calendar en Should the grid be shown in the calendar
should the number of weeks be shown on top of the calendar calendar en Should the number of weeks be shown on top of the calendar
should the number of weeks be shown on top of the calendar (only if offset = 0) calendar en Should the number of weeks be shown on top of the calendar (only if offset = 0)
@ -378,6 +386,7 @@ single event calendar en Single event
specify where url of the day links to calendar en Specify where URL of the day links to
start calendar en Start
start date/time calendar en Start Date/Time
start of series event changed calendar en Start of Series Event Changed
startdate / -time calendar en Start date / -time
startdate and -time of the search calendar en Start date and -time of the search
startdate of the export calendar en Start date of the export