Thanasoft-Hytha/gestion/lib/Helpers/VCalendarHelpers.php
2025-04-02 12:19:35 +03:00

75 lines
2.3 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 = "";
$totalHours = 0;
$totalWorkedHours = 0;
$dateStart = null;
$dateEnd = null;
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";
}
$totalHours = DateHelpers::getHoursBetweenTwoDatetime($dateEnd,$dateStart);
$totalWorkedHours = DateHelpers::GetWorkingHoursBetweenDatetimeEndAndDatetimeStart($dateEnd,$dateStart);
}
return [
"datetimeStart" => $dateStart,
"datetimeEnd" => $dateEnd,
"startTime" => $startTimeValue,
"endTime" => $endTimeValue,
"totalHours" => $totalHours,
"totalWorkedHours" => $totalWorkedHours
];
}
public static function ReadVCalendarDataBlob($vCalendarData){
if (is_resource($vCalendarData)) {
return stream_get_contents($vCalendarData);
}
return $vCalendarData;
}
}