modifications to allow exporting of all calendar entries via stylite/migrate.php script, added cal_deleted as timestamp and support again setting $updateTS=false in calendar_boupdate::save()

This commit is contained in:
Ralf Becker 2017-01-18 18:29:44 +01:00
parent ed1ffdea76
commit d36db46c08
4 changed files with 17 additions and 15 deletions

View File

@ -415,7 +415,7 @@ class calendar_bo
}
return $contact_list;
}
/**
* Add group-members as participants with status 'G'
*
@ -615,7 +615,7 @@ class calendar_bo
}
// if we have no grants from the given user(s), we directly return no events / an empty array,
// as calling the so-layer without users would give the events of all users (!)
if (!count($users))
if (!count($users) && !$params['ignore_acl'])
{
return false;
}
@ -670,7 +670,7 @@ class calendar_bo
{
$is_private = !$this->check_perms(Acl::READ,$event);
}
if ($is_private || (!$event['public'] && $filter == 'hideprivate'))
if (!$params['ignore_acl'] && ($is_private || (!$event['public'] && $filter == 'hideprivate')))
{
$this->clear_private_infos($events[$id],$users);
}
@ -975,11 +975,11 @@ class calendar_bo
$time->setTime(23, 59, 59);
$event['recur_enddate'] = Api\DateTime::to($time, $date_format);
}
$timestamps = array('modified','created');
$timestamps = array('modified','created','deleted');
}
else
{
$timestamps = array('start','end','modified','created','recur_enddate','recurrence','recur_date');
$timestamps = array('start','end','modified','created','recur_enddate','recurrence','recur_date','deleted');
}
// we convert here from the server-time timestamps to user-time and (optional) to a different date-format!
foreach ($timestamps as $ts)

View File

@ -247,7 +247,7 @@ class calendar_boupdate extends calendar_bo
//echo "saving $event[id]="; _debug_array($event);
$event2save = $event;
if (!($cal_id = $this->save($event, $ignore_acl, $updateTS)))
if (!($cal_id = $this->save($event, $ignore_acl)))
{
return $cal_id;
}
@ -937,7 +937,7 @@ class calendar_boupdate extends calendar_bo
// Since we're running from cron, make sure notifications uses user's theme (for images)
$GLOBALS['egw_info']['server']['template_set'] = $GLOBALS['egw_info']['user']['preferences']['common']['template_set'];
$event_arr = null;
$details = $this->_get_event_details(isset($cleared_event) ? $cleared_event : $event,
$action, $event_arr, $disinvited);
@ -1153,12 +1153,11 @@ class calendar_boupdate extends calendar_bo
* @param array $event
* @param boolean $ignore_acl =false should we ignore the acl
* @param boolean $updateTS =true update the content history of the event
* DEPRECATED: we allways (have to) update timestamp, as they are required for sync!
* Please note: you should ALLWAYS update timestamps, as they are required for sync!
* @return int|boolean $cal_id > 0 or false on error (eg. permission denied)
*/
function save($event,$ignore_acl=false,$updateTS=true)
{
unset($updateTS);
//error_log(__METHOD__.'('.array2string($event).", $ignore_acl, $updateTS)");
// check if user has the permission to update / create the event
@ -1289,9 +1288,12 @@ class calendar_boupdate extends calendar_bo
}
}
// always update modification time (ctag depends on it!)
$event['modified'] = $this->now;
$event['modifier'] = $this->user;
// you should always update modification time (ctag depends on it!)
if ($updateTS)
{
$event['modified'] = $this->now;
$event['modifier'] = $this->user;
}
if (empty($event['id']) && (!isset($event['created']) || $event['created'] > $this->now))
{

View File

@ -768,6 +768,7 @@ class calendar_so
$where = array_merge($where, $params['sql_filter']);
}
}
$useUnionQuery = $this->db->capabilities['distinct_on_text'] && $this->db->capabilities['union'];
if ($users)
{
$users_by_type = array();
@ -786,7 +787,6 @@ class calendar_so
}
$to_or = $user_or = array();
$owner_or = null;
$useUnionQuery = $this->db->capabilities['distinct_on_text'] && $this->db->capabilities['union'];
$table_def = $this->db->get_table_definitions('calendar',$this->user_table);
foreach($users_by_type as $type => $ids)
{
@ -1053,7 +1053,7 @@ class calendar_so
foreach($this->db->select($utcal_id_view,'*',array(
//'cal_id' => array_unique($ids),
'cal_recur_date' => $recur_dates,
),__LINE__,__FILE__,false,'ORDER BY cal_id,cal_user_type DESC,'.self::STATUS_SORT,'calendar',$num_rows,$join='',
),__LINE__,__FILE__,false,'ORDER BY cal_id,cal_user_type DESC,'.self::STATUS_SORT,'calendar',-1,$join='',
$this->db->get_table_definitions('calendar',$this->user_table)) as $row) // DESC puts users before resources and contacts
{
$id = $row['cal_id'];

View File

@ -31,7 +31,7 @@ $phpgw_baseline = array(
'cal_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'creation time of event'),
'cal_recurrence' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'default' => '0','comment' => 'cal_start of original recurrence for exception'),
'tz_id' => array('type' => 'int','precision' => '4','comment' => 'key into egw_cal_timezones'),
'cal_deleted' => array('type' => 'int','precision' => '8','comment' => 'ts when event was deleted'),
'cal_deleted' => array('type' => 'int','precision' => '8','meta' => 'timestamp','comment' => 'ts when event was deleted'),
'caldav_name' => array('type' => 'ascii','precision' => '128','comment' => 'name part of CalDAV URL, if specified by client'),
'range_start' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'startdate (of range)'),
'range_end' => array('type' => 'int','meta' => 'timestamp','precision' => '8','comment' => 'enddate (of range, UNTIL of RRULE)')