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;
}
}