Thanasoft-H2F/gestion/lib/Helpers/VCalendarHelpers.php

88 lines
2.7 KiB
PHP

<?php
namespace OCA\Gestion\Helpers;
use DateTime;
use DateTimeZone;
use Exception;
class VCalendarHelpers
{
public static function GetValueFromKeyInVCalendarString(string $key, string $vCalendarString): string
{
$value = "";
preg_match("/$key:(.*)\r\n/", $vCalendarString, $matches);
if (isset($matches[1])) {
$value = trim($matches[1]);
}
return $value;
}
public static function GetDateStartOrDateEndFromVCalendarString(string $key, string $vCalendarString)
{
preg_match("/$key;TZID=([^:]+):(\d+T\d+)/", $vCalendarString, $matches);
if (!$matches) {
return null;
}
try {
$dateTz = $matches[1];
$datetimeString = $matches[2];
$datetimeValue = new DateTime($datetimeString, new DateTimeZone($dateTz));
return $datetimeValue;
} catch (Exception $e) {
return null;
}
}
public static function GetStartAndEndTimeFromVCalendarString(string $vCalendarString)
{
$startTimeValue = "";
$endTimeValue = "";
if ($vCalendarString != "") {
$dateStart = self::GetDateStartOrDateEndFromVCalendarString("DTSTART", $vCalendarString);
if ($dateStart != null) {
$startTimeValue = $dateStart->format("H") . "h";
}
$dateEnd = self::GetDateStartOrDateEndFromVCalendarString("DTEND", $vCalendarString);
if ($dateEnd != null) {
$endTimeValue = $dateEnd->format("H") . "h";
}
}
return [
"startTime" => $startTimeValue,
"endTime" => $endTimeValue
];
}
public static function ReadVCalendarDataBlob($vCalendarData)
{
if (is_resource($vCalendarData)) {
return stream_get_contents($vCalendarData);
}
return $vCalendarData;
}
public static function hasAttachment(string $vCalendarString): bool
{
return str_contains($vCalendarString, 'ATTACH;FMTTYPE');
}
public static function extractAttachments(string $vCalendarString): array
{
$attachments = [];
$vCalendarString = preg_replace("/\r\n|\n|\r/", "\n", $vCalendarString);
$vCalendarString = preg_replace("/\n[ \t]/", "", $vCalendarString);
preg_match_all('/ATTACH;FMTTYPE=([^;]+);FILENAME=([^;]+);X-NC-FILE-ID=(\d+)/', $vCalendarString, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$attachments[] = [
'type' => explode("/", $match[1])[0],
'mime_type' => $match[1],
'name' => trim($match[2], '/'),
'file_id' => (int) $match[3],
];
}
return $attachments;
}
}