regard timezones in calendar import/export

(cherry picked from commit 5b4aa1afc2)
This commit is contained in:
Mario 2019-06-03 11:25:48 +00:00
parent 6d2ab6a7d6
commit 66c6c6c7d1
2 changed files with 26 additions and 5 deletions

View File

@ -304,7 +304,9 @@ class Channel_calendar extends \Zotlabs\Web\Controller {
);
}
elseif($export) {
$r = q("SELECT * from event where uid = %d and dtstart > '%s' and dtend > dtstart",
$r = q("SELECT event.*, item.id as item_id
from event left join item on item.resource_id = event.event_hash
where event.uid = %d and event.dtstart > '%s' and event.dtend > event.dtstart",
intval(local_channel()),
dbesc(NULL_DATE)
);

View File

@ -144,6 +144,12 @@ function format_event_ical($ev) {
if($ev['etype'] === 'task')
return format_todo_ical($ev);
$tz = get_iconfig($ev['item_id'], 'event', 'timezone');
if(! $tz)
$tz = 'UTC';
$tzid = ';TZID=' . $tz;
$o = '';
$o .= "\r\nBEGIN:VEVENT";
@ -151,10 +157,19 @@ function format_event_ical($ev) {
$o .= "\r\nCREATED:" . datetime_convert('UTC','UTC', $ev['created'],'Ymd\\THis\\Z');
$o .= "\r\nLAST-MODIFIED:" . datetime_convert('UTC','UTC', $ev['edited'],'Ymd\\THis\\Z');
$o .= "\r\nDTSTAMP:" . datetime_convert('UTC','UTC', $ev['edited'],'Ymd\\THis\\Z');
if($ev['dtstart'])
$o .= "\r\nDTSTART:" . datetime_convert('UTC','UTC', $ev['dtstart'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : ''));
if($ev['dtend'] && ! $ev['nofinish'])
$o .= "\r\nDTEND:" . datetime_convert('UTC','UTC', $ev['dtend'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : ''));
if($ev['adjust']) {
if($ev['dtstart'])
$o .= "\r\nDTSTART$tzid:" . datetime_convert($tz,'UTC', $ev['dtstart'],'Ymd\\THis\\Z');
if($ev['dtend'] && ! $ev['nofinish'])
$o .= "\r\nDTEND$tzid:" . datetime_convert($tz,'UTC', $ev['dtend'],'Ymd\\THis\\Z');
}
else {
if($ev['dtstart'])
$o .= "\r\nDTSTART;VALUE=DATE:" . datetime_convert('UTC','UTC', $ev['dtstart'],'Ymd');
if($ev['dtend'] && ! $ev['nofinish'])
$o .= "\r\nDTEND;VALUE=DATE:" . datetime_convert('UTC','UTC', $ev['dtend'],'Ymd');
}
if($ev['summary']) {
$o .= "\r\nSUMMARY:" . format_ical_text($ev['summary']);
$o .= "\r\nX-ZOT-SUMMARY:" . format_ical_sourcetext($ev['summary']);
@ -856,6 +871,10 @@ function event_import_ical($ical, $uid) {
$ev['external_id'] = $evuid;
}
$ev['timezone'] = 'UTC';
if(isset($ical->DTSTART['TZID']))
$ev['timezone'] = $ical->DTSTART['TZID'];
if($ev['summary'] && $ev['dtstart']) {
$ev['event_xchan'] = $channel['channel_hash'];
$ev['uid'] = $channel['channel_id'];