switch tabs to spaces, editorconfig

This commit is contained in:
Little Fluffy Clouds 2025-07-11 15:45:27 +03:00
parent 468f454cab
commit a45eaca11f
28 changed files with 5277 additions and 5347 deletions

7
.editorconfig Normal file
View File

@ -0,0 +1,7 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 4

22
LICENSE
View File

@ -1,11 +1,11 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

View File

@ -1,56 +1,56 @@
{
"name": "mirzaev/deeproots",
"description": "",
"homepage": "https://git.svoboda.works/mirzaev/deeproots",
"type": "site",
"keywords": [
"minimal",
"baza"
],
"readme": "README.md",
"license": "WTFPL",
"authors": [
{
"name": "mirzaev",
"email": "mirzaev@gmail.com",
"homepage": "https://mirzaev.page",
"role": "Programmer"
}
],
"support": {
"wiki": "https://git.svoboda.works/mirzaev/deeproots/wiki",
"issues": "https://git.svoboda.works/mirzaev/deeproots/issues"
},
"require": {
"php": "^8.4",
"mirzaev/minimal": "^3.4",
"mirzaev/baza": "^3.3",
"twig/twig": "^3.10",
"twig/extra-bundle": "^3.7",
"twig/intl-extra": "^3.10",
"svoboda/time": "^1.0",
"badfarm/zanzara": "^0.9.1",
"nyholm/psr7": "^1.8",
"react/filesystem": "^0.1.2",
"react/async": "^4.3"
},
"autoload": {
"psr-4": {
"mirzaev\\deeproots\\": "mirzaev/deeproots/system"
}
},
"autoload-dev": {
"psr-4": {
"mirzaev\\deeproots\\tests\\": "mirzaev/deeproots/tests"
}
},
"scripts": {
"pre-update-cmd": "./install.sh"
},
"config": {
"allow-plugins": {
"php-http/discovery": true,
"wyrihaximus/composer-update-bin-autoload-path": true
}
}
"name": "mirzaev/deeproots",
"description": "",
"homepage": "https://git.svoboda.works/mirzaev/deeproots",
"type": "site",
"keywords": [
"minimal",
"baza"
],
"readme": "README.md",
"license": "WTFPL",
"authors": [
{
"name": "mirzaev",
"email": "mirzaev@gmail.com",
"homepage": "https://mirzaev.page",
"role": "Programmer"
}
],
"support": {
"wiki": "https://git.svoboda.works/mirzaev/deeproots/wiki",
"issues": "https://git.svoboda.works/mirzaev/deeproots/issues"
},
"require": {
"php": "^8.4",
"mirzaev/minimal": "^3.4",
"mirzaev/baza": "^3.3",
"twig/twig": "^3.10",
"twig/extra-bundle": "^3.7",
"twig/intl-extra": "^3.10",
"svoboda/time": "^1.0",
"badfarm/zanzara": "^0.9.1",
"nyholm/psr7": "^1.8",
"react/filesystem": "^0.1.2",
"react/async": "^4.3"
},
"autoload": {
"psr-4": {
"mirzaev\\deeproots\\": "mirzaev/deeproots/system"
}
},
"autoload-dev": {
"psr-4": {
"mirzaev\\deeproots\\tests\\": "mirzaev/deeproots/tests"
}
},
"scripts": {
"pre-update-cmd": "./install.sh"
},
"config": {
"allow-plugins": {
"php-http/discovery": true,
"wyrihaximus/composer-update-bin-autoload-path": true
}
}
}

View File

@ -1,10 +1,9 @@
#!/bin/bash
if [ -d author/project ]; then
mv author/project author/deeproots
mv author/project author/deeproots
fi
if [ -d author ]; then
mv author mirzaev
mv author mirzaev
fi

View File

@ -9,9 +9,9 @@ use mirzaev\deeproots\models\core as models;
// Framework for PHP
use mirzaev\minimal\core as minimal,
mirzaev\minimal\controller,
mirzaev\minimal\http\response,
mirzaev\minimal\http\enumerations\status;
mirzaev\minimal\controller,
mirzaev\minimal\http\response,
mirzaev\minimal\http\enumerations\status;
/**
* Controllers core
@ -29,47 +29,47 @@ use mirzaev\minimal\core as minimal,
*/
class core extends controller
{
/**
* Language
*
* @var language $language Language
*/
protected language $language = language::en;
/**
* 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();
}
/**
* 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 = [
];
/**
* Errors
*
* @var array $errors Registry of errors
*/
protected array $errors = [
];
/**
* 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;
/**
* 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);
}
// For the extends system
parent::__construct(core: $core);
}
}

View File

@ -9,7 +9,7 @@ use mirzaev\deeproots\controllers\core;
// Framework for PHP
use mirzaev\minimal\http\enumerations\content,
mirzaev\minimal\http\enumerations\status;
mirzaev\minimal\http\enumerations\status;
/**
* Index
@ -26,46 +26,46 @@ use mirzaev\minimal\http\enumerations\content,
*/
final class index extends core
{
/**
* Errors
*
* @var array $errors Registry of errors
*/
protected array $errors = [
'system' => []
];
/**
* Errors
*
* @var array $errors Registry of errors
*/
protected array $errors = [
'system' => []
];
/**
* Main page
*
* @return null
*/
public function index(): null
{
if (str_contains($this->request->headers['accept'], content::any->value)) {
// Request for any response
/**
* Main page
*
* @return null
*/
public function index(): null
{
if (str_contains($this->request->headers['accept'], content::any->value)) {
// Request for any response
// Render page
$page = $this->view->render('index.html');
// Render page
$page = $this->view->render('index.html');
// Sending response
$this->response
->start()
->clean()
->sse()
->write($page)
->validate($this->request)
?->body()
->end();
// Sending response
$this->response
->start()
->clean()
->sse()
->write($page)
->validate($this->request)
?->body()
->end();
// Deinitializing rendered page
unset($page);
// Deinitializing rendered page
unset($page);
// Exit (success)
return null;
}
// Exit (success)
return null;
}
// Exit (fail)
return null;
}
// Exit (fail)
return null;
}
}

View File

@ -2,183 +2,183 @@
// Exit (success)
return [
// System
'deeproots' => 'DeepRoots',
'empty' => 'Empty',
'yes' => 'Yes',
'no' => 'No',
// System
'deeproots' => 'DeepRoots',
'empty' => 'Empty',
'yes' => 'Yes',
'no' => 'No',
// Main menu
'menu_title' => 'Main menu',
'menu_button_start' => 'Start',
'menu_button_rating' => 'Rating',
'menu_button_balance' => 'Balance',
'menu_button_system_accounts' => 'Accounts',
'menu_button_system_questions' => 'Questions',
'menu_button_system_settings' => 'Settings',
'menu_system_authorized' => 'System authorization found',
// Main menu
'menu_title' => 'Main menu',
'menu_button_start' => 'Start',
'menu_button_rating' => 'Rating',
'menu_button_balance' => 'Balance',
'menu_button_system_accounts' => 'Accounts',
'menu_button_system_questions' => 'Questions',
'menu_button_system_settings' => 'Settings',
'menu_system_authorized' => 'System authorization found',
// Account
'account_title' => 'Account',
'account_identifier' => 'Identifier',
'account_authorized_system' => 'Access to the system',
'account_authorized_game_play' => 'Access to play games',
'account_authorized_rating_display' => 'Access to display in the rating',
'account_authorized_balance_deposit' => 'Access to deposit into the balance',
'account_authorized_balance_withdraw' => 'Access to withdraw from the balance',
'account_authorized_settings' => 'Access to settings',
'account_authorized_system_accounts' => 'System access to accounts',
'account_authorized_system_questions' => 'System access to questions',
'account_authorized_system_settings' => 'System access to system settings',
// Account
'account_title' => 'Account',
'account_identifier' => 'Identifier',
'account_authorized_system' => 'Access to the system',
'account_authorized_game_play' => 'Access to play games',
'account_authorized_rating_display' => 'Access to display in the rating',
'account_authorized_balance_deposit' => 'Access to deposit into the balance',
'account_authorized_balance_withdraw' => 'Access to withdraw from the balance',
'account_authorized_settings' => 'Access to settings',
'account_authorized_system_accounts' => 'System access to accounts',
'account_authorized_system_questions' => 'System access to questions',
'account_authorized_system_settings' => 'System access to system settings',
// Language setting
'settings_select_language_title' => 'Select language',
'settings_select_language_description' => 'The selected language will be writed in your account settings',
'settings_language_update_success' => 'Language replaced:',
'settings_language_update_fail' => 'Failed to replace language',
// Language setting
'settings_select_language_title' => 'Select language',
'settings_select_language_description' => 'The selected language will be writed in your account settings',
'settings_language_update_success' => 'Language replaced:',
'settings_language_update_fail' => 'Failed to replace language',
// Language selection
'select_language_title' => 'Select language',
'select_language_description' => 'The selected language will be used in the current process',
'select_language_button_add' => 'Add a language',
// Language selection
'select_language_title' => 'Select language',
'select_language_description' => 'The selected language will be used in the current process',
'select_language_button_add' => 'Add a language',
// Repository
'repository_title' => 'Repository',
'repository_text' => <<<TXT
Svoboder is written in [PHP](https://www.php.net/) using [Zanzara](https://github.com/badfarm/zanzara) for Telegram,
my [MINIMAL](https://git.svoboda.works/mirzaev/minimal) framework for PHP and my [Baza](https://git.svoboda.works/mirzaev/baza) database
// Repository
'repository_title' => 'Repository',
'repository_text' => <<<TXT
Deeproots is written in [PHP](https://www.php.net/) using [Zanzara](https://github.com/badfarm/zanzara) for Telegram,
my [MINIMAL](https://git.svoboda.works/mirzaev/minimal) framework for PHP and my [Baza](https://git.svoboda.works/mirzaev/baza) database
The code is under the [WTFPL](https://en.wikipedia.org/wiki/WTFPL) license
You can help me with the development, or use my code for free\!
TXT,
'repository_button_code' => 'The code',
'repository_button_issues' => 'Issues',
'repository_button_suggestions' => 'Suggestions',
The code is under the [WTFPL](https://en.wikipedia.org/wiki/WTFPL) license
You can help me with the development, or use my code for free\!
TXT,
'repository_button_code' => 'The code',
'repository_button_issues' => 'Issues',
'repository_button_suggestions' => 'Suggestions',
// Author
'author_title' => 'Author',
'author_text' => <<<TXT
*Arsen Mirzaev Tatyano\-Muradovich*
Programmer, anarchist, vegetarian
TXT,
'author_button_neurojournal' => 'Neurojournal',
'author_button_projects' => 'Projects',
'author_button_twitter' => 'Twitter',
'author_button_bluesky' => 'Bluesky',
'author_button_bastyon' => 'Bastyon',
'author_button_youtube_english' => 'YouTube',
'author_button_youtube_russian' => 'YouTube',
'author_button_message' => 'Send a message',
// Author
'author_title' => 'Author',
'author_text' => <<<TXT
*Arsen Mirzaev Tatyano\-Muradovich*
Programmer, anarchist, vegetarian
TXT,
'author_button_neurojournal' => 'Neurojournal',
'author_button_projects' => 'Projects',
'author_button_twitter' => 'Twitter',
'author_button_bluesky' => 'Bluesky',
'author_button_bastyon' => 'Bastyon',
'author_button_youtube_english' => 'YouTube',
'author_button_youtube_russian' => 'YouTube',
'author_button_message' => 'Send a message',
// Questions (system)
'system_questions_title' => 'The questions registry',
'system_questions_questions' => 'Questions',
'system_questions_answers' => 'Answers',
'system_questions_answers_amount_matches' => 'The amount of questions matches the amount of answers',
'system_questions_answers_amount_different' => 'The amount of questions does not match the amount of answers',
'system_questions_amount_matches' => 'The amount of questions matches the amount of localizations',
'system_questions_amount_different' => 'The amount of questions does not match the amount of localizations',
'system_questions_localizations_amount_matches' => 'Amounts of localizations matches with each other',
'system_questions_localizations_amount_different' => 'Amounts of localizations does not match with each other',
'system_questions_button_search' => 'Search',
'system_questions_button_create' => 'Create',
// Questions (system)
'system_questions_title' => 'The questions registry',
'system_questions_questions' => 'Questions',
'system_questions_answers' => 'Answers',
'system_questions_answers_amount_matches' => 'The amount of questions matches the amount of answers',
'system_questions_answers_amount_different' => 'The amount of questions does not match the amount of answers',
'system_questions_amount_matches' => 'The amount of questions matches the amount of localizations',
'system_questions_amount_different' => 'The amount of questions does not match the amount of localizations',
'system_questions_localizations_amount_matches' => 'Amounts of localizations matches with each other',
'system_questions_localizations_amount_different' => 'Amounts of localizations does not match with each other',
'system_questions_button_search' => 'Search',
'system_questions_button_create' => 'Create',
// Question create (system)
'system_questions_create_created' => 'The question was created',
// Question create (system)
'system_questions_create_created' => 'The question was created',
// Question search (system)
'system_questions_search_title' => 'The question search process',
'system_questions_search_continued' => 'The process of the question search found and continued',
'system_questions_search_started' => 'The process of the question search started',
'system_questions_search_not_started' => 'The process of the question search is not started',
'system_questions_search_ended' => 'The process of the question search ended',
'system_questions_search_page_next_exists' => 'There are more questions in the registry',
'system_questions_search_page_next_not_exists' => 'There are no more questions in the registry',
'system_questions_search_empty' => 'No questions found',
'system_questions_search_question_title' => 'Question',
'system_questions_search_question_answer' => 'Answer',
'system_questions_search_identifier_request_title' => 'Enter identifier',
'system_questions_search_identifier_request_not_acceptable' => 'Failed to process the identifier',
'system_questions_search_identifier_request_too_short' => 'Identifier length must be \>\= 1 and \<\= 12',
'system_questions_search_identifier_request_too_long' => 'Identifier length must be \>\= 1 and \<\= 12',
'system_questions_search_identifier_request_restricted_characters_title' => "Restricted any characters except digits",
'system_questions_search_identifier_request_restricted_characters_description' => "Remove these characters:",
'system_questions_search_identifier_cancel_success' => 'Cancelled the identifier replacing process',
'system_questions_search_identifier_delete_success' => 'Identifier deleted',
'system_questions_search_identifier_update_success' => 'Identifier replaced:',
'system_questions_search_identifier_update_fail' => 'Failed to replace identifier',
'system_questions_search_text_request_title' => 'Enter text',
'system_questions_search_text_request_not_acceptable' => 'Failed to process the text',
'system_questions_search_text_request_too_short' => 'Text length must be \>\= 3 and \<\= 256',
'system_questions_search_text_request_too_long' => 'Text length must be \>\= 3 and \<\= 256',
'system_questions_search_text_cancel_success' => 'Cancelled the text replacing process',
'system_questions_search_text_delete_success' => 'Text deleted',
'system_questions_search_text_update_success' => 'Text replaced:',
'system_questions_search_text_update_fail' => 'Failed to replace text',
'system_questions_search_a_request_title' => 'Enter A\-answer',
'system_questions_search_a_request_not_acceptable' => 'Failed to process the A\-answer',
'system_questions_search_a_request_too_short' => 'A\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_a_request_too_long' => 'A\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_a_cancel_success' => 'Cancelled the A\-answer replacing process',
'system_questions_search_a_delete_success' => 'A\-answer deleted',
'system_questions_search_a_update_success' => 'A\-answer replaced:',
'system_questions_search_a_update_fail' => 'Failed to replace A\-answer',
'system_questions_search_b_request_title' => 'Enter B\-answer',
'system_questions_search_b_request_not_acceptable' => 'Failed to process the B\-answer',
'system_questions_search_b_request_too_short' => 'B\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_b_request_too_long' => 'B\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_b_cancel_success' => 'Cancelled the B\-answer replacing process',
'system_questions_search_b_delete_success' => 'B\-answer deleted',
'system_questions_search_b_update_success' => 'B\-answer replaced:',
'system_questions_search_b_update_fail' => 'Failed to replace B\-answer',
'system_questions_search_c_request_title' => 'Enter C\-answer',
'system_questions_search_c_request_not_acceptable' => 'Failed to process the C\-answer',
'system_questions_search_c_request_too_short' => 'C\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_c_request_too_long' => 'C\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_c_cancel_success' => 'Cancelled the C\-answer replacing process',
'system_questions_search_c_delete_success' => 'C\-answer deleted',
'system_questions_search_c_update_success' => 'C\-answer replaced:',
'system_questions_search_c_update_fail' => 'Failed to replace C\-answer',
'system_questions_search_d_request_title' => 'Enter D\-answer',
'system_questions_search_d_request_not_acceptable' => 'Failed to process the D\-answer',
'system_questions_search_d_request_too_short' => 'D\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_d_request_too_long' => 'D\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_d_cancel_success' => 'Cancelled the D\-answer replacing process',
'system_questions_search_d_delete_success' => 'D\-answer deleted',
'system_questions_search_d_update_success' => 'D\-answer replaced:',
'system_questions_search_d_update_fail' => 'Failed to replace D\-answer',
'system_questions_search_button_delete' => 'Delete',
'system_questions_search_button_author' => 'Author',
'system_questions_search_button_active' => 'Active',
'system_questions_search_button_inactive' => 'Inactive',
'system_questions_search_button_answer' => 'Answer',
'system_questions_search_button_localizations' => 'Localizations',
'system_questions_search_button_identifier' => 'Identifier',
'system_questions_search_button_text' => 'Text',
'system_questions_search_button_a' => 'A',
'system_questions_search_button_b' => 'B',
'system_questions_search_button_c' => 'C',
'system_questions_search_button_d' => 'D',
'system_questions_search_button_delete' => 'Delete',
'system_questions_search_button_cancel' => 'Cancel',
'system_questions_search_button_page_next' => 'Next page',
'system_questions_search_button_end' => 'End the search process',
'system_questions_search_not_localized' => 'Failed to initialize the question localization',
// Question search (system)
'system_questions_search_title' => 'The question search process',
'system_questions_search_continued' => 'The process of the question search found and continued',
'system_questions_search_started' => 'The process of the question search started',
'system_questions_search_not_started' => 'The process of the question search is not started',
'system_questions_search_ended' => 'The process of the question search ended',
'system_questions_search_page_next_exists' => 'There are more questions in the registry',
'system_questions_search_page_next_not_exists' => 'There are no more questions in the registry',
'system_questions_search_empty' => 'No questions found',
'system_questions_search_question_title' => 'Question',
'system_questions_search_question_answer' => 'Answer',
'system_questions_search_identifier_request_title' => 'Enter identifier',
'system_questions_search_identifier_request_not_acceptable' => 'Failed to process the identifier',
'system_questions_search_identifier_request_too_short' => 'Identifier length must be \>\= 1 and \<\= 12',
'system_questions_search_identifier_request_too_long' => 'Identifier length must be \>\= 1 and \<\= 12',
'system_questions_search_identifier_request_restricted_characters_title' => "Restricted any characters except digits",
'system_questions_search_identifier_request_restricted_characters_description' => "Remove these characters:",
'system_questions_search_identifier_cancel_success' => 'Cancelled the identifier replacing process',
'system_questions_search_identifier_delete_success' => 'Identifier deleted',
'system_questions_search_identifier_update_success' => 'Identifier replaced:',
'system_questions_search_identifier_update_fail' => 'Failed to replace identifier',
'system_questions_search_text_request_title' => 'Enter text',
'system_questions_search_text_request_not_acceptable' => 'Failed to process the text',
'system_questions_search_text_request_too_short' => 'Text length must be \>\= 3 and \<\= 256',
'system_questions_search_text_request_too_long' => 'Text length must be \>\= 3 and \<\= 256',
'system_questions_search_text_cancel_success' => 'Cancelled the text replacing process',
'system_questions_search_text_delete_success' => 'Text deleted',
'system_questions_search_text_update_success' => 'Text replaced:',
'system_questions_search_text_update_fail' => 'Failed to replace text',
'system_questions_search_a_request_title' => 'Enter A\-answer',
'system_questions_search_a_request_not_acceptable' => 'Failed to process the A\-answer',
'system_questions_search_a_request_too_short' => 'A\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_a_request_too_long' => 'A\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_a_cancel_success' => 'Cancelled the A\-answer replacing process',
'system_questions_search_a_delete_success' => 'A\-answer deleted',
'system_questions_search_a_update_success' => 'A\-answer replaced:',
'system_questions_search_a_update_fail' => 'Failed to replace A\-answer',
'system_questions_search_b_request_title' => 'Enter B\-answer',
'system_questions_search_b_request_not_acceptable' => 'Failed to process the B\-answer',
'system_questions_search_b_request_too_short' => 'B\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_b_request_too_long' => 'B\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_b_cancel_success' => 'Cancelled the B\-answer replacing process',
'system_questions_search_b_delete_success' => 'B\-answer deleted',
'system_questions_search_b_update_success' => 'B\-answer replaced:',
'system_questions_search_b_update_fail' => 'Failed to replace B\-answer',
'system_questions_search_c_request_title' => 'Enter C\-answer',
'system_questions_search_c_request_not_acceptable' => 'Failed to process the C\-answer',
'system_questions_search_c_request_too_short' => 'C\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_c_request_too_long' => 'C\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_c_cancel_success' => 'Cancelled the C\-answer replacing process',
'system_questions_search_c_delete_success' => 'C\-answer deleted',
'system_questions_search_c_update_success' => 'C\-answer replaced:',
'system_questions_search_c_update_fail' => 'Failed to replace C\-answer',
'system_questions_search_d_request_title' => 'Enter D\-answer',
'system_questions_search_d_request_not_acceptable' => 'Failed to process the D\-answer',
'system_questions_search_d_request_too_short' => 'D\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_d_request_too_long' => 'D\-answer length must be \>\= 3 and \<\= 128',
'system_questions_search_d_cancel_success' => 'Cancelled the D\-answer replacing process',
'system_questions_search_d_delete_success' => 'D\-answer deleted',
'system_questions_search_d_update_success' => 'D\-answer replaced:',
'system_questions_search_d_update_fail' => 'Failed to replace D\-answer',
'system_questions_search_button_delete' => 'Delete',
'system_questions_search_button_author' => 'Author',
'system_questions_search_button_active' => 'Active',
'system_questions_search_button_inactive' => 'Inactive',
'system_questions_search_button_answer' => 'Answer',
'system_questions_search_button_localizations' => 'Localizations',
'system_questions_search_button_identifier' => 'Identifier',
'system_questions_search_button_text' => 'Text',
'system_questions_search_button_a' => 'A',
'system_questions_search_button_b' => 'B',
'system_questions_search_button_c' => 'C',
'system_questions_search_button_d' => 'D',
'system_questions_search_button_delete' => 'Delete',
'system_questions_search_button_cancel' => 'Cancel',
'system_questions_search_button_page_next' => 'Next page',
'system_questions_search_button_end' => 'End the search process',
'system_questions_search_not_localized' => 'Failed to initialize the question localization',
// Question localization create (system)
'system_questions_localization_create_created' => 'The question localization was created',
// Question localization create (system)
'system_questions_localization_create_created' => 'The question localization was created',
// Authorization
'not_authorized_system' => 'You do not have access to the system',
'not_authorized_game_play' => 'You do not have access to play games',
'not_authorized_rating_display' => 'You do not have access to display in the rating',
'not_authorized_balance_deposit' => 'You do not have access to deposit into the balance',
'not_authorized_balance_withdraw' => 'You do not have access to withdraw from the balance',
'not_authorized_settings' => 'You do not have access to the settings',
'not_authorized_system_accounts' => 'You do not have system access to the accounts',
'not_authorized_system_questions' => 'You do not have system access to the questions',
'not_authorized_system_settings' => 'You do not have system access to the system settings',
// Authorization
'not_authorized_system' => 'You do not have access to the system',
'not_authorized_game_play' => 'You do not have access to play games',
'not_authorized_rating_display' => 'You do not have access to display in the rating',
'not_authorized_balance_deposit' => 'You do not have access to deposit into the balance',
'not_authorized_balance_withdraw' => 'You do not have access to withdraw from the balance',
'not_authorized_settings' => 'You do not have access to the settings',
'not_authorized_system_accounts' => 'You do not have system access to the accounts',
'not_authorized_system_questions' => 'You do not have system access to the questions',
'not_authorized_system_settings' => 'You do not have system access to the system settings',
// Other
'why_so_shroomious' => 'why so shroomious',
// Other
'why_so_shroomious' => 'why so shroomious',
];

View File

@ -2,183 +2,183 @@
// Exit (success)
return [
// Система
'deeproots' => 'DeepRoots',
'empty' => 'Пусто',
'yes' => 'Да',
'no' => 'Нет',
// Система
'deeproots' => 'DeepRoots',
'empty' => 'Пусто',
'yes' => 'Да',
'no' => 'Нет',
// Главное меню
'menu_title' => 'Главное меню',
'menu_button_start' => 'Начать',
'menu_button_rating' => 'Рейтинг',
'menu_button_balance' => 'Баланс',
'menu_button_system_accounts' => 'Аккаунты',
'menu_button_system_questions' => 'Вопросы',
'menu_button_system_settings' => 'Настройки',
'menu_system_authorized' => 'Найдена системная авторизация',
// Главное меню
'menu_title' => 'Главное меню',
'menu_button_start' => 'Начать',
'menu_button_rating' => 'Рейтинг',
'menu_button_balance' => 'Баланс',
'menu_button_system_accounts' => 'Аккаунты',
'menu_button_system_questions' => 'Вопросы',
'menu_button_system_settings' => 'Настройки',
'menu_system_authorized' => 'Найдена системная авторизация',
// Аккаунт
'account_title' => 'Аккаунт',
'account_identifier' => 'Идентификатор',
'account_authorized_system' => 'Доступ к системе',
'account_authorized_game_play' => 'Доступ к играм',
'account_authorized_rating_display' => 'Доступ к отображению в рейтинге',
'account_authorized_balance_deposit' => 'Доступ к пополнению баланса',
'account_authorized_balance_withdraw' => 'Доступ к выводу баланса',
'account_authorized_settings' => 'Доступ к настроекам',
'account_authorized_system_accounts' => 'Системный доступ к аккаунтам',
'account_authorized_system_questions' => 'Системный доступ к вопросам',
'account_authorized_system_settings' => 'Системный доступ к системным настройкам',
// Аккаунт
'account_title' => 'Аккаунт',
'account_identifier' => 'Идентификатор',
'account_authorized_system' => 'Доступ к системе',
'account_authorized_game_play' => 'Доступ к играм',
'account_authorized_rating_display' => 'Доступ к отображению в рейтинге',
'account_authorized_balance_deposit' => 'Доступ к пополнению баланса',
'account_authorized_balance_withdraw' => 'Доступ к выводу баланса',
'account_authorized_settings' => 'Доступ к настроекам',
'account_authorized_system_accounts' => 'Системный доступ к аккаунтам',
'account_authorized_system_questions' => 'Системный доступ к вопросам',
'account_authorized_system_settings' => 'Системный доступ к системным настройкам',
// Настройки языка
'settings_select_language_title' => 'Выбери язык',
'settings_select_language_description' => 'Выбранный язык будет записан в настройки аккаунта',
'settings_language_update_success' => 'Язык заменён:',
'settings_language_update_fail' => 'Не удалось заменить язык',
// Настройки языка
'settings_select_language_title' => 'Выбери язык',
'settings_select_language_description' => 'Выбранный язык будет записан в настройки аккаунта',
'settings_language_update_success' => 'Язык заменён:',
'settings_language_update_fail' => 'Не удалось заменить язык',
// Выбор языка
'select_language_title' => 'Выбери язык',
'select_language_description' => 'Выбранный язык будет использован в текущем процессе',
'select_language_button_add' => 'Добавить язык',
// Выбор языка
'select_language_title' => 'Выбери язык',
'select_language_description' => 'Выбранный язык будет использован в текущем процессе',
'select_language_button_add' => 'Добавить язык',
// Репозиторий
'repository_title' => 'Репозиторий',
'repository_text' => <<<TXT
Svoboder написан на [PHP](https://www.php.net/) используя [Zanzara](https://github.com/badfarm/zanzara) для Telegram,
мой [MINIMAL](https://git.svoboda.works/mirzaev/minimal) фреймворк для PHP и моя база данных [Baza](https://git.svoboda.works/mirzaev/baza)
// Репозиторий
'repository_title' => 'Репозиторий',
'repository_text' => <<<TXT
Svoboder написан на [PHP](https://www.php.net/) используя [Zanzara](https://github.com/badfarm/zanzara) для Telegram,
мой [MINIMAL](https://git.svoboda.works/mirzaev/minimal) фреймворк для PHP и моя база данных [Baza](https://git.svoboda.works/mirzaev/baza)
Код находится под лицензией [WTFPL](https://en.wikipedia.org/wiki/WTFPL)
Помогай с разработкой или используй мой код бесплатно\!
TXT,
'repository_button_code' => 'Код',
'repository_button_issues' => 'Проблемы',
'repository_button_suggestions' => 'Предложения',
Код находится под лицензией [WTFPL](https://en.wikipedia.org/wiki/WTFPL)
Помогай с разработкой или используй мой код бесплатно\!
TXT,
'repository_button_code' => 'Код',
'repository_button_issues' => 'Проблемы',
'repository_button_suggestions' => 'Предложения',
// Автор
'author_title' => 'Автор',
'author_text' => <<<TXT
*Арсен Мирзаев Татьяно\-Мурадович*
Программист, анархист, вегетарианец
TXT,
'author_button_neurojournal' => 'Нейрожурнал',
'author_button_projects' => 'Проекты',
'author_button_twitter' => 'Twitter',
'author_button_bluesky' => 'Bluesky',
'author_button_bastyon' => 'Bastyon',
'author_button_youtube_english' => 'YouTube',
'author_button_youtube_russian' => 'YouTube',
'author_button_message' => 'Отправить сообщение',
// Автор
'author_title' => 'Автор',
'author_text' => <<<TXT
*Арсен Мирзаев Татьяно\-Мурадович*
Программист, анархист, вегетарианец
TXT,
'author_button_neurojournal' => 'Нейрожурнал',
'author_button_projects' => 'Проекты',
'author_button_twitter' => 'Twitter',
'author_button_bluesky' => 'Bluesky',
'author_button_bastyon' => 'Bastyon',
'author_button_youtube_english' => 'YouTube',
'author_button_youtube_russian' => 'YouTube',
'author_button_message' => 'Отправить сообщение',
// Вопросы (система)
'system_questions_title' => 'Реестр вопросов',
'system_questions_questions' => 'Вопросы',
'system_questions_answers' => 'Ответы',
'system_questions_answers_amount_matches' => 'Количество вопросов совпадает с количеством ответов',
'system_questions_answers_amount_different' => 'Количество вопросов не совпадает с количеством ответов',
'system_questions_amount_matches' => 'Количество вопросов совпадает с количеством локализаций',
'system_questions_amount_different' => 'Количество вопросов не совпадает с количеством локализаций',
'system_questions_localizations_amount_matches' => 'Количества локализаций совпадает друг с другом',
'system_questions_localizations_amount_different' => 'Количества локализаций не совпадает друг с другом',
'system_questions_button_search' => 'Поиск',
'system_questions_button_create' => 'Создать',
// Вопросы (система)
'system_questions_title' => 'Реестр вопросов',
'system_questions_questions' => 'Вопросы',
'system_questions_answers' => 'Ответы',
'system_questions_answers_amount_matches' => 'Количество вопросов совпадает с количеством ответов',
'system_questions_answers_amount_different' => 'Количество вопросов не совпадает с количеством ответов',
'system_questions_amount_matches' => 'Количество вопросов совпадает с количеством локализаций',
'system_questions_amount_different' => 'Количество вопросов не совпадает с количеством локализаций',
'system_questions_localizations_amount_matches' => 'Количества локализаций совпадает друг с другом',
'system_questions_localizations_amount_different' => 'Количества локализаций не совпадает друг с другом',
'system_questions_button_search' => 'Поиск',
'system_questions_button_create' => 'Создать',
// Создание вопроса (система)
'system_questions_create_created' => 'Создан вопрос',
// Создание вопроса (система)
'system_questions_create_created' => 'Создан вопрос',
// Поиск вопроса (система)
'system_questions_search_title' => 'Процесс поиска вопроса',
'system_questions_search_continued' => 'Процесс поиска вопроса найден и продолжен',
'system_questions_search_started' => 'Процесс поиска вопроса начат',
'system_questions_search_not_started' => 'Процесс поиска вопроса не начат',
'system_questions_search_ended' => 'Процесс поиска вопроса завершён',
'system_questions_search_page_next_exists' => 'В реестре есть ещё вопросы',
'system_questions_search_page_next_not_exists' => 'В реестре больше нет вопросов',
'system_questions_search_empty' => 'Вопросы не найдены',
'system_questions_search_question_title' => 'Вопрос',
'system_questions_search_question_answer' => 'Ответ',
'system_questions_search_identifier_request_title' => 'Введи идентификатор',
'system_questions_search_identifier_request_not_acceptable' => 'Не удалось обработать идентификатор',
'system_questions_search_identifier_request_too_short' => 'Длина идентификатора должна быть \>\= 1 и \<\= 12',
'system_questions_search_identifier_request_too_long' => 'Длина идентификатора должна быть \>\= 1 и \<\= 12',
'system_questions_search_identifier_request_restricted_characters_title' => "Запрещены любые символы, кроме цифр",
'system_questions_search_identifier_request_restricted_characters_description' => "Удали эти символы:",
'system_questions_search_identifier_cancel_success' => 'Отменён процесс замены идентификатора',
'system_questions_search_identifier_delete_success' => 'Идентификатор удалён',
'system_questions_search_identifier_update_success' => 'Идентификатор заменён:',
'system_questions_search_identifier_update_fail' => 'Не удалось заменить идентификатор',
'system_questions_search_text_request_title' => 'Введи текст',
'system_questions_search_text_request_not_acceptable' => 'Не удалось обработать текст',
'system_questions_search_text_request_too_short' => 'Длина текста должна быть \>\= 3 и \<\= 256',
'system_questions_search_text_request_too_long' => 'Длина текста должна быть \>\= 3 и \<\= 256',
'system_questions_search_text_cancel_success' => 'Отменён процесс замены текста',
'system_questions_search_text_delete_success' => 'Текст удалён',
'system_questions_search_text_update_success' => 'Текст заменён:',
'system_questions_search_text_update_fail' => 'Не удалось заменить текст',
'system_questions_search_a_request_title' => 'Введи A\-ответ',
'system_questions_search_a_request_not_acceptable' => 'Не удалось обработать A\-ответ',
'system_questions_search_a_request_too_short' => 'Длина A\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_a_request_too_long' => 'Длина A\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_a_cancel_success' => 'Отменён процесс замены A\-ответа',
'system_questions_search_a_delete_success' => 'A\-ответ удалён',
'system_questions_search_a_update_success' => 'A\-ответ заменён:',
'system_questions_search_a_update_fail' => 'Не удалось заменить A\-ответ',
'system_questions_search_b_request_title' => 'Введи B\-ответ',
'system_questions_search_b_request_not_acceptable' => 'Не удалось обработать B\-ответ',
'system_questions_search_b_request_too_short' => 'Длина B\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_b_request_too_long' => 'Длина B\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_b_cancel_success' => 'Отменён процесс замены B\-ответа',
'system_questions_search_b_delete_success' => 'B\-ответ удалён',
'system_questions_search_b_update_success' => 'B\-ответ заменён:',
'system_questions_search_b_update_fail' => 'Не удалось заменить B\-ответ',
'system_questions_search_c_request_title' => 'Введи C\-ответ',
'system_questions_search_c_request_not_acceptable' => 'Не удалось обработать C\-ответ',
'system_questions_search_c_request_too_short' => 'Длина C\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_c_request_too_long' => 'Длина C\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_c_cancel_success' => 'Отменён процесс замены C\-ответа',
'system_questions_search_c_delete_success' => 'C\-ответ удалён',
'system_questions_search_c_update_success' => 'C\-ответ заменён:',
'system_questions_search_c_update_fail' => 'Не удалось заменить C\-ответ',
'system_questions_search_d_request_title' => 'Введи D\-ответ',
'system_questions_search_d_request_not_acceptable' => 'Не удалось обработать D\-ответ',
'system_questions_search_d_request_too_short' => 'Длина D\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_d_request_too_long' => 'Длина D\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_d_cancel_success' => 'Отменён процесс замены D\-ответа',
'system_questions_search_d_delete_success' => 'D\-ответ удалён',
'system_questions_search_d_update_success' => 'D\-ответ заменён:',
'system_questions_search_d_update_fail' => 'Не удалось заменить D\-ответ',
'system_questions_search_button_delete' => 'Удалить',
'system_questions_search_button_author' => 'Автор',
'system_questions_search_button_active' => 'Активен',
'system_questions_search_button_inactive' => 'Неактивен',
'system_questions_search_button_answer' => 'Ответ',
'system_questions_search_button_localizations' => 'Локализации',
'system_questions_search_button_identifier' => 'Идентифиикатор',
'system_questions_search_button_text' => 'Текст',
'system_questions_search_button_a' => 'А',
'system_questions_search_button_b' => 'Б',
'system_questions_search_button_c' => 'В',
'system_questions_search_button_d' => 'Г',
'system_questions_search_button_delete' => 'Удалить',
'system_questions_search_button_cancel' => 'Отменить',
'system_questions_search_button_page_next' => 'Следующая страница',
'system_questions_search_button_end' => 'Завершить процесс поиска',
'system_questions_search_not_localized' => 'Не удалось инициализировать локализацию вопроса',
// Поиск вопроса (система)
'system_questions_search_title' => 'Процесс поиска вопроса',
'system_questions_search_continued' => 'Процесс поиска вопроса найден и продолжен',
'system_questions_search_started' => 'Процесс поиска вопроса начат',
'system_questions_search_not_started' => 'Процесс поиска вопроса не начат',
'system_questions_search_ended' => 'Процесс поиска вопроса завершён',
'system_questions_search_page_next_exists' => 'В реестре есть ещё вопросы',
'system_questions_search_page_next_not_exists' => 'В реестре больше нет вопросов',
'system_questions_search_empty' => 'Вопросы не найдены',
'system_questions_search_question_title' => 'Вопрос',
'system_questions_search_question_answer' => 'Ответ',
'system_questions_search_identifier_request_title' => 'Введи идентификатор',
'system_questions_search_identifier_request_not_acceptable' => 'Не удалось обработать идентификатор',
'system_questions_search_identifier_request_too_short' => 'Длина идентификатора должна быть \>\= 1 и \<\= 12',
'system_questions_search_identifier_request_too_long' => 'Длина идентификатора должна быть \>\= 1 и \<\= 12',
'system_questions_search_identifier_request_restricted_characters_title' => "Запрещены любые символы, кроме цифр",
'system_questions_search_identifier_request_restricted_characters_description' => "Удали эти символы:",
'system_questions_search_identifier_cancel_success' => 'Отменён процесс замены идентификатора',
'system_questions_search_identifier_delete_success' => 'Идентификатор удалён',
'system_questions_search_identifier_update_success' => 'Идентификатор заменён:',
'system_questions_search_identifier_update_fail' => 'Не удалось заменить идентификатор',
'system_questions_search_text_request_title' => 'Введи текст',
'system_questions_search_text_request_not_acceptable' => 'Не удалось обработать текст',
'system_questions_search_text_request_too_short' => 'Длина текста должна быть \>\= 3 и \<\= 256',
'system_questions_search_text_request_too_long' => 'Длина текста должна быть \>\= 3 и \<\= 256',
'system_questions_search_text_cancel_success' => 'Отменён процесс замены текста',
'system_questions_search_text_delete_success' => 'Текст удалён',
'system_questions_search_text_update_success' => 'Текст заменён:',
'system_questions_search_text_update_fail' => 'Не удалось заменить текст',
'system_questions_search_a_request_title' => 'Введи A\-ответ',
'system_questions_search_a_request_not_acceptable' => 'Не удалось обработать A\-ответ',
'system_questions_search_a_request_too_short' => 'Длина A\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_a_request_too_long' => 'Длина A\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_a_cancel_success' => 'Отменён процесс замены A\-ответа',
'system_questions_search_a_delete_success' => 'A\-ответ удалён',
'system_questions_search_a_update_success' => 'A\-ответ заменён:',
'system_questions_search_a_update_fail' => 'Не удалось заменить A\-ответ',
'system_questions_search_b_request_title' => 'Введи B\-ответ',
'system_questions_search_b_request_not_acceptable' => 'Не удалось обработать B\-ответ',
'system_questions_search_b_request_too_short' => 'Длина B\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_b_request_too_long' => 'Длина B\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_b_cancel_success' => 'Отменён процесс замены B\-ответа',
'system_questions_search_b_delete_success' => 'B\-ответ удалён',
'system_questions_search_b_update_success' => 'B\-ответ заменён:',
'system_questions_search_b_update_fail' => 'Не удалось заменить B\-ответ',
'system_questions_search_c_request_title' => 'Введи C\-ответ',
'system_questions_search_c_request_not_acceptable' => 'Не удалось обработать C\-ответ',
'system_questions_search_c_request_too_short' => 'Длина C\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_c_request_too_long' => 'Длина C\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_c_cancel_success' => 'Отменён процесс замены C\-ответа',
'system_questions_search_c_delete_success' => 'C\-ответ удалён',
'system_questions_search_c_update_success' => 'C\-ответ заменён:',
'system_questions_search_c_update_fail' => 'Не удалось заменить C\-ответ',
'system_questions_search_d_request_title' => 'Введи D\-ответ',
'system_questions_search_d_request_not_acceptable' => 'Не удалось обработать D\-ответ',
'system_questions_search_d_request_too_short' => 'Длина D\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_d_request_too_long' => 'Длина D\-ответа должна быть \>\= 3 и \<\= 128',
'system_questions_search_d_cancel_success' => 'Отменён процесс замены D\-ответа',
'system_questions_search_d_delete_success' => 'D\-ответ удалён',
'system_questions_search_d_update_success' => 'D\-ответ заменён:',
'system_questions_search_d_update_fail' => 'Не удалось заменить D\-ответ',
'system_questions_search_button_delete' => 'Удалить',
'system_questions_search_button_author' => 'Автор',
'system_questions_search_button_active' => 'Активен',
'system_questions_search_button_inactive' => 'Неактивен',
'system_questions_search_button_answer' => 'Ответ',
'system_questions_search_button_localizations' => 'Локализации',
'system_questions_search_button_identifier' => 'Идентифиикатор',
'system_questions_search_button_text' => 'Текст',
'system_questions_search_button_a' => 'А',
'system_questions_search_button_b' => 'Б',
'system_questions_search_button_c' => 'В',
'system_questions_search_button_d' => 'Г',
'system_questions_search_button_delete' => 'Удалить',
'system_questions_search_button_cancel' => 'Отменить',
'system_questions_search_button_page_next' => 'Следующая страница',
'system_questions_search_button_end' => 'Завершить процесс поиска',
'system_questions_search_not_localized' => 'Не удалось инициализировать локализацию вопроса',
// Создание локализации вопроса (система)
'system_questions_localization_create_created' => 'Создана локализация вопроса',
// Создание локализации вопроса (система)
'system_questions_localization_create_created' => 'Создана локализация вопроса',
// Авторизация
'not_authorized_system' => 'У тебя нет доступа к системе',
'not_authorized_game_play' => 'У тебя нет доступа к играм',
'not_authorized_rating_display' => 'У тебя нет доступа к отображению в рейтинге',
'not_authorized_balance_deposit' => 'У тебя нет доступа к пополнению баланса',
'not_authorized_balance_withdraw' => 'У тебя нет доступа к выводу баланса',
'not_authorized_settings' => 'У тебя нет доступа к настройкам',
'not_authorized_system_accounts' => 'У тебя нет системного доступа к аккаунтам',
'not_authorized_system_questions' => 'У тебя нет системного доступа к вопросам',
'not_authorized_system_settings' => 'У тебя нет системного доступа к системным настройкам',
// Авторизация
'not_authorized_system' => 'У тебя нет доступа к системе',
'not_authorized_game_play' => 'У тебя нет доступа к играм',
'not_authorized_rating_display' => 'У тебя нет доступа к отображению в рейтинге',
'not_authorized_balance_deposit' => 'У тебя нет доступа к пополнению баланса',
'not_authorized_balance_withdraw' => 'У тебя нет доступа к выводу баланса',
'not_authorized_settings' => 'У тебя нет доступа к настройкам',
'not_authorized_system_accounts' => 'У тебя нет системного доступа к аккаунтам',
'not_authorized_system_questions' => 'У тебя нет системного доступа к вопросам',
'not_authorized_system_settings' => 'У тебя нет системного доступа к системным настройкам',
// Прочее
'why_so_shroomious' => 'почему такой грибъёзный',
// Прочее
'why_so_shroomious' => 'почему такой грибъёзный',
];

View File

@ -202,15 +202,15 @@ final class account extends core
$identifier,
$name,
$language->name,
ACCOUNT_ACCESS_SYSTEM,
ACCOUNT_ACCESS_GAME_PLAY,
ACCOUNT_ACCESS_RATING_DISPLAY,
ACCOUNT_ACCESS_BALANCE_DEPOSIT,
ACCOUNT_ACCESS_BALANCE_WITHDRAW,
ACCOUNT_ACCESS_SETTINGS,
ACCOUNT_ACCESS_SYSTEM_ACCOUNTS,
ACCOUNT_ACCESS_SYSTEM_QUESTIONS,
ACCOUNT_ACCESS_SYSTEM_SETTINGS,
1, // ACCOUNT_ACCESS_SYSTEM
1, // ACCOUNT_ACCESS_GAME_PLAY
1, // ACCOUNT_ACCESS_RATING_DISPLAY
1, // ACCOUNT_ACCESS_BALANCE_DEPOSIT
1, // ACCOUNT_ACCESS_BALANCE_WITHDRAW
1, // ACCOUNT_ACCESS_SETTINGS
0, // ACCOUNT_ACCESS_SYSTEM_ACCOUNTS
0, // ACCOUNT_ACCESS_SYSTEM_QUESTIONS
0, // ACCOUNT_ACCESS_SYSTEM_SETTINGS
svoboda::timestamp(),
svoboda::timestamp()
);

View File

@ -6,22 +6,22 @@ namespace mirzaev\deeproots\models;
// Files of the project
use mirzaev\deeproots\models\core,
mirzaev\deeproots\models\question,
mirzaev\deeproots\models\enumerations\language;
mirzaev\deeproots\models\question,
mirzaev\deeproots\models\enumerations\language;
// Svoboda time
use svoboda\time\statement as svoboda;
// Baza database
use mirzaev\baza\database,
mirzaev\baza\column,
mirzaev\baza\record,
mirzaev\baza\enumerations\encoding,
mirzaev\baza\enumerations\type;
mirzaev\baza\column,
mirzaev\baza\record,
mirzaev\baza\enumerations\encoding,
mirzaev\baza\enumerations\type;
// Built-in libraries
use Exception as exception,
RuntimeException as exception_runtime;
RuntimeException as exception_runtime;
/**
* Answer
@ -34,77 +34,77 @@ use Exception as exception,
*/
final class answer extends core
{
/**
* File
*
* @var string $database Path to the database file
*/
protected string $file = DATABASES . DIRECTORY_SEPARATOR . 'answers.baza';
/**
* File
*
* @var string $database Path to the database file
*/
protected string $file = DATABASES . DIRECTORY_SEPARATOR . 'answers.baza';
/**
* Database
*
* @var database $database The database
*/
public protected(set) database $database;
/**
* Database
*
* @var database $database The database
*/
public protected(set) database $database;
/**
* Constructor
*
* @param language $language Questions language
*
* @return void
*/
public function __construct()
{
// Initializing the database
$this->database = new database()
->encoding(encoding::ascii)
->columns(
new column('identifier', type::long_long_unsigned),
new column('A', type::char),
new column('B', type::char),
new column('C', type::char),
new column('D', type::char),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
)
->connect($this->file);
}
/**
* Constructor
*
* @param language $language Questions language
*
* @return void
*/
public function __construct()
{
// Initializing the database
$this->database = new database()
->encoding(encoding::ascii)
->columns(
new column('identifier', type::long_long_unsigned),
new column('A', type::char),
new column('B', type::char),
new column('C', type::char),
new column('D', type::char),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
)
->connect($this->file);
}
/**
* Create
*
* Creates the record in the database
*
* @param int $identifier Identifier (same for questions in every language)
* @param int $a Number of points for answer A
* @param int $b Number of points for answer B
* @param int $c Number of points for answer C
* @param int $d Number of points for answer D
*
* @return int|false The record identifier, if created
*/
public function create(?int $identifier, int $a = 0, int $b = 0, int $c = 0, int $d = 0): int|false
{
// Initializing the identifier
$identifier ??= $this->database->count() + 1;
/**
* Create
*
* Creates the record in the database
*
* @param int $identifier Identifier (same for questions in every language)
* @param int $a Number of points for answer A
* @param int $b Number of points for answer B
* @param int $c Number of points for answer C
* @param int $d Number of points for answer D
*
* @return int|false The record identifier, if created
*/
public function create(?int $identifier, int $a = 0, int $b = 0, int $c = 0, int $d = 0): int|false
{
// Initializing the identifier
$identifier ??= $this->database->count() + 1;
// Initializing the record
$record = $this->database->record(
$identifier,
$a,
$b,
$c,
$d,
svoboda::timestamp(),
svoboda::timestamp()
);
// Initializing the record
$record = $this->database->record(
$identifier,
$a,
$b,
$c,
$d,
svoboda::timestamp(),
svoboda::timestamp()
);
// Creating the record in the database
$created = $this->database->write($record);
// Creating the record in the database
$created = $this->database->write($record);
// Exit (success)
return $created ? $identifier : false;
}
// Exit (success)
return $created ? $identifier : false;
}
}

View File

@ -6,7 +6,7 @@ namespace mirzaev\deeproots\models;
// Framework for PHP
use mirzaev\minimal\model,
mirzaev\minimal\http\enumerations\status;
mirzaev\minimal\http\enumerations\status;
// Built-in libraries
use exception;
@ -23,22 +23,21 @@ use exception;
*/
class core extends model
{
/**
* File
*
* @var string database Path to the database file
*/
protected string $file = DATABASES . DIRECTORY_SEPARATOR . 'example.baza';
/**
* File
*
* @var string database Path to the database file
*/
protected string $file = DATABASES . DIRECTORY_SEPARATOR . 'example.baza';
/**
* Constructor
*
* Initialize the database
*
* @return void
*/
public function __construct()
{
}
/**
* Constructor
*
* Initialize the database
*
* @return void
*/
public function __construct()
{
}
}

View File

@ -6,22 +6,22 @@ namespace mirzaev\deeproots\models;
// Files of the project
use mirzaev\deeproots\models\core,
mirzaev\deeproots\models\question\localization,
mirzaev\deeproots\models\enumerations\language;
mirzaev\deeproots\models\question\localization,
mirzaev\deeproots\models\enumerations\language;
// Svoboda time
use svoboda\time\statement as svoboda;
// Baza database
use mirzaev\baza\database,
mirzaev\baza\column,
mirzaev\baza\record,
mirzaev\baza\enumerations\encoding,
mirzaev\baza\enumerations\type;
mirzaev\baza\column,
mirzaev\baza\record,
mirzaev\baza\enumerations\encoding,
mirzaev\baza\enumerations\type;
// Built-in libraries
use Exception as exception,
RuntimeException as exception_runtime;
RuntimeException as exception_runtime;
/**
* Question
@ -34,65 +34,65 @@ use Exception as exception,
*/
final class question extends core
{
/**
* File
*
* @var string $database Path to the database file
*/
protected string $file = DATABASES . DIRECTORY_SEPARATOR . 'questions.baza';
/**
* File
*
* @var string $database Path to the database file
*/
protected string $file = DATABASES . DIRECTORY_SEPARATOR . 'questions.baza';
/**
* Database
*
* @var database $database The database
*/
public protected(set) database $database;
/**
* Database
*
* @var database $database The database
*/
public protected(set) database $database;
/**
* Constructor
*
* @return void
*/
public function __construct()
{
// Initializing the database
$this->database = new database()
->encoding(encoding::ascii)
->columns(
new column('identifier', type::long_long_unsigned),
new column('active', type::char),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
)
->connect($this->file);
}
/**
* Constructor
*
* @return void
*/
public function __construct()
{
// Initializing the database
$this->database = new database()
->encoding(encoding::ascii)
->columns(
new column('identifier', type::integer_unsigned),
new column('active', type::char),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
)
->connect($this->file);
}
/**
* Create
*
* Creates the record in the database
*
* @param bool $active Is the question active?
*
* @return int|false The record identifier, if created
*/
public function create(bool $active = false): int|false
{
// Initializing the identifier
$identifier ??= $this->database->count() + 1;
/**
* Create
*
* Creates the record in the database
*
* @param bool $active Is the question active?
*
* @return int|false The record identifier, if created
*/
public function create(bool $active = false): int|false
{
// Initializing the identifier
$identifier ??= $this->database->count() + 1;
// Initializing the record
$record = $this->database->record(
$identifier,
(int) $active,
svoboda::timestamp(),
svoboda::timestamp()
);
// Initializing the record
$record = $this->database->record(
$identifier,
(int) $active,
svoboda::timestamp(),
svoboda::timestamp()
);
// Creating the record in the database
$created = $this->database->write($record);
// Creating the record in the database
$created = $this->database->write($record);
// Exit (success)
return $created ? $identifier : false;
}
// Exit (success)
return $created ? $identifier : false;
}
}

View File

@ -6,22 +6,22 @@ namespace mirzaev\deeproots\models\question;
// Files of the project
use mirzaev\deeproots\models\core,
mirzaev\deeproots\models\question,
mirzaev\deeproots\models\enumerations\language;
mirzaev\deeproots\models\question,
mirzaev\deeproots\models\enumerations\language;
// Svoboda time
use svoboda\time\statement as svoboda;
// Baza database
use mirzaev\baza\database,
mirzaev\baza\column,
mirzaev\baza\record,
mirzaev\baza\enumerations\encoding,
mirzaev\baza\enumerations\type;
mirzaev\baza\column,
mirzaev\baza\record,
mirzaev\baza\enumerations\encoding,
mirzaev\baza\enumerations\type;
// Built-in libraries
use Exception as exception,
RuntimeException as exception_runtime;
RuntimeException as exception_runtime;
/**
* Question localization
@ -34,77 +34,77 @@ use Exception as exception,
*/
final class localization extends core
{
/**
* Files
*
* @var string $database Path to the database files
*/
protected string $files = DATABASES . DIRECTORY_SEPARATOR . 'questions' . DIRECTORY_SEPARATOR . 'localizations';
/**
* Files
*
* @var string $database Path to the database files
*/
protected string $files = DATABASES . DIRECTORY_SEPARATOR . 'questions' . DIRECTORY_SEPARATOR . 'localizations';
/**
* Database
*
* @var database $database The database
*/
public protected(set) database $database;
/**
* Database
*
* @var database $database The database
*/
public protected(set) database $database;
/**
* Constructor
*
* @param language $language Language
*
* @return void
*/
public function __construct(language $language)
{
// Initializing the database
$this->database = new database()
->encoding(encoding::ascii)
->columns(
new column('identifier', type::long_long_unsigned),
new column('text', type::string, ['length' => 256]),
new column('A', type::string, ['length' => 128]),
new column('B', type::string, ['length' => 128]),
new column('C', type::string, ['length' => 128]),
new column('D', type::string, ['length' => 128]),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
)
->connect($this->files . DIRECTORY_SEPARATOR . strtolower($language->label()) . '.baza');
}
/**
* Constructor
*
* @param language $language Language
*
* @return void
*/
public function __construct(language $language)
{
// Initializing the database
$this->database = new database()
->encoding(encoding::ascii)
->columns(
new column('identifier', type::long_long_unsigned),
new column('text', type::string, ['length' => 256]),
new column('A', type::string, ['length' => 128]),
new column('B', type::string, ['length' => 128]),
new column('C', type::string, ['length' => 128]),
new column('D', type::string, ['length' => 128]),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
)
->connect($this->files . DIRECTORY_SEPARATOR . strtolower($language->label()) . '.baza');
}
/**
* Create
*
* Creates the record in the database
*
* @param int $identifier Identifier of the question::class record
* @param string $text Text (length: 256)
* @param string $a Answer A (length: 128)
* @param string $b Answer B (length: 128)
* @param string $c Answer C (length: 128)
* @param string $d Answer D (length: 128)
*
* @return int|false The record identifier, if created
*/
public function create(int $identifier, string $text, string $a, string $b, string $c, string $d): int|false
{
// Initializing the record
$record = $this->database->record(
$identifier,
$text,
$a,
$b,
$c,
$d,
svoboda::timestamp(),
svoboda::timestamp()
);
/**
* Create
*
* Creates the record in the database
*
* @param int $identifier Identifier of the question::class record
* @param string $text Text (length: 256)
* @param string $a Answer A (length: 128)
* @param string $b Answer B (length: 128)
* @param string $c Answer C (length: 128)
* @param string $d Answer D (length: 128)
*
* @return int|false The record identifier, if created
*/
public function create(int $identifier, string $text, string $a, string $b, string $c, string $d): int|false
{
// Initializing the record
$record = $this->database->record(
$identifier,
$text,
$a,
$b,
$c,
$d,
svoboda::timestamp(),
svoboda::timestamp()
);
// Creating the record in the database
$created = $this->database->write($record);
// Creating the record in the database
$created = $this->database->write($record);
// Exit (success)
return $created ? $identifier : false;
}
// Exit (success)
return $created ? $identifier : false;
}
}

View File

@ -6,14 +6,14 @@ namespace svoboda\svoboder\models\telegram\buttons\account\localization;
// Files of the project
use svoboda\svoboder\models\core,
svoboda\svoboder\models\enumerations\language,
svoboda\svoboder\models\account,
svoboda\svoboder\models\telegram\selections,
svoboda\svoboder\models\telegram\processes\account\localization\create as process_account_localization_create;
svoboda\svoboder\models\enumerations\language,
svoboda\svoboder\models\account,
svoboda\svoboder\models\telegram\selections,
svoboda\svoboder\models\telegram\processes\account\localization\create as process_account_localization_create;
// Framework for Telegram
use Zanzara\Context as context,
Zanzara\Telegram\Type\Message as message;
Zanzara\Telegram\Type\Message as message;
// Baza database
use mirzaev\baza\record;
@ -28,201 +28,201 @@ use mirzaev\baza\record;
*/
final class create extends core
{
/**
* Language
*
* Send the language selection menu
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function language(context $context)
{
// Initializing the account
$account = $context->get('account');
/**
* Language
*
* Send the language selection menu
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function language(context $context)
{
// Initializing the account
$account = $context->get('account');
if ($account instanceof record) {
// Initialized the account
if ($account instanceof record) {
// Initialized the account
// Initializing language
$language = $context->get('language');
// Initializing language
$language = $context->get('language');
if ($language) {
// Initialized language
if ($language) {
// Initialized language
// Initializing localization
$localization = $context->get('localization');
// Initializing localization
$localization = $context->get('localization');
if ($localization) {
// Initialized localization
if ($localization) {
// Initialized localization
// Reading from the telegram user buffer
$context->getUserDataItem(process_account_localization_create::PROCESS)
->then(function (?array $process) use ($context, $account, $localization) {
// Readed from the telegram user buffer
// Reading from the telegram user buffer
$context->getUserDataItem(process_account_localization_create::PROCESS)
->then(function (?array $process) use ($context, $account, $localization) {
// Readed from the telegram user buffer
if ($process) {
// Found started account localization create process
if ($process) {
// Found started account localization create process
// Initializing the account model
$model_account = new account;
// Initializing the account model
$model_account = new account;
// Initializing the account localizations
$existed = $model_account->localization->database->read(
filter: fn(record $localization) => $localization->account === $account->identifier,
amount: ACCOUNT_LOCALIZATION_CREATE_ACCOUNT_LOCALIZATIONS_AMOUNT
);
// Initializing the account localizations
$existed = $model_account->localization->database->read(
filter: fn(record $localization) => $localization->account === $account->identifier,
amount: ACCOUNT_LOCALIZATION_CREATE_ACCOUNT_LOCALIZATIONS_AMOUNT
);
// Declaring the buffer of languages to exclude
$exclude = [];
// Declaring the buffer of languages to exclude
$exclude = [];
// Initializing languages to exclude
foreach ($existed as $record) $exclude[] = $record->language;
// Initializing languages to exclude
foreach ($existed as $record) $exclude[] = $record->language;
if (count($exclude) !== count(language::cases())) {
// Not all languages in the registry have localizations created (expected)
if (count($exclude) !== count(language::cases())) {
// Not all languages in the registry have localizations created (expected)
// Sending the language selection
selections::language(
context: $context,
prefix: 'account_localization_create_select_language_',
title: '🌏 *' . $localization['account_localization_create_select_language_title'] . '*',
description: '🌏 *' . $localization['account_localization_create_select_language_description'] . '*',
exclude: $exclude
);
} else {
// All languages in the registry have localizations created (expected)
// Sending the language selection
selections::language(
context: $context,
prefix: 'account_localization_create_select_language_',
title: '🌏 *' . $localization['account_localization_create_select_language_title'] . '*',
description: '🌏 *' . $localization['account_localization_create_select_language_description'] . '*',
exclude: $exclude
);
} else {
// All languages in the registry have localizations created (expected)
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_create_every_language_created'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_create_every_language_created'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not found started account localization create process
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not found started account localization create process
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_create_not_started'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_create_not_started'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
});
} else {
// Not initialized localization
// Ending the conversation process
$context->endConversation();
});
}
});
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized language
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized language
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize language*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize language*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
}
// Ending the conversation process
$context->endConversation();
});
}
}
/**
* Name
*
* Request to enter name
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function name(context $context)
{
// Initializing the account
$account = $context->get('account');
/**
* Name
*
* Request to enter name
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function name(context $context)
{
// Initializing the account
$account = $context->get('account');
if ($account instanceof record) {
// Initialized the account
if ($account instanceof record) {
// Initialized the account
// Initializing localization
$localization = $context->get('localization');
// Initializing localization
$localization = $context->get('localization');
if ($localization) {
// Initialized localization
if ($localization) {
// Initialized localization
// Reading from the telegram user buffer
$context->getUserDataItem(process_account_localization_create::PROCESS)
->then(function (?array $process) use ($context, $account, $localization) {
// Readed from the telegram user buffer
// Reading from the telegram user buffer
$context->getUserDataItem(process_account_localization_create::PROCESS)
->then(function (?array $process) use ($context, $account, $localization) {
// Readed from the telegram user buffer
if ($process) {
// Found started account localization create process
if ($process) {
// Found started account localization create process
// Sending the message
$context->sendMessage('📄 *' . $localization['account_localization_create_name_request'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('📄 *' . $localization['account_localization_create_name_request'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Writing into the account localization create buffer
$context->nextStep([process_account_localization_create::class, 'name']);
});
} else {
// Not found started account localization create process
// Writing into the account localization create buffer
$context->nextStep([process_account_localization_create::class, 'name']);
});
} else {
// Not found started account localization create process
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_create_not_started'] . '*');
}
});
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_create_not_started'] . '*');
}
});
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
}
// Ending the conversation process
$context->endConversation();
});
}
}
}

View File

@ -6,14 +6,14 @@ namespace svoboda\svoboder\models\telegram\buttons\account\localization;
// Files of the project
use svoboda\svoboder\models\core,
svoboda\svoboder\models\enumerations\language,
svoboda\svoboder\models\account,
svoboda\svoboder\models\telegram\selections,
svoboda\svoboder\models\telegram\processes\account\localization\update as process_account_localization_update;
svoboda\svoboder\models\enumerations\language,
svoboda\svoboder\models\account,
svoboda\svoboder\models\telegram\selections,
svoboda\svoboder\models\telegram\processes\account\localization\update as process_account_localization_update;
// Framework for Telegram
use Zanzara\Context as context,
Zanzara\Telegram\Type\Message as message;
Zanzara\Telegram\Type\Message as message;
// Baza database
use mirzaev\baza\record;
@ -28,75 +28,75 @@ use mirzaev\baza\record;
*/
final class update extends core
{
/**
* Name
*
* Request to enter name
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function name(context $context)
{
// Initializing the account
$account = $context->get('account');
/**
* Name
*
* Request to enter name
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function name(context $context)
{
// Initializing the account
$account = $context->get('account');
if ($account instanceof record) {
// Initialized the account
if ($account instanceof record) {
// Initialized the account
// Initializing localization
$localization = $context->get('localization');
// Initializing localization
$localization = $context->get('localization');
if ($localization) {
// Initialized localization
if ($localization) {
// Initialized localization
// Reading from the telegram user buffer
$context->getUserDataItem(process_account_localization_update::PROCESS)
->then(function (?array $process) use ($context, $account, $localization) {
// Readed from the telegram user buffer
// Reading from the telegram user buffer
$context->getUserDataItem(process_account_localization_update::PROCESS)
->then(function (?array $process) use ($context, $account, $localization) {
// Readed from the telegram user buffer
if ($process) {
// Found started account localization update process
if ($process) {
// Found started account localization update process
// Sending the message
$context->sendMessage('📄 *' . $localization['account_localization_update_name_request'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('📄 *' . $localization['account_localization_update_name_request'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Writing into the account localization update buffer
$context->nextStep([process_account_localization_update::class, 'name']);
});
} else {
// Not found started account localization update process
// Writing into the account localization update buffer
$context->nextStep([process_account_localization_update::class, 'name']);
});
} else {
// Not found started account localization update process
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_update_not_started'] . '*');
}
});
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *' . $localization['account_localization_update_not_started'] . '*');
}
});
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
}
// Ending the conversation process
$context->endConversation();
});
}
}
}

View File

@ -412,79 +412,6 @@ final class middlewares extends core
}
}
/**
* Join (middleware)
*
* Check the account for access to join to distributions
*
* @param context $context
* @param node $next
*
* @return void
*/
public static function join(context $context, node $next): void
{
// Is the process stopped?
if ($context->get('stop')) return;
// Initializing the account
$account = $context->get('account');
if ($account instanceof record) {
// Initialized the account
// Initializing localization
$localization = $context->get('localization');
if ($localization) {
// Initialized localization
if ($account->authorized_joins) {
// Authorized the account to joint to distributions
// Continuation of the process
$next($context);
} else {
// Not authorized the account to joint to distributions
// Sending the message
$context->sendMessage('⛔ *' . $localization['not_authorized_joins'] . '*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
// Stopping the process
$context->set('stop', true);
}
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
}
/**
* Settings (middleware)
*

View File

@ -6,17 +6,17 @@ namespace mirzaev\deeproots\models\telegram\processes\language;
// Files of the project
use mirzaev\deeproots\models\core,
mirzaev\deeproots\models\enumerations\language;
mirzaev\deeproots\models\enumerations\language;
// Framework for Telegram
use Zanzara\Context as context,
Zanzara\Telegram\Type\Message as message;
Zanzara\Telegram\Type\Message as message;
// Baza database
use mirzaev\baza\record;
/**
* Telegram language select
* Telegram language select
*
* @package mirzaev\deeproots\models\telegram\processes\language
*
@ -25,126 +25,126 @@ use mirzaev\baza\record;
*/
final class select extends core
{
/**
* Language
*
* Send the language choose menu
*
* @param context $context Request data from Telegram
* @param string $prefix Prefix for 'callback_data' (`$prefix . $language->name`)
* @param string $title Title of the message
* @param string $description Description of the message
* @param array $exclude Languages that will be excluded ['ru', 'en'...]
*
* @return void
*/
public static function menu(context $context, string $prefix, string $title, string $description, array $exclude = []): void
{
// Initializing the account
$account = $context->get('account');
/**
* Language
*
* Send the language choose menu
*
* @param context $context Request data from Telegram
* @param string $prefix Prefix for 'callback_data' (`$prefix . $language->name`)
* @param string $title Title of the message
* @param string $description Description of the message
* @param array $exclude Languages that will be excluded ['ru', 'en'...]
*
* @return void
*/
public static function menu(context $context, string $prefix, string $title, string $description, array $exclude = []): void
{
// Initializing the account
$account = $context->get('account');
if ($account instanceof record) {
// Initialized the account
if ($account instanceof record) {
// Initialized the account
// Initializing language
$language = $context->get('language');
// Initializing language
$language = $context->get('language');
if ($language) {
// Initialized language
if ($language) {
// Initialized language
// Initializing localization
$localization = $context->get('localization');
// Initializing localization
$localization = $context->get('localization');
if ($localization) {
// Initialized localization
if ($localization) {
// Initialized localization
// Declaring the buffer of generated keyboard with languages
$keyboard = [];
// Declaring the buffer of generated keyboard with languages
$keyboard = [];
// Initializing the iterator of rows
$row = 0;
// Initializing the iterator of rows
$row = 0;
// Initializing buffer of languages
$languages = language::cases();
// Initializing buffer of languages
$languages = language::cases();
// Deleting the actual language from buffer of languages
unset($languages[array_search($language, $languages, strict: true)]);
// Deleting the actual language from buffer of languages
unset($languages[array_search($language, $languages, strict: true)]);
// Sorting buffer of languages by the actual language
$languages = [$language, ...$languages];
// Sorting buffer of languages by the actual language
$languages = [$language, ...$languages];
foreach ($languages as $language) {
// Iterating over languages
foreach ($languages as $language) {
// Iterating over languages
// Skipping excluded languages
if (array_search($language->name, $exclude, strict: true) !== false) continue;
// Skipping excluded languages
if (array_search($language->name, $exclude, strict: true) !== false) continue;
// Initializing the row
$keyboard[$row] ??= [];
// Initializing the row
$keyboard[$row] ??= [];
// Writing the language choose button into the buffer of generated keyboard with languages
$keyboard[$row][] = [
'text' => ($language->flag() ? $language->flag() . ' ' : '') . $language->label($language),
'callback_data' => $prefix . $language->name
];
// Writing the language choose button into the buffer of generated keyboard with languages
$keyboard[$row][] = [
'text' => ($language->flag() ? $language->flag() . ' ' : '') . $language->label($language),
'callback_data' => $prefix . $language->name
];
// When reaching 4 buttons in a row, move to the next row
if (count($keyboard[$row]) === 4) ++$row;
}
// When reaching 4 buttons in a row, move to the next row
if (count($keyboard[$row]) === 4) ++$row;
}
// Writing the button for helping lozalizing
$keyboard[$row === 0 && empty($keyboard[0]) ? 0 : ++$row] = [
[
'text' => '🗂 ' . $localization['select_language_button_add'],
'url' => 'https://git.svoboda.works/mirzaev/deeproots/src/branch/stable/mirzaev/deeproots/system/localizations'
]
];
// Writing the button for helping lozalizing
$keyboard[$row === 0 && empty($keyboard[0]) ? 0 : ++$row] = [
[
'text' => '🗂 ' . $localization['select_language_button_add'],
'url' => 'https://git.svoboda.works/mirzaev/deeproots/src/branch/stable/mirzaev/deeproots/system/localizations'
]
];
// Sending the message
$context->sendMessage(
$title ?? '🌏 *' . $localization['select_language_title'] . "*\n" . ($description ?? $localization['select_language_description']),
[
'reply_markup' => [
'inline_keyboard' => $keyboard,
'disable_notification' => true
],
]
);
} else {
// Not initialized localization
// Sending the message
$context->sendMessage(
$title ?? '🌏 *' . $localization['select_language_title'] . "*\n" . ($description ?? $localization['select_language_description']),
[
'reply_markup' => [
'inline_keyboard' => $keyboard,
'disable_notification' => true
],
]
);
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized language
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized language
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize language*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize language*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
}
// Ending the conversation process
$context->endConversation();
});
}
}
}

View File

@ -6,22 +6,22 @@ namespace mirzaev\deeproots\models\telegram\processes\question;
// Files of the project
use mirzaev\deeproots\models\core,
mirzaev\deeproots\models\question,
mirzaev\deeproots\models\question\localization,
mirzaev\deeproots\models\answer,
mirzaev\deeproots\models\enumerations\language,
mirzaev\deeproots\models\telegram\commands,
mirzaev\deeproots\models\telegram\processes\question\search as process_question_search;
mirzaev\deeproots\models\question,
mirzaev\deeproots\models\question\localization,
mirzaev\deeproots\models\answer,
mirzaev\deeproots\models\enumerations\language,
mirzaev\deeproots\models\telegram\commands,
mirzaev\deeproots\models\telegram\processes\question\search as process_question_search;
// Framework for Telegram
use Zanzara\Context as context,
Zanzara\Telegram\Type\Message as message;
Zanzara\Telegram\Type\Message as message;
// Baza database
use mirzaev\baza\record;
/**
* Question create (system)
* Question create (system)
*
* @package mirzaev\deeproots\models\telegram\processes\question
*
@ -30,95 +30,95 @@ use mirzaev\baza\record;
*/
final class create extends core
{
/**
* Process
*
* @var const string PROCESS Name of the process in the telegram user buffer
*/
public const string PROCESS = 'system_questions_create';
/**
* Process
*
* @var const string PROCESS Name of the process in the telegram user buffer
*/
public const string PROCESS = 'system_questions_create';
/**
* Start
*
* Starting the process
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function start(context $context): void
{
// Initializing the account
$account = $context->get('account');
/**
* Start
*
* Starting the process
*
* @param context $context Request data from Telegram
*
* @return void
*/
public static function start(context $context): void
{
// Initializing the account
$account = $context->get('account');
if ($account instanceof record) {
// Initialized the account
if ($account instanceof record) {
// Initialized the account
// Initializing language
$language = $context->get('language');
// Initializing language
$language = $context->get('language');
if ($language instanceof language) {
// Initialized language
if ($language instanceof language) {
// Initialized language
// Initializing localization
$localization = $context->get('localization');
// Initializing localization
$localization = $context->get('localization');
if ($localization) {
// Initialized localization
if ($localization) {
// Initialized localization
// Initializing the question model
$model_question = new question();
// Initializing the question model
$model_question = new question();
// Creating the question
$question = $model_question->create();
// Creating the question
$question = $model_question->create();
if ($question) {
// Created the question
if ($question) {
// Created the question
// Sending the message
$context->sendMessage('✅ *' . $localization[static::PROCESS . '_created'] . '*')
->then(function (message $message) use ($context, $question) {
// Sended the message
// Sending the message
$context->sendMessage('✅ *' . $localization[static::PROCESS . '_created'] . '*')
->then(function (message $message) use ($context, $question) {
// Sended the message
// Sending the question search menu
process_question_search::start($context, $question);
});
};
} else {
// Not initialized localization
// Sending the question search menu
process_question_search::start($context, $question);
});
};
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized language
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized language
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize language*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize language*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Sended the message
// Ending the conversation process
$context->endConversation();
});
}
}
// Ending the conversation process
$context->endConversation();
});
}
}
}

View File

@ -6,15 +6,15 @@ namespace mirzaev\deeproots\models\telegram;
// Files of the project
use mirzaev\deeproots\models\core,
mirzaev\deeproots\models\account,
mirzaev\deeproots\models\enumerations\language,
mirzaev\deeproots\models\telegram\middlewares;
mirzaev\deeproots\models\account,
mirzaev\deeproots\models\enumerations\language,
mirzaev\deeproots\models\telegram\middlewares;
// Framework for Telegram
use Zanzara\Zanzara,
Zanzara\Context as context,
Zanzara\Telegram\Type\Message as message,
Zanzara\Middleware\MiddlewareNode as node;
Zanzara\Context as context,
Zanzara\Telegram\Type\Message as message,
Zanzara\Middleware\MiddlewareNode as node;
// Baza database
use mirzaev\baza\record;
@ -32,125 +32,125 @@ use Error as error;
*/
final class settings extends core
{
/**
* Language
*
* Write language into the account record
*
* @param context $context Request data from Telegram
* @param language $language The language
*
* @return void
*/
public static function language(context $context, language $language): void
{
// Initializing the account
$account = $context->get('account');
/**
* Language
*
* Write language into the account record
*
* @param context $context Request data from Telegram
* @param language $language The language
*
* @return void
*/
public static function language(context $context, language $language): void
{
// Initializing the account
$account = $context->get('account');
if ($account instanceof record) {
// Initialized the account
if ($account instanceof record) {
// Initialized the account
// Initializing localization
$localization = $context->get('localization');
// Initializing localization
$localization = $context->get('localization');
if ($localization) {
// Initialized localization
// Initializing the account model
$model = new account();
if ($localization) {
// Initialized localization
// Updating the account in the database
$updated = $model->database->read(
filter: fn(record $record) => $record->identifier === $account->identifier,
update: function (record &$record) use ($language) {
// Writing new language value into the record
$record->language = $language->name;
},
amount: 1
)[0] ?? null;
// Initializing the account model
$model = new account();
if ($updated instanceof record) {
// Updated the account in the database
// Updating the account in the database
$updated = $model->database->read(
filter: fn(record $record) => $record->identifier === $account->identifier,
update: function (record &$record) use ($language) {
// Writing new language value into the record
$record->language = $language->name;
},
amount: 1
)[0] ?? null;
// Writing the updated account into the context variable
$context->set('account', $updated);
if ($updated instanceof record) {
// Updated the account in the database
middlewares::language($context, new node(function (context $context) use ($account, $updated) {
// Updated language
// Writing the updated account into the context variable
$context->set('account', $updated);
middlewares::localization($context, new node(function (context $context) use ($account, $updated) {
// Updated localization
middlewares::language($context, new node(function (context $context) use ($account, $updated) {
// Updated language
// Initializing localization
$localization = $context->get('localization');
middlewares::localization($context, new node(function (context $context) use ($account, $updated) {
// Updated localization
if ($localization) {
// Initialized localization
// Initializing localization
$localization = $context->get('localization');
try {
// Initializing the old language
$old = language::{$account->language};
if ($localization) {
// Initialized localization
// Initializing the new language
$new = language::{$updated->language};
try {
// Initializing the old language
$old = language::{$account->language};
// Sending the message
$context->sendMessage('✅ *' . $localization['settings_language_update_success'] . '* ' . ($old->flag() ? $old->flag() . ' ' : '') . $old->label($new) . ' → *' . ($new->flag() ? $new->flag() . ' ' : '') . $new->label($new) . '*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
} catch (error $error) {
// Failed to send the message about language update
// Initializing the new language
$new = language::{$updated->language};
// Sending the message
$context->sendMessage('❎ *' . $localization['settings_language_update_fail'])
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('✅ *' . $localization['settings_language_update_success'] . '* ' . ($old->flag() ? $old->flag() . ' ' : '') . $old->label($new) . ' → *' . ($new->flag() ? $new->flag() . ' ' : '') . $new->label($new) . '*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
} catch (error $error) {
// Failed to send the message about language update
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
}));
}));
} else {
// Not updated the account in the database
// Sending the message
$context->sendMessage('❎ *' . $localization['settings_language_update_fail'])
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('❎ *' . $localization['settings_language_update_fail'])
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
}));
}));
} else {
// Not updated the account in the database
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('❎ *' . $localization['settings_language_update_fail'])
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized localization
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
}
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize localization*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
} else {
// Not initialized the account
// Sending the message
$context->sendMessage('⚠️ *Failed to initialize the account*')
->then(function (message $message) use ($context) {
// Ending the conversation process
$context->endConversation();
});
}
}
}

View File

@ -14,44 +14,44 @@ namespace mirzaev\deeproots\models\telegram\traits;
*/
trait escape
{
/**
* Markdown
*
* Escaping for markdown
*
* @param string $text Text
* @param array $exception Symbols excluded from escaping
*
* @return string Escaped text
*/
public static function markdown(string $text, array $exceptions = []): string
{
// Initializing the registry of symbols for escaping
$from = array_diff(
[
'#',
'*',
'_',
'=',
'.',
'[',
']',
'(',
')',
'-',
'>',
'<',
'!',
'`'
],
$exceptions
);
/**
* Markdown
*
* Escaping for markdown
*
* @param string $text Text
* @param array $exception Symbols excluded from escaping
*
* @return string Escaped text
*/
public static function markdown(string $text, array $exceptions = []): string
{
// Initializing the registry of symbols for escaping
$from = array_diff(
[
'#',
'*',
'_',
'=',
'.',
'[',
']',
'(',
')',
'-',
'>',
'<',
'!',
'`'
],
$exceptions
);
// Initializing the registry of targets for escaping
$to = [];
foreach ($from as $symbol) $to[] = "\\$symbol";
// Initializing the registry of targets for escaping
$to = [];
foreach ($from as $symbol) $to[] = "\\$symbol";
// Escaping and exit (success)
return str_replace($from, $to, $text);
}
// Escaping and exit (success)
return str_replace($from, $to, $text);
}
}

View File

@ -78,7 +78,7 @@ $robot->onCommand('repository', [commands::class, 'repository']);
/* $robot->onCommand('projects', [commands::class, 'projects']); */
$robot->onCommand('author', [commands::class, 'author']);
$robot->onCommand('society', [commands::class, 'society']);
/* $robot->onCommand('system_settings', [commands::class, 'system_settings'])->middleware([middlewares::class, 'system_settings']); */
// $robot->onCommand('system_settings', [commands::class, 'system_settings'])->middleware([middlewares::class, 'system']);
// Initializing the robot settings language buttons handlers
foreach (language::cases() as $language) {

View File

@ -12,14 +12,14 @@ use mirzaev\minimal\controller;
// Templater of views
use Twig\Loader\FilesystemLoader,
Twig\Environment as twig,
Twig\Extra\Intl\IntlExtension as intl,
Twig\TwigFilter,
Twig\TwigFunction;
Twig\Environment as twig,
Twig\Extra\Intl\IntlExtension as intl,
Twig\TwigFilter,
Twig\TwigFunction;
// Built-in libraries
use ArrayAccess as array_access,
Error as error;
Error as error;
/**
* Templater
@ -38,174 +38,173 @@ use ArrayAccess as array_access,
*/
final class templater extends controller implements array_access
{
/**
* Twig
*
* @var twig $twig Instance of the twig templater
*/
readonly public twig $twig;
/**
* Twig
*
* @var twig $twig Instance of the twig templater
*/
readonly public twig $twig;
/**
* Variables
*
* @var array $variables Registry of view global variables
*/
public array $variables = [];
/**
* Variables
*
* @var array $variables Registry of view global variables
*/
public array $variables = [];
/**
* Constructor of an instance
*
* @return void
*/
public function __construct()
{
// Initializing the Twig instance
$this->twig = new twig(new FilesystemLoader(VIEWS));
/**
* Constructor of an instance
*
* @return void
*/
public function __construct()
{
// Initializing the Twig instance
$this->twig = new twig(new FilesystemLoader(VIEWS));
// Initializing global variables
$this->twig->addGlobal('theme', 'default');
$this->twig->addGlobal('server', $_SERVER);
$this->twig->addGlobal('cookies', $_COOKIE);
$this->twig->addGlobal('language', $language = $session?->buffer['language'] ?? language::en);
}
// Initializing global variables
$this->twig->addGlobal('theme', 'default');
$this->twig->addGlobal('server', $_SERVER);
$this->twig->addGlobal('cookies', $_COOKIE);
$this->twig->addGlobal('language', $language = $session?->buffer['language'] ?? language::en);
}
/**
* Render
*
* Render the 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-document
*/
public function render(string $file, array $variables = []): ?string
{
// Generation and exit (success)
return $this->twig->render('themes' . DIRECTORY_SEPARATOR . $this->twig->getGlobals()['theme'] . DIRECTORY_SEPARATOR . $file, $variables + $this->variables);
/**
* Render
*
* Render the 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-document
*/
public function render(string $file, array $variables = []): ?string
{
// Generation and exit (success)
return $this->twig->render('themes' . DIRECTORY_SEPARATOR . $this->twig->getGlobals()['theme'] . DIRECTORY_SEPARATOR . $file, $variables + $this->variables);
}
}
/**
* Write
*
* Write the variable into the registry of the view 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;
}
/**
* Write
*
* Write the variable into the registry of the view 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 the variable from the registry of the view 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];
}
/**
* Read
*
* Read the variable from the registry of the view 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 the variable from the registry of the view 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]);
}
/**
* Delete
*
* Delete the variable from the registry of the view 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 the registry of the view 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]);
}
/**
* Check of initialization
*
* Check of initialization in the registry of the view 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 the variable into the registry of the view 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;
}
/**
* Write
*
* Write the variable into the registry of the view 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 the variable from the registry of the view 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];
}
/**
* Read
*
* Read the variable from the registry of the view 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 the variable from the registry of the view 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]);
}
/**
* Delete
*
* Delete the variable from the registry of the view 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 the registry of the view 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]);
}
/**
* Check of initialization
*
* Check of initialization in the registry of the view 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]);
}
}

View File

@ -7,4 +7,4 @@
{% endblock %}
{% block js %}
{% endblock %}
{% endblock %}

View File

@ -2,30 +2,29 @@
<html lang="ru">
<head>
{% use '/themes/default/head.html' with title as head_title, meta as head_meta, css as head_css %}
<head>
{% use '/themes/default/head.html' with title as head_title, meta as head_meta, css as head_css %}
{% block title %}
{{ block('head_title') }}
{% endblock %}
{% block title %}
{{ block('head_title') }}
{% endblock %}
{% block meta %}
{{ block('head_meta') }}
{% endblock %}
{% block meta %}
{{ block('head_meta') }}
{% endblock %}
{{ block('head_css') }}
{% block css %}
{% endblock %}
</head>
{{ block('head_css') }}
{% block css %}
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
<body>
{% block body %}
{% endblock %}
{% include '/themes/default/js.html' %}
{% block js %}
{% endblock %}
</body>
{% include '/themes/default/js.html' %}
{% block js %}
{% endblock %}
</body>
</html>

View File

@ -14,9 +14,9 @@
{{ block('header') }}
{{ block('aside') }}
<main>
{% block main %}
{{ main|raw }}
{% endblock %}
{% block main %}
{{ main|raw }}
{% endblock %}
</main>
{{ block('footer') }}
{% endblock %}