diff --git a/.gitignore b/.gitignore index 39d1d27..ee2e43b 100755 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ !.gitignore -composer.phar -composer.lock vendor diff --git a/composer.json b/composer.json index c290a57..b74d176 100755 --- a/composer.json +++ b/composer.json @@ -1,10 +1,11 @@ { "name": "mirzaev/site-repression", - "description": "", + "description": "An article about how i was kidnapped by PMC Wagner operatives", "readme": "README.md", "keywords": [ "repression", - "site" + "site", + "article" ], "type": "site", "homepage": "https://git.mirzaev.sexy/mirzaev/site-repression", @@ -14,7 +15,7 @@ "name": "Arsen Mirzaev Tatyano-Muradovich", "email": "arsen@mirzaev.sexy", "homepage": "https://mirzaev.sexy", - "role": "Programmer" + "role": "Victim" } ], "support": { @@ -22,28 +23,16 @@ "issues": "https://git.mirzaev.sexy/mirzaev/site-repression/issues" }, "require": { - "php": "~8.3", - "ext-sodium": "~8.3", - "mirzaev/minimal": "^2.2.0", - "mirzaev/accounts": "~1.2.x-dev", - "mirzaev/arangodb": "^1.0.0", - "mirzaev/vk": "^4.0", - "triagens/arangodb": "~3.9.x-dev", + "php": "~8.4", + "ext-sodium": "~8.4", + "mirzaev/minimal": "^3.2.0", "twig/twig": "^3.4", "guzzlehttp/guzzle": "^7.5", "ipinfo/ipinfo": "^3.0" }, - "require-dev": { - "phpunit/phpunit": "~9.5" - }, "autoload": { "psr-4": { "mirzaev\\site\\repression\\": "mirzaev/site/repression/system" } - }, - "autoload-dev": { - "psr-4": { - "mirzaev\\site\\repression\\tests\\": "mirzaev/site/repression/tests" - } } } diff --git a/composer.lock b/composer.lock new file mode 100755 index 0000000..8bfdb58 --- /dev/null +++ b/composer.lock @@ -0,0 +1,1687 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "eecec1d990b67950775d4f0e55e99562", + "packages": [ + { + "name": "guzzlehttp/guzzle", + "version": "7.9.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2024-07-24T11:22:20+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2024-10-17T10:06:22+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2024-07-18T11:15:46+00:00" + }, + { + "name": "ipinfo/ipinfo", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/ipinfo/php.git", + "reference": "f38eed5dfcee07946af913a89d860079aa026a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ipinfo/php/zipball/f38eed5dfcee07946af913a89d860079aa026a13", + "reference": "f38eed5dfcee07946af913a89d860079aa026a13", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^6.3||^7.0", + "php": ">=8.0", + "symfony/cache": "^6.3", + "symfony/http-foundation": "^6.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0.0", + "squizlabs/php_codesniffer": "^3.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.3-dev" + } + }, + "autoload": { + "psr-4": { + "ipinfo\\ipinfo\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "James Timmins", + "email": "jameshtimmins@gmail.com", + "homepage": "https://github.com/jhtimmins", + "role": "Developer" + }, + { + "name": "Uman Shahzad", + "email": "uman@mslm.io", + "homepage": "https://github.com/UmanShahzad", + "role": "Developer" + }, + { + "name": "Umar Farooq", + "email": "umar@ipinfo.io", + "homepage": "https://github.com/rm-Umar", + "role": "Developer" + }, + { + "name": "IPinfo releases", + "email": "releases@ipinfo.io", + "homepage": "https://ipinfo.io", + "role": "Developer" + } + ], + "description": "The official PHP library for IPinfo, the most reliable, accurate, and in-depth source of IP address data available anywhere. We process terabytes of data to produce our custom IP geolocation, company, carrier and IP type data sets. Visit our developer docs at https://ipinfo.io/developers.", + "homepage": "https://github.com/ipinfo/php", + "keywords": [ + "ipinfo" + ], + "support": { + "issues": "https://github.com/ipinfo/php/issues", + "source": "https://github.com/ipinfo/php/tree/v3.1.3" + }, + "time": "2024-09-04T03:28:34+00:00" + }, + { + "name": "mirzaev/minimal", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://git.mirzaev.sexy/mirzaev/minimal", + "reference": "f936b7091696580b08b2d58cac8fbd35992b2a2e" + }, + "require": { + "php": "~8.4" + }, + "type": "framework", + "autoload": { + "psr-4": { + "mirzaev\\minimal\\": "mirzaev/minimal/system" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "WTFPL" + ], + "authors": [ + { + "name": "Arsen Mirzaev Tatyano-Muradovich", + "email": "arsen@mirzaev.sexy", + "homepage": "https://mirzaev.sexy", + "role": "Programmer" + } + ], + "description": "My vision of a good framework", + "homepage": "https://git.mirzaev.sexy/mirzaev/minimal", + "keywords": [ + "framework", + "lightweight", + "mvc" + ], + "support": { + "docs": "https://git.mirzaev.sexy/mirzaev/minimal/wiki", + "issues": "https://git.mirzaev.sexy/mirzaev/minimal/issues" + }, + "time": "2024-11-19T10:03:40+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "symfony/cache", + "version": "v6.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "36fb8aa88833708e9f29014b6f15fac051a8b613" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/36fb8aa88833708e9f29014b6f15fac051a8b613", + "reference": "36fb8aa88833708e9f29014b6f15fac051a8b613", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.3.6|^7.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v6.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-05T15:34:40+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4419ec69ccfc3f725a4de7c20e4e57626d10112", + "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.1.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-09T09:16:45+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "90173ef89c40e7c8c616653241048705f84130ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", + "reference": "90173ef89c40e7c8c616653241048705f84130ef", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "twig/twig", + "version": "v3.15.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02", + "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php81": "^1.29" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.15.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2024-11-17T15:59:19+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "~8.4", + "ext-sodium": "~8.4" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/examples/nginx/server.conf b/examples/nginx/server.conf new file mode 100755 index 0000000..2dad5f0 --- /dev/null +++ b/examples/nginx/server.conf @@ -0,0 +1,53 @@ +server { + listen 80; + listen [::]:80; + + server_name project; + + # 301 302 + return 301 https://$server_name$request_uri; +} + +server { + listen 443 ssl; + listen 443 quic; + listen [::]:443 ssl; + listen [::]:443 quic; + + server_name project; + + http2 on; + http3 on; + quic_gso on; + quic_retry on; + + add_header Alt-Svc 'h3=":$server_port"; ma=86400'; + add_header x-quic 'h3'; + + root /var/www/project/mirzaev/site/repression/system/public; + + index index.php; + + keepalive_timeout 60; + + include snippets/ssl-params.conf; + include snippets/ssl-mirzaev.conf; + include snippets/php8_4.conf; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc|woff2|woff)$ { + expires 1M; + access_log off; + add_header Cache-Control "max-age=2629746, public"; + } + + location ~* \.(?:css|js)$ { + expires 1y; + access_log off; + add_header Cache-Control "max-age=31556952, public"; + } +} + diff --git a/mirzaev/site/repression/system/controllers/core.php b/mirzaev/site/repression/system/controllers/core.php index 6e1dd9f..debe709 100755 --- a/mirzaev/site/repression/system/controllers/core.php +++ b/mirzaev/site/repression/system/controllers/core.php @@ -4,57 +4,78 @@ declare(strict_types=1); namespace mirzaev\site\repression\controllers; -// Файлы проекта -use mirzaev\site\repression\views\manager; -use mirzaev\site\repression\models\core as models; -use mirzaev\site\repression\models\account_model as account; -use mirzaev\site\repression\models\session_model as session; +// Filtes of the project +use mirzaev\site\repression\models\core as models, + mirzaev\site\repression\views\templater, + mirzaev\site\repression\models\enumerations\language; -// Библиотека для ArangoDB -use ArangoDBClient\Document as _document; - -// Фреймворк PHP -use mirzaev\minimal\controller; - -// Фреймворк ВКонтакте -use mirzaev\vk\core as vk; -use mirzaev\vk\robots\user as robot; +// Framework for PHP +use mirzaev\minimal\core as minimal, + mirzaev\minimal\http\response, + mirzaev\minimal\controller; /** - * Ядро контроллеров + * Core of controllers * * @package mirzaev\site\repression\controllers + * + * @param language $language Language + * @param response $response Response + * @param array $errors Registry of errors + * + * @method void __construct(minimal $core) Constructor + * + * @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License * @author Arsen Mirzaev Tatyano-Muradovich */ class core extends controller { - /** - * Переменные окружения - */ - protected robot $vk; + /** + * Language + * + * @var language $language Language + */ + protected language $language = language::en; + + /** + * Response + * + * @see https://wiki.php.net/rfc/property-hooks (find a table about backed and virtual hooks) + * + * @var response $response Response + */ + protected response $response { + // Read + get => $this->response ??= $this->request->response(); + } + + /** + * Errors + * + * @var array $errors Registry of errors + */ + protected array $errors = [ + 'session' => [] + ]; /** - * Переменные окружения + * Constructor + * + * @param minimal $core Initialize a controller? + * + * @return void */ - protected array $variables = []; - - /** - * Конструктор - * - * @return void - */ - public function __construct() { - parent::__construct(); + public function __construct(minimal $core) { + // For the extends system + parent::__construct(core: $core); // Инициализация ядра моделей (соединение с базой данных...) - new models(); + new models(); - // Инициализация журнала ошибок - $this->variables['errors'] = [ - 'vk' => [] - ]; + // Initializing of the language + $this->language = language::{$_COOKIE["language"] ?? 'en'} ?? language::en; - // Инициализация препроцессора представления - $this->view = new manager; + // Initializing of preprocessor of views + $this->view = new templater; } } diff --git a/mirzaev/site/repression/system/controllers/error_controller.php b/mirzaev/site/repression/system/controllers/error_controller.php deleted file mode 100755 index a434998..0000000 --- a/mirzaev/site/repression/system/controllers/error_controller.php +++ /dev/null @@ -1,44 +0,0 @@ - - */ -final class error_controller extends core -{ - /** - * Страница с ошибкой - * - * @param array $parameters - */ - public function index(array $parameters = []): ?string - { - // Запись текста ошибки в переменную окружения - $this->variables['text'] = $parameters['text'] ?? null; - - if (isset($parameters['code'])) { - // Получен код ошибки - - // Запись кода ошибки в переменную окружения - $this->variables['code'] = $parameters['code']; - - // Запись кода ответа - http_response_code($parameters['code']); - - // Генерация представления - return $this->view->render(DIRECTORY_SEPARATOR . 'errors' . DIRECTORY_SEPARATOR . 'index.html', $this->variables); - } - - // Генерация представления - return $this->view->render(DIRECTORY_SEPARATOR . 'errors' . DIRECTORY_SEPARATOR . ($parameters['code'] ?? 'index') . '.html', $this->variables); - } -} diff --git a/mirzaev/site/repression/system/controllers/index.php b/mirzaev/site/repression/system/controllers/index.php new file mode 100755 index 0000000..029ee52 --- /dev/null +++ b/mirzaev/site/repression/system/controllers/index.php @@ -0,0 +1,169 @@ + + */ +final class index extends core +{ + /** + * Main page + * + * @return null + */ + public function index(...$parameters): null + { + if (str_contains($this->request->headers['accept'], content::any->value)) { + // Request for any response + + // Initializing joker + $this->view->joker = [ + /* 'instasamka' => rand(1, 11), */ + 'southern' => rand(1, 3), + 'vk' => (bool) rand(0, 1), + 'whatsapp' => (bool) rand(0, 1), + 'iphone' => (bool) rand(0, 1), + ]; + + try { + // Initializing data for the creepy line that will appear on the screen when user click "I did not understand" in the site rules window + $data = (array) (new ipinfo(require '../settings/ipinfo.php'))->getDetails($_SERVER['cf-connecting-ip'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR']); + + // Initializing the creepy line that will appear on the screen when user click "I did not understand" in the site rules window + $this->view->creepy = sprintf( + "%s, %s, %s, %s, %s, %s, %s, seen in extremist chats, seen in LGBTQ+ chats, anti-state activities, problems with studies, was in contact with a criminal group (2017), wears strange pants, suspect in the case of January 15, 2024 No. 2360501", + $data['continent']['name'], + $data['country_name'], + $data['city'], + $data['latitude'], + $data['longitude'], + $data['org'], + $data['ip'] + ); + } catch (exception $e) { + // Initializing data for the creepy line that will appear on the screen when user click "I did not understand" in the site rules window + $data = []; + + // Initializing the creepy line that will appear on the screen when user click "I did not understand" in the site rules window + $this->view->creepy = 'check your DM'; + } + + // Validating values + $address = filter_var($this->request->headers['remote-addr'] ?? '', FILTER_VALIDATE_IP, FILTER_NULL_ON_FAILURE); + $connecting = filter_var($this->request->headers['cf-connecting-ip'] ?? '', FILTER_VALIDATE_IP, FILTER_NULL_ON_FAILURE); + $forwarded = filter_var($this->request->headers['x-forwarded-for'] ?? $this->request->headers['http-x-forwarded-for'] ?? '', FILTER_VALIDATE_IP, FILTER_NULL_ON_FAILURE); + + // Initializing last 10 unique views less than 5 minutes ago + $last = views::last(rows: 10, address: true, time: 300); + + if ( + ($forwarded && array_search($forwarded, array_column($last, 'forwarded'), true) !== false) + or ($address && array_search($address, array_column($last, 'address'), true) !== false) + or ($connecting && array_search($connecting, array_column($last, 'connecting'), true) !== false) + ) { + // Found a dublicate + } else { + // Not found a dublicate + + // Validating other values + $useragent = $this->request->headers['user-agent'] ?? $this->request->headers['http-user-agent'] ?? null; + $referer = $this->request->headers['referer'] ?? $this->request->headers['http-referer'] ?? null; + $continent = $data['continent']['code']; + $country = $data['country']; + $country_name = $data['country_name']; + $region = $data['region']; + $city = $data['city']; + $latitude = $data['latitude']; + $longitude = $data['longitude']; + $organisation = $data['org']; + $flag = $data['country_flag']['emoji']; + $currency = $data['country_currency']['code']; + $timezone = $data['timezone']; + + // Writing a view + views::write( + address: empty($address) ? null : "\"$address\"", + connecting: empty($connecting) ? null : "\"$connecting\"", + forwarded: empty($forwarded) ? null : "\"$forwarded\"", + useragent: !empty($useragent) && mb_strlen($useragent) < 512 ? "\"$useragent\"" : null, + referer: !empty($referer) && mb_strlen($referer) < 256 ? "\"$referer\"" : null, + continent: !empty($continent) && mb_strlen($continent) === 2 ? "\"$continent\"" : null, + country: !empty($country) && mb_strlen($country) < 64 ? "\"$country\"" : null, + country_name: !empty($country_name) && mb_strlen($country_name) < 32 ? "\"$country_name\"" : null, + region: !empty($region) && mb_strlen($region) < 32 ? "\"$region\"" : null, + city: !empty($city) && mb_strlen($city) < 32 ? "\"$city\"" : null, + latitute: filter_var((string) $latitude, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_NULL_ON_FAILURE), + longitude: filter_var((string) $longitude, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_NULL_ON_FAILURE), + organisation: !empty($organisation) && mb_strlen($organisation) < 128 ? "\"$organisation\"" : null, + flag: !empty($flag) && mb_strlen($flag) === 2 ? "\"$flag\"" : null, + currency: !empty($currency) && mb_strlen($currency) <= 3 ? "\"$currency\"" : null, + timezone: !empty($timezone) && mb_strlen($timezone) < 64 ? "\"$timezone\"" : null + ); + + // Deinitializing unnecessary variables + unset( + $last, + $useragent, + $referer, + $continent, + $country, + $country_name, + $region, + $city, + $latitude, + $longitude, + $organisation, + $flag, + $currency, + $timezone + ); + } + + // Deinitializing unnecessary variables + unset($address, $connecting, $forwarded); + + // Initializing the counter of views + $this->view->views = views::statistics(rows: 1000000) + ['last' => views::last(rows: 10, address: true)]; + + // Deinitializing unnecessary variables + unset($last); + + // Sending response + $this->response + ->start() + ->clean() + ->sse() + ->write($this->view->render(DIRECTORY_SEPARATOR . 'index.html')) + ->validate($this->request) + ?->body() + ->end(); + } + + // Exit (success/fail) + return null; + } +} diff --git a/mirzaev/site/repression/system/controllers/index_controller.php b/mirzaev/site/repression/system/controllers/index_controller.php deleted file mode 100755 index 335b40f..0000000 --- a/mirzaev/site/repression/system/controllers/index_controller.php +++ /dev/null @@ -1,71 +0,0 @@ - - */ -final class index_controller extends core -{ - /** - * Главная страница - * - * @param array $parameters Параметры запроса - */ - public function index(array $parameters = []): ?string - { - // Инициализация шутника - $this->variables['troller'] = [ - 'instasamka' => rand(1, 11), - 'southern' => rand(1, 3), - 'vk' => (bool) rand(0, 1), - 'whatsapp' => (bool) rand(0, 1), - 'iphone' => (bool) rand(0, 1), - ]; - - try { - // Запрос дополнительных данных - $data = (array) (new IPinfo(require '../settings/ipinfo.php'))->getDetails($_SERVER['cf-connecting-ip'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR']); - - // Генерация строки для запугивания пользователя - $this->variables['creepy'] = "{$data['continent']['name']}, {$data['country_name']}, {$data['city']}, {$data['latitude']}, {$data['longitude']}, {$data['org']}, {$data['ip']}, seen in extremist chats, seen in LGBTQ+ chats, anti-state activities, problems with studies, was in contact with a criminal group (2017), wears strange pants, suspect in the case of January 15, 2024 No. 2360501"; - } catch (exception $e) { - // Инициализация заглушки дополнительных данных - $data = []; - - // Инициализация заглушки строки для запугивания пользователя - $this->variables['creepy'] = 'check your DM'; - } - - // Запись просмотра - views::increase($data); - - // Инициализация счётчика просмотров - $this->variables['views'] = [ - 'day' => views::day(), - 'week' => views::week(), - 'month' => views::month(), - 'all' => views::all(), - 'last' => views::last(10) - ]; - - - // Генерация представления - return $this->view->render(DIRECTORY_SEPARATOR . 'index.html', $this->variables); - } -} diff --git a/mirzaev/site/repression/system/database/views.csv b/mirzaev/site/repression/system/database/views.csv new file mode 100755 index 0000000..20f3052 --- /dev/null +++ b/mirzaev/site/repression/system/database/views.csv @@ -0,0 +1,19 @@ +,,,"Mozilla/5.0 (compatible; Google-InspectionTool/1.0;)",,"NA","US","United States","Oklahoma","Oklahoma City",354676,-975164,"AS15169 Google LLC","🇺🇸","USD","America/Chicago",1732246927 +,"194.164.180.23","194.164.180.23","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Safari/537.36",,"EU","DE","Germany","Hesse","Frankfurt am Main",501038,86522,"AS215174 ProNow Tech CO. L.L.C","🇩🇪","EUR","Europe/Berlin",1732248193 +,"66.249.81.162","66.249.81.162","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Safari/537.36 Chrome-Lighthouse",,"EU","NL","Netherlands","Groningen","Delfzijl",533300,69181,"AS15169 Google LLC","🇳🇱","EUR","Europe/Amsterdam",1732248832 +,"66.249.81.167","66.249.81.167","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Safari/537.36 Chrome-Lighthouse",,"EU","NL","Netherlands","Groningen","Delfzijl",533300,69181,"AS15169 Google LLC","🇳🇱","EUR","Europe/Amsterdam",1732248839 +,"66.102.9.76","66.102.9.76","Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Mobile Safari/537.36 Chrome-Lighthouse",,"EU","FI","Finland","Kymenlaakso","Hamina",605697,271979,"AS15169 Google LLC","🇫🇮","EUR","Europe/Helsinki",1732248851 +,"66.102.9.75","66.102.9.75","Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Mobile Safari/537.36 Chrome-Lighthouse",,"EU","FI","Finland","Kymenlaakso","Hamina",605697,271979,"AS15169 Google LLC","🇫🇮","EUR","Europe/Helsinki",1732248859 +,"74.125.212.107","74.125.212.107","Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Mobile Safari/537.36 Chrome-Lighthouse",,"NA","US","United States","Iowa","Council Bluffs",412619,-958608,"AS15169 Google LLC","🇺🇸","USD","America/Chicago",1732248860 +,"74.125.212.108","74.125.212.108","Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Mobile Safari/537.36 Chrome-Lighthouse",,"NA","US","United States","Iowa","Council Bluffs",412619,-958608,"AS15169 Google LLC","🇺🇸","USD","America/Chicago",1732248869 +,"74.125.212.109","74.125.212.109","Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Mobile Safari/537.36 Chrome-Lighthouse",,"NA","US","United States","Iowa","Council Bluffs",412619,-958608,"AS15169 Google LLC","🇺🇸","USD","America/Chicago",1732248883 +,"66.249.81.168","66.249.81.168","Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Mobile Safari/537.36 Chrome-Lighthouse",,"EU","NL","Netherlands","Groningen","Delfzijl",533300,69181,"AS15169 Google LLC","🇳🇱","EUR","Europe/Amsterdam",1732248889 +,"74.125.212.106","74.125.212.106","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Safari/537.36 Chrome-Lighthouse",,"NA","US","United States","Iowa","Council Bluffs",412619,-958608,"AS15169 Google LLC","🇺🇸","USD","America/Chicago",1732248892 +,"66.249.81.166","66.249.81.166","Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/94.0.4590.2 Mobile Safari/537.36 Chrome-Lighthouse",,"EU","NL","Netherlands","Groningen","Delfzijl",533300,69181,"AS15169 Google LLC","🇳🇱","EUR","Europe/Amsterdam",1732248895 +,"195.234.62.12","195.234.62.12","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Safari/537.36",,"EU","DE","Germany","Hesse","Frankfurt am Main",500837,86440,"AS202422 G-Core Labs S.A.","🇩🇪","EUR","Europe/Berlin",1732249663 +,"194.164.180.23","194.164.180.23","Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",,"EU","DE","Germany","Hesse","Frankfurt am Main",501038,86522,"AS215174 ProNow Tech CO. L.L.C","🇩🇪","EUR","Europe/Berlin",1732249896 +,"194.164.180.15","194.164.180.15","Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",,"EU","DE","Germany","Hesse","Frankfurt am Main",501038,86522,"AS215174 ProNow Tech CO. L.L.C","🇩🇪","EUR","Europe/Berlin",1732250185 +,"194.164.180.15","194.164.180.15","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Safari/537.36",,"EU","DE","Germany","Hesse","Frankfurt am Main",501038,86522,"AS215174 ProNow Tech CO. L.L.C","🇩🇪","EUR","Europe/Berlin",1732250492 +,"185.253.23.85","185.253.23.85","Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",,"EU","RU","Russia","Moscow","Moscow",557522,376156,"AS21030 Docker LTD","🇷🇺","RUB","Europe/Moscow",1732250743 +,"185.253.23.85","185.253.23.85","Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",,"EU","RU","Russia","Moscow","Moscow",557522,376156,"AS21030 Docker LTD","🇷🇺","RUB","Europe/Moscow",1732251093 +,"109.248.213.45","109.248.213.45","Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",,"AS","KZ","Kazakhstan","Karaganda","Karagandy",498019,731021,"AS203087 PE Fedinyak Sergey Vyacheslavovich","🇰🇿","KZT","Asia/Almaty",1732251404 \ No newline at end of file diff --git a/mirzaev/site/repression/system/models/core.php b/mirzaev/site/repression/system/models/core.php index 981a79a..62e500e 100755 --- a/mirzaev/site/repression/system/models/core.php +++ b/mirzaev/site/repression/system/models/core.php @@ -4,151 +4,28 @@ declare(strict_types=1); namespace mirzaev\site\repression\models; -// Фреймворк PHP +// Framework for PHP use mirzaev\minimal\model; -// Фреймворк ArangoDB -use mirzaev\arangodb\connection as arangodb; - +// Built-in libraries use exception; /** - * Ядро моделей + * Core of models * * @package mirzaev\site\repression\models + * + * @method void __construct() Constructor + * + * @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License * @author Arsen Mirzaev Tatyano-Muradovich */ class core extends model { /** - * Соединение с базой данных ArangoDB + * Constructor + * + * @return void */ - protected static arangodb $arangodb; - - /** - * Путь до файла с настройками подключения к базе данных ArangoDB - */ - final public const ARANGODB = '../settings/arangodb.php'; - - /** - * Конструктор - * - * @param bool $initialize Инициализировать контроллер? - * @param ?arangodb $arangodb Инстанция соединения с базой данных ArangoDB - */ - public function __construct(bool $initialize = true, ?arangodb $arangodb = null) - { - if ($initialize) { - // Запрошена инициализация - - if (isset($arangodb)) { - // Получена инстанция соединения с базой данных - - // Запись и инициализация соединения с базой данных - $this->__set('arangodb', $arangodb); - } else { - // Не получена инстанция соединения с базой данных - - // Инициализация соединения с базой данных по умолчанию - $this->__get('arangodb'); - } - } - } - - /** - * Записать свойство - * - * @param string $name Название - * @param mixed $value Значение - */ - public function __set(string $name, mixed $value = null): void - { - match ($name) { - 'arangodb' => (function () use ($value) { - if ($this->__isset('arangodb')) { - // Свойство уже было инициализировано - - // Выброс исключения (неудача) - throw new exception('Запрещено реинициализировать соединение с базой данных ($this->arangodb)', 500); - } else { - // Свойство ещё не было инициализировано - - if ($value instanceof arangodb) { - // Передано подходящее значение - - // Запись свойства (успех) - self::$arangodb = $value; - } else { - // Передано неподходящее значение - - // Выброс исключения (неудача) - throw new exception('Соединение с базой данных ($this->arangodb) должен быть инстанцией mirzaev\arangodb\connection', 500); - } - } - })(), - default => parent::__set($name, $value) - }; - } - - /** - * Прочитать свойство - * - * @param string $name Название - * - * @return mixed Содержимое - */ - public function __get(string $name): mixed - { - return match ($name) { - 'arangodb' => (function () { - if (!$this->__isset('db')) { - // Свойство не инициализировано - - // Инициализация значения по умолчанию исходя из настроек - $this->__set('arangodb', new arangodb(require static::ARANGODB)); - } - - return self::$arangodb; - })(), - default => parent::__get($name) - }; - } - - /** - * Проверить свойство на инициализированность - * - * @param string $name Название - */ - public function __isset(string $name): bool - { - return match ($name) { - default => parent::__isset($name) - }; - } - - /** - * Удалить свойство - * - * @param string $name Название - */ - public function __unset(string $name): void - { - match ($name) { - default => parent::__isset($name) - }; - } - - - /** - * Статический вызов - * - * @param string $name Название - * @param array $arguments Параметры - */ - public static function __callStatic(string $name, array $arguments): mixed - { - match ($name) { - default => throw new exception("Не найдено свойство или функция: $name", 500) - }; - } + public function __construct() {} } diff --git a/mirzaev/site/repression/system/models/enumerations/language.php b/mirzaev/site/repression/system/models/enumerations/language.php new file mode 100755 index 0000000..8463272 --- /dev/null +++ b/mirzaev/site/repression/system/models/enumerations/language.php @@ -0,0 +1,48 @@ + + */ +enum language +{ + case en; + case ru; + + /** + * Label + * + * Initialize label of the language + * + * @param language|null $language Language into which to translate + * + * @return string Translated label of the language + * + * @todo + * 1. More languages + * 2. Cases??? + */ + public function label(?language $language = language::en): string + { + // Exit (success) + return match ($this) { + language::en => match ($language) { + language::en => 'English', + language::ru => 'Английский' + }, + language::ru => match ($language) { + language::en => 'Russian', + language::ru => 'Русский' + } + }; + } +} + diff --git a/mirzaev/site/repression/system/models/interfaces/csv.php b/mirzaev/site/repression/system/models/interfaces/csv.php new file mode 100755 index 0000000..2965b62 --- /dev/null +++ b/mirzaev/site/repression/system/models/interfaces/csv.php @@ -0,0 +1,91 @@ + + */ +interface csv +{ + /** + * File + * + * @var string FILE Path to the database file + */ + public const string FILE = DATABASE . DIRECTORY_SEPARATOR . 'database.csv'; + + /** + * Write + * + * Write to the database file + * + * @return void + */ + public static function write(): void; + + /** + * Read + * + * Read from the start of the database file + * + * @param int $rows Amount of rows for reading + * + * @return array|null Readed records + */ + public static function read(int $rows = 1): ?array; + + /** + * Last + * + * Read from the end of the database file + * + * @param int $rows Amount of rows for reading + * + * @return array|null Readed records + */ + public static function last(int $rows = 1): ?array; + + /** + * Serialize + * + * Preparing data for writing to the database + * + * @param array $parameters Values for serializing + * + * @return string|false Serialized data + */ + public static function serialize(array $parameters): string|false; + + /** + * Deserialize + * + * Preparing data from the database to processing + * + * @param string $row Record for deserializing + * + * @return array|false Serialized data + */ + public static function deserialize(string $row): array|false; +} diff --git a/mirzaev/site/repression/system/models/traits/csv.php b/mirzaev/site/repression/system/models/traits/csv.php new file mode 100755 index 0000000..e31fcae --- /dev/null +++ b/mirzaev/site/repression/system/models/traits/csv.php @@ -0,0 +1,135 @@ + + */ +trait csv +{ + /** + * Read + * + * Read from the start of the database file + * + * @param int $rows Amount of rows for reading + * @param array &$errors Buffer of errors + * + * @return array|null Readed records + */ + public static function read(int $rows = 0, &$errors = []): ?array + { + try { + // Initializing the buffer of readed records + $records = []; + + // Opening the file with views records + $file = fopen(static::FILE, 'c+'); + + while (--$rows >= 0 && ($row = fgets($file, 4096)) !== false) { + // Iterating over rows (records) + + // Deserealizing record + $deserialized = static::deserialize($row); + + if ($deserialized) { + // Deserialized record + + // Writing to the buffer of readed records + $records[] = $deserialized; + } + } + + // Closing file with views records + fclose($file); + + // Exit (success) + return $records; + } catch (exception $e) { + // Write to the buffer of errors + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + + // Writing to the log of errors + /* log::write(type::ERRORS, "[{$_SERVER['REMOTE_ADDR']}] " . (empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : "[{$_SERVER['HTTP_X_FORWARDED_FOR']}] ") . $e->getMessage()); */ + } + + // Exit (fail) + return null; + } + + /** + * Serialize + * + * Preparing data for writing to the database + * + * @param array $parameters Values for serializing + * @param bool $created Add date of creating at the end? + * + * @return string|false Serialized data + */ + public static function serialize(array $parameters, bool $created = true): string|false + { + // Declaring the buffer of serialized values + $serialized = ''; + + // Sanitizing values + foreach ($parameters as $value) $serialized .= ',' . preg_replace('/(?<=[^^])"(?=[^$])/', '""', preg_replace('/(?<=[^^]),(?=[^$])/', '\,', $value ?? '')); + + // Writing date of creating to the buffer of serialized values + if ($created) $serialized .= ',' . time(); + + // Trimming excess first comma in the buffer of serialized values + $serialized = mb_substr($serialized, 1, mb_strlen($serialized)); + + // Exit (success/fail) + return empty($serialized) ? false : $serialized; + } + + /** + * Deserialize + * + * Preparing data from the database to processing + * + * @param string $row Record for deserializing + * + * @return array|false Serialized data + */ + public static function deserialize(string $row): array|false + { + // Separating row by commas + preg_match_all('/(?:^|,)(?=[^"]|(")?)"?((?(1)[^"]*|[^,"]*))"?(?=,|$)/', $row, $matches); + + // Converting double quotes to single quotes + foreach ($matches[2] as &$match) + if (empty($match = preg_replace('/[\n\r]/', '', preg_replace('/""/', '"', preg_replace('/\\\,/', ',', trim((string) $match, '"')))))) + $match = null; + + // Exit (success/fail) + return empty($matches[2]) ? false : $matches[2]; + } +} diff --git a/mirzaev/site/repression/system/models/traits/file.php b/mirzaev/site/repression/system/models/traits/file.php new file mode 100755 index 0000000..f284c60 --- /dev/null +++ b/mirzaev/site/repression/system/models/traits/file.php @@ -0,0 +1,104 @@ + + */ +trait file +{ + /** + * Read + * + * @param resource $file Pointer to the file (fopen()) + * @param int $offset Offset of rows for start reading + * @param int $rows Amount of rows for reading + * @param int $position Initial cursor position on a row + * @param int $step Reading step + * @param array &$errors Buffer of errors + * + * @return generator|null|false + */ + private static function read($file, int $offset = 0, int $rows = 500, int $position = 0, int $step = 1, &$errors = []): generator|null|false + { + try { + while ($offset-- > 0) { + do { + // Iterate over symbols of the row + + // The end (or the beginning) of the file reached (success) + if (feof($file)) break; + + // Moving the cursor to next position on the row + fseek($file, $position += $step, SEEK_END); + + // Reading a character of the row + $character = fgetc($file); + + // Is the character a carriage return? (end or start of the row) + } while ($character !== PHP_EOL); + } + + while ($rows-- > 0) { + // Reading rows + + // Initializing of the buffer of row + $row = ''; + + // Initializing the character buffer to generate $row + $character = ''; + + do { + // Iterate over symbols of the row + + // The end (or the beginning) of the file reached (success) + if (feof($file)) break; + + // Building the row + $row = $step > 0 ? $row . $character : $character . $row; + + // Moving the cursor to next position on the row + fseek($file, $position += $step, SEEK_END); + + // Reading a character of the row + $character = fgetc($file); + + // Is the character a carriage return? (end or start of the row) + } while ($character !== PHP_EOL); + + // Exit (success) + yield empty($row) ? null : $row; + } + + // Exit (success) + return null; + } catch (exception $e) { + // Write to the buffer of errors + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + + // Write to the log of errors + /* log::write(type::ERRORS, "[{$_SERVER['REMOTE_ADDR']}] " . (empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : "[{$_SERVER['HTTP_X_FORWARDED_FOR']}] ") . $e->getMessage()); */ + } + + // Exit (fail) + return false; + } +} diff --git a/mirzaev/site/repression/system/models/views.php b/mirzaev/site/repression/system/models/views.php index b1994dd..5ca6236 100755 --- a/mirzaev/site/repression/system/models/views.php +++ b/mirzaev/site/repression/system/models/views.php @@ -4,225 +4,491 @@ declare(strict_types=1); namespace mirzaev\site\repression\models; -// Фреймворк ArangoDB -use mirzaev\arangodb\collection, - mirzaev\arangodb\document; +// Files of the project +use mirzaev\site\repression\models\interfaces\csv as csv_interface, + mirzaev\site\repression\models\traits\csv as csv_trait, + mirzaev\site\repression\models\traits\file; -// Библиотека для ArangoDB -use ArangoDBClient\Document as _document; - -// Встроенные библиотеки +// Built-in libraries use exception; /** - * Счётчик просмотров + * Counter of views * * @package mirzaev\site\repression\models + * + * @var string FILE Path to the datavase file + * + * @method + * + * @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License * @author Arsen Mirzaev Tatyano-Muradovich */ -class views extends core +class views extends core implements csv_interface { - /** - * Коллекция - */ - final public const COLLECTION = 'views'; + use csv_trait, file { + csv_trait::read insteadof file; + file::read as protected file; + } /** - * Увеличить счётчик посещений используя данные пользователя из запроса + * File * - * @param ?array $data Дополнительные данные пользователя - * - * @return bool Записано в базу данных? + * @var string FILE Path to the database file */ - public static function increase(?array $data = null, array &$errors = []): bool - { + final public const string FILE = DATABASE . DIRECTORY_SEPARATOR . 'views.csv'; + + /** + * Write + * + * Write request data to the views registry + * + * @param string|null $address + * @param string|null $connecting + * @param string|null $forwarded + * @param string|null $useragent + * @param string|null $referer + * @param string|null $continent + * @param string|null $country + * @param string|null $country_name + * @param string|null $region + * @param string|null $city + * @param string|float|null $latitute + * @param string|float|null $longitude + * @param string|null $organisation + * @param string|null $flag + * @param string|null $currency + * @param string|null $timezone + * @param array &$errors Buffer of errors + * + * @return void + */ + public static function write( + ?string $address = null, + ?string $connecting = null, + ?string $forwarded = null, + ?string $useragent = null, + ?string $referer = null, + ?string $continent = null, + ?string $country = null, + ?string $country_name = null, + ?string $region = null, + ?string $city = null, + string|float|null $latitute = null, + string|float|null $longitude = null, + ?string $organisation = null, + ?string $flag = null, + ?string $currency = null, + ?string $timezone = null, + &$errors = [] + ): void { try { - if (collection::init(static::$arangodb->session, self::COLLECTION)) - if ($_SERVER['HTTP_USER_AGENT'] === 'nginx-ssl early hints') return null; - else if (document::write(static::$arangodb->session, self::COLLECTION, [ - 'ip' => $_SERVER['REMOTE_ADDR'] ?? null, - 'cf-connecting-ip' => $_SERVER['cf-connecting-ip'] ?? null, - 'x-forwarded-for' => $_SERVER['HTTP_X_FORWARDED_FOR'] ?? null, - 'referer' => $_SERVER['HTTP_REFERER'] ?? null, - 'useragent' => $_SERVER['HTTP_USER_AGENT'] ?? null - ] + ($data ?? []))) return true; - else throw new exception('Не удалось создать аккаунт'); - else throw new exception('Не удалось инициализировать коллекцию'); + // Initializing registry of rows before + $before = []; + + if (file_exists(static::FILE) && filesize(static::FILE) > 0) { + // File exists and not empty + + // Opening the file with views records + $file = fopen(static::FILE, 'c+'); + + while (($row = fgets($file, 4096)) !== false) { + // Iterating over rows + + // Writing the registry of rows before + $before[] = $row; + } + + // Closing the file with views records + fclose($file); + } + + // Deinitializing unnecessary variables + unset($row); + + // Opening the file with views records + $file = fopen(static::FILE, 'c'); + + if (flock($file, LOCK_EX)) { + // The file was locked + + // Clearing the file + ftruncate($file, 0); + + // Serializing values + $serialized = static::serialize([ + $address, + $connecting, + $forwarded, + $useragent, + $referer, + $continent, + $country, + $country_name, + $region, + $city, + $latitute, + $longitude, + $organisation, + $flag, + $currency, + $timezone + ]); + + // Writing to the buffer for insertion to the views registry + if (count($before)) $serialized = trim(implode("", $before)) . "\n" . $serialized; + + // Writing a new record to the views registry + fwrite($file, $serialized); + + // Applying changes + fflush($file); + + // Unlocking the file + flock($file, LOCK_UN); + } + + // Deinitializing unnecessary variables + unset($serialized, $record, $before); + + // Closing the file with views records + fclose($file); + + // Writing to the log + /* log::write(type::FILE, "[CREATE] $domain $ip $port"); */ } catch (exception $e) { - // Запись в реестр ошибок + // Write to the buffer of errors $errors[] = [ 'text' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack' => $e->getTrace() ]; + + // Write to the log of errors + /* log::write(type::ERRORS, "[{$_SERVER['REMOTE_ADDR']}] " . (empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : "[{$_SERVER['HTTP_X_FORWARDED_FOR']}] ") . $e->getMessage()); */ + } + } + + /** + * Search + * + * Search for a record by IP-address + * + * @param string|null $address IP-address + * @param int $rows Amount of rows for reading + * @param array &$errors Buffer of errors + * + * @return array|null Found view record + */ + public static function search(?string $address, int $rows = 0, &$errors = []): ?array + { + try { + // Opening the file with views records + $file = fopen(static::FILE, 'c+'); + + while ($rows-- > 0 && ($row = fgets($file, 4096)) !== false) { + // Iterating over rows (records) + + // Deserealizing record + $deserialized = static::deserialize($row); + + if ($deserialized) { + // Deserialized record + + // Initializing values of the view data + $record = array_combine([ + 'address', + 'connecting', + 'forwarded', + 'useragent', + 'referer', + 'continent', + 'country', + 'country_name', + 'region', + 'city', + 'latitute', + 'longitude', + 'organisation', + 'flag', + 'currency', + 'timezone', + 'created', + ], $deserialized); + + if (match ($address) { + $record['address'], $record['connecting'], $record['forwarded'] => true, + default => false + }) { + // View found by IP-address + + // Closing the file with views records + fclose($file); + + // Exit (success) + return $record; + } + + // Deinitializing unnecessary variables + unset($row, $deserialized, $record); + } + } + + // Closing file with views records + fclose($file); + } catch (exception $e) { + // Write to the buffer of errors + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + + // Writing to the log of errors + /* log::write(type::ERRORS, "[{$_SERVER['REMOTE_ADDR']}] " . (empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : "[{$_SERVER['HTTP_X_FORWARDED_FOR']}] ") . $e->getMessage()); */ } + // Exit (fail) + return null; + } + + /** + * Statistics + * + * Generate statistics on views (day, week, month, total) + * + * @param bool $day Statistics on views per day + * @param bool $week Statistics on views per week + * @param bool $month Statistics on views per month + * @param bool $total Total statistics on views + * @param int $rows Amount of rows for reading + * @param array &$errors Buffer of errors + * + * @return array|false Counters of views (only those that were requested) + */ + public static function statistics( + bool $day = true, + bool $week = true, + bool $month = true, + bool $total = true, + int $rows = 1, + &$errors = [] + ): array|false { + try { + // Initializing counters + $counters = []; + switch (true) { + case $day: + $counters['day'] = 0; + $counters['week'] = 0; + $counters['month'] = 0; + $counters['total'] = 0; + } + + // Opening the file with views records + $file = fopen(static::FILE, 'c+'); + + while ($rows-- > 0 && ($row = fgets($file, 4096)) !== false) { + // Iterating over rows (records) + + // Deserealizing record + $deserialized = static::deserialize($row); + + if ($deserialized) { + // Deserialized record + + // Initializing value of the view data + $created = $deserialized[16]; + + // Increasing counters + switch (true) { + case $day && $created >= time() - 86400: + ++$counters['day']; + case $week && $created >= time() - 604800: + ++$counters['week']; + case $month && $created >= time() - 2592000: + ++$counters['month']; + case $total: + ++$counters['total']; + } + } + } + + // Deinitializing unnecessary variables + unset($row, $deserialized, $created); + + // Closing file with views records + fclose($file); + + // Exit (success) + return $counters; + } catch (exception $e) { + // Write to the buffer of errors + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + + // Writing to the log of errors + /* log::write(type::ERRORS, "[{$_SERVER['REMOTE_ADDR']}] " . (empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : "[{$_SERVER['HTTP_X_FORWARDED_FOR']}] ") . $e->getMessage()); */ + } + + // Exit (fail) return false; } - public static function day(array &$errors = []): ?int + /** + * Last + * + * Recursively reads unique records by IP-address + * + * @param int $rows Amount of rows for reading (pool) + * @param bool $address Filter by uniqueness by IP-address? (forwarded ?? address ?? connecting) + * @oaram int|false $time Filter by elapsed time + * @param array &$errors Buffer of errors + * + * @return array|null Readed records + */ + public static function last(int $rows = 1, bool $address = false, int|false $time = false, &$errors = []): ?array { try { - if (collection::init(static::$arangodb->session, self::COLLECTION)) - return collection::search(static::$arangodb->session, sprintf( - <<= %d - RETURN d['x-forwarded-for'] - ) - AQL, - views::COLLECTION, - time() - 86400 - )); - else throw new exception('Не удалось инициализировать коллекцию'); + // Initializing the buffer of readed records + $records = []; + + // Initializing the file with views records + if (!file_exists(static::FILE)) touch(static::FILE); + + // Opening the file with views records + $file = fopen(static::FILE, 'r'); + + // Initializing offset of rows for readint + $offset = 0; + + // Continuing reading + offset: + + foreach (static::file(file: $file, offset: $offset, rows: $rows, position: 0, step: -1) as $row) { + // Iterating over rows backwards (rows from the end) + + if ($row === null) { + // The end of the file reached + + // Deinitializing unnecessary variables + unset($row, $deserialized, $offset); + + // Closing file with views records + fclose($file); + + // Exit (success) + return $records; + } + + // Deserealizing record + $deserialized = static::deserialize($row); + + if ($deserialized) { + // Deserialized record + + $record = array_combine([ + 'address', + 'connecting', + 'forwarded', + 'useragent', + 'referer', + 'continent', + 'country', + 'country_name', + 'region', + 'city', + 'latitute', + 'longitude', + 'organisation', + 'flag', + 'currency', + 'timezone', + 'created', + ], $deserialized); + + if ($time) { + // Requested filtering by elapsed time + + if (time() - $record['created'] > $time) { + // Not enough time has passed yet + + // Skipping iteration + continue; + } + } + + if ($address) { + // Requested filtering by unique IP-address + + // Declaring buffer of dublicate index + $dublicate = null; + + if ( + ($record['forwarded'] && ($dublicate = array_search($record['forwarded'], array_column($records, 'forwarded'), true)) !== false) + or ($record['address'] && ($dublicate = array_search($record['address'], array_column($records, 'address'), true)) !== false) + or ($record['connecting'] && ($dublicate = array_search($record['connecting'], array_column($records, 'connecting'), true)) !== false) + ) { + // Found a dublicate + + if ($record['created'] > $records[$dublicate]['created']) { + // The record is newer than the dublicate (probably useless because the file is read from the end) + + // Replacing the dublicate with the record + $records[$dublicate] = $record; + } + + // Skipping iteration + continue; + } + } + + // Writing to the buffer of readed records + $records[] = $record; + } + } + + // Deinitializing unnecessary variables + unset($row, $deserialized); + + if (count($records) < $rows) { + // Fewer unique rows were read than requested + + // Writing offset for reading + $offset += $rows; + + // Continuing reading (enter to the recursion) + goto offset; + } + + // Deinitializing unnecessary variables + unset($offset); + + // Closing file with views records + fclose($file); + + // Exit (success) + return $records; } catch (exception $e) { - // Запись в реестр ошибок - $errors[] = [ - 'text' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - - return null; - } - - public static function week(array &$errors = []): ?int - { - try { - if (collection::init(static::$arangodb->session, self::COLLECTION)) - return collection::search(static::$arangodb->session, sprintf( - <<= %d - RETURN d['x-forwarded-for'] - ) - AQL, - views::COLLECTION, - time() - 604800 - )); - else throw new exception('Не удалось инициализировать коллекцию'); - } catch (exception $e) { - // Запись в реестр ошибок - $errors[] = [ - 'text' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - - return null; - } - - public static function month(array &$errors = []): ?int - { - try { - if (collection::init(static::$arangodb->session, self::COLLECTION)) - return collection::search(static::$arangodb->session, sprintf( - <<= %d - RETURN d['x-forwarded-for'] - ) - AQL, - views::COLLECTION, - time() - 2592000 - )); - else throw new exception('Не удалось инициализировать коллекцию'); - } catch (exception $e) { - // Запись в реестр ошибок - $errors[] = [ - 'text' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - - return null; - } - - public static function all(array &$errors = []): ?int - { - try { - if (collection::init(static::$arangodb->session, self::COLLECTION)) - return collection::search(static::$arangodb->session, sprintf( - << $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - - return null; - } - - public static function last(int $amount = 10, array &$errors = []): ?array - { - try { - if (collection::init(static::$arangodb->session, self::COLLECTION)) { - // Инициализирована коллекция - - // Поиск последних просмотров - $response = @collection::search(static::$arangodb->session, sprintf( - <<getAll()[0]; - - return $buffer; - } else throw new exception('Не удалось инициализировать коллекцию'); - } catch (exception $e) { - // Запись в реестр ошибок + // Write to the buffer of errors $errors[] = [ 'text' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack' => $e->getTrace() ]; + + // Writing to the log of errors + /* log::write(type::ERRORS, "[{$_SERVER['REMOTE_ADDR']}] " . (empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : "[{$_SERVER['HTTP_X_FORWARDED_FOR']}] ") . $e->getMessage()); */ } + // Exit (fail) return null; } } diff --git a/mirzaev/site/repression/system/public/index.php b/mirzaev/site/repression/system/public/index.php index f051b8a..6ec98d7 100755 --- a/mirzaev/site/repression/system/public/index.php +++ b/mirzaev/site/repression/system/public/index.php @@ -4,28 +4,31 @@ declare(strict_types=1); namespace mirzaev\site\repression; -use mirzaev\minimal\core; -use mirzaev\minimal\router; +// Framework for PHP +use mirzaev\minimal\core, + mirzaev\minimal\route; +// Enabling debugging ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); +// Initializing system parameters of the project +define('INDEX', __DIR__); +define('ROOT', INDEX . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR); define('VIEWS', realpath('..' . DIRECTORY_SEPARATOR . 'views')); define('STORAGE', realpath('..' . DIRECTORY_SEPARATOR . 'storage')); -define('INDEX', __DIR__); +define('DATABASE', realpath('..' . DIRECTORY_SEPARATOR . 'database')); -// Автозагрузка -require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; +// Initializing dependencies +require ROOT . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; -// Инициализация маршрутизатора -$router = new router; +// Initializing core +$core = new core(namespace: __NAMESPACE__); -// Запись маршрутов -$router->write('/', 'index', 'index'); +// Initializing routes +$core->router + ->write('/', new route('index', 'index'), 'GET'); -// Инициализация ядра -$core = new core(namespace: __NAMESPACE__, router: $router); - -// Обработка запроса -echo $core->start(); +// Handling request +$core->start(); diff --git a/mirzaev/site/repression/system/public/js/account.js b/mirzaev/site/repression/system/public/js/account.js old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/public/js/bloodchaos.js b/mirzaev/site/repression/system/public/js/bloodchaos.js old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/public/js/hollow.js b/mirzaev/site/repression/system/public/js/hollow.js old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/public/js/perlin.js b/mirzaev/site/repression/system/public/js/perlin.js old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/public/js/womb3-simplex.js b/mirzaev/site/repression/system/public/js/womb3-simplex.js old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/public/robots.txt b/mirzaev/site/repression/system/public/robots.txt old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/public/sitemap.xml b/mirzaev/site/repression/system/public/sitemap.xml old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/public/css/account.css b/mirzaev/site/repression/system/public/themes/default/css/account.css old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/css/account.css rename to mirzaev/site/repression/system/public/themes/default/css/account.css diff --git a/mirzaev/site/repression/system/public/css/books.css b/mirzaev/site/repression/system/public/themes/default/css/books.css similarity index 100% rename from mirzaev/site/repression/system/public/css/books.css rename to mirzaev/site/repression/system/public/themes/default/css/books.css diff --git a/mirzaev/site/repression/system/public/css/hotline.css b/mirzaev/site/repression/system/public/themes/default/css/hotline.css similarity index 100% rename from mirzaev/site/repression/system/public/css/hotline.css rename to mirzaev/site/repression/system/public/themes/default/css/hotline.css diff --git a/mirzaev/site/repression/system/public/css/icon_authentication.css b/mirzaev/site/repression/system/public/themes/default/css/icon_authentication.css old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/css/icon_authentication.css rename to mirzaev/site/repression/system/public/themes/default/css/icon_authentication.css diff --git a/mirzaev/site/repression/system/public/css/icon_eye.css b/mirzaev/site/repression/system/public/themes/default/css/icon_eye.css old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/css/icon_eye.css rename to mirzaev/site/repression/system/public/themes/default/css/icon_eye.css diff --git a/mirzaev/site/repression/system/public/css/logo.css b/mirzaev/site/repression/system/public/themes/default/css/logo.css similarity index 100% rename from mirzaev/site/repression/system/public/css/logo.css rename to mirzaev/site/repression/system/public/themes/default/css/logo.css diff --git a/mirzaev/site/repression/system/public/css/main.css b/mirzaev/site/repression/system/public/themes/default/css/main.css similarity index 77% rename from mirzaev/site/repression/system/public/css/main.css rename to mirzaev/site/repression/system/public/themes/default/css/main.css index 2ac5021..1bf6088 100755 --- a/mirzaev/site/repression/system/public/css/main.css +++ b/mirzaev/site/repression/system/public/themes/default/css/main.css @@ -31,6 +31,7 @@ border: none; color: var(--text); font-family: commissioner, Roboto, sans-serif; + -webkit-tap-highlight-color: transparent; transition: 0.1s ease-out; } @@ -87,46 +88,26 @@ body { margin: 0; position: relative; width: 100vw; - height: 100%; + /* height: 100%; */ padding-top: var(--padding-vertical); padding-bottom: var(--padding-vertical); - overflow-x: clip; + overflow-x: hidden; background-color: black; } -body> :is(article, section)[data-layer] { - position: fixed; - width: 100%; +.column { display: flex; flex-direction: column; - transition: 0.2s ease-out; -} - -body>article[data-layer] { - position: absolute; -} - -body>section[data-layer]>canvas.shell { - position: fixed; - width: 100%; -} - -body>section[data-layer]>canvas.shell { - box-shadow: -1px 1px 47px 20px rgba(0, 0, 0, 1); - -webkit-box-shadow: -1px 1px 47px 20px rgba(0, 0, 0, 1); - -moz-box-shadow: -1px 1px 47px 20px rgba(0, 0, 0, 1); - /* outline: 10vw solid; */ - filter: url("#blob"); } body>aside { z-index: 500; } -body>article { +body>main { position: relative !important; margin: 0 auto !important; - width: 800px !important; + width: min(800px, 90vw); border-radius: 10px; background-color: var(--background-dark); } @@ -135,7 +116,7 @@ body> :last-child { margin-bottom: 20vh !important; } -body>article>div#cover { +body>main>div#cover { z-index: 6000; height: 300px; display: flex; @@ -143,17 +124,17 @@ body>article>div#cover { border-radius: 10px 10px 0 0; } -body>article>div#cover>img { +body>main>div#cover>img { width: 100%; /* object-fit: cover; object-position: top; */ } -body>article>header { +body>main>header { z-index: 5000; top: 0; position: sticky; - height: 80px; + min-height: 80px; overflow: hidden; clip-path: border-box; border-radius: 0px 0px 10px 10px; @@ -161,31 +142,35 @@ body>article>header { } -body>article>header>section { +body>main>header>section { position: relative; - height: 100%; + min-height: 80px; display: flex; + justify-content: center; + align-items: center; filter: blur(2.2px) contrast(30); background: #750000; } -body>article>header>section>h1 { - font-size: 2.5rem; - margin: auto; +body>main>header>section>h1 { + margin: 0.4rem 2rem; + font-size: min(2.5rem, 8vw); text-align: center; + font-weight: normal; color: red; } -body>article>header>section>canvas#title { +body>main>header>section>canvas#title { z-index: -5000; position: absolute; width: 100%; height: 100%; } -body>article>main, +body>main>article, body>section.block { z-index: 1000; + position: relative; background-color: var(--background-light); } @@ -193,38 +178,38 @@ body>section.block { box-sizing: border-box; border-radius: 10px; margin: 20px auto 0; - width: 800px; + width: min(800px, 90vw); padding: 30px 50px; display: block; } -body>article>main { +body>main>article { padding-top: 10px; border-radius: 0 0 10px 10px; } -body>article>main>section { +body>main>article>section { position: relative; margin: 30px 50px; } -body>article>main>section>p.digression { +body>main>article>section>p.digression { margin-left: 30px; color: var(--grey-dark); } -body>article>main>section>p.digression * { +body>main>article>section>p.digression * { color: var(--grey-dark); } -body>article>main>section#assault>img#wet_bebra { +body>main>article>section#assault>img#wet_bebra { width: 200px; float: right; shape-outside: polygon(68px 202px, 200px 197px, 158px 173px, 159px 50px, 192px 25px, 165px 0px, 56px 3px, 41px 27px, 56px 42px, 112px 47px, 103px 68px, 97px 116px, 58px 120px, 40px 169px, 6px 186px); clip-path: polygon(208px 199px, 162px 170px, 162px 54px, 194px 21px, 155px -4px, 48px 7px, 54px 43px, 103px 51px, 91px 114px, 56px 116px, 45px 165px, -1px 186px, 51px 201px, 153px 202px); } -body>article>main>section#assault>img#scary { +body>main>article>section#assault>img#scary { margin-left: -20px; padding-right: 10px; width: 200px; @@ -233,7 +218,7 @@ body>article>main>section#assault>img#scary { clip-path: polygon(208px 91px, 181px 75px, 203px 22px, 140px 1px, 58px 1px, -8px 112px, 55px 173px, 70px 201px, 136px 201px, 139px 176px, 175px 152px); } -body>article>main>section#car>img#crying_bebra { +body>main>article>section#car>img#crying_bebra { margin-left: -20px; width: 200px; float: left; @@ -241,7 +226,7 @@ body>article>main>section#car>img#crying_bebra { clip-path: polygon(22px 169px, 44px 200px, 122px 207px, 165px 192px, 173px 151px, 187px 141px, 188px 108px, 169px 103px, 178px 52px, 150px 12px, 86px -7px, 41px 33px, 19px 67px); } -body>article>main>section#car>img#chill_bebra { +body>main>article>section#car>img#chill_bebra { margin-right: -20px; width: 200px; float: right; @@ -249,7 +234,7 @@ body>article>main>section#car>img#chill_bebra { clip-path: polygon(11px 126px, -6px 194px, 71px 199px, 179px 181px, 204px 90px, 175px 32px, 118px -5px, 60px 27px, 80px 102px, 52px 124px, 54px 60px, 16px 58px, -1px 83px); } -body>article>main>section#car>img#just { +body>main>article>section#car>img#just { margin-left: -20px; padding-right: 10px; width: 200px; @@ -258,7 +243,7 @@ body>article>main>section#car>img#just { clip-path: polygon(-6px 171px, 76px 170px, 106px 201px, 165px 198px, 193px 159px, 206px 81px, 180px 26px, 129px -5px, 63px 15px, 32px 51px, 29px 124px); } -body>article>main>section#car>img#evil_bebra { +body>main>article>section#car>img#evil_bebra { margin-top: 30px; margin-right: -25px; width: 200px; @@ -267,7 +252,7 @@ body>article>main>section#car>img#evil_bebra { clip-path: polygon(193px 197px, 161px 10px, 92px -8px, 19px 46px, 23px 138px, 7px 168px, 21px 196px); } -body>article>main>section#deal>img#marta_with_broken_heart { +body>main>article>section#deal>img#marta_with_broken_heart { margin-top: 30px; margin-right: -15px; width: 200px; @@ -276,7 +261,7 @@ body>article>main>section#deal>img#marta_with_broken_heart { clip-path: polygon(199px 146px, 204px 26px, 125px -1px, 65px -7px, -7px 96px, 19px 169px, 62px 195px, 150px 199px); } -body>article>main>section#deal>img#two_bebras { +body>main>article>section#deal>img#two_bebras { margin-top: 50px; margin-right: -10px; width: 200px; @@ -285,7 +270,7 @@ body>article>main>section#deal>img#two_bebras { clip-path: polygon(215px 104px, 132px -2px, 108px 22px, 33px 40px, 20px 114px, -6px 127px, 20px 201px, 177px 179px); } -body>article>main>section#deal>img#fuck { +body>main>article>section#deal>img#fuck { margin-left: -20px; width: 200px; float: left; @@ -293,7 +278,7 @@ body>article>main>section#deal>img#fuck { clip-path: polygon(25px 194px, 100px 207px, 180px 190px, 171px 142px, 188px 90px, 179px 46px, 152px 5px, 75px -7px, 6px 56px, 28px 144px); } -body>article>main>section#friendship>img#no_comments { +body>main>article>section#friendship>img#no_comments { margin-top: 50px; margin-right: 0px; width: 200px; @@ -302,7 +287,7 @@ body>article>main>section#friendship>img#no_comments { clip-path: polygon(208px 115px, 200px 41px, 145px -7px, 69px 13px, 46px 44px, -10px 58px, 39px 78px, 48px 141px, 46px 187px, 121px 201px, 192px 191px); } -body>article>main>section#friendship>img#nu_tipa { +body>main>article>section#friendship>img#nu_tipa { margin-top: 100px; margin-right: 0px; width: 200px; @@ -311,22 +296,22 @@ body>article>main>section#friendship>img#nu_tipa { clip-path: polygon(179px 142px, 176px 117px, 195px 100px, 163px 87px, 153px 26px, 91px -12px, 11px 39px, 1px 197px, 181px 203px, 172px 157px); } -body>article>main>section>img { +body>main>article>section>img { width: 100%; height: 200px; object-fit: cover; border-radius: 3px; } -body>article>main>section#conclusion { +body>main>article>section#conclusion { margin-bottom: 50px; } -body>article>main>section#conclusion>h2 { +body>main>article>section#conclusion>h2 { margin-bottom: 20px; } -body>article>main>section#conclusion>a>img { +body>main>article>section#conclusion>a>img { margin-top: 30px; margin-right: -4%; height: 300px; @@ -335,71 +320,87 @@ body>article>main>section#conclusion>a>img { clip-path: polygon(136px 80px, 122px 10px, 92px 30px, 66px 36px, 36px 32px, 36px 91px, 55px 141px, 34px 145px, 32px 181px, 41px 189px, 81px 208px, 28px 264px, 47px 287px, 81px 295px, 155px 266px, 162px 232px, 180px 212px, 179px 180px, 196px 174px, 191px 152px, 146px 157px, 145px 135px, 161px 110px, 165px 92px); } -body>article>main>section>h2:before { +body>article>section>h2:before { margin-right: 10px; } -body>article>main>section#assault>h2:before { +body>main>article>section#assault>h2:before { content: '🤕'; } -body>article>main>section#reasons>h2:before { +body>main>article>section#reasons>h2:before { content: '😼'; } -body>article>main>section#car>h2:before { +body>main>article>section#car>h2:before { content: '😵'; } -body>article>main>section#deal>h2:before { +body>main>article>section#deal>h2:before { content: '🤝'; } -body>article>main>section#friendship>h2:before { +body>main>article>section#friendship>h2:before { content: '🥳'; } -body>article>main>section#court>h2:before { +body>main>article>section#court>h2:before { content: '😥'; } -body>article>main>section#return>h2:before { +body>main>article>section#return>h2:before { content: '🥱'; } -body>article>main>section#conclusion>h2:before { +body>main>article>section#conclusion>h2:before { content: '🤟'; } -body>article>main>section>p+p, -body>article>main>section>p>small+small { +body>main>article>section>p+p, +body>main>article>section>p>small+small { margin-top: 10px; } -body>article>main>section>h2 { +body>main>article>section>h2 { font-size: 1.8rem; } -body>article>main>section>h2+h3 { +body>main>article>section>h2+h3 { margin-top: 3px; } -body>article>main>section> :is(h2, h3) { +body>main>article>section> :is(h2, h3) { margin-bottom: 0px; line-height: 35px; } -body>article>main>section> :is(h2, h3)+p { +body>main>article>section> :is(h2, h3)+p { margin-top: 15px; } -body>article>main>section>p:last-of-type { +body>main>article>section>p:last-of-type { margin-bottom: 20px; } -body>article>footer { +body>canvas#background { + z-index: -1000; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + box-shadow: -1px 1px 47px 20px rgba(0, 0, 0, 1); + -webkit-box-shadow: -1px 1px 47px 20px rgba(0, 0, 0, 1); + -moz-box-shadow: -1px 1px 47px 20px rgba(0, 0, 0, 1); + /* outline: 10vw solid; */ + filter: url("#blob"); + transition: 0s; +} + +body>main>footer { z-index: 3000; } @@ -410,11 +411,12 @@ body>section#contacts>section { body>section#contacts>section#author { margin-top: 20px; margin-bottom: 35px; + align-items: center; + gap: 2rem; } body>section#contacts>section#author>section#avatar { margin-left: 10px; - margin-right: 25px; position: relative; max-width: 100px; max-height: 100px; @@ -579,6 +581,7 @@ body>section#license>p>span:last-of-type { } body>section#license>img { + z-index: 1000; position: absolute; right: -65px; bottom: -50px; @@ -593,8 +596,10 @@ body>svg#navalny2 { } body>section#navalny { - width: 800px; - height: 190px; + --height: min(200px, 30vw); + z-index: 500; + width: min(800px, 90vw); + height: calc(var(--height)); padding: unset; cursor: pointer; -webkit-transform: translateZ(0); @@ -610,6 +615,7 @@ body>section#navalny { -webkit-backdrop-filter: saturate(100%) hue-rotate(230deg) blur(22px); backdrop-filter: saturate(100%) hue-rotate(230deg) blur(22px); background-color: rgba(0, 3, 210, 0.05); + clip-path: polygon(0px 0px, 0 var(--height), 100% var(--height), 100% 0px); } body>section#navalny:hover { @@ -621,77 +627,42 @@ body>section#navalny:hover { @media (max-width: 840px) { body { - padding-top: unset; - padding-bottom: 20px; + padding-top: 5vw; + padding-bottom: 5vw; } - body>article>header { + body>main>header { position: relative; } - body>article { - width: 100% !important; + body>main>header>section>h1 { + padding: 0 15%; + } + + body>main { margin: unset; - border-radius: unset; } - body>article>div#cover, - body>article>main { - border-radius: unset; - } - - body>article>main { + body>main>article { box-shadow: 1px 6px 11px 3px rgba(0, 0, 0, 0.6); -webkit-box-shadow: 1px 6px 11px 3px rgba(0, 0, 0, 0.6); -moz-box-shadow: 1px 6px 11px 3px rgba(0, 0, 0, 0.6); } - body>section.block { + body>main>section.block { width: calc(100% - 40px) !important; margin-left: 20px !important; margin-right: 20px !important; } - mask#NAVALNY>text { - font-size: calc(5rem - (5rem - 17vw)) !important; - transform: translate(0, 120px) !important; - } -} - -@media (max-width: 710px) { - body>article>header { - height: calc(140px + (110px - 20vw)); - } - - body>article>header>section>h1 { - padding: 0 10vw; - } -} - -@media (max-width: 690px) { - body>section#contacts>section { + body>section#contacts>section#author { flex-direction: column; } - body>section#contacts>section#author>section#avatar { - margin-left: auto; - margin-right: auto; - margin-bottom: 25px; - position: relative; - max-width: 120px; - max-height: 120px; - width: 120px; - height: 120px; - flex-shrink: 0; - clip-path: circle(60px); - } - body>section#contacts>section#author>section#name { text-align: center; } -} -@media (max-width: 600px) { body>section.block#views>h3 { display: block; text-align: center; @@ -710,10 +681,9 @@ body>section#navalny:hover { body>section.block#views>section:last-of-type { width: 100%; } -} -@media (max-width: 430px) { - body>article>header>section>h1 { - padding: 0 5vw; + mask#NAVALNY>text { + font-size: 18vw !important; + transform: translate(0, 60px) !important; } } diff --git a/mirzaev/site/repression/system/public/css/popup.css b/mirzaev/site/repression/system/public/themes/default/css/popup.css similarity index 92% rename from mirzaev/site/repression/system/public/css/popup.css rename to mirzaev/site/repression/system/public/themes/default/css/popup.css index 1472960..fa769c8 100755 --- a/mirzaev/site/repression/system/public/css/popup.css +++ b/mirzaev/site/repression/system/public/themes/default/css/popup.css @@ -17,7 +17,7 @@ section.popup>div.wrap { display: flex; flex-direction: column; gap: 20px; - border-radius: 2px; + border-radius: 0.75rem; background-color: var(--background-light); } diff --git a/mirzaev/site/repression/system/public/css/troller.css b/mirzaev/site/repression/system/public/themes/default/css/troller.css similarity index 100% rename from mirzaev/site/repression/system/public/css/troller.css rename to mirzaev/site/repression/system/public/themes/default/css/troller.css diff --git a/mirzaev/site/repression/system/public/css/upload.css b/mirzaev/site/repression/system/public/themes/default/css/upload.css similarity index 100% rename from mirzaev/site/repression/system/public/css/upload.css rename to mirzaev/site/repression/system/public/themes/default/css/upload.css diff --git a/mirzaev/site/repression/system/public/fonts/commissioner.ttf b/mirzaev/site/repression/system/public/themes/default/fonts/commissioner.ttf similarity index 100% rename from mirzaev/site/repression/system/public/fonts/commissioner.ttf rename to mirzaev/site/repression/system/public/themes/default/fonts/commissioner.ttf diff --git a/mirzaev/site/repression/system/public/images/NAVALNY.svg b/mirzaev/site/repression/system/public/themes/default/images/NAVALNY.svg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/NAVALNY.svg rename to mirzaev/site/repression/system/public/themes/default/images/NAVALNY.svg diff --git a/mirzaev/site/repression/system/public/images/bebra.png b/mirzaev/site/repression/system/public/themes/default/images/bebra.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/bebra.png rename to mirzaev/site/repression/system/public/themes/default/images/bebra.png diff --git a/mirzaev/site/repression/system/public/images/botnet.svg b/mirzaev/site/repression/system/public/themes/default/images/botnet.svg similarity index 100% rename from mirzaev/site/repression/system/public/images/botnet.svg rename to mirzaev/site/repression/system/public/themes/default/images/botnet.svg diff --git a/mirzaev/site/repression/system/public/images/chill_bebra.png b/mirzaev/site/repression/system/public/themes/default/images/chill_bebra.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/chill_bebra.png rename to mirzaev/site/repression/system/public/themes/default/images/chill_bebra.png diff --git a/mirzaev/site/repression/system/public/images/crying_bebra.png b/mirzaev/site/repression/system/public/themes/default/images/crying_bebra.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/crying_bebra.png rename to mirzaev/site/repression/system/public/themes/default/images/crying_bebra.png diff --git a/mirzaev/site/repression/system/public/images/evil_bebra.png b/mirzaev/site/repression/system/public/themes/default/images/evil_bebra.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/evil_bebra.png rename to mirzaev/site/repression/system/public/themes/default/images/evil_bebra.png diff --git a/mirzaev/site/repression/system/public/images/favicon/0.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/0.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/0.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/0.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/1.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/1.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/1.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/1.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/10.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/10.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/10.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/10.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/11.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/11.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/11.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/11.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/12.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/12.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/12.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/12.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/13.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/13.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/13.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/13.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/14.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/14.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/14.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/14.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/15.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/15.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/15.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/15.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/16.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/16.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/16.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/16.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/17.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/17.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/17.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/17.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/18.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/18.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/18.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/18.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/19.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/19.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/19.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/19.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/2.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/2.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/2.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/2.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/20.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/20.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/20.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/20.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/21.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/21.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/21.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/21.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/22.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/22.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/22.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/22.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/23.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/23.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/23.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/23.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/24.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/24.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/24.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/24.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/25.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/25.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/25.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/25.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/26.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/26.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/26.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/26.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/3.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/3.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/3.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/3.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/4.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/4.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/4.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/4.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/5.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/5.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/5.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/5.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/6.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/6.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/6.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/6.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/7.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/7.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/7.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/7.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/8.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/8.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/8.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/8.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/9.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/9.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/9.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/9.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/favicon.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/favicon.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/favicon.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/favicon.gif diff --git a/mirzaev/site/repression/system/public/images/favicon/favicon_alternative.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon/favicon_alternative.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon/favicon_alternative.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon/favicon_alternative.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/0.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/0.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/0.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/0.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/1.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/1.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/1.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/1.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/10.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/10.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/10.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/10.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/11.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/11.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/11.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/11.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/12.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/12.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/12.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/12.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/13.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/13.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/13.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/13.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/14.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/14.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/14.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/14.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/15.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/15.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/15.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/15.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/16.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/16.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/16.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/16.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/17.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/17.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/17.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/17.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/18.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/18.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/18.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/18.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/19.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/19.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/19.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/19.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/2.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/2.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/2.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/2.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/20.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/20.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/20.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/20.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/21.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/21.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/21.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/21.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/22.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/22.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/22.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/22.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/23.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/23.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/23.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/23.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/24.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/24.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/24.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/24.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/25.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/25.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/25.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/25.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/26.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/26.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/26.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/26.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/27.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/27.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/27.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/27.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/28.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/28.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/28.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/28.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/29.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/29.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/29.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/29.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/3.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/3.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/3.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/3.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/30.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/30.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/30.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/30.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/31.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/31.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/31.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/31.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/32.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/32.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/32.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/32.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/33.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/33.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/33.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/33.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/34.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/34.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/34.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/34.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/35.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/35.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/35.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/35.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/36.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/36.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/36.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/36.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/37.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/37.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/37.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/37.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/38.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/38.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/38.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/38.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/39.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/39.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/39.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/39.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/4.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/4.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/4.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/4.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/40.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/40.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/40.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/40.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/41.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/41.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/41.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/41.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/42.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/42.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/42.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/42.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/43.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/43.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/43.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/43.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/44.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/44.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/44.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/44.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/45.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/45.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/45.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/45.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/46.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/46.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/46.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/46.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/47.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/47.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/47.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/47.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/48.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/48.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/48.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/48.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/49.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/49.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/49.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/49.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/5.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/5.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/5.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/5.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/50.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/50.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/50.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/50.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/51.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/51.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/51.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/51.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/52.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/52.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/52.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/52.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/53.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/53.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/53.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/53.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/54.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/54.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/54.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/54.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/55.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/55.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/55.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/55.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/56.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/56.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/56.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/56.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/57.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/57.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/57.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/57.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/58.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/58.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/58.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/58.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/59.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/59.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/59.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/59.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/6.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/6.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/6.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/6.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/60.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/60.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/60.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/60.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/61.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/61.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/61.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/61.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/62.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/62.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/62.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/62.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/63.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/63.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/63.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/63.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/64.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/64.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/64.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/64.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/65.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/65.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/65.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/65.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/66.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/66.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/66.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/66.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/67.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/67.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/67.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/67.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/68.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/68.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/68.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/68.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/69.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/69.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/69.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/69.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/7.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/7.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/7.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/7.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/70.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/70.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/70.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/70.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/71.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/71.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/71.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/71.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/8.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/8.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/8.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/8.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/9.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/9.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/9.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/9.gif diff --git a/mirzaev/site/repression/system/public/images/favicon_2/favicon.gif b/mirzaev/site/repression/system/public/themes/default/images/favicon_2/favicon.gif old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/favicon_2/favicon.gif rename to mirzaev/site/repression/system/public/themes/default/images/favicon_2/favicon.gif diff --git a/mirzaev/site/repression/system/public/images/fuck.png b/mirzaev/site/repression/system/public/themes/default/images/fuck.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/fuck.png rename to mirzaev/site/repression/system/public/themes/default/images/fuck.png diff --git a/mirzaev/site/repression/system/public/images/furgal.jpg b/mirzaev/site/repression/system/public/themes/default/images/furgal.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/furgal.jpg rename to mirzaev/site/repression/system/public/themes/default/images/furgal.jpg diff --git a/mirzaev/site/repression/system/public/images/just.png b/mirzaev/site/repression/system/public/themes/default/images/just.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/just.png rename to mirzaev/site/repression/system/public/themes/default/images/just.png diff --git a/mirzaev/site/repression/system/public/images/keylogger.svg b/mirzaev/site/repression/system/public/themes/default/images/keylogger.svg similarity index 100% rename from mirzaev/site/repression/system/public/images/keylogger.svg rename to mirzaev/site/repression/system/public/themes/default/images/keylogger.svg diff --git a/mirzaev/site/repression/system/public/images/logo.png b/mirzaev/site/repression/system/public/themes/default/images/logo.png similarity index 100% rename from mirzaev/site/repression/system/public/images/logo.png rename to mirzaev/site/repression/system/public/themes/default/images/logo.png diff --git a/mirzaev/site/repression/system/public/images/logo_compressed.png b/mirzaev/site/repression/system/public/themes/default/images/logo_compressed.png similarity index 100% rename from mirzaev/site/repression/system/public/images/logo_compressed.png rename to mirzaev/site/repression/system/public/themes/default/images/logo_compressed.png diff --git a/mirzaev/site/repression/system/public/images/logo_red.png b/mirzaev/site/repression/system/public/themes/default/images/logo_red.png similarity index 100% rename from mirzaev/site/repression/system/public/images/logo_red.png rename to mirzaev/site/repression/system/public/themes/default/images/logo_red.png diff --git a/mirzaev/site/repression/system/public/images/logo_red_compressed.png b/mirzaev/site/repression/system/public/themes/default/images/logo_red_compressed.png similarity index 100% rename from mirzaev/site/repression/system/public/images/logo_red_compressed.png rename to mirzaev/site/repression/system/public/themes/default/images/logo_red_compressed.png diff --git a/mirzaev/site/repression/system/public/images/logo_red_white.png b/mirzaev/site/repression/system/public/themes/default/images/logo_red_white.png similarity index 100% rename from mirzaev/site/repression/system/public/images/logo_red_white.png rename to mirzaev/site/repression/system/public/themes/default/images/logo_red_white.png diff --git a/mirzaev/site/repression/system/public/images/logo_red_white_compressed.png b/mirzaev/site/repression/system/public/themes/default/images/logo_red_white_compressed.png similarity index 100% rename from mirzaev/site/repression/system/public/images/logo_red_white_compressed.png rename to mirzaev/site/repression/system/public/themes/default/images/logo_red_white_compressed.png diff --git a/mirzaev/site/repression/system/public/images/marta_with_broken_heart.png b/mirzaev/site/repression/system/public/themes/default/images/marta_with_broken_heart.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/marta_with_broken_heart.png rename to mirzaev/site/repression/system/public/themes/default/images/marta_with_broken_heart.png diff --git a/mirzaev/site/repression/system/public/images/minecraft.svg b/mirzaev/site/repression/system/public/themes/default/images/minecraft.svg similarity index 100% rename from mirzaev/site/repression/system/public/images/minecraft.svg rename to mirzaev/site/repression/system/public/themes/default/images/minecraft.svg diff --git a/mirzaev/site/repression/system/public/images/miner.svg b/mirzaev/site/repression/system/public/themes/default/images/miner.svg similarity index 100% rename from mirzaev/site/repression/system/public/images/miner.svg rename to mirzaev/site/repression/system/public/themes/default/images/miner.svg diff --git a/mirzaev/site/repression/system/public/images/mirzaev.jpg b/mirzaev/site/repression/system/public/themes/default/images/mirzaev.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/mirzaev.jpg rename to mirzaev/site/repression/system/public/themes/default/images/mirzaev.jpg diff --git a/mirzaev/site/repression/system/public/images/mirzaev.png b/mirzaev/site/repression/system/public/themes/default/images/mirzaev.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/mirzaev.png rename to mirzaev/site/repression/system/public/themes/default/images/mirzaev.png diff --git a/mirzaev/site/repression/system/public/images/mirzaev2.png b/mirzaev/site/repression/system/public/themes/default/images/mirzaev2.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/mirzaev2.png rename to mirzaev/site/repression/system/public/themes/default/images/mirzaev2.png diff --git a/mirzaev/site/repression/system/public/images/mirzaev3.jpg b/mirzaev/site/repression/system/public/themes/default/images/mirzaev3.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/mirzaev3.jpg rename to mirzaev/site/repression/system/public/themes/default/images/mirzaev3.jpg diff --git a/mirzaev/site/repression/system/public/images/mirzaev_real.png b/mirzaev/site/repression/system/public/themes/default/images/mirzaev_real.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/mirzaev_real.png rename to mirzaev/site/repression/system/public/themes/default/images/mirzaev_real.png diff --git a/mirzaev/site/repression/system/public/images/misha.png b/mirzaev/site/repression/system/public/themes/default/images/misha.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/misha.png rename to mirzaev/site/repression/system/public/themes/default/images/misha.png diff --git a/mirzaev/site/repression/system/public/images/no_comments.png b/mirzaev/site/repression/system/public/themes/default/images/no_comments.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/no_comments.png rename to mirzaev/site/repression/system/public/themes/default/images/no_comments.png diff --git a/mirzaev/site/repression/system/public/images/nu_tipa.png b/mirzaev/site/repression/system/public/themes/default/images/nu_tipa.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/nu_tipa.png rename to mirzaev/site/repression/system/public/themes/default/images/nu_tipa.png diff --git a/mirzaev/site/repression/system/public/images/photo_with_hand.png b/mirzaev/site/repression/system/public/themes/default/images/photo_with_hand.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/photo_with_hand.png rename to mirzaev/site/repression/system/public/themes/default/images/photo_with_hand.png diff --git a/mirzaev/site/repression/system/public/images/photo_with_kitten.png b/mirzaev/site/repression/system/public/themes/default/images/photo_with_kitten.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/photo_with_kitten.png rename to mirzaev/site/repression/system/public/themes/default/images/photo_with_kitten.png diff --git a/mirzaev/site/repression/system/public/images/photo_with_knife.png b/mirzaev/site/repression/system/public/themes/default/images/photo_with_knife.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/photo_with_knife.png rename to mirzaev/site/repression/system/public/themes/default/images/photo_with_knife.png diff --git a/mirzaev/site/repression/system/public/images/pmc_boykisser.png b/mirzaev/site/repression/system/public/themes/default/images/pmc_boykisser.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/pmc_boykisser.png rename to mirzaev/site/repression/system/public/themes/default/images/pmc_boykisser.png diff --git a/mirzaev/site/repression/system/public/images/pooping.jpg b/mirzaev/site/repression/system/public/themes/default/images/pooping.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/pooping.jpg rename to mirzaev/site/repression/system/public/themes/default/images/pooping.jpg diff --git a/mirzaev/site/repression/system/public/images/reasons/0.png b/mirzaev/site/repression/system/public/themes/default/images/reasons/0.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/reasons/0.png rename to mirzaev/site/repression/system/public/themes/default/images/reasons/0.png diff --git a/mirzaev/site/repression/system/public/images/reasons/1.png b/mirzaev/site/repression/system/public/themes/default/images/reasons/1.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/reasons/1.png rename to mirzaev/site/repression/system/public/themes/default/images/reasons/1.png diff --git a/mirzaev/site/repression/system/public/images/reasons/2.png b/mirzaev/site/repression/system/public/themes/default/images/reasons/2.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/reasons/2.png rename to mirzaev/site/repression/system/public/themes/default/images/reasons/2.png diff --git a/mirzaev/site/repression/system/public/images/scary.png b/mirzaev/site/repression/system/public/themes/default/images/scary.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/scary.png rename to mirzaev/site/repression/system/public/themes/default/images/scary.png diff --git a/mirzaev/site/repression/system/public/images/squidchad.png b/mirzaev/site/repression/system/public/themes/default/images/squidchad.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/squidchad.png rename to mirzaev/site/repression/system/public/themes/default/images/squidchad.png diff --git a/mirzaev/site/repression/system/public/images/stealer.svg b/mirzaev/site/repression/system/public/themes/default/images/stealer.svg similarity index 100% rename from mirzaev/site/repression/system/public/images/stealer.svg rename to mirzaev/site/repression/system/public/themes/default/images/stealer.svg diff --git a/mirzaev/site/repression/system/public/images/suck.jpg b/mirzaev/site/repression/system/public/themes/default/images/suck.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/suck.jpg rename to mirzaev/site/repression/system/public/themes/default/images/suck.jpg diff --git a/mirzaev/site/repression/system/public/images/suck2.png b/mirzaev/site/repression/system/public/themes/default/images/suck2.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/suck2.png rename to mirzaev/site/repression/system/public/themes/default/images/suck2.png diff --git a/mirzaev/site/repression/system/public/images/suck3.jpg b/mirzaev/site/repression/system/public/themes/default/images/suck3.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/suck3.jpg rename to mirzaev/site/repression/system/public/themes/default/images/suck3.jpg diff --git a/mirzaev/site/repression/system/public/images/suck3.png b/mirzaev/site/repression/system/public/themes/default/images/suck3.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/suck3.png rename to mirzaev/site/repression/system/public/themes/default/images/suck3.png diff --git a/mirzaev/site/repression/system/public/images/truth.jpg b/mirzaev/site/repression/system/public/themes/default/images/truth.jpg similarity index 100% rename from mirzaev/site/repression/system/public/images/truth.jpg rename to mirzaev/site/repression/system/public/themes/default/images/truth.jpg diff --git a/mirzaev/site/repression/system/public/images/two_bebras.png b/mirzaev/site/repression/system/public/themes/default/images/two_bebras.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/two_bebras.png rename to mirzaev/site/repression/system/public/themes/default/images/two_bebras.png diff --git a/mirzaev/site/repression/system/public/images/wet_bebra.png b/mirzaev/site/repression/system/public/themes/default/images/wet_bebra.png old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/wet_bebra.png rename to mirzaev/site/repression/system/public/themes/default/images/wet_bebra.png diff --git a/mirzaev/site/repression/system/public/images/what.png b/mirzaev/site/repression/system/public/themes/default/images/what.png similarity index 100% rename from mirzaev/site/repression/system/public/images/what.png rename to mirzaev/site/repression/system/public/themes/default/images/what.png diff --git a/mirzaev/site/repression/system/public/images/what2.jpg b/mirzaev/site/repression/system/public/themes/default/images/what2.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/what2.jpg rename to mirzaev/site/repression/system/public/themes/default/images/what2.jpg diff --git a/mirzaev/site/repression/system/public/images/xiaomi.jpg b/mirzaev/site/repression/system/public/themes/default/images/xiaomi.jpg old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/images/xiaomi.jpg rename to mirzaev/site/repression/system/public/themes/default/images/xiaomi.jpg diff --git a/mirzaev/site/repression/system/public/sounds/beep.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/beep.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/beep.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/beep.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/beep.wav b/mirzaev/site/repression/system/public/themes/default/sounds/beep.wav old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/beep.wav rename to mirzaev/site/repression/system/public/themes/default/sounds/beep.wav diff --git a/mirzaev/site/repression/system/public/sounds/bonk.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/bonk.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/bonk.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/bonk.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/1.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/1.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/1.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/1.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/10.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/10.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/10.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/10.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/11.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/11.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/11.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/11.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/2.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/2.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/2.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/2.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/3.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/3.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/3.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/3.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/4.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/4.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/4.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/4.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/5.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/5.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/5.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/5.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/6.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/6.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/6.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/6.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/7.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/7.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/7.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/7.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/8.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/8.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/8.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/8.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/instasamka/9.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/instasamka/9.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/instasamka/9.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/instasamka/9.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/iphone.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/iphone.mp3 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/iphone.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/iphone.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/putin.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/putin.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/putin.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/putin.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/southern/1.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/southern/1.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/southern/1.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/southern/1.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/southern/2.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/southern/2.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/southern/2.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/southern/2.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/southern/3.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/southern/3.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/southern/3.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/southern/3.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/vk.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/vk.mp3 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/vk.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/vk.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/what.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/what.mp3 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/what.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/what.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/whatsup.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/whatsup.mp3 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/whatsup.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/whatsup.mp3 diff --git a/mirzaev/site/repression/system/public/sounds/wow.mp3 b/mirzaev/site/repression/system/public/themes/default/sounds/wow.mp3 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/sounds/wow.mp3 rename to mirzaev/site/repression/system/public/themes/default/sounds/wow.mp3 diff --git a/mirzaev/site/repression/system/public/storage/214547089/avatar/200x200.jpg b/mirzaev/site/repression/system/public/themes/default/storage/214547089/avatar/200x200.jpg similarity index 100% rename from mirzaev/site/repression/system/public/storage/214547089/avatar/200x200.jpg rename to mirzaev/site/repression/system/public/themes/default/storage/214547089/avatar/200x200.jpg diff --git a/mirzaev/site/repression/system/public/videos/bahmut.mp4 b/mirzaev/site/repression/system/public/themes/default/videos/bahmut.mp4 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/videos/bahmut.mp4 rename to mirzaev/site/repression/system/public/themes/default/videos/bahmut.mp4 diff --git a/mirzaev/site/repression/system/public/videos/end.mp4 b/mirzaev/site/repression/system/public/themes/default/videos/end.mp4 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/videos/end.mp4 rename to mirzaev/site/repression/system/public/themes/default/videos/end.mp4 diff --git a/mirzaev/site/repression/system/public/videos/end_post.mp4 b/mirzaev/site/repression/system/public/themes/default/videos/end_post.mp4 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/videos/end_post.mp4 rename to mirzaev/site/repression/system/public/themes/default/videos/end_post.mp4 diff --git a/mirzaev/site/repression/system/public/videos/reasons/0.mp4 b/mirzaev/site/repression/system/public/themes/default/videos/reasons/0.mp4 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/videos/reasons/0.mp4 rename to mirzaev/site/repression/system/public/themes/default/videos/reasons/0.mp4 diff --git a/mirzaev/site/repression/system/public/videos/reasons/1.mp4 b/mirzaev/site/repression/system/public/themes/default/videos/reasons/1.mp4 old mode 100644 new mode 100755 similarity index 100% rename from mirzaev/site/repression/system/public/videos/reasons/1.mp4 rename to mirzaev/site/repression/system/public/themes/default/videos/reasons/1.mp4 diff --git a/mirzaev/site/repression/system/settings/.gitignore b/mirzaev/site/repression/system/settings/.gitignore old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/settings/arangodb.php.sample b/mirzaev/site/repression/system/settings/arangodb.php.sample deleted file mode 100644 index dfc9047..0000000 --- a/mirzaev/site/repression/system/settings/arangodb.php.sample +++ /dev/null @@ -1,8 +0,0 @@ - 'unix:///var/run/arangodb3/arango.sock', - 'database' => 'repression', - 'name' => 'repression', - 'password' => '' -]; diff --git a/mirzaev/site/repression/system/settings/ipinfo.php.sample b/mirzaev/site/repression/system/settings/ipinfo.php.sample old mode 100644 new mode 100755 diff --git a/mirzaev/site/repression/system/views/manager.php b/mirzaev/site/repression/system/views/manager.php deleted file mode 100755 index 65b51b5..0000000 --- a/mirzaev/site/repression/system/views/manager.php +++ /dev/null @@ -1,25 +0,0 @@ - - */ -final class manager extends controller -{ - public function render(string $file, array $vars = []): ?string - { - // Генерация представления - return (new view(new FilesystemLoader(VIEWS)))->render($file, $vars); - } -} diff --git a/mirzaev/site/repression/system/views/templater.php b/mirzaev/site/repression/system/views/templater.php new file mode 100755 index 0000000..f736166 --- /dev/null +++ b/mirzaev/site/repression/system/views/templater.php @@ -0,0 +1,201 @@ + + */ +final class templater extends controller implements array_access +{ + /** + * Registry of global variables of view + */ + public array $variables = []; + + /** + * Instance of twig templater + */ + readonly public twig $twig; + + /** + * Constructor of an instance + * + * @param session|null $session The object implementing a session instance from ArangoDB + * @param account|null $account The object implementing an account instance from ArangoDB + * @param settings|null $settings The object implementing a settings instance from ArangoDB + * + * @return void + */ + public function __construct( + language $language = language::en + ) { + // Initializing an instance of twig + $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); + } + + /** + * Render a HTML-document + * + * @param string $file Related path to a HTML-document + * @param array $variables Registry of variables to push into registry of global variables + * + * @return ?string HTML-документ + */ + public function render(string $file, array $variables = []): ?string + { + // Generation and exit (success) + return $this->twig->render('themes' . DIRECTORY_SEPARATOR . $this->twig->getGlobals()['theme'] . DIRECTORY_SEPARATOR . $file, $variables + $this->variables); + } + + /** + * Write + * + * Write a variable into registry of global variables + * + * @param string $name Name of the variable + * @param mixed $value Value of the variable + * + * @return void + */ + public function __set(string $name, mixed $value = null): void + { + // Write the variable and exit (success) + $this->variables[$name] = $value; + } + + /** + * Read + * + * Read a variable from registry of global variables + * + * @param string $name Name of the variable + * + * @return mixed Content of the variable, if they are found + */ + public function __get(string $name): mixed + { + // Read the variable and exit (success) + return $this->variables[$name]; + } + + /** + * Delete + * + * Delete a variable from the registry of global variables + * + * @param string $name Name of the variable + * + * @return void + */ + public function __unset(string $name): void + { + // Delete the variable and exit (success) + unset($this->variables[$name]); + } + + /** + * Check of initialization + * + * Check of initialization in registry of global variables + * + * @param string $name Name of the variable + * + * @return bool The variable is initialized? + */ + public function __isset(string $name): bool + { + // Check of initialization of the variable and exit (success) + return isset($this->variables[$name]); + } + + /** + * Write + * + * Write a variable into registry of global variables + * + * @param mixed $name Name of an offset of the variable + * @param mixed $value Value of the variable + * + * @return void + */ + public function offsetSet(mixed $name, mixed $value): void + { + // Write the variable and exit (success) + $this->variables[$name] = $value; + } + + /** + * Read + * + * Read a variable from registry of global variables + * + * @param mixed $name Name of the variable + * + * @return mixed Content of the variable, if they are found + */ + public function offsetGet(mixed $name): mixed + { + // Read the variable and exit (success) + return $this->variables[$name]; + } + + /** + * Delete + * + * Delete a variable from the registry of global variables + * + * @param mixed $name Name of the variable + * + * @return void + */ + public function offsetUnset(mixed $name): void + { + // Delete the variable and exit (success) + unset($this->variables[$name]); + } + + /** + * Check of initialization + * + * Check of initialization in registry of global variables + * + * @param mixed $name Name of the variable + * + * @return bool The variable is initialized? + */ + public function offsetExists(mixed $name): bool + { + // Check of initialization of the variable and exit (success) + return isset($this->variables[$name]); + } +} diff --git a/mirzaev/site/repression/system/views/account/element.html b/mirzaev/site/repression/system/views/themes/default/account/element.html similarity index 63% rename from mirzaev/site/repression/system/views/account/element.html rename to mirzaev/site/repression/system/views/themes/default/account/element.html index 2954c37..4b85adc 100755 --- a/mirzaev/site/repression/system/views/account/element.html +++ b/mirzaev/site/repression/system/views/themes/default/account/element.html @@ -1,6 +1,6 @@ {% block css %} - - + + {% endblock %} {% block body %} diff --git a/mirzaev/site/repression/system/views/article.html b/mirzaev/site/repression/system/views/themes/default/article.html old mode 100644 new mode 100755 similarity index 93% rename from mirzaev/site/repression/system/views/article.html rename to mirzaev/site/repression/system/views/themes/default/article.html index 7d62da0..4109c5c --- a/mirzaev/site/repression/system/views/article.html +++ b/mirzaev/site/repression/system/views/themes/default/article.html @@ -24,7 +24,7 @@ assault, according to the instructions. Nevertheless, the girl Nastya was in my house, she was lying on the bed, they did not touch her, they did not even pay attention, as if she did not exist.

- Lawlessness PMC Wagner in Russia

As soon as I lay down on the floor, they handcuffed me, it was a little painful. Since I was looking at the @@ -57,7 +57,7 @@ unsuccessfully tried to put on pants and a shirt. When they laughed enough, they finally took off the handcuffs and I was able to get dressed.

- An emigrant from Russia spoke about PMC Wagner

When we were in the hallway, they asked me: Do you need to look after someone in the house? For that girl or @@ -86,21 +86,21 @@ Source, (web archive), - (screenshot), - (video) + (screenshot), + (video)
Source, (web archive), - (screenshot), - (video 😿) + (screenshot), + (video 😿)
Source, (web archive), - (screenshot) + (screenshot)

- Repressions by PMC Wagner in Russia
@@ -129,7 +129,7 @@ it turned out, all this time, like a moron, I pulled one operative of the PMC Wagner by the leg and really annoyed him with this, because of which he snapped at me, it was awkward, ridiculous, scary and funny.

- Prigogine's trick

I was on the floor at the rear left seat, next to me was the largest operative. The second operative was driving, @@ -153,7 +153,7 @@ of the passage of time. The operative in the front seat turned on the stun gun every few seconds (as it turned out, they had only recently been given one, so they really wanted to play with them).

- Mirzaev's connection with Russian special services

At first they simply told me that I was being taken to the department to be beaten (they called their @@ -175,7 +175,7 @@ found a lot of things there: Zelensky's official channel, many pro-Ukrainian journalists and media, as well as anarchist channels.

- Revolution in Russia 2023 + Revolution in Russia 2023

They read my VKontakte chats where I am an administrator, looked at people's profiles and laughed at them. They laughed at the hairstyles, last names, appearance, sexual orientation of some of the members and asked if @@ -227,7 +227,7 @@ out to be a normal guy After I offered them cooperation, their aggression completely disappeared and they just went to a roadside coffee shop! It's funny, right?

- PMC Wagner kidnap people

I remind you that all this time I experienced incredible pain in my knees and did not feel my hands. I told @@ -297,7 +297,7 @@ discuss. I can confidently say only one thing: they cooperate with him on a regular basis and, despite the big age difference, communicate with each other as close friends, discussing various non-work related topics.

- Corrupt governor in Khabarovsk

@@ -340,7 +340,7 @@ administrative (not criminal) statement. The issue with the area of residence was in order to choose the district court of Khabarovsk.

- The prosecutor conducts cases together with PMC Wagner

After I answered his questions and he understood a little better what kind of person I am, he became more relaxed. @@ -371,7 +371,7 @@ statement was absolutely fascist and anti-humanistic.

- The case with PMC Wagner

He said that I should be more careful. He said that I can discuss it with my friends, but in no case in public. He praised me, saying that I was an educated and intelligent person, a programmer. He expressed regret @@ -437,7 +437,7 @@ the stress of being kidnapped, I would be able to form a dialogue to my advantage and earn myself a better position. All I had the strength to do was listen carefully to them and timidly try to ask questions.

- The PMC Wagner incident

They discussed me on the phone with their commander. I heard him ask them: Well, what's with this @@ -482,7 +482,7 @@ about below.

- How programmers live in Russia 2023

They began to discuss among themselves their work without worrying that I could hear them. This could either mean @@ -551,7 +551,7 @@

later

- Cooperation of the Russian court with PMC Wagner
@@ -580,7 +580,7 @@ my life, of course, for the better. - PMC Wagner MIRZAEV + PMC Wagner MIRZAEV

The article is being written a few months after the incident, so many details were missed, and something may have diff --git a/mirzaev/site/repression/system/views/aside.html b/mirzaev/site/repression/system/views/themes/default/aside.html similarity index 64% rename from mirzaev/site/repression/system/views/aside.html rename to mirzaev/site/repression/system/views/themes/default/aside.html index 7273107..f05a8ca 100755 --- a/mirzaev/site/repression/system/views/aside.html +++ b/mirzaev/site/repression/system/views/themes/default/aside.html @@ -1,4 +1,4 @@ -{% use 'hotline/index.html' with css as hotline_css, body as hotline_body, js as hotline_js, js_init as hotline_js_init %} +{% use '/themes/default/hotline/index.html' with css as hotline_css, body as hotline_body, js as hotline_js, js_init as hotline_js_init %} {% block css %} {# {{ block('hotline_css') }} #} diff --git a/mirzaev/site/repression/system/views/core.html b/mirzaev/site/repression/system/views/themes/default/core.html similarity index 69% rename from mirzaev/site/repression/system/views/core.html rename to mirzaev/site/repression/system/views/themes/default/core.html index 395d86c..0be03b5 100755 --- a/mirzaev/site/repression/system/views/core.html +++ b/mirzaev/site/repression/system/views/themes/default/core.html @@ -3,7 +3,7 @@ - {% use 'head.html' with title as head_title, meta as head_meta, css as head_css %} + {% use '/themes/default/head.html' with title as head_title, meta as head_meta, css as head_css %} {% block title %} {{ block('head_title') }} @@ -23,7 +23,7 @@ {% endblock %} {% block js %} - {% include 'js.html' %} + {% include '/themes/default/js.html' %} {% endblock %} {% block js_init %} diff --git a/mirzaev/site/repression/system/views/footer.html b/mirzaev/site/repression/system/views/themes/default/footer.html similarity index 100% rename from mirzaev/site/repression/system/views/footer.html rename to mirzaev/site/repression/system/views/themes/default/footer.html diff --git a/mirzaev/site/repression/system/views/head.html b/mirzaev/site/repression/system/views/themes/default/head.html similarity index 61% rename from mirzaev/site/repression/system/views/head.html rename to mirzaev/site/repression/system/views/themes/default/head.html index 750bb4d..80a95fb 100755 --- a/mirzaev/site/repression/system/views/head.html +++ b/mirzaev/site/repression/system/views/themes/default/head.html @@ -1,19 +1,20 @@ {% block title %} -{% if head.title != empty %}{{head.title}}{% else %}PMC Wagner kidnapped me - MIRZAEV{% endif %} +{% if head.title != empty %}{{head.title}}{% else %}PMC Wagner kidnapped me{% endif %} {% endblock %} {% block meta %} + - + - + @@ -21,23 +22,23 @@ - - + + - + - + - - - + + + - {% for meta in head.metas %} {% endfor %} {% endblock %} {% block css %} - - + + {% endblock %} diff --git a/mirzaev/site/repression/system/views/header.html b/mirzaev/site/repression/system/views/themes/default/header.html similarity index 70% rename from mirzaev/site/repression/system/views/header.html rename to mirzaev/site/repression/system/views/themes/default/header.html index 104650d..5fee5b3 100755 --- a/mirzaev/site/repression/system/views/header.html +++ b/mirzaev/site/repression/system/views/themes/default/header.html @@ -3,7 +3,7 @@ {% block body %}

- Dmitry Medvedev 2023 private photo funny on the kitchen with family
diff --git a/mirzaev/site/repression/system/views/hotline/index.html b/mirzaev/site/repression/system/views/themes/default/hotline/index.html similarity index 88% rename from mirzaev/site/repression/system/views/hotline/index.html rename to mirzaev/site/repression/system/views/themes/default/hotline/index.html index 826d0df..ac7d70e 100755 --- a/mirzaev/site/repression/system/views/hotline/index.html +++ b/mirzaev/site/repression/system/views/themes/default/hotline/index.html @@ -1,5 +1,5 @@ {% block css %} - + {% endblock %} {% block body %} diff --git a/mirzaev/site/repression/system/views/index.html b/mirzaev/site/repression/system/views/themes/default/index.html similarity index 74% rename from mirzaev/site/repression/system/views/index.html rename to mirzaev/site/repression/system/views/themes/default/index.html index bd67ac4..83b1144 100755 --- a/mirzaev/site/repression/system/views/index.html +++ b/mirzaev/site/repression/system/views/themes/default/index.html @@ -1,10 +1,12 @@ -{% extends "core.html" %} +{% extends "/themes/default/core.html" %} -{% use "core.html" with css as core_css, body as core_body, js as core_js, js_init as core_js_init %} -{% use "troller.html" with css as troller_css, body as troller_body, js as troller_js, js_init as troller_js_init %} -{% use "popups/welcome.html" with css as popup_welcome_css, body as popup_welcome_body %} -{% use "header.html" with css as header_css, body as header_body, js as header_js, js_init as header_js_init %} -{% use 'account/element.html' with css as account_css, body as account_body, js as account_js %} +{% use "/themes/default/core.html" with css as core_css, body as core_body, js as core_js, js_init as core_js_init %} +{% use "/themes/default/troller.html" with css as troller_css, body as troller_body, js as troller_js, js_init as +troller_js_init %} +{% use "/themes/default/popups/welcome.html" with css as popup_welcome_css, body as popup_welcome_body %} +{% use "/themes/default/header.html" with css as header_css, body as header_body, js as header_js, js_init as +header_js_init %} +{% use '/themes/default/account/element.html' with css as account_css, body as account_body, js as account_js %} {% block css %} {{ block('core_css') }} @@ -20,22 +22,23 @@ {{ block('troller_body') }} + {{ block('popup_welcome_body') }} -
+
{{ block('header_body') }} -
+
{% block main %} - {% include 'article.html' %} + {% include '/themes/default/article.html' %} {% endblock %} -
- {% include 'footer.html' %} -
+ + {% include '/themes/default/footer.html' %} +
- Arsen Mirzaev Tatyano-Muradovich - Arsen Mirzaev Tatyano-Muradovich
@@ -63,7 +66,8 @@ Socials: (@mirzaev_sexy), (mature-woman), - Discord server ⚡ (RU+EN) + Discord server ⚡ + (RU+EN)
@@ -75,11 +79,11 @@
{% for view in views.last %}

- {{ view.country_flag.emoji }} - {{ view.region }} + {{ view.flag }} + {{ view.city }} {% if view.referer is not null %}({{ view.referer }}‎){% endif %} - {{ view['x-forwarded-for'] ?? view.ip }} + {{ view.forwarded ?? view.address }} {{ view.created }} @@ -109,14 +113,14 @@ 0. You just DO WHAT THE FUCK YOU WANT TO.

- PMC Boykisser Group + PMC Boykisser Group
- -
- -
+ +