Correctly handle durations without units like "PT"

While this has always been handled in basic event parsing the handling
in VALARM components for related triggers was missing.
This commit is contained in:
Andrew McMillan 2018-01-09 23:10:55 +00:00
parent bc9c39c455
commit 58cf5b01ad
2 changed files with 4 additions and 1 deletions

View File

@ -139,7 +139,8 @@ class WritableCollection extends DAVResource {
else {
$dtend = 'NULL';
if ( $first->GetPValue('DURATION') != '' AND $dtstart != '' ) {
$duration = preg_replace( '#[PT]#', ' ', $first->GetPValue('DURATION') );
$duration = preg_replace( '#[PT]#', '', $first->GetPValue('DURATION') );
if ($duration == '') $duration = '0 seconds';
$dtend = '(:dtstart::timestamp with time zone + :duration::interval)';
$calitem_params[':duration'] = $duration;
}
@ -343,6 +344,7 @@ EOSQL;
if ( !preg_match('{^-?P(:?\d+W)?(:?\d+D)?(:?T(:?\d+H)?(:?\d+M)?(:?\d+S)?)?$}', $duration ) ) continue;
$minus = (substr($duration,0,1) == '-');
$related_trigger = trim(preg_replace( '#[PT-]#', ' ', $duration ));
if ($related_trigger == '') $related_trigger = '0 seconds';
if ( $minus ) {
$related_trigger = preg_replace( '{(\d+[WDHMS])}', '-$1 ', $related_trigger );
}

View File

@ -1215,6 +1215,7 @@ function write_alarms( $dav_id, vComponent $ical ) {
if ( !preg_match('{^-?P(:?\d+W)?(:?\d+D)?(:?T(:?\d+H)?(:?\d+M)?(:?\d+S)?)?$}', $duration ) ) continue;
$minus = (substr($duration,0,1) == '-');
$related_trigger = trim(preg_replace( '#[PT-]#', ' ', $duration ));
if ($related_trigger == '') $related_trigger = '0 seconds';
if ( $minus ) {
$related_trigger = preg_replace( '{(\d+[WDHMS])}', '-$1 ', $related_trigger );
}