twig = $twig; } public function getFunctions() { return [ new TwigFunction('RandomUUID', [$this, 'RandomUUID'], ['is_safe' => ['html']]), new TwigFunction('BuildForms', [$this, 'BuildForms'], ['is_safe' => ['html']]), new TwigFunction('BuildModifiableField', [$this, 'BuildModifiableField'], ['is_safe' => ['html']]), new TwigFunction('BuildEnumField', [$this, 'BuildEnumField'], ['is_safe' => ['html']]), new TwigFunction('GetLFSFileURL', [$this, 'GetLFSFileURL'], ['is_safe' => ['html']]), new TwigFunction('GetConfigurationItem', [$this, 'GetConfigurationItem'], ['is_safe' => ['html']]), new TwigFunction('ParseForUserToken', [$this, 'ParseForUserToken'], ['is_safe' => ['html']]), ]; } public function RandomUUID(): string { return Uuid::uuid4()->toString(); } public function BuildForms(...$formDefinitions): string { $output = '
'; foreach ($formDefinitions as $formDefinition) { $output .= twig_include($this->twig, [], '/Partials/Form.html.twig', ['FormDefinition' => $formDefinition]); } return "$output
"; } public function BuildModifiableField(string $apiBase, string $id, string $value): string { $output = twig_include($this->twig, [], '/Partials/ModifiableField.html.twig', ['FieldData' => [ "APIBase"=>$apiBase, "ID"=>$id, "Value"=>$value, ]]); return "$output"; } public function BuildEnumField(string $apiBase, string $id, string $value, string $enumName): string { $enumData = APIWrapper::Get("/Enumerators/$enumName")->Payload["Cases"]; foreach($enumData as $case) { if($case["Value"] == $value) { $currentEnum = $case; } } $output = twig_include($this->twig, [], '/Partials/EnumField.html.twig', ['FieldData' => [ "APIBase"=>$apiBase, "ID"=>$id, "Value"=>$value, "EnumName"=>$enumName, "CurrentEnum"=>$currentEnum, "EnumData"=>$enumData, ]]); return "$output"; } public function GetConfigurationItem(string...$nav): string { return Configuration::GetConfig(...$nav); } public function GetLFSFileURL(string $fileID): string { return LFSWrapper::GetFileURLByID($fileID); } public function ParseForUserToken(string $input) : string { $modes = implode(separator: "|", array:[ "USER", "VEHICLE", ]); $uuidRegex = "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}"; $fullRegex = "/@({$modes}).{$uuidRegex}.{$uuidRegex}/"; preg_match_all($fullRegex, $input, $matches); foreach($matches[0] as $match) { $parts = explode(".", $match); $mode = substr(string: $parts[0], offset: 1); $tenantID = $parts[1]; $objectID = $parts[2]; switch ($mode) { case "USER": $temp = twig_include($this->twig, [], '/Partials/UserButton.html.twig', [ '_tenantID' => $tenantID, '_userID' => $objectID, ]); break; case "VEHICLE": break; } $input = str_replace($match, $temp, $input); } return $input; } }