You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.1 KiB
130 lines
4.1 KiB
<?php
|
|
|
|
namespace App\TwigExtensions;
|
|
|
|
use App\Configuration;
|
|
use App\Wrappers\APIWrapper;
|
|
use App\Wrappers\JWTWrapper;
|
|
use App\Wrappers\LFSWrapper;
|
|
use Ramsey\Uuid\Uuid;
|
|
use Twig\Environment;
|
|
use Twig\Error\LoaderError;
|
|
use Twig\Extension\AbstractExtension;
|
|
use Twig\TwigFunction;
|
|
|
|
class FunctionExtensions extends AbstractExtension
|
|
{
|
|
private $twig;
|
|
|
|
public function __construct(Environment $twig)
|
|
{
|
|
$this->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 = '<div>';
|
|
foreach ($formDefinitions as $formDefinition)
|
|
{
|
|
$output .= twig_include($this->twig, [], '/Partials/Form.html.twig', ['FormDefinition' => $formDefinition]);
|
|
}
|
|
return "$output</div>";
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
|