mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 16:48:49 +01:00
Add 'reset stati options' to calendar
This commit is contained in:
parent
769debd2bd
commit
16def751e3
@ -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',
|
||||
|
@ -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']))
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user