mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
feat(caldav): linkify location in scheduling mails
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
This commit is contained in:
parent
5fcb19c398
commit
2ac24d525c
1 changed files with 42 additions and 2 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue