*/ final class templater extends controller implements ArrayAccess { /** * Registry of global variables of view */ public array variables = []; /** * Instance of twig templater */ readonly public twig twig; /** * Constructor of an instance * * @param ?session session Instance of the session of ArangoDB * * @return void */ public function __construct(?session &session = null): void { // Initializing of an instance of twig this->twig = new twig(new FilesystemLoader(VIEWS)); // Initializing of global variables this->twig->addGlobal('theme', 'default'); this->twig->addGlobal('server', _SERVER); this->twig->addGlobal('cookies', _COOKIE); if (!empty(session->status())) { this->twig->addGlobal('session', session); } // Initializing of twig extensions this->twig->addExtension(new intl()); } /** * Render a HTML-document * * @param string file Related path to a HTML-document * @param ?array variables Registry of variables to push into registry of global variables * * @return ?string HTML-документ */ public function render(string file, ?array variables = null): ?string { // Generation and exit (success) return this->twig->render('themes' . DIRECTORY_SEPARATOR . this->twig->getGlobal('theme') . DIRECTORY_SEPARATOR . file, variables + this->variables); } /** * Write * * Write a variable into registry of global variables * * @param string name Name of the variable * @param mixed value Value of the variable * * @return void */ public function __set(string name, mixed value = null): void { // Write the variable and exit (success) this->variables[name] = value; } /** * Read * * Read a variable from registry of global variables * * @param string name Name of the variable * * @return mixed Content of the variable, if they are found */ public function __get(string name): mixed { // Read the variable and exit (success) return this->variables[name]; } /** * Delete * * Delete a variable from the registry of global variables * * @param string name Name of the variable * * @return void */ public function __unset(string name): void { // Delete the variable and exit (success) unset(this->variables[name]); } /** * Check of initialization * * Check of initialization in registry of global variables * * @param string name Name of the variable * * @return bool The variable is initialized? */ public function __isset(string name): bool { // Check of initialization of the variable and exit (success) return isset(this->variables[name]); } /** * Write * * Write a variable into registry of global variables * * @param mixed name Name of an offset of the variable * @param mixed value Value of the variable * * @return void */ public function offsetSet(mixed name, mixed value): void { // Write the variable and exit (success) this->variables[name] = value; } /** * Read * * Read a variable from registry of global variables * * @param mixed name Name of the variable * * @return mixed Content of the variable, if they are found */ public function offsetGet(mixed name): mixed { // Read the variable and exit (success) return this->variables[name]; } /** * Delete * * Delete a variable from the registry of global variables * * @param mixed name Name of the variable * * @return void */ public function offsetUnset(mixed name): void { // Delete the variable and exit (success) unset(this->variables[name]); } /** * Check of initialization * * Check of initialization in registry of global variables * * @param mixed name Name of the variable * * @return bool The variable is initialized? */ public function offsetExists(mixed name): bool { // Check of initialization of the variable and exit (success) return isset(this->variables[name]); } }