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