forked from extern/egroupware
Check event filters when updating status or category through edit dialog to remove the event if it no longer matches.
This commit is contained in:
parent
e4371fd344
commit
8cb1bb19b1
@ -606,17 +606,37 @@ class calendar_ui
|
||||
*
|
||||
* @param int $event_id
|
||||
* @param Api\DateTime $recurrence_date
|
||||
*
|
||||
* @return boolean True if the event was updated, false if it could not be
|
||||
* updated or was removed.
|
||||
*/
|
||||
public function update_client($event_id, Api\DateTime $recurrence_date = null)
|
||||
{
|
||||
if(!$event_id) return;
|
||||
if(!$event_id) return false;
|
||||
|
||||
// Directly update stored data.
|
||||
// Make sure we have the whole event
|
||||
$event = $this->bo->read($event_id, $recurrence_date);
|
||||
$response = Api\Json\Response::get();
|
||||
|
||||
if(!$event)
|
||||
|
||||
// Check filters to see if they still match, may have to remove
|
||||
// the event because it should no longer be displayed
|
||||
$filter_match = true;
|
||||
if($this->cal_prefs['saved_states']['status_filter'] != 'all' ||
|
||||
$this->cal_prefs['saved_states']['cat_id'])
|
||||
{
|
||||
$filter_check = array(
|
||||
'start' => $event['start'],
|
||||
'users' => $this->cal_prefs['saved_states']['owner'],
|
||||
'cat_id' => $this->cal_prefs['saved_states']['cat_id'],
|
||||
'filter' => $this->cal_prefs['saved_states']['status_filter'],
|
||||
'num_rows' => 1
|
||||
);
|
||||
$filter_match = count($this->bo->search($filter_check, $this->bo->so->cal_table.".cal_id = {$event['id']}")) > 0;
|
||||
}
|
||||
|
||||
if(!$event || !$filter_match)
|
||||
{
|
||||
// Sending null will trigger a removal
|
||||
$response->generic('data', array('uid' => 'calendar::'.$event_id, 'data' => null));
|
||||
@ -644,6 +664,7 @@ class calendar_ui
|
||||
}
|
||||
while ($rrule->valid() && $occurrence <= $this_month );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -479,6 +479,9 @@ class calendar_uiforms extends calendar_ui
|
||||
$new_status = calendar_so::combine_status($status, $quantity, $role);
|
||||
if ($this->bo->set_status($event['id'],$uid,$new_status,isset($content['edit_single']) ? $content['participants']['status_date'] : 0, false, true, $content['no_notifications']))
|
||||
{
|
||||
// Update main window
|
||||
$client_updated = $this->update_client($event['id'], $content['edit_single']);
|
||||
|
||||
// refreshing the calendar-view with the changed participant-status
|
||||
if($event['recur_type'] != MCAL_RECUR_NONE)
|
||||
{
|
||||
@ -497,7 +500,7 @@ class calendar_uiforms extends calendar_ui
|
||||
{
|
||||
$msg = lang('Status changed');
|
||||
//Refresh the event in the main window after changing status
|
||||
Framework::refresh_opener($msg, 'calendar', $event['id']);
|
||||
Framework::refresh_opener($msg, 'calendar', $event['id'], $client_updated ? 'update' : 'delete');
|
||||
}
|
||||
}
|
||||
if (!$content['no_popup'])
|
||||
@ -787,6 +790,11 @@ class calendar_uiforms extends calendar_ui
|
||||
{
|
||||
$update_type = 'edit';
|
||||
}
|
||||
// Changing category may affect event filtering
|
||||
if($this->cal_prefs['saved_states']['cat_id'] && $old_event['category'] != $event['category'])
|
||||
{
|
||||
$update_type = 'edit';
|
||||
}
|
||||
$conflicts = $this->bo->update($event,$ignore_conflicts,true,false,true,$messages,$content['no_notifications']);
|
||||
unset($event['ignore']);
|
||||
}
|
||||
@ -893,11 +901,11 @@ class calendar_uiforms extends calendar_ui
|
||||
$response = Api\Json\Response::get();
|
||||
if($response && $update_type != 'delete')
|
||||
{
|
||||
$this->update_client($event['id']);
|
||||
$client_updated = $this->update_client($event['id']);
|
||||
}
|
||||
|
||||
$msg = $message . ($msg ? ', ' . $msg : '');
|
||||
Framework::refresh_opener($msg, 'calendar', $event['id'], $event['recur_type'] ? 'edit' : $update_type);
|
||||
Framework::refresh_opener($msg, 'calendar', $event['id'], $client_updated ? ($event['recur_type'] ? 'edit' : $update_type) : 'delete');
|
||||
// writing links for new entry, existing ones are handled by the widget itself
|
||||
if (!$content['id'] && is_array($content['link_to']['to_id']))
|
||||
{
|
||||
@ -997,7 +1005,7 @@ class calendar_uiforms extends calendar_ui
|
||||
$response = Api\Json\Response::get();
|
||||
if($response && !$content['id'] && $event['id'])
|
||||
{
|
||||
$this->update_client($event['id']);
|
||||
$client_updated = $this->update_client($event['id']);
|
||||
}
|
||||
if (in_array($button,array('cancel','save','delete','delete_exceptions','delete_keep_exceptions')) && $noerror)
|
||||
{
|
||||
@ -1018,7 +1026,9 @@ class calendar_uiforms extends calendar_ui
|
||||
}
|
||||
else
|
||||
{
|
||||
Framework::refresh_opener($msg, 'calendar', $event['id'], $button == 'save' ? ($content['id'] ? $update_type : 'add') : 'delete');
|
||||
Framework::refresh_opener($msg, 'calendar', $event['id'],
|
||||
$button == 'save' && $client_updated ? ($content['id'] ? $update_type : 'add') : 'delete'
|
||||
);
|
||||
}
|
||||
Framework::window_close();
|
||||
exit();
|
||||
|
@ -317,7 +317,7 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend(
|
||||
{
|
||||
// Intelligent refresh without reloading everything
|
||||
var recurrences = Object.keys(egw.dataSearchUIDs(new RegExp('^calendar::'+_id+':')));
|
||||
var ids = event && event.data.recur_type && typeof _id === 'string' && _id.indexOf(':') < 0 || recurrences.length ?
|
||||
var ids = event && event.data && event.data.recur_type && typeof _id === 'string' && _id.indexOf(':') < 0 || recurrences.length ?
|
||||
recurrences :
|
||||
['calendar::'+_id];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user