improve timezone detection for caldav and remove smart birthday feature. Force adjust birthdays until we agree on how to deal with this.

This commit is contained in:
Mario Vavti 2019-05-22 12:40:37 +02:00
parent e834c7fe3e
commit 39613aa2d9
5 changed files with 27 additions and 18 deletions

View File

@ -1144,16 +1144,24 @@ class Cdav extends Controller {
$dtend = (string)$vevent->DTEND; $dtend = (string)$vevent->DTEND;
$description = (string)$vevent->DESCRIPTION; $description = (string)$vevent->DESCRIPTION;
$location = (string)$vevent->LOCATION; $location = (string)$vevent->LOCATION;
$timezone = (string)$vevent->DTSTART['TZID']; $timezone_str = (string)$vevent->DTSTART['TZID'];
$rw = ((cdav_perms($id[0],$calendars,true)) ? true : false); $rw = ((cdav_perms($id[0],$calendars,true)) ? true : false);
$editable = $rw ? true : false; $editable = $rw ? true : false;
$recurrent = ((isset($vevent->{'RECURRENCE-ID'})) ? true : false); $recurrent = ((isset($vevent->{'RECURRENCE-ID'})) ? true : false);
if($recurrent) { if($recurrent) {
$editable = false; $editable = false;
$timezone = $recurrent_timezone; $timezone_str = $recurrent_timezone;
} }
// Try to get an usable olson format timezone
$timezone_obj = \Sabre\VObject\TimeZoneUtil::getTimeZone($timezone_str, $vcalendar);
$timezone = $timezone_obj->getName();
// If we got nothing fallback to UTC
if(! $timezone)
$timezone = 'UTC';
$allDay = (((string)$vevent->DTSTART['VALUE'] == 'DATE') ? true : false); $allDay = (((string)$vevent->DTSTART['VALUE'] == 'DATE') ? true : false);
$events[] = [ $events[] = [

View File

@ -345,8 +345,9 @@ class Channel_calendar extends \Zotlabs\Web\Controller {
if(! $tz) if(! $tz)
$tz = 'UTC'; $tz = 'UTC';
if($rr['etype'] === 'birthday') if($rr['etype'] === 'birthday') {
$rr['adjust'] = intval(feature_enabled(local_channel(), 'smart_birthdays')); $rr['adjust'] = 1; //intval(feature_enabled(local_channel(), 'smart_birthdays'));
}
$start = (($rr['adjust']) ? datetime_convert($tz, date_default_timezone_get(), $rr['dtstart'], 'c') : datetime_convert('UTC', 'UTC', $rr['dtstart'], 'c')); $start = (($rr['adjust']) ? datetime_convert($tz, date_default_timezone_get(), $rr['dtstart'], 'c') : datetime_convert('UTC', 'UTC', $rr['dtstart'], 'c'));
if ($rr['nofinish']){ if ($rr['nofinish']){
@ -356,7 +357,6 @@ class Channel_calendar extends \Zotlabs\Web\Controller {
// give a fake end to birthdays so they get crammed into a // give a fake end to birthdays so they get crammed into a
// single day on the calendar // single day on the calendar
if($rr['etype'] === 'birthday') if($rr['etype'] === 'birthday')
$end = null; $end = null;
} }
@ -374,13 +374,13 @@ class Channel_calendar extends \Zotlabs\Web\Controller {
} }
} }
$allDay = false; //$allDay = false;
// allDay event rules // allDay event rules
if(!strpos($start, 'T') && !strpos($end, 'T')) //if(!strpos($start, 'T') && !strpos($end, 'T'))
$allDay = true; // $allDay = true;
if(strpos($start, 'T00:00:00') && strpos($end, 'T00:00:00')) //if(strpos($start, 'T00:00:00') && strpos($end, 'T00:00:00'))
$allDay = true; // $allDay = true;
$edit = ((local_channel() && $rr['author_xchan'] == get_observer_hash()) ? array(z_root().'/events/'.$rr['event_hash'].'?expandform=1',t('Edit event'),'','') : false); $edit = ((local_channel() && $rr['author_xchan'] == get_observer_hash()) ? array(z_root().'/events/'.$rr['event_hash'].'?expandform=1',t('Edit event'),'','') : false);
@ -395,10 +395,10 @@ class Channel_calendar extends \Zotlabs\Web\Controller {
'start'=> $start, 'start'=> $start,
'end' => $end, 'end' => $end,
'drop' => $drop, 'drop' => $drop,
'allDay' => $allDay, 'allDay' => (($rr['adjust']) ? 0 : 1),
'title' => htmlentities($rr['summary'], ENT_COMPAT, 'UTF-8', false), 'title' => htmlentities($rr['summary'], ENT_COMPAT, 'UTF-8', false),
'editable' => $edit ? true : false, 'editable' => $edit ? true : false,
'item'=>$rr, 'item' => $rr,
'plink' => [$rr['plink'], t('Link to source')], 'plink' => [$rr['plink'], t('Link to source')],
'description' => htmlentities($rr['description'], ENT_COMPAT, 'UTF-8', false), 'description' => htmlentities($rr['description'], ENT_COMPAT, 'UTF-8', false),
'location' => htmlentities($rr['location'], ENT_COMPAT, 'UTF-8', false), 'location' => htmlentities($rr['location'], ENT_COMPAT, 'UTF-8', false),

View File

@ -83,11 +83,11 @@ function format_event_obj($jobject) {
'$title' => zidify_links(smilies(bbcode($object['title']))), '$title' => zidify_links(smilies(bbcode($object['title']))),
'$dtstart_label' => t('Starts:'), '$dtstart_label' => t('Starts:'),
'$dtstart_title' => datetime_convert($tz, date_default_timezone_get(), $object['dtstart'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), '$dtstart_title' => datetime_convert($tz, date_default_timezone_get(), $object['dtstart'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )),
'$dtstart_dt' => (($object['adjust']) ? day_translate(datetime_convert($tz, date_default_timezone_get(), $object['dtstart'] , $bd_format )) : day_translate(datetime_convert('UTC', date_default_timezone_get(), $object['dtstart'] , $bd_format))), '$dtstart_dt' => (($object['adjust']) ? day_translate(datetime_convert($tz, date_default_timezone_get(), $object['dtstart'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $object['dtstart'] , $bd_format))),
'$finish' => (($object['nofinish']) ? false : true), '$finish' => (($object['nofinish']) ? false : true),
'$dtend_label' => t('Finishes:'), '$dtend_label' => t('Finishes:'),
'$dtend_title' => datetime_convert($tz, date_default_timezone_get(), $object['dtend'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), '$dtend_title' => datetime_convert($tz, date_default_timezone_get(), $object['dtend'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )),
'$dtend_dt' => (($object['adjust']) ? day_translate(datetime_convert($tz, date_default_timezone_get(), $object['dtend'] , $bd_format )) : day_translate(datetime_convert('UTC', date_default_timezone_get(), $object['dtend'] , $bd_format ))) '$dtend_dt' => (($object['adjust']) ? day_translate(datetime_convert($tz, date_default_timezone_get(), $object['dtend'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $object['dtend'] , $bd_format )))
)); ));
$event['content'] = replace_macros(get_markup_template('event_item_content.tpl'),array( $event['content'] = replace_macros(get_markup_template('event_item_content.tpl'),array(

View File

@ -96,14 +96,15 @@ function get_features($filtered = true, $level = (-1)) {
false, false,
get_config('feature_lock','event_tz_select'), get_config('feature_lock','event_tz_select'),
], ],
/*
[ [
'smart_birthdays', 'smart_birthdays',
t('Smart Birthdays'), t('Smart Birthdays'),
t('Make birthday events timezone aware in case your friends are scattered across the planet.'), t('Make birthday events timezone aware in case your friends are scattered across the planet.'),
true, false,
get_config('feature_lock','smart_birthdays'), get_config('feature_lock','smart_birthdays'),
] ]
*/
], ],

View File

@ -207,7 +207,7 @@ $(document).ready(function() {
'timezone_select': event.extendedProps.timezone, 'timezone_select': event.extendedProps.timezone,
'dtstart': dtstart.toUTCString(), 'dtstart': dtstart.toUTCString(),
'dtend': dtend.toUTCString(), 'dtend': dtend.toUTCString(),
'adjust': event.extendedProps.item.adjust, 'adjust': event.allDay ? 0 : 1,
'categories': event.extendedProps.categories, 'categories': event.extendedProps.categories,
'desc': event.extendedProps.description, 'desc': event.extendedProps.description,
'location': event.extendedProps.location, 'location': event.extendedProps.location,
@ -256,7 +256,7 @@ $(document).ready(function() {
'timezone_select': event.extendedProps.timezone, 'timezone_select': event.extendedProps.timezone,
'dtstart': dtstart.toUTCString(), 'dtstart': dtstart.toUTCString(),
'dtend': dtend.toUTCString(), 'dtend': dtend.toUTCString(),
'adjust': event.extendedProps.item.adjust, 'adjust': event.allDay ? 0 : 1,
'categories': event.extendedProps.categories, 'categories': event.extendedProps.categories,
'desc': event.extendedProps.description, 'desc': event.extendedProps.description,
'location': event.extendedProps.location, 'location': event.extendedProps.location,