Changeset View
Changeset View
Standalone View
Standalone View
src/app/Backends/DAV/Vevent.php
Show First 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | protected function fromVObject(VObject\Component $vobject): void | ||||
// map other properties | // map other properties | ||||
foreach ($vobject->children() as $prop) { | foreach ($vobject->children() as $prop) { | ||||
if (!($prop instanceof VObject\Property)) { | if (!($prop instanceof VObject\Property)) { | ||||
continue; | continue; | ||||
} | } | ||||
switch ($prop->name) { | switch ($prop->name) { | ||||
case 'DTSTART': | case 'DTSTART': | ||||
case 'DTEND': | case 'DTEND': | ||||
case 'DUE': | case 'DUE': | ||||
case 'CREATED': | case 'CREATED': | ||||
case 'LAST-MODIFIED': | case 'LAST-MODIFIED': | ||||
case 'DTSTAMP': | case 'DTSTAMP': | ||||
$key = Str::camel(strtolower($prop->name)); | $key = Str::camel(strtolower($prop->name)); | ||||
// These are of type Sabre\VObject\Property\ICalendar\DateTime | // These are of type Sabre\VObject\Property\ICalendar\DateTime | ||||
$this->{$key} = $prop; | $this->{$key} = $prop; | ||||
break; | break; | ||||
case 'RRULE': | case 'RRULE': | ||||
$params = !empty($this->recurrence) ? $this->recurrence : []; | $params = !empty($this->recurrence) ? $this->recurrence : []; | ||||
foreach ($prop->getParts() as $k => $v) { | foreach ($prop->getParts() as $k => $v) { | ||||
$params[Str::camel(strtolower($k))] = is_array($v) ? implode(',', $v) : $v; | $params[Str::camel(strtolower($k))] = is_array($v) ? implode(',', $v) : $v; | ||||
} | } | ||||
if (!empty($params['until'])) { | if (!empty($params['until'])) { | ||||
$params['until'] = new \DateTime($params['until']); | $params['until'] = new \DateTime($params['until']); | ||||
} | } | ||||
if (empty($params['interval'])) { | if (empty($params['interval'])) { | ||||
$params['interval'] = 1; | $params['interval'] = 1; | ||||
} | } | ||||
$this->recurrence = array_filter($params); | $this->recurrence = array_filter($params); | ||||
break; | break; | ||||
case 'EXDATE': | case 'EXDATE': | ||||
case 'RDATE': | case 'RDATE': | ||||
$key = strtolower($prop->name); | $key = strtolower($prop->name); | ||||
$dates = []; // TODO | $dates = []; // TODO | ||||
if (!empty($this->recurrence[$key])) { | if (!empty($this->recurrence[$key])) { | ||||
$this->recurrence[$key] = array_merge($this->recurrence[$key], $dates); | $this->recurrence[$key] = array_merge($this->recurrence[$key], $dates); | ||||
} | } else { | ||||
else { | |||||
$this->recurrence[$key] = $dates; | $this->recurrence[$key] = $dates; | ||||
} | } | ||||
break; | break; | ||||
case 'ATTENDEE': | case 'ATTENDEE': | ||||
case 'ORGANIZER': | case 'ORGANIZER': | ||||
$attendee = [ | $attendee = [ | ||||
'rsvp' => false, | 'rsvp' => false, | ||||
'email' => preg_replace('!^mailto:!i', '', (string) $prop), | 'email' => preg_replace('!^mailto:!i', '', (string) $prop), | ||||
]; | ]; | ||||
$attendeeProps = ['CN', 'PARTSTAT', 'ROLE', 'CUTYPE', 'RSVP', 'DELEGATED-FROM', 'DELEGATED-TO', | $attendeeProps = ['CN', 'PARTSTAT', 'ROLE', 'CUTYPE', 'RSVP', 'DELEGATED-FROM', 'DELEGATED-TO', | ||||
'SCHEDULE-STATUS', 'SCHEDULE-AGENT', 'SENT-BY']; | 'SCHEDULE-STATUS', 'SCHEDULE-AGENT', 'SENT-BY']; | ||||
foreach ($prop->parameters() as $name => $value) { | foreach ($prop->parameters() as $name => $value) { | ||||
$key = Str::camel(strtolower($name)); | $key = Str::camel(strtolower($name)); | ||||
switch ($name) { | switch ($name) { | ||||
case 'RSVP': | case 'RSVP': | ||||
$params[$key] = strtolower($value) == 'true'; | $params[$key] = strtolower($value) == 'true'; | ||||
break; | break; | ||||
case 'CN': | case 'CN': | ||||
$params[$key] = str_replace('\,', ',', strval($value)); | $params[$key] = str_replace('\,', ',', strval($value)); | ||||
break; | break; | ||||
default: | default: | ||||
if (in_array($name, $attendeeProps)) { | if (in_array($name, $attendeeProps)) { | ||||
$params[$key] = strval($value); | $params[$key] = strval($value); | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
if ($prop->name == 'ORGANIZER') { | if ($prop->name == 'ORGANIZER') { | ||||
$attendee['role'] = 'ORGANIZER'; | $attendee['role'] = 'ORGANIZER'; | ||||
$attendee['partstat'] = 'ACCEPTED'; | $attendee['partstat'] = 'ACCEPTED'; | ||||
$this->organizer = $attendee; | $this->organizer = $attendee; | ||||
} | } elseif (empty($this->organizer) || $attendee['email'] != $this->organizer['email']) { | ||||
else if (empty($this->organizer) || $attendee['email'] != $this->organizer['email']) { | |||||
$this->attendees[] = $attendee; | $this->attendees[] = $attendee; | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
// Check DURATION property if no end date is set | // Check DURATION property if no end date is set | ||||
/* | /* | ||||
if (empty($this->dtend) && !empty($this->dtstart) && !empty($vobject->DURATION)) { | if (empty($this->dtend) && !empty($this->dtstart) && !empty($vobject->DURATION)) { | ||||
try { | try { | ||||
$duration = new \DateInterval((string) $vobject->DURATION); | $duration = new \DateInterval((string) $vobject->DURATION); | ||||
Show All 12 Lines | protected function fromVObject(VObject\Component $vobject): void | ||||
$action = 'DISPLAY'; | $action = 'DISPLAY'; | ||||
$trigger = null; | $trigger = null; | ||||
$alarm = []; | $alarm = []; | ||||
foreach ($valarm->children() as $prop) { | foreach ($valarm->children() as $prop) { | ||||
$value = strval($prop); | $value = strval($prop); | ||||
switch ($prop->name) { | switch ($prop->name) { | ||||
case 'TRIGGER': | case 'TRIGGER': | ||||
foreach ($prop->parameters as $param) { | foreach ($prop->parameters as $param) { | ||||
if ($param->name == 'VALUE' && $param->getValue() == 'DATE-TIME') { | if ($param->name == 'VALUE' && $param->getValue() == 'DATE-TIME') { | ||||
$trigger = '@' . $prop->getDateTime()->format('U'); | $trigger = '@' . $prop->getDateTime()->format('U'); | ||||
$alarm['trigger'] = $prop->getDateTime(); | $alarm['trigger'] = $prop->getDateTime(); | ||||
} | } elseif ($param->name == 'RELATED') { | ||||
else if ($param->name == 'RELATED') { | |||||
$alarm['related'] = $param->getValue(); | $alarm['related'] = $param->getValue(); | ||||
} | } | ||||
} | } | ||||
/* | /* | ||||
if (!$trigger && ($values = libcalendaring::parse_alarm_value($value))) { | if (!$trigger && ($values = libcalendaring::parse_alarm_value($value))) { | ||||
$trigger = $values[2]; | $trigger = $values[2]; | ||||
} | } | ||||
*/ | */ | ||||
if (empty($alarm['trigger'])) { | if (empty($alarm['trigger'])) { | ||||
$alarm['trigger'] = rtrim(preg_replace('/([A-Z])0[WDHMS]/', '\\1', $value), 'T'); | $alarm['trigger'] = rtrim(preg_replace('/([A-Z])0[WDHMS]/', '\\1', $value), 'T'); | ||||
// if all 0-values have been stripped, assume 'at time' | // if all 0-values have been stripped, assume 'at time' | ||||
if ($alarm['trigger'] == 'P') { | if ($alarm['trigger'] == 'P') { | ||||
$alarm['trigger'] = 'PT0S'; | $alarm['trigger'] = 'PT0S'; | ||||
} | } | ||||
} | } | ||||
break; | break; | ||||
case 'ACTION': | case 'ACTION': | ||||
$action = $alarm['action'] = strtoupper($value); | $action = $alarm['action'] = strtoupper($value); | ||||
break; | break; | ||||
case 'SUMMARY': | case 'SUMMARY': | ||||
case 'DESCRIPTION': | case 'DESCRIPTION': | ||||
case 'DURATION': | case 'DURATION': | ||||
$alarm[strtolower($prop->name)] = $value; | $alarm[strtolower($prop->name)] = $value; | ||||
break; | break; | ||||
case 'REPEAT': | case 'REPEAT': | ||||
$alarm['repeat'] = (int) $value; | $alarm['repeat'] = (int) $value; | ||||
break; | break; | ||||
case 'ATTENDEE': | case 'ATTENDEE': | ||||
$alarm['attendees'][] = preg_replace('!^mailto:!i', '', $value); | $alarm['attendees'][] = preg_replace('!^mailto:!i', '', $value); | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
if ($action != 'NONE') { | if ($action != 'NONE') { | ||||
if (!empty($alarm['trigger'])) { | if (!empty($alarm['trigger'])) { | ||||
$this->valarms[] = $alarm; | $this->valarms[] = $alarm; | ||||
} | } | ||||
} | } | ||||
Show All 14 Lines |