forked from extern/egroupware
Make merging from list view work closer to merging from other views. Date range will be pulled from selected entries.
This commit is contained in:
parent
2bf55a7c87
commit
4b81bb8e75
@ -56,6 +56,11 @@ class calendar_merge extends bo_merge
|
|||||||
*/
|
*/
|
||||||
protected $query = array();
|
protected $query = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stored IDs, if user passed in ID / events instead of date range
|
||||||
|
*/
|
||||||
|
protected $ids = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
@ -97,7 +102,7 @@ class calendar_merge extends bo_merge
|
|||||||
$prefix = '';
|
$prefix = '';
|
||||||
|
|
||||||
// List events ?
|
// List events ?
|
||||||
if(is_array($id) && !$id['id'])
|
if(is_array($id) && !$id['id'] && !$id[0]['id'])
|
||||||
{
|
{
|
||||||
$events = $this->bo->search($this->query + $id + array(
|
$events = $this->bo->search($this->query + $id + array(
|
||||||
'offset' => 0,
|
'offset' => 0,
|
||||||
@ -109,10 +114,25 @@ class calendar_merge extends bo_merge
|
|||||||
$prefix = 'calendar/%d';
|
$prefix = 'calendar/%d';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elseif ($id[0]['id'])
|
||||||
|
{
|
||||||
|
// Passed an array of events, to be handled like a date range
|
||||||
|
$events = $id;
|
||||||
|
$id = array('start' => PHP_INT_MAX, 'end' => 0);
|
||||||
|
$this->ids = array();
|
||||||
|
foreach($events as $event) {
|
||||||
|
if($event['start'] < $id['start']) $id['start'] = $event['start'];
|
||||||
|
if($event['end'] > $id['end']) $id['end'] = $event['end'];
|
||||||
|
// Keep ids for future use
|
||||||
|
$this->ids[] = $event['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$events = array($id);
|
$events = array($id);
|
||||||
|
$this->ids = $events;
|
||||||
}
|
}
|
||||||
|
|
||||||
$replacements = array();
|
$replacements = array();
|
||||||
$n = 0;
|
$n = 0;
|
||||||
foreach($events as $event)
|
foreach($events as $event)
|
||||||
@ -201,13 +221,22 @@ class calendar_merge extends bo_merge
|
|||||||
{
|
{
|
||||||
static $days;
|
static $days;
|
||||||
if(is_array($date) && !$date['start']) {
|
if(is_array($date) && !$date['start']) {
|
||||||
$event = $this->bo->read(is_array($date) ? $date['id'] : $date, is_array($date) ? $date['recur_date'] : null);
|
// List of IDs
|
||||||
if(date('l',$event['start']) != $plugin) return array();
|
if($date[0]['start']) {
|
||||||
$date = $event['start'];
|
$id = array('start' => PHP_INT_MAX, 'end' => 0);
|
||||||
|
foreach($date as $event) {
|
||||||
|
if($event['start'] < $id['start']) $id['start'] = $event['start'];
|
||||||
|
if($event['end'] > $id['end']) $id['end'] = $event['end'];
|
||||||
|
}
|
||||||
|
$date = $id;
|
||||||
|
} else {
|
||||||
|
$event = $this->bo->read(is_array($date) ? $date['id'] : $date, is_array($date) ? $date['recur_date'] : null);
|
||||||
|
if(date('l',$event['start']) != $plugin) return array();
|
||||||
|
$date = $event['start'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$_date = $date['start'] ? $date['start'] : $date;
|
$_date = $date['start'] ? $date['start'] : $date;
|
||||||
|
|
||||||
if($days[date('Ymd',$_date)][$plugin]) return $days[date('Ymd',$_date)][$plugin][$n];
|
if($days[date('Ymd',$_date)][$plugin]) return $days[date('Ymd',$_date)][$plugin][$n];
|
||||||
|
|
||||||
$events = $this->bo->search($this->query + array(
|
$events = $this->bo->search($this->query + array(
|
||||||
@ -218,6 +247,7 @@ class calendar_merge extends bo_merge
|
|||||||
'order' => 'cal_start',
|
'order' => 'cal_start',
|
||||||
'daywise' => true
|
'daywise' => true
|
||||||
));
|
));
|
||||||
|
|
||||||
$days = array();
|
$days = array();
|
||||||
$replacements = array();
|
$replacements = array();
|
||||||
$time_format = $GLOBALS['egw_info']['user']['preferences']['common']['timeformat'] == 12 ? 'h:i a' : 'H:i';
|
$time_format = $GLOBALS['egw_info']['user']['preferences']['common']['timeformat'] == 12 ? 'h:i a' : 'H:i';
|
||||||
@ -225,6 +255,7 @@ class calendar_merge extends bo_merge
|
|||||||
{
|
{
|
||||||
foreach($list as $key => $event)
|
foreach($list as $key => $event)
|
||||||
{
|
{
|
||||||
|
if($this->ids && !in_array($event['id'], $this->ids)) continue;
|
||||||
$start = egw_time::to($event['start'], 'array');
|
$start = egw_time::to($event['start'], 'array');
|
||||||
$end = egw_time::to($event['end'], 'array');
|
$end = egw_time::to($event['end'], 'array');
|
||||||
$replacements = $this->calendar_replacements($event);
|
$replacements = $this->calendar_replacements($event);
|
||||||
@ -274,6 +305,15 @@ class calendar_merge extends bo_merge
|
|||||||
list($type, $which) = explode('_',$plugin);
|
list($type, $which) = explode('_',$plugin);
|
||||||
if($type == 'day' && $which)
|
if($type == 'day' && $which)
|
||||||
{
|
{
|
||||||
|
if($id[0]['start'])
|
||||||
|
{
|
||||||
|
$dates = array('start' => PHP_INT_MAX, 'end' => 0);
|
||||||
|
foreach($id as $event) {
|
||||||
|
if($event['start'] < $dates['start']) $dates['start'] = $event['start'];
|
||||||
|
if($event['end'] > $dates['end']) $dates['end'] = $event['end'];
|
||||||
|
}
|
||||||
|
$id = $dates;
|
||||||
|
}
|
||||||
$date = $this->bo->date2array($id['start']);
|
$date = $this->bo->date2array($id['start']);
|
||||||
$date['day'] = $which;
|
$date['day'] = $which;
|
||||||
$date = $this->bo->date2ts($date);
|
$date = $this->bo->date2ts($date);
|
||||||
@ -310,6 +350,7 @@ class calendar_merge extends bo_merge
|
|||||||
{
|
{
|
||||||
foreach($list as $key => $event)
|
foreach($list as $key => $event)
|
||||||
{
|
{
|
||||||
|
if($this->ids && !in_array($event['id'], $this->ids)) continue;
|
||||||
$start = egw_time::to($event['start'], 'array');
|
$start = egw_time::to($event['start'], 'array');
|
||||||
$end = egw_time::to($event['end'], 'array');
|
$end = egw_time::to($event['end'], 'array');
|
||||||
$replacements = $this->calendar_replacements($event);
|
$replacements = $this->calendar_replacements($event);
|
||||||
|
@ -521,9 +521,9 @@ class calendar_uilist extends calendar_ui
|
|||||||
$this->get_rows($query,$events,$readonlys);
|
$this->get_rows($query,$events,$readonlys);
|
||||||
foreach($events as $key => $event)
|
foreach($events as $key => $event)
|
||||||
{
|
{
|
||||||
if (!in_array($event['id'],$checked)) unset($events[$key]);
|
if (!in_array($event['id'],$checked) && !in_array($event['id'].':'.$event['recur_date'], $checked)) unset($events[$key]);
|
||||||
}
|
}
|
||||||
$checked = $events;
|
$checked = array_values($events); // Clear keys
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actions where one action is done to the group
|
// Actions where one action is done to the group
|
||||||
@ -540,7 +540,7 @@ class calendar_uilist extends calendar_ui
|
|||||||
case 'document':
|
case 'document':
|
||||||
if (!$settings) $settings = $GLOBALS['egw_info']['user']['preferences']['calendar']['default_document'];
|
if (!$settings) $settings = $GLOBALS['egw_info']['user']['preferences']['calendar']['default_document'];
|
||||||
$document_merge = new calendar_merge();
|
$document_merge = new calendar_merge();
|
||||||
$msg = $document_merge->download($settings, $checked, '', $GLOBALS['egw_info']['user']['preferences']['calendar']['document_dir']);
|
$msg = $document_merge->download($settings, array($checked), '', $GLOBALS['egw_info']['user']['preferences']['calendar']['document_dir']);
|
||||||
$failed = count($checked);
|
$failed = count($checked);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user