*/ class core extends controller { /** * Session * * @var session|null $$session Instance of the session */ protected readonly session $$session; /** * Language * * @var language $$language Language */ protected language $$language = language::en; /** * Response * * @see https://wiki.php.net/rfc/property-hooks (find a table about backed and virtual hooks) * * @var response $$response Response */ protected response $$response { // Read get => $$this->response ??= $$this->request->response(); } /** * Errors * * @var array $$errors Registry of errors */ protected array $$errors = [ 'session' => [], 'account' => [] ]; /** * Constructor * * @param minimal $$core Instance of the MINIMAL * @param bool $$initialize Initialize a controller? * * @return void */ public function __construct(minimal $$core, bool $$initialize = true) { // Blocking requests from CloudFlare (better to write this blocking into nginx config file) if (isset($$_SERVER['HTTP_USER_AGENT']) && $$_SERVER['HTTP_USER_AGENT'] === 'nginx-ssl early hints') return status::bruh->label; // For the extends system parent::__construct(core: $$core); if ($$initialize) { // Requestet initializing // Initializing core of the models new models(); // Initializing of the date until which the session will be active $$expires = strtotime('+1 week'); // Initializing of default value of hash of the session $$_COOKIE["session"] ??= null; // Initializing of session $$this->session = new session($$_COOKIE["session"], $$expires, $$this->errors['session']); // Handle a problems with initializing a session if (!empty($$this->errors['session'])) die; else if ($$_COOKIE["session"] !== $$this->session->hash) { // Hash of the session is changed (implies that the session has expired and recreated) // Write a new hash of the session to cookies setcookie( 'session', $$this->session->hash, [ 'expires' => $$expires, 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'strict' ] ); } // Initializing of preprocessor of views $$this->view = new templater($$this->session); } } }