|
|
|
|
@ -6,6 +6,7 @@ declare(strict_types=1);
|
|
|
|
|
* @copyright 2022 Anna Larch <anna.larch@gmx.net>
|
|
|
|
|
*
|
|
|
|
|
* @author Anna Larch <anna.larch@gmx.net>
|
|
|
|
|
* @author Richard Steinmetz <richard@steinmetz.cloud>
|
|
|
|
|
*
|
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
|
|
|
@ -105,6 +106,40 @@ class IMipService {
|
|
|
|
|
return $newstring;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Like generateDiffString() but linkifies the property values if they are urls.
|
|
|
|
|
*/
|
|
|
|
|
private function generateLinkifiedDiffString(VEvent $vevent, VEvent $oldVEvent, string $property, string $default): ?string {
|
|
|
|
|
if (!isset($vevent->$property)) {
|
|
|
|
|
return $default;
|
|
|
|
|
}
|
|
|
|
|
/** @var string|null $newString */
|
|
|
|
|
$newString = $vevent->$property->getValue();
|
|
|
|
|
$oldString = isset($oldVEvent->$property) ? $oldVEvent->$property->getValue() : null;
|
|
|
|
|
if ($oldString !== $newString) {
|
|
|
|
|
return sprintf(
|
|
|
|
|
"<span style='text-decoration: line-through'>%s</span><br />%s",
|
|
|
|
|
$this->linkify($oldString) ?? $oldString ?? '',
|
|
|
|
|
$this->linkify($newString) ?? $newString ?? ''
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
return $this->linkify($newString) ?? $newString;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Convert a given url to a html link element or return null otherwise.
|
|
|
|
|
*/
|
|
|
|
|
private function linkify(?string $url): ?string {
|
|
|
|
|
if ($url === null) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
if (!str_starts_with($url, 'http://') && !str_starts_with($url, 'https://')) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sprintf('<a href="%1$s">%1$s</a>', htmlspecialchars($url));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param VEvent $vEvent
|
|
|
|
|
* @param VEvent|null $oldVEvent
|
|
|
|
|
@ -121,11 +156,15 @@ class IMipService {
|
|
|
|
|
|
|
|
|
|
$data['meeting_url_html'] = self::readPropertyWithDefault($vEvent, 'URL', $defaultVal);
|
|
|
|
|
|
|
|
|
|
if (($locationHtml = $this->linkify($data['meeting_location'])) !== null) {
|
|
|
|
|
$data['meeting_location_html'] = $locationHtml;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!empty($oldVEvent)) {
|
|
|
|
|
$oldMeetingWhen = $this->generateWhenString($oldVEvent);
|
|
|
|
|
$data['meeting_title_html'] = $this->generateDiffString($vEvent, $oldVEvent, 'SUMMARY', $data['meeting_title']);
|
|
|
|
|
$data['meeting_description_html'] = $this->generateDiffString($vEvent, $oldVEvent, 'DESCRIPTION', $data['meeting_description']);
|
|
|
|
|
$data['meeting_location_html'] = $this->generateDiffString($vEvent, $oldVEvent, 'LOCATION', $data['meeting_location']);
|
|
|
|
|
$data['meeting_location_html'] = $this->generateLinkifiedDiffString($vEvent, $oldVEvent, 'LOCATION', $data['meeting_location']);
|
|
|
|
|
|
|
|
|
|
$oldUrl = self::readPropertyWithDefault($oldVEvent, 'URL', $defaultVal);
|
|
|
|
|
$data['meeting_url_html'] = !empty($oldUrl) && $oldUrl !== $data['meeting_url'] ? sprintf('<a href="%1$s">%1$s</a>', $oldUrl) : $data['meeting_url'];
|
|
|
|
|
@ -246,6 +285,7 @@ class IMipService {
|
|
|
|
|
$newDescription = isset($vEvent->DESCRIPTION) && (string)$vEvent->DESCRIPTION !== '' ? (string)$vEvent->DESCRIPTION : $defaultVal;
|
|
|
|
|
$newUrl = isset($vEvent->URL) && (string)$vEvent->URL !== '' ? sprintf('<a href="%1$s">%1$s</a>', $vEvent->URL) : $defaultVal;
|
|
|
|
|
$newLocation = isset($vEvent->LOCATION) && (string)$vEvent->LOCATION !== '' ? (string)$vEvent->LOCATION : $defaultVal;
|
|
|
|
|
$newLocationHtml = $this->linkify($newLocation) ?? $newLocation;
|
|
|
|
|
|
|
|
|
|
$data = [];
|
|
|
|
|
$data['meeting_when_html'] = $newMeetingWhen === '' ?: sprintf($strikethrough, $newMeetingWhen);
|
|
|
|
|
@ -256,7 +296,7 @@ class IMipService {
|
|
|
|
|
$data['meeting_description'] = $newDescription;
|
|
|
|
|
$data['meeting_url_html'] = $newUrl !== '' ? sprintf($strikethrough, $newUrl) : '';
|
|
|
|
|
$data['meeting_url'] = isset($vEvent->URL) ? (string)$vEvent->URL : '';
|
|
|
|
|
$data['meeting_location_html'] = $newLocation !== '' ? sprintf($strikethrough, $newLocation) : '';
|
|
|
|
|
$data['meeting_location_html'] = $newLocationHtml !== '' ? sprintf($strikethrough, $newLocationHtml) : '';
|
|
|
|
|
$data['meeting_location'] = $newLocation;
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|