Compare commits
No commits in common. "76ff89af861fd40a10d7267ecf85481ab168b0fb" and "494a8dc41c2b95a70b7d08166ecf256357ac2f89" have entirely different histories.
76ff89af86
...
494a8dc41c
|
@ -1,3 +1,3 @@
|
|||
!.gitignore
|
||||
composer.phar
|
||||
vendor
|
||||
!.gitignore
|
||||
composer.phar
|
||||
vendor
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# site-virus
|
||||
|
||||
# site-virus
|
||||
|
||||
Site with viruses and scary pictures
|
|
@ -1,48 +1,51 @@
|
|||
{
|
||||
"name": "mirzaev/site-rules",
|
||||
"description": "Site with rules of our chat in VK",
|
||||
"readme": "README.md",
|
||||
"keywords": [
|
||||
"rules",
|
||||
"site"
|
||||
],
|
||||
"type": "site",
|
||||
"homepage": "https://git.mirzaev.sexy/mirzaev/site-rules",
|
||||
"license": "WTFPL",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||
"email": "arsen@mirzaev.sexy",
|
||||
"homepage": "https://mirzaev.sexy",
|
||||
"role": "Programmer"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"docs": "https://git.mirzaev.sexy/mirzaev/site-rules/manual",
|
||||
"issues": "https://git.mirzaev.sexy/mirzaev/site-rules/issues"
|
||||
},
|
||||
"require": {
|
||||
"php": "~8.2",
|
||||
"ext-sodium": "~8.2",
|
||||
"mirzaev/minimal": "^2.0.x-dev",
|
||||
"mirzaev/accounts": "~1.2.x-dev",
|
||||
"mirzaev/arangodb": "^1.0.0",
|
||||
"mirzaev/vk": "^4.0",
|
||||
"triagens/arangodb": "~3.9.x-dev",
|
||||
"twig/twig": "^3.4",
|
||||
"guzzlehttp/guzzle": "^7.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~9.5"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"mirzaev\\site\\rules\\": "mirzaev/site/rules/system"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"mirzaev\\site\\rules\\tests\\": "mirzaev/site/rules/tests"
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"name": "mirzaev/site-virus",
|
||||
"description": "Site with viruses and scary pictures",
|
||||
"readme": "README.md",
|
||||
"keywords": [
|
||||
"virus",
|
||||
"download",
|
||||
"Evil Alliance",
|
||||
"imageboard",
|
||||
"site"
|
||||
],
|
||||
"type": "site",
|
||||
"homepage": "https://git.mirzaev.sexy/mirzaev/site-virus",
|
||||
"license": "WTFPL",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||
"email": "arsen@mirzaev.sexy",
|
||||
"homepage": "https://mirzaev.sexy",
|
||||
"role": "Programmer"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"docs": "https://git.mirzaev.sexy/mirzaev/site-virus/manual",
|
||||
"issues": "https://git.mirzaev.sexy/mirzaev/site-virus/issues"
|
||||
},
|
||||
"require": {
|
||||
"php": "~8.1",
|
||||
"ext-sodium": "~8.1",
|
||||
"mirzaev/minimal": "^2.0.x-dev",
|
||||
"mirzaev/accounts": "~1.2.x-dev",
|
||||
"mirzaev/arangodb": "^1.0.0",
|
||||
"mirzaev/vk": "^4.0",
|
||||
"triagens/arangodb": "~3.9.x-dev",
|
||||
"twig/twig": "^3.4",
|
||||
"guzzlehttp/guzzle": "^7.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~9.5"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"mirzaev\\site\\virus\\": "mirzaev/site/virus/system"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"mirzaev\\site\\virus\\tests\\": "mirzaev/site/virus/tests"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "9b8186615d97b2bad3b83ba79c939875",
|
||||
"content-hash": "c9aa4923402d9b36006f18de102cdda0",
|
||||
"packages": [
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
|
@ -220,16 +220,16 @@
|
|||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "2.4.3",
|
||||
"version": "2.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "67c26b443f348a51926030c83481b85718457d3d"
|
||||
"reference": "3148458748274be1546f8f2809a6c09fe66f44aa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
|
||||
"reference": "67c26b443f348a51926030c83481b85718457d3d",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/3148458748274be1546f8f2809a6c09fe66f44aa",
|
||||
"reference": "3148458748274be1546f8f2809a6c09fe66f44aa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -319,7 +319,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/psr7/issues",
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.4.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -335,7 +335,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-10-26T14:07:24+00:00"
|
||||
"time": "2022-10-25T13:49:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "jasny/error-handler",
|
||||
|
@ -395,14 +395,14 @@
|
|||
"version": "1.2.x-dev",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://git.mirzaev.sexy/mirzaev/accounts",
|
||||
"reference": "aa93c4d26395025fa16bb65e8a40332ac352a742"
|
||||
"url": "https://git.hood.su/mirzaev/accounts",
|
||||
"reference": "4b0a1a1c34128c281b83485cde53d97df6c82a49"
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"ext-libxml": "*",
|
||||
"guzzlehttp/guzzle": "^7.5",
|
||||
"php": "~8.2"
|
||||
"ext-dom": "20031129",
|
||||
"ext-libxml": "~8.0",
|
||||
"guzzlehttp/guzzle": "~7.2",
|
||||
"php": "~8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpdocumentor/phpdocumentor": ">=2.9",
|
||||
|
@ -420,37 +420,31 @@
|
|||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||
"email": "arsen@mirzaev.sexy",
|
||||
"homepage": "https://mirzaev.sexy",
|
||||
"name": "Arsen Mirzaev",
|
||||
"email": "red@hood.su",
|
||||
"homepage": "https://hood.su/sex",
|
||||
"role": "Programmer"
|
||||
}
|
||||
],
|
||||
"description": "Simple accounts manager",
|
||||
"homepage": "https://git.mirzaev.sexy/mirzaev/accounts",
|
||||
"description": "Менеджер аккаунтов",
|
||||
"homepage": "https://git.hood.su/mirzaev/accounts",
|
||||
"keywords": [
|
||||
"accounts"
|
||||
],
|
||||
"support": {
|
||||
"email": "arsen@mirzaev.sexy",
|
||||
"issues": "https://git.mirzaev.sexy/mirzaev/accounts/issues",
|
||||
"wiki": "https://git.mirzaev.sexy/mirzaev/accounts/wiki"
|
||||
"chat": "https://vk.me/darkweb228",
|
||||
"docs": "https://git.hood.su/mirzaev/accounts/manual",
|
||||
"issues": "https://git.hood.su/mirzaev/accounts/issues"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://fund.mirzaev.sexy",
|
||||
"type": "funding"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-17T08:36:36+00:00"
|
||||
"time": "2021-07-31T11:12:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mirzaev/arangodb",
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://git.mirzaev.sexy/mirzaev/arangodb",
|
||||
"reference": "e7da9978d01d3f8bdef6c74809dfb4eb8989f92c"
|
||||
"url": "https://git.hood.su/mirzaev/arangodb",
|
||||
"reference": "0012a31e6bea1050385f6b740581f32b9e366128"
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
|
@ -477,37 +471,26 @@
|
|||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Simple PHP-framework for ArangoDB",
|
||||
"description": "Реализация управления хранилищем данных ArangoDB",
|
||||
"homepage": "https://git.hood.su/mirzaev/arangodb",
|
||||
"keywords": [
|
||||
"ArangoDb"
|
||||
],
|
||||
"support": {
|
||||
"email": "arsen@mirzaev.sexy",
|
||||
"issues": "https://git.mirzaev.sexy/mirzaev/arangodb/issues",
|
||||
"wiki": "https://git.mirzaev.sexy/mirzaev/arangodb/manual"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://fund.mirzaev.sexy",
|
||||
"type": "funding"
|
||||
}
|
||||
],
|
||||
"time": "2022-11-06T00:03:56+00:00"
|
||||
"time": "2022-10-25T20:16:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mirzaev/minimal",
|
||||
"version": "2.0.x-dev",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://git.mirzaev.sexy/mirzaev/minimal",
|
||||
"reference": "1f5685a20d41c1c11742f33138764b835ddd0198"
|
||||
"url": "https://git.hood.su/mirzaev/minimal",
|
||||
"reference": "7777d7af1733d661a36551a0fdcf27a972e4ef81"
|
||||
},
|
||||
"require": {
|
||||
"php": "~8.1"
|
||||
"php": "~8.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-PDO": "To work with SQL-based databases (MySQL, PostreSQL...)"
|
||||
"ext-PDO": "Для работы с базами данных на SQL (MySQL, PostreSQL...)"
|
||||
},
|
||||
"type": "framework",
|
||||
"autoload": {
|
||||
|
@ -527,39 +510,36 @@
|
|||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Lightweight MVC framework that manages only the basic mechanisms, leaving the development of the programmer and not overloading the project",
|
||||
"homepage": "https://git.mirzaev.sexy/mirzaev/minimal",
|
||||
"description": "Легковесный MVC фреймворк который следует твоим правилам, а не диктует свои",
|
||||
"homepage": "https://git.hood.su/mirzaev/minimal",
|
||||
"keywords": [
|
||||
"framework",
|
||||
"mvc"
|
||||
],
|
||||
"support": {
|
||||
"docs": "https://git.mirzaev.sexy/mirzaev/minimal/wiki",
|
||||
"issues": "https://git.mirzaev.sexy/mirzaev/minimal/issues"
|
||||
"docs": "https://git.hood.su/mirzaev/minimal/manual",
|
||||
"issues": "https://git.hood.su/mirzaev/minimal/issues"
|
||||
},
|
||||
"time": "2022-11-03T06:09:32+00:00"
|
||||
"time": "2022-03-03T21:15:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mirzaev/vk",
|
||||
"version": "4.5.0",
|
||||
"version": "4.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://git.mirzaev.sexy/mirzaev/vk",
|
||||
"reference": "39d13d9020c41d03f389254a4c2cda97cb61b8de"
|
||||
"url": "https://git.hood.su/mirzaev/vk",
|
||||
"reference": "850a4bbd8ef6ba232c0e810eba5f118345a862fa"
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^7.5",
|
||||
"jasny/error-handler": "^0.2",
|
||||
"mirzaev/accounts": "^1.2.0",
|
||||
"monolog/monolog": "^1.6",
|
||||
"php": "^8.1",
|
||||
"psr/log": "^1.0"
|
||||
"guzzlehttp/guzzle": "~7.5",
|
||||
"jasny/error-handler": "~0.2",
|
||||
"mirzaev/accounts": "~1.2.x-dev",
|
||||
"monolog/monolog": "~1.6",
|
||||
"php": "~8.1",
|
||||
"psr/log": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.5"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-sodium": "Can be selected in some conditions to increase security"
|
||||
"phpunit/phpunit": "~9.5"
|
||||
},
|
||||
"type": "framework",
|
||||
"autoload": {
|
||||
|
@ -575,21 +555,21 @@
|
|||
{
|
||||
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||
"email": "arsen@mirzaev.sexy",
|
||||
"homepage": "https://mirzaev.sexy/mirzaev",
|
||||
"homepage": "https://hood.su/mirzaev",
|
||||
"role": "Programmer"
|
||||
}
|
||||
],
|
||||
"description": "Framework for vk.com API",
|
||||
"homepage": "https://git.mirzaev.sexy/mirzaev/vk",
|
||||
"description": "Фреймворк VK API",
|
||||
"homepage": "https://git.hood.su/mirzaev/vk",
|
||||
"keywords": [
|
||||
"api",
|
||||
"vk"
|
||||
],
|
||||
"support": {
|
||||
"docs": "https://git.mirzaev.sexy/mirzaev/vk/wiki",
|
||||
"issues": "https://git.mirzaev.sexy/mirzaev/vk/issues"
|
||||
"docs": "https://git.hood.su/mirzaev/vk/manual",
|
||||
"issues": "https://git.hood.su/mirzaev/vk/issues"
|
||||
},
|
||||
"time": "2022-11-10T13:15:06+00:00"
|
||||
"time": "2022-10-23T17:22:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
|
@ -933,16 +913,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.2.0",
|
||||
"version": "v3.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
|
||||
"reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
|
||||
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918",
|
||||
"reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -951,7 +931,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.3-dev"
|
||||
"dev-main": "3.1-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
|
@ -980,7 +960,7 @@
|
|||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -996,20 +976,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-11-25T10:21:52+00:00"
|
||||
"time": "2022-02-25T11:15:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.27.0",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
|
||||
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
|
||||
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
|
||||
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1024,7 +1004,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.27-dev"
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
|
@ -1062,7 +1042,7 @@
|
|||
"portable"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1078,20 +1058,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.27.0",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
|
||||
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1106,7 +1086,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.27-dev"
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
|
@ -1145,7 +1125,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1161,7 +1141,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "triagens/arangodb",
|
||||
|
@ -1169,12 +1149,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/arangodb/arangodb-php.git",
|
||||
"reference": "21c460dbbd75eb5c066f9abcc3a9adf4487d6e48"
|
||||
"reference": "de14fbcf8390e3ae1e706c52695386218eeba151"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/arangodb/arangodb-php/zipball/21c460dbbd75eb5c066f9abcc3a9adf4487d6e48",
|
||||
"reference": "21c460dbbd75eb5c066f9abcc3a9adf4487d6e48",
|
||||
"url": "https://api.github.com/repos/arangodb/arangodb-php/zipball/de14fbcf8390e3ae1e706c52695386218eeba151",
|
||||
"reference": "de14fbcf8390e3ae1e706c52695386218eeba151",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1222,20 +1202,20 @@
|
|||
"issues": "https://github.com/arangodb/arangodb-php/issues",
|
||||
"source": "https://github.com/arangodb/arangodb-php/tree/3.9"
|
||||
},
|
||||
"time": "2022-10-21T15:30:53+00:00"
|
||||
"time": "2022-02-03T09:42:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v3.5.1",
|
||||
"version": "v3.4.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "a6e0510cc793912b451fd40ab983a1d28f611c15"
|
||||
"reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/a6e0510cc793912b451fd40ab983a1d28f611c15",
|
||||
"reference": "a6e0510cc793912b451fd40ab983a1d28f611c15",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58",
|
||||
"reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1250,7 +1230,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.5-dev"
|
||||
"dev-master": "3.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -1286,7 +1266,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/twigphp/Twig/issues",
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.5.1"
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.4.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1298,36 +1278,36 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-08T07:49:20+00:00"
|
||||
"time": "2022-09-28T08:42:51+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
{
|
||||
"name": "doctrine/instantiator",
|
||||
"version": "2.0.0",
|
||||
"version": "1.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/instantiator.git",
|
||||
"reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
|
||||
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
|
||||
"reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
|
||||
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
|
||||
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1"
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^11",
|
||||
"doctrine/coding-standard": "^9",
|
||||
"ext-pdo": "*",
|
||||
"ext-phar": "*",
|
||||
"phpbench/phpbench": "^1.2",
|
||||
"phpstan/phpstan": "^1.9.4",
|
||||
"phpstan/phpstan-phpunit": "^1.3",
|
||||
"phpunit/phpunit": "^9.5.27",
|
||||
"vimeo/psalm": "^5.4"
|
||||
"phpbench/phpbench": "^0.16 || ^1",
|
||||
"phpstan/phpstan": "^1.4",
|
||||
"phpstan/phpstan-phpunit": "^1",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||
"vimeo/psalm": "^4.22"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
|
@ -1354,7 +1334,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/instantiator/issues",
|
||||
"source": "https://github.com/doctrine/instantiator/tree/2.0.0"
|
||||
"source": "https://github.com/doctrine/instantiator/tree/1.4.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1370,7 +1350,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-30T00:23:10+00:00"
|
||||
"time": "2022-03-03T08:28:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
|
@ -1433,16 +1413,16 @@
|
|||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
"version": "v4.15.3",
|
||||
"version": "v4.15.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||
"reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039"
|
||||
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039",
|
||||
"reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
|
||||
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1483,9 +1463,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3"
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1"
|
||||
},
|
||||
"time": "2023-01-16T22:05:37+00:00"
|
||||
"time": "2022-09-04T07:30:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phar-io/manifest",
|
||||
|
@ -1600,16 +1580,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "9.2.24",
|
||||
"version": "9.2.17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "2cf940ebc6355a9d430462811b5aaa308b174bed"
|
||||
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed",
|
||||
"reference": "2cf940ebc6355a9d430462811b5aaa308b174bed",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8",
|
||||
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1665,7 +1645,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24"
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1673,7 +1653,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-26T08:26:55+00:00"
|
||||
"time": "2022-08-30T12:24:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
|
@ -1918,20 +1898,20 @@
|
|||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "9.6.3",
|
||||
"version": "9.5.25",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555"
|
||||
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555",
|
||||
"reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
|
||||
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"doctrine/instantiator": "^1.3.1 || ^2",
|
||||
"doctrine/instantiator": "^1.3.1",
|
||||
"ext-dom": "*",
|
||||
"ext-json": "*",
|
||||
"ext-libxml": "*",
|
||||
|
@ -1969,7 +1949,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "9.6-dev"
|
||||
"dev-master": "9.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -2000,7 +1980,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -2016,7 +1996,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-04T13:37:15+00:00"
|
||||
"time": "2022-09-25T03:44:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
|
@ -2384,16 +2364,16 @@
|
|||
},
|
||||
{
|
||||
"name": "sebastian/environment",
|
||||
"version": "5.1.5",
|
||||
"version": "5.1.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/environment.git",
|
||||
"reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
|
||||
"reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
|
||||
"reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
|
||||
"reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2435,7 +2415,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/environment/issues",
|
||||
"source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
|
||||
"source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -2443,7 +2423,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-03T06:03:51+00:00"
|
||||
"time": "2022-04-03T09:37:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
|
@ -2757,16 +2737,16 @@
|
|||
},
|
||||
{
|
||||
"name": "sebastian/recursion-context",
|
||||
"version": "4.0.5",
|
||||
"version": "4.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/recursion-context.git",
|
||||
"reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
|
||||
"reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
|
||||
"reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
|
||||
"reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2805,10 +2785,10 @@
|
|||
}
|
||||
],
|
||||
"description": "Provides functionality to recursively process PHP variables",
|
||||
"homepage": "https://github.com/sebastianbergmann/recursion-context",
|
||||
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
|
||||
"source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
|
||||
"source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -2816,7 +2796,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-03T06:07:39+00:00"
|
||||
"time": "2020-10-26T13:17:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/resource-operations",
|
||||
|
@ -2875,16 +2855,16 @@
|
|||
},
|
||||
{
|
||||
"name": "sebastian/type",
|
||||
"version": "3.2.1",
|
||||
"version": "3.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/type.git",
|
||||
"reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
|
||||
"reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
|
||||
"reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
|
||||
"reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2919,7 +2899,7 @@
|
|||
"homepage": "https://github.com/sebastianbergmann/type",
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/type/issues",
|
||||
"source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
|
||||
"source": "https://github.com/sebastianbergmann/type/tree/3.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -2927,7 +2907,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-03T06:13:03+00:00"
|
||||
"time": "2022-09-12T14:47:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/version",
|
||||
|
@ -3043,8 +3023,8 @@
|
|||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"php": "~8.2",
|
||||
"ext-sodium": "~8.2"
|
||||
"php": "~8.1",
|
||||
"ext-sodium": "~8.1"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\rules\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\rules\views\manager;
|
||||
use mirzaev\site\rules\models\core as models;
|
||||
use mirzaev\site\rules\models\account_model as account;
|
||||
use mirzaev\site\rules\models\session_model as session;
|
||||
|
||||
// Библиотека для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
|
||||
// Фреймворк PHP
|
||||
use mirzaev\minimal\controller;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\core as vk;
|
||||
use mirzaev\vk\robots\user as robot;
|
||||
|
||||
/**
|
||||
* Ядро контроллеров
|
||||
*
|
||||
* @package mirzaev\site\rules\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class core extends controller
|
||||
{
|
||||
/**
|
||||
* Переменные окружения
|
||||
*/
|
||||
protected robot $vk;
|
||||
|
||||
/**
|
||||
* Переменные окружения
|
||||
*/
|
||||
protected array $variables = [];
|
||||
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
|
||||
// Инициализация ядра моделей (соединение с базой данных...)
|
||||
new models();
|
||||
|
||||
// Инициализация журнала ошибок
|
||||
$this->variables['errors'] = [
|
||||
'vk' => []
|
||||
];
|
||||
|
||||
// Инициализация препроцессора представления
|
||||
$this->view = new manager;
|
||||
}
|
||||
}
|
|
@ -1,131 +0,0 @@
|
|||
@import url('/fonts/comissioner.ttf');
|
||||
|
||||
:root {
|
||||
--background-light-3: #403939;
|
||||
--background-light-2: #322d2d;
|
||||
--background-light-1: #2b2525;
|
||||
--background-light : #fff;
|
||||
--background : #f00;
|
||||
--background-dark : #000;
|
||||
--text : #020202;
|
||||
--text-light : #fafafa;
|
||||
--text-hover : #fff;
|
||||
--text-active : #d0d0d0;
|
||||
--red-light-1 : #dc4343;
|
||||
--red-light : #bf3737;
|
||||
--red : #a43333;
|
||||
--red-dark : #8d2a2a;
|
||||
}
|
||||
|
||||
|
||||
* {
|
||||
text-decoration: none;
|
||||
outline : none;
|
||||
border : none;
|
||||
color : var(--text);
|
||||
font-family : 'Commissioner', Roboto, sans-serif;
|
||||
transition : 0.1s ease-out;
|
||||
}
|
||||
|
||||
.unselectable {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select : none;
|
||||
-khtml-user-select : none;
|
||||
-moz-user-select : none;
|
||||
-ms-user-select : none;
|
||||
user-select : none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--text-hover);
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: var(--text-active);
|
||||
}
|
||||
|
||||
body {
|
||||
margin : 0;
|
||||
padding-top: 20vh;
|
||||
padding-bottom: 10vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color : var(--background);
|
||||
}
|
||||
|
||||
aside {
|
||||
z-index : 500;
|
||||
}
|
||||
|
||||
div#wrap {
|
||||
margin-left: 50vw;
|
||||
position: relative;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
div#wrap>img#masha {
|
||||
z-index: 1500;
|
||||
width: 333px;
|
||||
height: 394px;
|
||||
}
|
||||
|
||||
div#wrap>img#hand{
|
||||
z-index: 500;
|
||||
left: -30px;
|
||||
bottom: -10px;
|
||||
width: 70px;
|
||||
height: 88px;
|
||||
position: absolute;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
div#wrap>img#knife {
|
||||
z-index: 100500;
|
||||
left: calc(-112px + 70px - 40px);
|
||||
bottom: calc(-273px + 88px + 30px);
|
||||
width: 112px;
|
||||
height: 273px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
header {
|
||||
z-index : 5000;
|
||||
width: 800px;
|
||||
height: 100px;
|
||||
margin: 0 auto;
|
||||
display : flex;
|
||||
border-radius: 3px 3px 0 0;
|
||||
background-color: var(--background-dark);
|
||||
}
|
||||
|
||||
header>h1 {
|
||||
margin: auto;
|
||||
font-size: 2.5rem;
|
||||
color: var(--text-light);
|
||||
}
|
||||
|
||||
main {
|
||||
z-index : 1000;
|
||||
width: 800px;
|
||||
margin: 0 auto;
|
||||
border-radius: 0 0 3px 3px;
|
||||
background-color: var(--background-light)
|
||||
}
|
||||
|
||||
main>ol {
|
||||
margin: 50px 100px;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
main>ol>li {
|
||||
padding-left: 40px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
main>ol>li::marker {
|
||||
/* font-size: 1.3rem; */
|
||||
}
|
||||
|
||||
footer {
|
||||
z-index : 3000;
|
||||
}
|
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 21 KiB |
|
@ -1,19 +0,0 @@
|
|||
{% block css %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div id="wrap" >
|
||||
<img id="masha" src="/images/photo_with_kitten.png" alt="Кошка Маша">
|
||||
<img id="hand" src="/images/photo_with_hand.png" alt="я помню бебра большой">
|
||||
<img id="knife" src="/images/photo_with_knife.png" alt="почему адблок сучара банит мои картинки">
|
||||
</div>
|
||||
<header>
|
||||
<h1 class="unselectable">ПРАВИЛА БЕСЕДЫ</h1>
|
||||
</header>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{% endblock %}
|
|
@ -1,160 +0,0 @@
|
|||
<ol>
|
||||
<li>чоколад запрещено</li>
|
||||
<li>пажилой запрещено</li>
|
||||
<li>запрещено бдабдабаб</li>
|
||||
<li>чи да запрещено</li>
|
||||
<li>а шо запрещено</li>
|
||||
<li>не быть дебилом</li>
|
||||
<li>Админ всегда прав</li>
|
||||
<li>админа не тролить</li>
|
||||
<li>гоша джикия запрещен</li>
|
||||
<li>Егор Родин запрещен</li>
|
||||
<br>
|
||||
<li>у нас будет сервер майнкрафт</li>
|
||||
<li>рофлить запрещено</li>
|
||||
<li>Мария Мышкина запрещена</li>
|
||||
<li>ПОРНО ЗАПРЕЩЕНО (16+)</li>
|
||||
<li>сиськи запрещены</li>
|
||||
<li>я реально кикну</li>
|
||||
<li>Пишешь не кошку? могу мут выдать 1 час</li>
|
||||
<li>пингуешь меня по хуйне? мут 1 день</li>
|
||||
<li>СПОЙЛЕРИТЬ КОШКУ С ТВИТТЕРА ЗАПРЕЩЕНО</li>
|
||||
<li>ЗАПРЕЩЕНО Я СКАЗАЛ Я НЕ ШУЧУ НАХУЙ</li>
|
||||
<br>
|
||||
<li>Попы тоже запрещено особенно Маши</li>
|
||||
<li>ладно сиси можно</li>
|
||||
<li>чичас запрещено</li>
|
||||
<li>делать что я скажу</li>
|
||||
<li>ладно прошлое правило это шутка)</li>
|
||||
<li>ауе запрещено</li>
|
||||
<li>не оскорблять кошку стикерами</li>
|
||||
<li>жмых запрещен во всех проявлениях</li>
|
||||
<li>жмыхать запрещено</li>
|
||||
<li>ЧСВ запрещено</li>
|
||||
<br>
|
||||
<li>попы разрешены только если не видно того самого</li>
|
||||
<li>враньше разрешено потому что это нормально</li>
|
||||
<li>Attentionwhore запрещены</li>
|
||||
<li>картинки в меру будет много убью</li>
|
||||
<li>Саша Синтаров запрещен</li>
|
||||
<li>не обамить</li>
|
||||
<li>аудиоприколы про Арсена запрещены</li>
|
||||
<li>рэп запрещен (законпроект Фурсовой)</li>
|
||||
<li>сказал "говнявила" заблоикрован</li>
|
||||
<li>хуявило употреблять запрещено</li>
|
||||
<br>
|
||||
<li>пиздявила употреблять запрещено</li>
|
||||
<li>оскорбление правил запрещено поняли суки? теперь че</li>
|
||||
<li>СРАТЬ ЗАПРЕЩЕНО</li>
|
||||
<li>Спам запрещен</li>
|
||||
<li>На дуэли проебал не вернем никогда</li>
|
||||
<li>Жир запрещен</li>
|
||||
<li>у нас есть сервер майнкрафт</li>
|
||||
<li>Дуэли запрещены</li>
|
||||
<li>ножи запрещены выгоню</li>
|
||||
<br>
|
||||
<li value="51">пипи эпи запрещен</li>
|
||||
<li>чересчур умничать запрещено</li>
|
||||
<li>быть подписанным на паблик</li>
|
||||
<li>ЛЮБИТЬ КОШКУ МАШКУ</li>
|
||||
<li>демократия запрещена</li>
|
||||
<li>грязнули разрешены</li>
|
||||
<li>брух bruh запрещен</li>
|
||||
<li>oof запрещен</li>
|
||||
<li>чуитс запрещено</li>
|
||||
<li>кринжевать запрещено</li>
|
||||
<br>
|
||||
<li>русские националисты не приветствуются</li>
|
||||
<li>любые националисты тоже</li>
|
||||
<li>упоминать правило №50 запрещено</li>
|
||||
<li>будете помогать заблокированным заблокирую</li>
|
||||
<li>не керокерокать</li>
|
||||
<li>На тупые вопросы не отвечаем</li>
|
||||
<li>Так называемые "мемы" запрещены</li>
|
||||
<li>Вопросы по серверу в паблике сервера или беседе сервера</li>
|
||||
<li>спойлерить запрещено суки</li>
|
||||
<li>ЛАДНО кошатник разрешено 6+ но если адекват</li>
|
||||
<br>
|
||||
<li>Мир тьмы разрешен (кодзимов попросил)</li>
|
||||
<li>Вредные советы давать СТРОГО запрещено</li>
|
||||
<li>пропаганда психотропных веществ запрещена наркалыги ёбаные идите долбите анус свой тупые суки</li>
|
||||
<li>за оскорбления извините</li>
|
||||
<li>триган дэ вне закона (законпроект Динозавра)</li>
|
||||
<li>Не ведите себя как быдло</li>
|
||||
<li>объяснять что такое буккаке запрещено</li>
|
||||
<li>веп панк запрещен</li>
|
||||
<li>I Hate Myself For Loving You ЗАПРЕЩЕН</li>
|
||||
<li>доминировать как быдло типо мне похуй хаха мне похуй или ты с кем разговариваешь и картинки кидать запрещено</li>
|
||||
<br>
|
||||
<li>друзья Даркью Пельменя и он сам запрещены</li>
|
||||
<li>Носок Террохин запрещен</li>
|
||||
<li>Не оскорблять отель Хасбин</li>
|
||||
<li>Даркью Пельмень запрещен</li>
|
||||
<li>Андрей Останин запрещен</li>
|
||||
<li>НЕ СПОЙЛЕРИТЬ КОШКУ ЕЩЁ РАЗ ГОВОРЮ В ГРУППЕ КОШКА И НАХУЙ ПУБЛИКОВАТЬ ЕСЛИ ЕЁ ВСЕ ВИДЕЛИ. КТО СПОЙЛЕРИТ ВЕЧНЫЙ БАН. БЫЛ ТУТ ОДИН....</li>
|
||||
<li>хамуд запрещён</li>
|
||||
<li>нуждики разрешены (общим голосованием)</li>
|
||||
<li>хамуд теперь разрешён чтобы не было червячков</li>
|
||||
<li>ПОЛИТИКА ЗАПРЕЩЕНА (можно в беседе Альянса З.)</li>
|
||||
<br>
|
||||
<li>Оскорбления не в шутку запрещены</li>
|
||||
<li>Паблик "Оскорбления животных" запрещён</li>
|
||||
<li>Мужские органы может показывать только Дима Горшенин</li>
|
||||
<li>Алибека Захарова не трогать, ему не хочется общаться</li>
|
||||
<li>хрустящий малыш</li>
|
||||
<li>поддерживающим россию в войне с украиной моментальный бан без объяснения причин</li>
|
||||
<li>Random-Favorite Character ни о чём не просить</li>
|
||||
<li>Елизавета Кишкомотина (vk.com/id201222738) запрещена</li>
|
||||
<li>тупить разрешено 1 раз в течение 30 минут</li>
|
||||
<li>срать в группу запрещено</li>
|
||||
<br>
|
||||
<li>набивать репутацию друг другу запрещено</li>
|
||||
<li>писать хуйню запрещено</li>
|
||||
<li>толерантность разрешена</li>
|
||||
<li>правила теперь есть</li>
|
||||
<li>я могу выгонять зашедших по поиску долбаёбов</li>
|
||||
<li>про овечек писать только хорошее</li>
|
||||
<li>даркью пельмень и его шпана запрещены</li>
|
||||
<li>клишированные долбаёбы запрещены</li>
|
||||
<li>обсирать анархию ЗАПРЕЩЕНО</li>
|
||||
<li>Влада Грибоедина (vk.com/id368523707) запрещена</li>
|
||||
<br>
|
||||
<li>критиковать правила запрещено</li>
|
||||
<li>лайки ставить в группе партии горничные</li>
|
||||
<li>Любить родину</li>
|
||||
<li>всем девушкам випки</li>
|
||||
<li>читать анарзию</li>
|
||||
<li>Тупить запрещено</li>
|
||||
<li>Тупые вопросы запрещены</li>
|
||||
<li>не употреблять словосочетание ловушка джокера</li>
|
||||
<li>я могу банить за неадекватные публикации, спам и флуд по своему желанию</li>
|
||||
<li>кто зашел намеренно срать не скрывал это и не общался наказание пролом нижней челюсти</li>
|
||||
<br>
|
||||
<li>писать мне похуй запрещено</li>
|
||||
<li>писать ок запрещено</li>
|
||||
<li>писать + запрещено</li>
|
||||
<li>писать + разрешено</li>
|
||||
<li>Администратор имеет право забанить человека если он сам того пожелал</li>
|
||||
<li>15.01.2022 в 20:39 здесь ничего не произошло</li>
|
||||
<li>снюс запрещён (законпроект Никиты Вальбдаузера)</li>
|
||||
<li>мясо запрещено</li>
|
||||
<li>мясо запрещено</li>
|
||||
<li>всех погибших исключают из беседы</li>
|
||||
<br>
|
||||
<li>если чувак видно что зашел насрать а не общаться то я воспринимаю это как флуд и распрояжаюсь по правилу 129</li>
|
||||
<li>Отказался читать правила получишь пизды</li>
|
||||
<li>упоминание непризнанных альянсов запрещено</li>
|
||||
<li>Все группы которые выставляют себя за Альянс Добряков запрещены</li>
|
||||
<li>мнемотехника охуенна</li>
|
||||
<li>главное — БУДЬТЕ БЛЯДЬ ЛЮДЬМИ, серьёзно.</li>
|
||||
<li>играть в аллоды онлайн на сервере приют</li>
|
||||
<li>какого хуя вы не общаетесь весь день и как только я начинаю что-то рассказывать перебиваете меня и рассказываете свою тупую хуйню?</li>
|
||||
<li>мясо запрещено</li>
|
||||
<li>В БЕСЕДЕ ПРАВИЛ НЕТ</li>
|
||||
<br>
|
||||
<li>обсуждение и показ трупов запрещены</li>
|
||||
<li>знать все серии пони ОБЯЗАТЕЛЬНО</li>
|
||||
<li>подисаться на мой ютуб канал</li>
|
||||
<li>сдать тест на знание песен инстасамки</li>
|
||||
<li>шарить за бебру</li>
|
||||
</ol>
|
|
@ -0,0 +1,147 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\controllers\core;
|
||||
use mirzaev\site\virus\models\account_model as account;
|
||||
use mirzaev\site\virus\models\session_model as session;
|
||||
use mirzaev\site\virus\models\vk_model as vk;
|
||||
|
||||
// Библиотека для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
use SebastianBergmann\Type\ObjectType;
|
||||
use stdClass;
|
||||
|
||||
// Фреймворк для ВКонтакте
|
||||
use mirzaev\vk\core as api;
|
||||
|
||||
/**
|
||||
* Контроллер аккаунтов
|
||||
*
|
||||
* @package mirzaev\site\virus\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class account_controller extends core
|
||||
{
|
||||
/**
|
||||
* Страница профиля
|
||||
*
|
||||
* @param array $parameters Параметры запроса
|
||||
*/
|
||||
public function index(array $parameters = []): ?string
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
* @param array $parameters Параметры запроса
|
||||
*/
|
||||
public function initialization(array $parameters = []): ?string
|
||||
{
|
||||
if ($this->variables['account'] instanceof _document) {
|
||||
// Найден аккаунт
|
||||
|
||||
if ($this->variables['vk'] instanceof _document) {
|
||||
// Найден аккаунт ВКонтакте
|
||||
|
||||
// Инициализация данных аккаунта ВКонтакте
|
||||
vk::parse($this->variables['vk'], $this->variables['errors']['vk']);
|
||||
}
|
||||
|
||||
// Запись кода ответа
|
||||
http_response_code(200);
|
||||
|
||||
return null;
|
||||
} else {
|
||||
// Не найден аккаунт
|
||||
|
||||
// Запись кода ответа
|
||||
http_response_code(401);
|
||||
|
||||
// Запись заголовка ответа с ключом аккаунта
|
||||
header('session: ' . $this->variables['session']->hash);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Запись кода ответа
|
||||
http_response_code(500);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Связь аккаунта с аккаунтом ВКонтакте
|
||||
*
|
||||
* @param array $parameters Параметры запроса
|
||||
*/
|
||||
public function connect(array $parameters = []): ?string
|
||||
{
|
||||
if ($this->variables['session']->hash === $parameters['state']) {
|
||||
// Совпадает хеш сессии с полученным хешем из ответа ВКонтакте
|
||||
|
||||
if (!empty($response = vk::key($parameters['code'], $this->variables['errors']['vk']))) {
|
||||
// Получены данные аккаунта ВКонтакте
|
||||
|
||||
if (($this->variables['vk'] = vk::initialization($response, $this->variables['errors']['vk'])) instanceof _document) {
|
||||
// Инициализирован аккаунт ВКонтакте
|
||||
|
||||
if (($this->variables['account'] = vk::account($this->variables['vk'])) instanceof _document) {
|
||||
// Найден аккаунт (существующий)
|
||||
|
||||
if (session::connect($this->variables['session'], $this->variables['account'], $this->variables['errors']['session'])) {
|
||||
// Связана сессия с аккаунтом
|
||||
}
|
||||
} else if (($this->variables['account'] = account::create($this->variables['errors']['account'])) instanceof _document) {
|
||||
// Найден аккаунт (создан новый)
|
||||
|
||||
if (session::connect($this->variables['session'], $this->variables['account'], $this->variables['errors']['session'])) {
|
||||
// Связана сессия с аккаунтом
|
||||
|
||||
if (account::connect($this->variables['account'], $this->variables['vk'], $this->variables['errors']['account'])) {
|
||||
// Связан аккаунт с аккаунтом ВКонтакте
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Инициализация робота для аккаунта ВКонтакте
|
||||
$this->vk = api::init()->user(key: $this->variables['vk']->access['key']);
|
||||
|
||||
if ($this->variables['vk'] instanceof _document) {
|
||||
// Инициализирован робот для аккаунта ВКонтакте
|
||||
|
||||
// Инициализация данных аккаунта ВКонтакте
|
||||
$data = vk::parse($this->vk, $this->variables['errors']['vk']);
|
||||
var_dump($data); die;
|
||||
|
||||
if ($data instanceof stdClass) {
|
||||
// Получены данные ВКонтакте
|
||||
|
||||
// Запись в базу данных
|
||||
vk::update($this->variables['vk'], $data, $this->variables['errors']['vk']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Генерация представления
|
||||
return $this->view->render(DIRECTORY_SEPARATOR . 'account' . DIRECTORY_SEPARATOR . 'vk.html', $this->variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Генерация панели аккаунта
|
||||
*
|
||||
* @param array $parameters Параметры запроса
|
||||
*/
|
||||
public function panel(array $parameters = []): ?string
|
||||
{
|
||||
// Генерация представления
|
||||
return $this->view->render(DIRECTORY_SEPARATOR . 'account' . DIRECTORY_SEPARATOR . 'panel.html', $this->variables);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\views\manager;
|
||||
use mirzaev\site\virus\models\core as models;
|
||||
use mirzaev\site\virus\models\account_model as account;
|
||||
use mirzaev\site\virus\models\session_model as session;
|
||||
|
||||
// Библиотека для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
|
||||
// Фреймворк PHP
|
||||
use mirzaev\minimal\controller;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\core as vk;
|
||||
use mirzaev\vk\robots\user as robot;
|
||||
|
||||
/**
|
||||
* Ядро контроллеров
|
||||
*
|
||||
* @package mirzaev\site\virus\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class core extends controller
|
||||
{
|
||||
/**
|
||||
* Переменные окружения
|
||||
*/
|
||||
protected robot $vk;
|
||||
|
||||
/**
|
||||
* Переменные окружения
|
||||
*/
|
||||
protected array $variables = [];
|
||||
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Инициализация ядра моделей (соединение с базой данных...)
|
||||
new models();
|
||||
|
||||
// Инициализация журнала ошибок
|
||||
$this->variables['errors'] = [
|
||||
'session' => [],
|
||||
'account' => [],
|
||||
'vk' => []
|
||||
];
|
||||
|
||||
// Инициализация даты до которой будет активна сессия
|
||||
$expires = time() + 604800;
|
||||
|
||||
// Инициализация сессии (без журналирования)
|
||||
$this->variables['session'] = session::initialization($_COOKIE["session"] ?? null, $expires) ?? header('Location: https://virus.mirzaev.sexy/error?code=500&text=Не+удалось+инициализировать+сессию');
|
||||
|
||||
if ($_COOKIE["session"] ?? null !== $this->variables['session']->hash) {
|
||||
// Изменился хеш сессии (подразумевается, что сессия устарела)
|
||||
|
||||
// Запись хеша новой сессии
|
||||
setcookie('session', $this->variables['session']->hash, [
|
||||
'expires' => $expires,
|
||||
'domain' => 'virus.mirzaev.sexy',
|
||||
'path' => '/',
|
||||
'secure' => true,
|
||||
'httponly' => true,
|
||||
'samesite' => 'strict'
|
||||
]);
|
||||
}
|
||||
|
||||
// Инициализация аккаунта (без журналирования)
|
||||
$this->variables['account'] = session::account($this->variables['session']);
|
||||
|
||||
if ($this->variables['account'] instanceof _document) {
|
||||
// Инициализирован аккаунт
|
||||
|
||||
// Инициализация аккаунта ВКонтакте (без журналирования)
|
||||
$this->variables['vk'] = account::vk($this->variables['account']);
|
||||
|
||||
if ($this->variables['vk'] instanceof _document) {
|
||||
// Инициализирован аккаунт ВКонтакте
|
||||
|
||||
// Инициализация робота для аккаунта ВКонтакте
|
||||
$this->vk = vk::init()->user(key: $this->variables['vk']->access['key']);
|
||||
} else unset($this->variables['account'], $this->variables['vk']);
|
||||
}
|
||||
|
||||
// Инициализация препроцессора представления
|
||||
$this->view = new manager;
|
||||
}
|
||||
}
|
88
mirzaev/site/rules/system/controllers/error_controller.php → mirzaev/site/virus/system/controllers/error_controller.php
Executable file → Normal file
|
@ -1,44 +1,44 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\rules\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\rules\controllers\core;
|
||||
|
||||
/**
|
||||
* Контроллер ошибок
|
||||
*
|
||||
* @package mirzaev\site\rules\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\controllers\core;
|
||||
|
||||
/**
|
||||
* Контроллер ошибок
|
||||
*
|
||||
* @package mirzaev\site\virus\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
164
mirzaev/site/rules/system/controllers/hotline_controller.php → mirzaev/site/virus/system/controllers/hotline_controller.php
Executable file → Normal file
|
@ -1,82 +1,82 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\rules\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\rules\controllers\core;
|
||||
|
||||
/**
|
||||
* Контроллер бегущей строки
|
||||
*
|
||||
* @package mirzaev\site\rules\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class hotline_controller extends core
|
||||
{
|
||||
/**
|
||||
* Страница с бегущей строкой
|
||||
*
|
||||
* Можно использовать совместно с элементом <iframe> для изоляции
|
||||
* содержимого бегущей строки от поисковых роботов
|
||||
*
|
||||
* @param array $parameters
|
||||
*/
|
||||
public function index(array $parameters = []): ?string
|
||||
{
|
||||
// Инициализация элементов для генерации в головном элементе
|
||||
$this->variables['head'] = [
|
||||
'title' => 'Бегущая строка',
|
||||
'metas' => [
|
||||
[
|
||||
'attributes' => [
|
||||
'name' => 'robots',
|
||||
'content' => 'nofollow'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
// Инициализация бегущей строки
|
||||
$this->variables['hotline'] = [
|
||||
'id' => $this->variables['request']['id'] ?? 'hotline'
|
||||
];
|
||||
|
||||
// Инициализация параметров бегущей строки
|
||||
$this->variables['hotline']['parameters'] = [
|
||||
// 'step' => 2
|
||||
];
|
||||
|
||||
// Инициализация аттрибутов бегущей строки
|
||||
$this->variables['hotline']['attributes'] = [
|
||||
|
||||
];
|
||||
|
||||
// Инициализация элементов бегущей строки
|
||||
$this->variables['hotline']['elements'] = [
|
||||
['content' => '1'],
|
||||
[
|
||||
'tag' => 'article',
|
||||
'content' => '2'
|
||||
],
|
||||
['content' => '3'],
|
||||
['content' => '4'],
|
||||
['content' => '5'],
|
||||
['content' => '6'],
|
||||
['content' => '7'],
|
||||
['content' => '8'],
|
||||
['content' => '9'],
|
||||
['content' => '10'],
|
||||
['content' => '11'],
|
||||
['content' => '12'],
|
||||
['content' => '13'],
|
||||
['content' => '14'],
|
||||
['content' => '15']
|
||||
];
|
||||
|
||||
// Генерация представления
|
||||
return $this->view->render(DIRECTORY_SEPARATOR . 'hotline' . DIRECTORY_SEPARATOR . 'index.html', $this->variables);
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\controllers\core;
|
||||
|
||||
/**
|
||||
* Контроллер бегущей строки
|
||||
*
|
||||
* @package mirzaev\site\virus\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class hotline_controller extends core
|
||||
{
|
||||
/**
|
||||
* Страница с бегущей строкой
|
||||
*
|
||||
* Можно использовать совместно с элементом <iframe> для изоляции
|
||||
* содержимого бегущей строки от поисковых роботов
|
||||
*
|
||||
* @param array $parameters
|
||||
*/
|
||||
public function index(array $parameters = []): ?string
|
||||
{
|
||||
// Инициализация элементов для генерации в головном элементе
|
||||
$this->variables['head'] = [
|
||||
'title' => 'Бегущая строка',
|
||||
'metas' => [
|
||||
[
|
||||
'attributes' => [
|
||||
'name' => 'robots',
|
||||
'content' => 'nofollow'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
// Инициализация бегущей строки
|
||||
$this->variables['hotline'] = [
|
||||
'id' => $this->variables['request']['id'] ?? 'hotline'
|
||||
];
|
||||
|
||||
// Инициализация параметров бегущей строки
|
||||
$this->variables['hotline']['parameters'] = [
|
||||
// 'step' => 2
|
||||
];
|
||||
|
||||
// Инициализация аттрибутов бегущей строки
|
||||
$this->variables['hotline']['attributes'] = [
|
||||
|
||||
];
|
||||
|
||||
// Инициализация элементов бегущей строки
|
||||
$this->variables['hotline']['elements'] = [
|
||||
['content' => '1'],
|
||||
[
|
||||
'tag' => 'article',
|
||||
'content' => '2'
|
||||
],
|
||||
['content' => '3'],
|
||||
['content' => '4'],
|
||||
['content' => '5'],
|
||||
['content' => '6'],
|
||||
['content' => '7'],
|
||||
['content' => '8'],
|
||||
['content' => '9'],
|
||||
['content' => '10'],
|
||||
['content' => '11'],
|
||||
['content' => '12'],
|
||||
['content' => '13'],
|
||||
['content' => '14'],
|
||||
['content' => '15']
|
||||
];
|
||||
|
||||
// Генерация представления
|
||||
return $this->view->render(DIRECTORY_SEPARATOR . 'hotline' . DIRECTORY_SEPARATOR . 'index.html', $this->variables);
|
||||
}
|
||||
|
||||
}
|
142
mirzaev/site/rules/system/controllers/index_controller.php → mirzaev/site/virus/system/controllers/index_controller.php
Executable file → Normal file
|
@ -1,71 +1,71 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\rules\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\rules\controllers\core;
|
||||
|
||||
/**
|
||||
* Контроллер основной страницы
|
||||
*
|
||||
* @package mirzaev\site\rules\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class index_controller extends core
|
||||
{
|
||||
/**
|
||||
* Главная страница
|
||||
*
|
||||
* @param array $parameters Параметры запроса
|
||||
*/
|
||||
public function index(array $parameters = []): ?string
|
||||
{
|
||||
// Инициализация загружаемых категорий
|
||||
$this->variables['include'] = [
|
||||
'head' => ['self'],
|
||||
'body' => ['self']
|
||||
];
|
||||
|
||||
// Инициализация бегущей строки
|
||||
$this->variables['hotline'] = [
|
||||
'id' => $this->variables['request']['id'] ?? 'hotline'
|
||||
];
|
||||
|
||||
// Инициализация параметров бегущей строки
|
||||
$this->variables['hotline']['parameters'] = [
|
||||
// 'step' => 2
|
||||
];
|
||||
|
||||
// Инициализация аттрибутов бегущей строки
|
||||
$this->variables['hotline']['attributes'] = [
|
||||
|
||||
];
|
||||
|
||||
// Инициализация элементов бегущей строки
|
||||
$this->variables['hotline']['elements'] = [
|
||||
['content' => '1'],
|
||||
[
|
||||
'tag' => 'article',
|
||||
'content' => '2'
|
||||
],
|
||||
['content' => '3'],
|
||||
['content' => '4'],
|
||||
['content' => '5'],
|
||||
['content' => '6'],
|
||||
['content' => '7'],
|
||||
['content' => '8'],
|
||||
['content' => '9'],
|
||||
['content' => '10'],
|
||||
['content' => '11'],
|
||||
['content' => '12'],
|
||||
['content' => '13'],
|
||||
['content' => '14'],
|
||||
['content' => '15']
|
||||
];
|
||||
|
||||
// Генерация представления
|
||||
return $this->view->render(DIRECTORY_SEPARATOR . 'index.html', $this->variables);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\controllers\core;
|
||||
|
||||
/**
|
||||
* Контроллер основной страницы
|
||||
*
|
||||
* @package mirzaev\site\virus\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class index_controller extends core
|
||||
{
|
||||
/**
|
||||
* Главная страница
|
||||
*
|
||||
* @param array $parameters Параметры запроса
|
||||
*/
|
||||
public function index(array $parameters = []): ?string
|
||||
{
|
||||
// Инициализация загружаемых категорий
|
||||
$this->variables['include'] = [
|
||||
'head' => ['self'],
|
||||
'body' => ['self']
|
||||
];
|
||||
|
||||
// Инициализация бегущей строки
|
||||
$this->variables['hotline'] = [
|
||||
'id' => $this->variables['request']['id'] ?? 'hotline'
|
||||
];
|
||||
|
||||
// Инициализация параметров бегущей строки
|
||||
$this->variables['hotline']['parameters'] = [
|
||||
// 'step' => 2
|
||||
];
|
||||
|
||||
// Инициализация аттрибутов бегущей строки
|
||||
$this->variables['hotline']['attributes'] = [
|
||||
|
||||
];
|
||||
|
||||
// Инициализация элементов бегущей строки
|
||||
$this->variables['hotline']['elements'] = [
|
||||
['content' => '1'],
|
||||
[
|
||||
'tag' => 'article',
|
||||
'content' => '2'
|
||||
],
|
||||
['content' => '3'],
|
||||
['content' => '4'],
|
||||
['content' => '5'],
|
||||
['content' => '6'],
|
||||
['content' => '7'],
|
||||
['content' => '8'],
|
||||
['content' => '9'],
|
||||
['content' => '10'],
|
||||
['content' => '11'],
|
||||
['content' => '12'],
|
||||
['content' => '13'],
|
||||
['content' => '14'],
|
||||
['content' => '15']
|
||||
];
|
||||
|
||||
// Генерация представления
|
||||
return $this->view->render(DIRECTORY_SEPARATOR . 'index.html', $this->variables);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\models;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\models\vk_model as vk;
|
||||
|
||||
// Фреймворк ArangoDB
|
||||
use mirzaev\arangodb\collection,
|
||||
mirzaev\arangodb\document;
|
||||
|
||||
// Библиотека для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
|
||||
// Встроенные библиотеки
|
||||
use exception;
|
||||
|
||||
/**
|
||||
* Модель регистрации, аутентификации и авторизации
|
||||
*
|
||||
* @package mirzaev\site\virus\models
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class account_model extends core
|
||||
{
|
||||
/**
|
||||
* Коллекция
|
||||
*/
|
||||
public const COLLECTION = 'account';
|
||||
|
||||
/**
|
||||
* Создать
|
||||
*
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция аккаунта, если удалось создать
|
||||
*/
|
||||
public static function create(array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (collection::init(static::$db->session, self::COLLECTION)) {
|
||||
// Инициализирована коллекция
|
||||
|
||||
// Запись аккаунта в базу данных
|
||||
$_id = document::write(static::$db->session, self::COLLECTION);
|
||||
|
||||
if ($account = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR d IN %s
|
||||
FILTER d._id == '$_id'
|
||||
RETURN d
|
||||
AQL,
|
||||
self::COLLECTION
|
||||
))) {
|
||||
// Найден созданный аккаунт
|
||||
|
||||
return $account;
|
||||
} else throw new exception('Не удалось создать аккаунт');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Связь аккаунта с аккаунтом ВКонтакте
|
||||
*
|
||||
* @param _document $account Инстанция аккаунта
|
||||
* @param _document $vk Инстанция аккаунта ВКонтакте
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return bool Статус выполнения
|
||||
*/
|
||||
public static function connect(_document $account, _document $vk, array &$errors = []): bool
|
||||
{
|
||||
try {
|
||||
if (
|
||||
collection::init(static::$db->session, self::COLLECTION)
|
||||
&& collection::init(static::$db->session, vk::COLLECTION)
|
||||
&& collection::init(static::$db->session, self::COLLECTION . '_edge_' . vk::COLLECTION, true)
|
||||
) {
|
||||
// Инициализированы коллекции
|
||||
|
||||
if (document::write(static::$db->session, self::COLLECTION . '_edge_' . vk::COLLECTION, [
|
||||
'_from' => $account->getId(),
|
||||
'_to' => $vk->getId()
|
||||
])) {
|
||||
// Создано ребро: account -> vk
|
||||
|
||||
return true;
|
||||
} else throw new exception('Не удалось создать ребро: account -> vk');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Поиск связанного аккаунта ВКонтакте
|
||||
*
|
||||
* @param _document $account Инстанция аккаунта
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция аккаунта, если удалось найти
|
||||
*/
|
||||
public static function vk(_document $account, array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (
|
||||
collection::init(static::$db->session, self::COLLECTION)
|
||||
&& collection::init(static::$db->session, vk::COLLECTION)
|
||||
&& collection::init(static::$db->session, self::COLLECTION . '_edge_' . vk::COLLECTION, true)
|
||||
) {
|
||||
// Инициализирована коллекция
|
||||
|
||||
if ($vk = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR document IN %s
|
||||
LET edge = (
|
||||
FOR edge IN %s
|
||||
FILTER edge._from == '%s'
|
||||
SORT edge._key DESC
|
||||
LIMIT 1
|
||||
RETURN edge
|
||||
)
|
||||
FILTER document._id == edge[0]._to
|
||||
LIMIT 1
|
||||
RETURN document
|
||||
AQL,
|
||||
vk::COLLECTION,
|
||||
self::COLLECTION . '_edge_' . vk::COLLECTION,
|
||||
$account->getId()
|
||||
))) {
|
||||
// Найден аккаунт ВКонтакте
|
||||
|
||||
return $vk;
|
||||
} else throw new exception('Не удалось найти аккаунт ВКонтакте');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
260
mirzaev/site/rules/system/models/core.php → mirzaev/site/virus/system/models/core.php
Executable file → Normal file
|
@ -1,117 +1,143 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\rules\models;
|
||||
|
||||
use mirzaev\minimal\model;
|
||||
|
||||
use mirzaev\arangodb\connection;
|
||||
|
||||
use exception;
|
||||
|
||||
/**
|
||||
* Ядро моделей
|
||||
*
|
||||
* @package mirzaev\site\rules\models
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class core extends model
|
||||
{
|
||||
/**
|
||||
* Записать свойство
|
||||
*
|
||||
* @param string $name Название
|
||||
* @param mixed $value Значение
|
||||
*/
|
||||
public function __set(string $name, mixed $value = null): void
|
||||
{
|
||||
match ($name) {
|
||||
'db' => (function () use ($value) {
|
||||
if ($this->__isset('db')) {
|
||||
// Свойство уже было инициализировано
|
||||
|
||||
// Выброс исключения (неудача)
|
||||
throw new exception('Запрещено реинициализировать соединение с базой данных ($this->db)', 500);
|
||||
} else {
|
||||
// Свойство ещё не было инициализировано
|
||||
|
||||
if ($value instanceof connection) {
|
||||
// Передано подходящее значение
|
||||
|
||||
// Запись свойства (успех)
|
||||
self::$db = $value;
|
||||
} else {
|
||||
// Передано неподходящее значение
|
||||
|
||||
// Выброс исключения (неудача)
|
||||
throw new exception('Соединение с базой данных ($this->db) должен быть инстанцией mirzaev\arangodb\connection', 500);
|
||||
}
|
||||
}
|
||||
})(),
|
||||
default => parent::__set($name, $value)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Прочитать свойство
|
||||
*
|
||||
* @param string $name Название
|
||||
*
|
||||
* @return mixed Содержимое
|
||||
*/
|
||||
public function __get(string $name): mixed
|
||||
{
|
||||
return match ($name) {
|
||||
'db' => (function () {
|
||||
if (!$this->__isset('db')) {
|
||||
// Свойство не инициализировано
|
||||
|
||||
// Инициализация значения по умолчанию исходя из настроек
|
||||
$this->__set('db', new connection(require static::SETTINGS));
|
||||
}
|
||||
|
||||
return self::$db;
|
||||
})(),
|
||||
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)
|
||||
};
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\models;
|
||||
|
||||
use mirzaev\minimal\model;
|
||||
|
||||
use mirzaev\arangodb\connection;
|
||||
|
||||
use exception;
|
||||
|
||||
/**
|
||||
* Ядро моделей
|
||||
*
|
||||
* @package mirzaev\site\virus\models
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class core extends model
|
||||
{
|
||||
/**
|
||||
* Коллекция в которой хранятся аккаунты
|
||||
*/
|
||||
public const SETTINGS = '../settings/arangodb.php';
|
||||
|
||||
/**
|
||||
* Соединение с базой данных
|
||||
*/
|
||||
protected static connection $db;
|
||||
|
||||
public function __construct(connection $db = null)
|
||||
{
|
||||
if (isset($db)) {
|
||||
// Получена инстанция соединения с базой данных
|
||||
|
||||
// Запись и инициализация соединения с базой данных
|
||||
$this->__set('db', $db);
|
||||
} else {
|
||||
// Не получена инстанция соединения с базой данных
|
||||
|
||||
// Инициализация соединения с базой данных по умолчанию
|
||||
$this->__get('db');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Записать свойство
|
||||
*
|
||||
* @param string $name Название
|
||||
* @param mixed $value Значение
|
||||
*/
|
||||
public function __set(string $name, mixed $value = null): void
|
||||
{
|
||||
match ($name) {
|
||||
'db' => (function () use ($value) {
|
||||
if ($this->__isset('db')) {
|
||||
// Свойство уже было инициализировано
|
||||
|
||||
// Выброс исключения (неудача)
|
||||
throw new exception('Запрещено реинициализировать соединение с базой данных ($this->db)', 500);
|
||||
} else {
|
||||
// Свойство ещё не было инициализировано
|
||||
|
||||
if ($value instanceof connection) {
|
||||
// Передано подходящее значение
|
||||
|
||||
// Запись свойства (успех)
|
||||
self::$db = $value;
|
||||
} else {
|
||||
// Передано неподходящее значение
|
||||
|
||||
// Выброс исключения (неудача)
|
||||
throw new exception('Соединение с базой данных ($this->db) должен быть инстанцией mirzaev\arangodb\connection', 500);
|
||||
}
|
||||
}
|
||||
})(),
|
||||
default => parent::__set($name, $value)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Прочитать свойство
|
||||
*
|
||||
* @param string $name Название
|
||||
*
|
||||
* @return mixed Содержимое
|
||||
*/
|
||||
public function __get(string $name): mixed
|
||||
{
|
||||
return match ($name) {
|
||||
'db' => (function () {
|
||||
if (!$this->__isset('db')) {
|
||||
// Свойство не инициализировано
|
||||
|
||||
// Инициализация значения по умолчанию исходя из настроек
|
||||
$this->__set('db', new connection(require static::SETTINGS));
|
||||
}
|
||||
|
||||
return self::$db;
|
||||
})(),
|
||||
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) {
|
||||
'db' => (new static)->__get('db'),
|
||||
default => throw new exception("Не найдено свойство или функция: $name", 500)
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,213 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\models;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\models\account_model as account;
|
||||
|
||||
// Фреймворк ArangoDB
|
||||
use mirzaev\arangodb\collection,
|
||||
mirzaev\arangodb\document;
|
||||
|
||||
// Библиотека для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
|
||||
// Встроенные библиотеки
|
||||
use exception;
|
||||
|
||||
/**
|
||||
* Модель сессий
|
||||
*
|
||||
* @package mirzaev\site\virus\models
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class session_model extends core
|
||||
{
|
||||
/**
|
||||
* Коллекция
|
||||
*/
|
||||
public const COLLECTION = 'session';
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
* @param ?string $hash Хеш сессии в базе данных
|
||||
* @param ?int $expires Дата окончания работы сессии (используется при создании новой сессии)
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция сессии, если удалось найти или создать
|
||||
*/
|
||||
public static function initialization(?string $hash = null, ?int $expires = null, array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (collection::init(static::$db->session, self::COLLECTION)) {
|
||||
// Инициализирована коллекция
|
||||
|
||||
if (isset($hash) && $session = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR d IN %s
|
||||
FILTER d.hash == '$hash' && d.expires > %d
|
||||
RETURN d
|
||||
AQL,
|
||||
self::COLLECTION,
|
||||
time()
|
||||
))) {
|
||||
// Найдена сессия по хешу
|
||||
|
||||
// Возврат сессии
|
||||
return $session;
|
||||
} else if ($session = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR d IN %s
|
||||
FILTER d.ip == '%s' && d.expires > %d
|
||||
RETURN d
|
||||
AQL,
|
||||
self::COLLECTION,
|
||||
$_SERVER['REMOTE_ADDR'],
|
||||
time()
|
||||
))) {
|
||||
// Найдена сессия по данным пользователя
|
||||
|
||||
// Возврат сессии
|
||||
return $session;
|
||||
} else {
|
||||
// Не найдена сессия
|
||||
|
||||
// Запись сессии в базу данных
|
||||
$_id = document::write(static::$db->session, self::COLLECTION, [
|
||||
'ip' => $_SERVER['REMOTE_ADDR'],
|
||||
'expires' => $expires ?? time() + 604800
|
||||
]);
|
||||
|
||||
if ($session = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR d IN %s
|
||||
FILTER d._id == '$_id' && d.expires > %d
|
||||
RETURN d
|
||||
AQL,
|
||||
self::COLLECTION,
|
||||
time()
|
||||
))) {
|
||||
// Найдена созданная сессия
|
||||
|
||||
// Запись хеша
|
||||
$session->hash = sodium_bin2hex(sodium_crypto_generichash($_id));
|
||||
|
||||
if (document::update(static::$db->session, $session)) {
|
||||
// Записано обновление
|
||||
|
||||
return $session;
|
||||
} else throw new exception('Не удалось записать данные сессии');
|
||||
} else throw new exception('Не удалось создать или найти созданную сессию');
|
||||
}
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Связь сессии с аккаунтом
|
||||
*
|
||||
* @param _document $session Инстанция сессии
|
||||
* @param _document $account Инстанция аккаунта
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return bool Статус выполнения
|
||||
*/
|
||||
public static function connect(_document $session, _document $account, array &$errors = []): bool
|
||||
{
|
||||
try {
|
||||
if (
|
||||
collection::init(static::$db->session, self::COLLECTION)
|
||||
&& collection::init(static::$db->session, account::COLLECTION)
|
||||
&& collection::init(static::$db->session, self::COLLECTION . '_edge_' . account::COLLECTION, true)
|
||||
) {
|
||||
// Инициализирована коллекция
|
||||
|
||||
if (document::write(static::$db->session, self::COLLECTION . '_edge_' . account::COLLECTION, [
|
||||
'_from' => $session->getId(),
|
||||
'_to' => $account->getId()
|
||||
])) {
|
||||
// Создано ребро: session -> account
|
||||
|
||||
return true;
|
||||
} else throw new exception('Не удалось создать ребро: session -> account');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Поиск связанного аккаунта
|
||||
*
|
||||
* @param _document $session Инстанция сессии
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция аккаунта, если удалось найти
|
||||
*/
|
||||
public static function account(_document $session, array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (
|
||||
collection::init(static::$db->session, self::COLLECTION)
|
||||
&& collection::init(static::$db->session, account::COLLECTION)
|
||||
&& collection::init(static::$db->session, self::COLLECTION . '_edge_' . account::COLLECTION, true)
|
||||
) {
|
||||
// Инициализированы коллекции
|
||||
|
||||
if ($account = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR document IN %s
|
||||
LET edge = (
|
||||
FOR edge IN %s
|
||||
FILTER edge._from == '%s'
|
||||
SORT edge._key DESC
|
||||
LIMIT 1
|
||||
RETURN edge
|
||||
)
|
||||
FILTER document._id == edge[0]._to
|
||||
LIMIT 1
|
||||
RETURN document
|
||||
AQL,
|
||||
account::COLLECTION,
|
||||
self::COLLECTION . '_edge_' . account::COLLECTION,
|
||||
$session->getId()
|
||||
))) {
|
||||
// Найден аккаунт
|
||||
|
||||
return $account;
|
||||
} else throw new exception('Не удалось найти аккаунт');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,555 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\models;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\site\virus\models\account_model as account;
|
||||
|
||||
// Фреймворк ArangoDB
|
||||
use mirzaev\arangodb\collection,
|
||||
mirzaev\arangodb\document;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\robots\user as robot;
|
||||
|
||||
// Библиотека для ArangoDB
|
||||
use ArangoDBClient\Document as _document;
|
||||
|
||||
// Библиотека браузера
|
||||
use GuzzleHttp\Client as browser;
|
||||
|
||||
// Встроенные библиотеки
|
||||
use exception;
|
||||
use stdClass;
|
||||
|
||||
/**
|
||||
* Модель аккаунта ВКонтакте
|
||||
*
|
||||
* @package mirzaev\site\virus\models
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class vk_model extends core
|
||||
{
|
||||
/**
|
||||
* Коллекция
|
||||
*/
|
||||
public const COLLECTION = 'vk';
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
* @param string $response Ответ сервера ВКонтакте с данными аккаунта
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция аккаунта ВКонтакте, если удалось создать
|
||||
*/
|
||||
public static function initialization(string $response = '', array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (collection::init(static::$db->session, self::COLLECTION)) {
|
||||
// Инициализирована коллекция
|
||||
|
||||
// Инициализация данных аккаунта ВКонтакте
|
||||
$data = json_decode($response);
|
||||
|
||||
if ($account = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR d IN %s
|
||||
FILTER d.id == $data->user_id
|
||||
RETURN d
|
||||
AQL,
|
||||
self::COLLECTION
|
||||
))) {
|
||||
// Найден аккаунт ВКонтакте
|
||||
|
||||
return $account;
|
||||
} else {
|
||||
// Не найден аккаунт ВКонтакте
|
||||
|
||||
return self::create($response, $errors);
|
||||
}
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Создание
|
||||
*
|
||||
* @param string $response Ответ сервера ВКонтакте с данными аккаунта
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция аккаунта ВКонтакте, если удалось создать
|
||||
*/
|
||||
public static function create(string $response = '', array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (collection::init(static::$db->session, self::COLLECTION)) {
|
||||
// Инициализирована коллекция
|
||||
|
||||
// Запись аккаунта в базу данных
|
||||
$_id = document::write(static::$db->session, self::COLLECTION);
|
||||
|
||||
if ($account = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR d IN %s
|
||||
FILTER d._id == '$_id'
|
||||
RETURN d
|
||||
AQL,
|
||||
self::COLLECTION
|
||||
))) {
|
||||
// Найден созданный аккаунт ВКонтакте
|
||||
|
||||
if (document::update(static::$db->session, $account)) {
|
||||
// Записано обновление
|
||||
|
||||
// Запись данных об аккаунте ВКонтакте и возврат (bool)
|
||||
return self::update($account, json_decode($response), $errors);
|
||||
}
|
||||
}
|
||||
throw new exception('Не удалось создать аккаунт ВКонтакте');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Запросить ключ
|
||||
*
|
||||
* @param string $code Код полученный от ВКонтакте
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?string Тело ответа, если получен код ответа 200
|
||||
*/
|
||||
public static function key(string $code = '', array &$errors = []): ?string
|
||||
{
|
||||
try {
|
||||
// Инициализация браузера
|
||||
$browser = new browser();
|
||||
|
||||
// Запрос
|
||||
$response = $browser->request('GET', "https://oauth.vk.com/access_token?client_id=51447080&client_secret=KYlk0nGELW0A9ds7NQi6&redirect_uri=https://virus.mirzaev.sexy/account/vk/connect&code=$code");
|
||||
|
||||
if ($response->getStatusCode() === 200) {
|
||||
// Ответ сервера: 200
|
||||
|
||||
return (string) $response->getBody();
|
||||
} else throw new exception('Не удалось получить ключ ВКонтакте (' . $response->getStatusCode() . ')');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Поиск связанного аккаунта
|
||||
*
|
||||
* @param _document $vk Инстанция аккаунта ВКонтакте
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция аккаунта, если удалось найти
|
||||
*/
|
||||
public static function account(_document $vk, array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (
|
||||
collection::init(static::$db->session, self::COLLECTION)
|
||||
&& collection::init(static::$db->session, account::COLLECTION)
|
||||
&& collection::init(static::$db->session, account::COLLECTION . '_edge_' . self::COLLECTION, true)
|
||||
) {
|
||||
// Инициализированы коллекции
|
||||
|
||||
if ($account = collection::search(static::$db->session, sprintf(
|
||||
<<<AQL
|
||||
FOR document IN %s
|
||||
LET edge = (
|
||||
FOR edge IN %s
|
||||
FILTER edge._to == '%s'
|
||||
SORT edge._key DESC
|
||||
LIMIT 1
|
||||
RETURN edge
|
||||
)
|
||||
FILTER document._id == edge[0]._from
|
||||
LIMIT 1
|
||||
RETURN document
|
||||
AQL,
|
||||
account::COLLECTION,
|
||||
account::COLLECTION . '_edge_' . self::COLLECTION,
|
||||
$vk->getId()
|
||||
))) {
|
||||
// Найден аккаунт
|
||||
|
||||
return $account;
|
||||
} else throw new exception('Не удалось найти аккаунт');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Запрос данных аккаунта ВКонтакте с серверов ВКонтакте
|
||||
*
|
||||
* @param robot $vk Инстанция аккаунта ВКонтакте
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?stdClass Данные аккаунта ВКонтакте, если получены
|
||||
*/
|
||||
public static function parse(robot $vk, array &$errors = []): ?stdClass
|
||||
{
|
||||
try {
|
||||
// Запрос к API-серверу ВКонтакте
|
||||
$response = $vk->user->get(fields: [
|
||||
'activities',
|
||||
'about',
|
||||
// 'blacklisted',
|
||||
// 'blacklisted_by_me',
|
||||
'books',
|
||||
'bdate',
|
||||
'can_be_invited_group',
|
||||
'can_post',
|
||||
'can_see_all_posts',
|
||||
'can_see_audio',
|
||||
'can_send_friend_request',
|
||||
'can_write_private_message',
|
||||
'career',
|
||||
'common_count',
|
||||
'connections',
|
||||
'contacts',
|
||||
'city',
|
||||
'country',
|
||||
'crop_photo',
|
||||
'domain',
|
||||
'education',
|
||||
'exports',
|
||||
'followers_count',
|
||||
'friend_status',
|
||||
'has_photo',
|
||||
'has_mobile',
|
||||
'home_town',
|
||||
'photo_50',
|
||||
'photo_100',
|
||||
'photo_200',
|
||||
'photo_200_orig',
|
||||
'photo_400_orig',
|
||||
'photo_max',
|
||||
'photo_max_orig',
|
||||
'sex',
|
||||
'site',
|
||||
'schools',
|
||||
'screen_name',
|
||||
'status',
|
||||
'verified',
|
||||
'games',
|
||||
'interests',
|
||||
'is_favorite',
|
||||
'is_friend',
|
||||
'is_hidden_from_feed',
|
||||
'last_seen',
|
||||
'maiden_name',
|
||||
'military',
|
||||
'movies',
|
||||
'music',
|
||||
'nickname',
|
||||
'occupation',
|
||||
'online',
|
||||
'personal',
|
||||
'photo_id',
|
||||
'quotes',
|
||||
'relation',
|
||||
'relatives',
|
||||
'timezone',
|
||||
'tv',
|
||||
'universities'
|
||||
])[0];
|
||||
|
||||
if (!empty($response)) {
|
||||
// Получен ответ
|
||||
|
||||
return $response;
|
||||
}
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновление данных аккаунта ВКонтакте
|
||||
*
|
||||
* Все файлы (аватар, например) будут скачаны на сервер
|
||||
*
|
||||
* @param _document $vk Инстанция аккаунта ВКонтакте
|
||||
* @param stdClass $data Информация об аккаунте (self::parse() или json_decode())
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return ?_document Инстанция аккаунта ВКонтакте, если удалось обновить
|
||||
*/
|
||||
public static function update(_document $vk, stdClass $data, array &$errors = []): ?_document
|
||||
{
|
||||
try {
|
||||
if (collection::init(static::$db->session, self::COLLECTION)) {
|
||||
// Инициализирована коллекция
|
||||
|
||||
if (empty($vk->id) and isset($data->user_id) || isset($data->id)) {
|
||||
// Получен идентификатор
|
||||
|
||||
// Запись
|
||||
$vk->id = $data->user_id ?? $data->id;
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->user_id, $data->id);
|
||||
} else if (empty($vk->id)) throw new exception('Не удалось найти идентификатор аккаунта ВКонтакте');
|
||||
|
||||
if (isset($data->access_token, $data->expires_in)) {
|
||||
// Получен ключ
|
||||
|
||||
// Запись
|
||||
$vk->access = [
|
||||
'key' => $data->access_token,
|
||||
'expires' => $data->expires_in
|
||||
];
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->access_token, $data->expires_in);
|
||||
}
|
||||
|
||||
// Инициализация браузера
|
||||
$browser = new browser();
|
||||
|
||||
// Инициализация директории с обложкой
|
||||
if (!file_exists($path = INDEX . DIRECTORY_SEPARATOR . 'storage' . DIRECTORY_SEPARATOR . $vk->id . DIRECTORY_SEPARATOR . 'cover' . DIRECTORY_SEPARATOR))
|
||||
mkdir($path, 0775, true);
|
||||
|
||||
if (isset($data->photo_50)) {
|
||||
// Получено изображение 50x50
|
||||
|
||||
if ($browser->get($data->photo_50, ['sink' => $file = "$path/50x50.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'50x50' => ($vk->cover['50x50'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_50,
|
||||
'public' => "/storage/$vk->id/cover/50x50.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение 50x50 с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_50);
|
||||
}
|
||||
|
||||
// Инициализация директории с обложкой
|
||||
if (!file_exists($path = INDEX . DIRECTORY_SEPARATOR . 'storage' . DIRECTORY_SEPARATOR . $vk->id . DIRECTORY_SEPARATOR . 'cover' . DIRECTORY_SEPARATOR))
|
||||
mkdir($path, 0775, true);
|
||||
|
||||
if (isset($data->photo_100)) {
|
||||
// Получено изображение 100x100
|
||||
|
||||
if ($browser->get($data->photo_100, ['sink' => $file = "$path/100x100.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'100x100' => ($vk->cover['100x100'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_100,
|
||||
'public' => "/storage/$vk->id/cover/100x100.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение 100x100 с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_100);
|
||||
}
|
||||
|
||||
// Инициализация директории с обложкой
|
||||
if (!file_exists($path = INDEX . DIRECTORY_SEPARATOR . 'storage' . DIRECTORY_SEPARATOR . $vk->id . DIRECTORY_SEPARATOR . 'cover' . DIRECTORY_SEPARATOR))
|
||||
mkdir($path, 0775, true);
|
||||
|
||||
if (isset($data->photo_200)) {
|
||||
// Получено изображение 200x200
|
||||
|
||||
if ($browser->get($data->photo_200, ['sink' => $file = "$path/200x200.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'200x200' => ($vk->cover['200x200'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_200,
|
||||
'public' => "/storage/$vk->id/cover/200x200.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение 200x200 с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_200);
|
||||
}
|
||||
|
||||
if (isset($data->photo_200_orig)) {
|
||||
// Получено изображение 200x
|
||||
|
||||
if ($browser->get($data->photo_200_orig, ['sink' => $file = "$path/200x.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'200x' => ($vk->cover['200x'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_200_orig,
|
||||
'public' => "/storage/$vk->id/cover/200x.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение 200x с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_200_orig);
|
||||
}
|
||||
|
||||
if (isset($data->photo_400_orig)) {
|
||||
// Получено изображение 400x
|
||||
|
||||
if ($browser->get($data->photo_400_orig, ['sink' => $file = "$path/400x.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'400x' => ($vk->cover['400x'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_400_orig,
|
||||
'public' => "/storage/$vk->id/cover/400x.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение 400x с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_400_orig);
|
||||
}
|
||||
|
||||
if (isset($data->photo_max)) {
|
||||
// Получено изображение MAXxMAX
|
||||
|
||||
if ($browser->get($data->photo_max, ['sink' => $file = "$path/MAXxMAX.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'MAXxMAX' => ($vk->cover['MAXxMAX'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_max,
|
||||
'public' => "/storage/$vk->id/cover/MAXxMAX.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение MAXxMAX с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_max);
|
||||
}
|
||||
|
||||
if (isset($data->photo_max_orig)) {
|
||||
// Получено изображение MAXx
|
||||
|
||||
if ($browser->get($data->photo_max_orig, ['sink' => $file = "$path/MAXx.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'MAXx' => ($vk->cover['MAXx'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_max_orig,
|
||||
'public' => "/storage/$vk->id/cover/MAXx.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение MAXx с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_max_orig);
|
||||
}
|
||||
|
||||
if (isset($data->crop_photo)) {
|
||||
// Получено изображение MAXx
|
||||
|
||||
if ($browser->get($data->photo_max_orig, ['sink' => $file = "$path/MAXx.jpg"])->getStatusCode() === 200)
|
||||
$vk->cover =
|
||||
($vk->cover ?? []) +
|
||||
[
|
||||
'MAXx' => ($vk->cover['MAXx'] ?? []) +
|
||||
[
|
||||
'source' => $data->photo_max_orig,
|
||||
'public' => "/storage/$vk->id/cover/MAXx.jpg",
|
||||
'local' => $file,
|
||||
]
|
||||
];
|
||||
else throw new exception('Не удалось получить изображение MAXx с серверов ВКонтакте');
|
||||
|
||||
// Удаление из списка необработанных
|
||||
unset($data->photo_max_orig);
|
||||
}
|
||||
|
||||
// Перебор оставшихся параметров
|
||||
foreach ($data as $key => $value) $vk->{$key} = $value;
|
||||
|
||||
if (document::update(static::$db->session, $vk)) {
|
||||
// Записано обновление
|
||||
|
||||
return $vk;
|
||||
} else throw new exception('Не удалось записать данные аккаунта ВКонтакте');
|
||||
} else throw new exception('Не удалось инициализировать коллекцию');
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors[] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
238
mirzaev/site/rules/system/public/css/account.old.css → mirzaev/site/virus/system/public/css/account.old.css
Executable file → Normal file
|
@ -1,119 +1,119 @@
|
|||
#mail>:is(form, div) {
|
||||
display : flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#mail .exit {
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
#mail p {
|
||||
margin : 0;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#mail p>span {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
#mail>form>input:is([type=text], [type=password]) {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
#mail>form>input:last-child {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
|
||||
#mail>form>.submit {
|
||||
margin-top : 6px;
|
||||
margin-bottom: 10px;
|
||||
display : flex;
|
||||
}
|
||||
|
||||
#mail>form>.submit>label {
|
||||
padding : 10px 20px;
|
||||
border : unset;
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
|
||||
#mail>form>.submit>input {
|
||||
padding : 10px 20px;
|
||||
flex-grow : 1;
|
||||
border : unset;
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
|
||||
|
||||
#mail>form>input[type=submit].registration {
|
||||
padding : 7px 20px;
|
||||
background-color: #86781C;
|
||||
}
|
||||
|
||||
#mail>form>input[type=submit].registration:hover {
|
||||
background-color: #9e8d20;
|
||||
}
|
||||
|
||||
#mail>form>input[type=submit].registration:is(:active, :focus) {
|
||||
background-color: #776b19;
|
||||
}
|
||||
|
||||
#mail>form>ul.errors {
|
||||
margin-top : 18px;
|
||||
margin-bottom : 0px;
|
||||
padding : 10px;
|
||||
text-align : center;
|
||||
list-style : none;
|
||||
background-color: #ae8f8f;
|
||||
}
|
||||
|
||||
#account {
|
||||
display : grid;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
|
||||
#account>button#login {
|
||||
z-index : 1500;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
#account>section.tab {
|
||||
z-index : 1000;
|
||||
position : relative;
|
||||
bottom : -100%;
|
||||
padding : 1.5rem 10%;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
align-self : end;
|
||||
text-align : center;
|
||||
gap : .8rem;
|
||||
background-color: var(--background-light-2);
|
||||
transition : .2s ease-in;
|
||||
}
|
||||
|
||||
#account>button.active+section.tab {
|
||||
bottom: 0%;
|
||||
}
|
||||
|
||||
#account>section.tab h3:first-of-type {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
#account>section.tab>* {
|
||||
margin: unset;
|
||||
}
|
||||
|
||||
#account>section#mail.tab {
|
||||
grid-row : 1;
|
||||
display : grid;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
|
||||
#account>section#mail.tab>#profile {
|
||||
grid-row : 1;
|
||||
display : grid;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
|
||||
#account>section#mail.tab>input[type=mail] {
|
||||
grid-row : 2;
|
||||
}
|
||||
#mail>:is(form, div) {
|
||||
display : flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#mail .exit {
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
#mail p {
|
||||
margin : 0;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#mail p>span {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
#mail>form>input:is([type=text], [type=password]) {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
#mail>form>input:last-child {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
|
||||
#mail>form>.submit {
|
||||
margin-top : 6px;
|
||||
margin-bottom: 10px;
|
||||
display : flex;
|
||||
}
|
||||
|
||||
#mail>form>.submit>label {
|
||||
padding : 10px 20px;
|
||||
border : unset;
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
|
||||
#mail>form>.submit>input {
|
||||
padding : 10px 20px;
|
||||
flex-grow : 1;
|
||||
border : unset;
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
|
||||
|
||||
#mail>form>input[type=submit].registration {
|
||||
padding : 7px 20px;
|
||||
background-color: #86781C;
|
||||
}
|
||||
|
||||
#mail>form>input[type=submit].registration:hover {
|
||||
background-color: #9e8d20;
|
||||
}
|
||||
|
||||
#mail>form>input[type=submit].registration:is(:active, :focus) {
|
||||
background-color: #776b19;
|
||||
}
|
||||
|
||||
#mail>form>ul.errors {
|
||||
margin-top : 18px;
|
||||
margin-bottom : 0px;
|
||||
padding : 10px;
|
||||
text-align : center;
|
||||
list-style : none;
|
||||
background-color: #ae8f8f;
|
||||
}
|
||||
|
||||
#account {
|
||||
display : grid;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
|
||||
#account>button#login {
|
||||
z-index : 1500;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
#account>section.tab {
|
||||
z-index : 1000;
|
||||
position : relative;
|
||||
bottom : -100%;
|
||||
padding : 1.5rem 10%;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
align-self : end;
|
||||
text-align : center;
|
||||
gap : .8rem;
|
||||
background-color: var(--background-light-2);
|
||||
transition : .2s ease-in;
|
||||
}
|
||||
|
||||
#account>button.active+section.tab {
|
||||
bottom: 0%;
|
||||
}
|
||||
|
||||
#account>section.tab h3:first-of-type {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
#account>section.tab>* {
|
||||
margin: unset;
|
||||
}
|
||||
|
||||
#account>section#mail.tab {
|
||||
grid-row : 1;
|
||||
display : grid;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
|
||||
#account>section#mail.tab>#profile {
|
||||
grid-row : 1;
|
||||
display : grid;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
|
||||
#account>section#mail.tab>input[type=mail] {
|
||||
grid-row : 2;
|
||||
}
|
104
mirzaev/site/rules/system/public/css/books.css → mirzaev/site/virus/system/public/css/books.css
Executable file → Normal file
|
@ -1,52 +1,52 @@
|
|||
main>section#books {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
}
|
||||
|
||||
main>section#books>* {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
main>section#books>form.upload {
|
||||
width: calc(100% / 3 - 20px - 9px * 2);
|
||||
height: calc(220px - 9px * 2);
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
main>section#books>form.upload>p {
|
||||
font-size: 3rem;
|
||||
height: 0.3rem;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
main>section#books>article.book {
|
||||
width: calc(100% / 3 - 20px);
|
||||
margin-right: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main>section#books>article.book:nth-child(3) {
|
||||
width: calc(100% / 3);
|
||||
margin-right: unset;
|
||||
}
|
||||
|
||||
main>section#books>article.book>img {
|
||||
height: 220px;
|
||||
object-fit: cover;
|
||||
object-position: right;
|
||||
overflow: hidden;
|
||||
clip-path: polygon(5px calc(100% - 5px), calc(100% - 5px) calc(100% - 5px), calc(100% - 5px) 5px, 5px 5px);
|
||||
}
|
||||
|
||||
main>section#books>article.book>h4 {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 10px;
|
||||
height: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
main>section#books>article.book>p {
|
||||
margin: unset;
|
||||
}
|
||||
main>section#books {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
}
|
||||
|
||||
main>section#books>* {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
main>section#books>form.upload {
|
||||
width: calc(100% / 3 - 20px - 9px * 2);
|
||||
height: calc(220px - 9px * 2);
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
main>section#books>form.upload>p {
|
||||
font-size: 3rem;
|
||||
height: 0.3rem;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
main>section#books>article.book {
|
||||
width: calc(100% / 3 - 20px);
|
||||
margin-right: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main>section#books>article.book:nth-child(3) {
|
||||
width: calc(100% / 3);
|
||||
margin-right: unset;
|
||||
}
|
||||
|
||||
main>section#books>article.book>img {
|
||||
height: 220px;
|
||||
object-fit: cover;
|
||||
object-position: right;
|
||||
overflow: hidden;
|
||||
clip-path: polygon(5px calc(100% - 5px), calc(100% - 5px) calc(100% - 5px), calc(100% - 5px) 5px, 5px 5px);
|
||||
}
|
||||
|
||||
main>section#books>article.book>h4 {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 10px;
|
||||
height: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
main>section#books>article.book>p {
|
||||
margin: unset;
|
||||
}
|
62
mirzaev/site/rules/system/public/css/hotline.css → mirzaev/site/virus/system/public/css/hotline.css
Executable file → Normal file
|
@ -1,31 +1,31 @@
|
|||
section.hotline {
|
||||
display: inline-flex;
|
||||
height : 100%;
|
||||
}
|
||||
|
||||
section.hotline * {
|
||||
transition: unset;
|
||||
}
|
||||
|
||||
section.hotline:last-child {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
|
||||
section.hotline>article {
|
||||
margin-right : 18px;
|
||||
width : 140px;
|
||||
height : 190px;
|
||||
display : flex;
|
||||
align-self : flex-end;
|
||||
border-radius : 3px;
|
||||
background-color: var(--background-light-1);
|
||||
box-shadow : 0px -6px 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
section.hotline>article:last-child {
|
||||
margin-right: unset;
|
||||
}
|
||||
|
||||
section.hotline>article>* {
|
||||
margin: auto;
|
||||
}
|
||||
section.hotline {
|
||||
display: inline-flex;
|
||||
height : 100%;
|
||||
}
|
||||
|
||||
section.hotline * {
|
||||
transition: unset;
|
||||
}
|
||||
|
||||
section.hotline:last-child {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
|
||||
section.hotline>article {
|
||||
margin-right : 18px;
|
||||
width : 140px;
|
||||
height : 190px;
|
||||
display : flex;
|
||||
align-self : flex-end;
|
||||
border-radius : 3px;
|
||||
background-color: var(--background-light-1);
|
||||
box-shadow : 0px -6px 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
section.hotline>article:last-child {
|
||||
margin-right: unset;
|
||||
}
|
||||
|
||||
section.hotline>article>* {
|
||||
margin: auto;
|
||||
}
|
80
mirzaev/site/rules/system/public/css/logo.css → mirzaev/site/virus/system/public/css/logo.css
Executable file → Normal file
|
@ -1,40 +1,40 @@
|
|||
header>div#logo {
|
||||
position : relative;
|
||||
height : 260px;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
justify-content : center;
|
||||
gap : unset;
|
||||
border-right : 1px solid;
|
||||
border-right-color: #ccc;
|
||||
border-right-color: rgba(255, 255, 255, 0.2);
|
||||
background-color : rgba(255, 255, 255, 0.2);
|
||||
overflow : hidden;
|
||||
}
|
||||
|
||||
header>div#logo>h4 {
|
||||
z-index: 10;
|
||||
margin : 0 20px;
|
||||
}
|
||||
|
||||
header>div#logo>h1 {
|
||||
z-index : 50;
|
||||
margin : 0 37px;
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
|
||||
header>div#logo>#hotline_logo {
|
||||
z-index : -50;
|
||||
position : absolute;
|
||||
-webkit-filter : blur(2px) brightness(1.3);
|
||||
filter : blur(2px) brightness(1.3);
|
||||
/* background-color: var(--background); */
|
||||
}
|
||||
|
||||
header>div#logo>#hotline_logo>article {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
aside>section#hotline {
|
||||
clip-path: inset(0 0 0 250px);
|
||||
}
|
||||
header>div#logo {
|
||||
position : relative;
|
||||
height : 260px;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
justify-content : center;
|
||||
gap : unset;
|
||||
border-right : 1px solid;
|
||||
border-right-color: #ccc;
|
||||
border-right-color: rgba(255, 255, 255, 0.2);
|
||||
background-color : rgba(255, 255, 255, 0.2);
|
||||
overflow : hidden;
|
||||
}
|
||||
|
||||
header>div#logo>h4 {
|
||||
z-index: 10;
|
||||
margin : 0 20px;
|
||||
}
|
||||
|
||||
header>div#logo>h1 {
|
||||
z-index : 50;
|
||||
margin : 0 37px;
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
|
||||
header>div#logo>#hotline_logo {
|
||||
z-index : -50;
|
||||
position : absolute;
|
||||
-webkit-filter : blur(2px) brightness(1.3);
|
||||
filter : blur(2px) brightness(1.3);
|
||||
/* background-color: var(--background); */
|
||||
}
|
||||
|
||||
header>div#logo>#hotline_logo>article {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
aside>section#hotline {
|
||||
clip-path: inset(0 0 0 250px);
|
||||
}
|
|
@ -0,0 +1,165 @@
|
|||
@import url('/fonts/comissioner.ttf');
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
--background: #eee;
|
||||
--text : 'dark';
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--background-light-3: #403939;
|
||||
--background-light-2: #322d2d;
|
||||
--background-light-1: #2b2525;
|
||||
--background-light : #252020;
|
||||
--background : #221e1e;
|
||||
--background-dark : ;
|
||||
--text : #e6e6e6;
|
||||
--text-hover : #fff;
|
||||
--text-active : #d0d0d0;
|
||||
--red-light-1 : #dc4343;
|
||||
--red-light : #bf3737;
|
||||
--red : #a43333;
|
||||
--red-dark : #8d2a2a;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
* {
|
||||
text-decoration: none;
|
||||
outline : none;
|
||||
border : none;
|
||||
color : var(--text);
|
||||
font-family : 'Commissioner', sans-serif;
|
||||
transition : 0.1s ease-out;
|
||||
}
|
||||
|
||||
.unselectable {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select : none;
|
||||
-khtml-user-select : none;
|
||||
-moz-user-select : none;
|
||||
-ms-user-select : none;
|
||||
user-select : none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--text-hover);
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: var(--text-active);
|
||||
}
|
||||
|
||||
body {
|
||||
height : 100vh;
|
||||
margin : 0;
|
||||
display : grid;
|
||||
grid-template-rows : 10px 200px auto 10px;
|
||||
grid-template-columns: 250px auto 300px;
|
||||
grid-row-gap : 20px;
|
||||
grid-column-gap : 15px;
|
||||
overflow: hidden;
|
||||
background-color : var(--background);
|
||||
}
|
||||
|
||||
aside {
|
||||
z-index : 500;
|
||||
grid-column: 1/ 4;
|
||||
grid-row : 2;
|
||||
overflow : hidden;
|
||||
}
|
||||
|
||||
header {
|
||||
z-index : 5000;
|
||||
grid-column : 1;
|
||||
grid-row : 1 / 5;
|
||||
display : flex;
|
||||
flex-direction: column;
|
||||
box-shadow : 2px 0 5px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
header>menu {
|
||||
margin : unset;
|
||||
padding : 20px;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
flex-grow : 1;
|
||||
background-color: var(--background-light-1);
|
||||
}
|
||||
|
||||
header>#account>button#login {
|
||||
z-index : 1500;
|
||||
}
|
||||
|
||||
header>menu a {
|
||||
margin-bottom: 8px;
|
||||
display : flex;
|
||||
align-items : center;
|
||||
}
|
||||
|
||||
header>menu a:last-child {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
|
||||
header>menu a svg {
|
||||
margin-right: 8px;
|
||||
height : 1.2rem;
|
||||
position : relative;
|
||||
}
|
||||
|
||||
header>menu a:hover svg {
|
||||
margin-left : -5px;
|
||||
margin-right: 13px;
|
||||
}
|
||||
|
||||
header>menu a svg path {
|
||||
fill: var(--text);
|
||||
}
|
||||
|
||||
header>section {
|
||||
background-color: var(--background-light-1);
|
||||
}
|
||||
|
||||
header :is(button, a[type="button"]) {
|
||||
width : 100%;
|
||||
height : 40px;
|
||||
display : flex;
|
||||
justify-content : center;
|
||||
align-items : center;
|
||||
cursor : pointer;
|
||||
background-color: var(--red);
|
||||
transition : unset;
|
||||
}
|
||||
|
||||
header button {
|
||||
font-weight : bold;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
header :is(button, a[type="button"]):hover {
|
||||
background-color: var(--red-light);
|
||||
}
|
||||
|
||||
header :is(button, a[type="button"]):active {
|
||||
background-color: var(--red-dark);
|
||||
}
|
||||
|
||||
header>nav {
|
||||
margin-top : auto;
|
||||
display : flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main {
|
||||
z-index : 1000;
|
||||
grid-column: 2;
|
||||
grid-row : 3;
|
||||
}
|
||||
|
||||
footer {
|
||||
z-index : 3000;
|
||||
grid-column: 3;
|
||||
grid-row : 1 / 5;
|
||||
}
|
34
mirzaev/site/rules/system/public/css/trolling.css → mirzaev/site/virus/system/public/css/trolling.css
Executable file → Normal file
|
@ -1,17 +1,17 @@
|
|||
#what_image {
|
||||
z-index: 9999999;
|
||||
position: absolute;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: none;
|
||||
transition: unset;
|
||||
}
|
||||
|
||||
#what_image.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.hide {
|
||||
position: absolute;
|
||||
display: none;
|
||||
}
|
||||
#what_image {
|
||||
z-index: 9999999;
|
||||
position: absolute;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: none;
|
||||
transition: unset;
|
||||
}
|
||||
|
||||
#what_image.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.hide {
|
||||
position: absolute;
|
||||
display: none;
|
||||
}
|
66
mirzaev/site/rules/system/public/css/upload.css → mirzaev/site/virus/system/public/css/upload.css
Executable file → Normal file
|
@ -1,33 +1,33 @@
|
|||
form.upload {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
border: 4px dashed #e5ddd1;
|
||||
}
|
||||
|
||||
form.upload:hover {
|
||||
background-color: #ccc6bd;
|
||||
border: 4px dashed #fff7ea;
|
||||
}
|
||||
|
||||
form.upload>p {
|
||||
margin: auto;
|
||||
font-weight: bold;
|
||||
color: #eee6d9;
|
||||
}
|
||||
|
||||
form.upload:hover>p {
|
||||
color: #fff7ea;
|
||||
}
|
||||
|
||||
form.upload>input {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
form.upload:hover>input {
|
||||
cursor: pointer;
|
||||
}
|
||||
form.upload {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
border: 4px dashed #e5ddd1;
|
||||
}
|
||||
|
||||
form.upload:hover {
|
||||
background-color: #ccc6bd;
|
||||
border: 4px dashed #fff7ea;
|
||||
}
|
||||
|
||||
form.upload>p {
|
||||
margin: auto;
|
||||
font-weight: bold;
|
||||
color: #eee6d9;
|
||||
}
|
||||
|
||||
form.upload:hover>p {
|
||||
color: #fff7ea;
|
||||
}
|
||||
|
||||
form.upload>input {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
form.upload:hover>input {
|
||||
cursor: pointer;
|
||||
}
|
0
mirzaev/site/rules/system/public/fonts/commissioner.ttf → mirzaev/site/virus/system/public/fonts/commissioner.ttf
Executable file → Normal file
0
mirzaev/site/rules/system/public/images/botnet.svg → mirzaev/site/virus/system/public/images/botnet.svg
Executable file → Normal file
Before Width: | Height: | Size: 552 B After Width: | Height: | Size: 552 B |
0
mirzaev/site/rules/system/public/images/keylogger.svg → mirzaev/site/virus/system/public/images/keylogger.svg
Executable file → Normal file
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 328 B |
0
mirzaev/site/rules/system/public/images/logo.png → mirzaev/site/virus/system/public/images/logo.png
Executable file → Normal file
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
0
mirzaev/site/rules/system/public/images/logo_compressed.png → mirzaev/site/virus/system/public/images/logo_compressed.png
Executable file → Normal file
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
0
mirzaev/site/rules/system/public/images/logo_red.png → mirzaev/site/virus/system/public/images/logo_red.png
Executable file → Normal file
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
0
mirzaev/site/rules/system/public/images/logo_red_white.png → mirzaev/site/virus/system/public/images/logo_red_white.png
Executable file → Normal file
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
0
mirzaev/site/rules/system/public/images/minecraft.svg → mirzaev/site/virus/system/public/images/minecraft.svg
Executable file → Normal file
Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 537 B |
0
mirzaev/site/rules/system/public/images/miner.svg → mirzaev/site/virus/system/public/images/miner.svg
Executable file → Normal file
Before Width: | Height: | Size: 825 B After Width: | Height: | Size: 825 B |
0
mirzaev/site/rules/system/public/images/stealer.svg → mirzaev/site/virus/system/public/images/stealer.svg
Executable file → Normal file
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
0
mirzaev/site/rules/system/public/images/truth.jpg → mirzaev/site/virus/system/public/images/truth.jpg
Executable file → Normal file
Before Width: | Height: | Size: 397 KiB After Width: | Height: | Size: 397 KiB |
0
mirzaev/site/rules/system/public/images/what.png → mirzaev/site/virus/system/public/images/what.png
Executable file → Normal file
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 295 KiB |
67
mirzaev/site/rules/system/public/index.php → mirzaev/site/virus/system/public/index.php
Executable file → Normal file
|
@ -1,32 +1,35 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\rules;
|
||||
|
||||
use mirzaev\minimal\core;
|
||||
use mirzaev\minimal\router;
|
||||
|
||||
ini_set('error_reporting', E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
|
||||
define('VIEWS', realpath('..' . DIRECTORY_SEPARATOR . 'views'));
|
||||
define('STORAGE', realpath('..' . DIRECTORY_SEPARATOR . 'storage'));
|
||||
define('INDEX', __DIR__);
|
||||
|
||||
// Автозагрузка
|
||||
require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
|
||||
|
||||
// Инициализация маршрутазитора
|
||||
$router = new router;
|
||||
|
||||
// Запись маршрутов
|
||||
$router->write('/', 'index', 'index');
|
||||
$router->write('/system/hotline', 'hotline', 'index');
|
||||
|
||||
// Инициализация ядра
|
||||
$core = new core(namespace: __NAMESPACE__, router: $router);
|
||||
|
||||
// Обработка запроса
|
||||
echo $core->start();
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus;
|
||||
|
||||
use mirzaev\minimal\core;
|
||||
use mirzaev\minimal\router;
|
||||
|
||||
ini_set('error_reporting', E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
|
||||
define('VIEWS', realpath('..' . DIRECTORY_SEPARATOR . 'views'));
|
||||
define('STORAGE', realpath('..' . DIRECTORY_SEPARATOR . 'storage'));
|
||||
define('INDEX', __DIR__);
|
||||
|
||||
// Автозагрузка
|
||||
require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
|
||||
|
||||
// Инициализация маршрутазитора
|
||||
$router = new router;
|
||||
|
||||
// Запись маршрутов
|
||||
$router->write('/', 'index', 'index');
|
||||
$router->write('/system/hotline', 'hotline', 'index');
|
||||
$router->write('/account/initialization', 'account', 'initialization', 'PUT');
|
||||
$router->write('/account/vk/connect', 'account', 'connect');
|
||||
$router->write('/account/panel', 'account', 'panel');
|
||||
|
||||
// Инициализация ядра
|
||||
$core = new core(namespace: __NAMESPACE__, router: $router);
|
||||
|
||||
// Обработка запроса
|
||||
echo $core->start();
|
278
mirzaev/site/rules/system/public/js/account.js → mirzaev/site/virus/system/public/js/account.js
Executable file → Normal file
|
@ -1,139 +1,139 @@
|
|||
"use strict";
|
||||
|
||||
class account {
|
||||
static async initialization() {
|
||||
// Запрос
|
||||
return fetch('https://rules.mirzaev.sexy/account/initialization', {
|
||||
method: 'PUT'
|
||||
});
|
||||
}
|
||||
|
||||
static authentication(button) {
|
||||
if (button instanceof HTMLElement) {
|
||||
// Получены обязательные входные параметры
|
||||
|
||||
if (button.classList.contains('active')) {
|
||||
// Кнопка активна (подразумевается)
|
||||
|
||||
if (window.vk !== undefined) {
|
||||
// Найдена инстанция окна
|
||||
|
||||
// Закрытие окна
|
||||
window.vk.close();
|
||||
|
||||
// Удаление окна
|
||||
window.vk = undefined;
|
||||
}
|
||||
|
||||
// Генерация панели
|
||||
this.panel(button.parentElement);
|
||||
|
||||
// Вызов троллера
|
||||
troller.what.single();
|
||||
} else {
|
||||
// Кнопка неактивна (подразумевается)
|
||||
|
||||
// Инициализация активного статуса
|
||||
button.classList.add('active');
|
||||
button.innerText = 'Закрыть';
|
||||
|
||||
// Настройка окна
|
||||
const width = 500;
|
||||
const height = 500;
|
||||
const left = (window.screen.width / 2) - ((width / 2) + 10);
|
||||
const top = (window.screen.height / 2) - ((height / 2) + 50);
|
||||
|
||||
// Инициализация аккаунта
|
||||
this.initialization()
|
||||
.then(
|
||||
(response) => {
|
||||
if (response.status === 401 && typeof response.headers.get('session') === 'string') {
|
||||
// Получен код ответа 401 (не аутентифицирован) и инициализирован аккаунт
|
||||
|
||||
// Открытие окна с аунтентификацией ВКонтакте
|
||||
window.vk = window.open(
|
||||
'https://oauth.vk.com/authorize?client_id=51447080&redirect_uri=https://rules.mirzaev.sexy/account/vk/connect&display=popup&response_type=code&scope=4521990&state=' + response.headers.get('session'),
|
||||
'rules_vk',
|
||||
'left=' + left + ',top=' + top + ',width=' + width + ',height=' + height + ',resizable=no,status=no,toolbar=no,menubar=no,scrollbars=no,location=no,directories=no'
|
||||
);
|
||||
|
||||
// Инициализация ссылки на ядро
|
||||
const _this = this;
|
||||
|
||||
// Инициализация интервала проверки закрытия окна с аунтентификацией ВКонтакте
|
||||
const interval = setInterval(function () {
|
||||
if (window.vk.closed || window.vk === undefined) {
|
||||
// Окно с аутентификацией закрыто
|
||||
|
||||
// Удаление интервала
|
||||
clearInterval(interval);
|
||||
|
||||
// Генерация панели
|
||||
_this.panel(button.parentElement);
|
||||
}
|
||||
}, 100);
|
||||
} else if (response.status === 200) {
|
||||
// Получен код ответа 200 (аутентифицирован)
|
||||
|
||||
// Генерация панели
|
||||
this.panel(button.parentElement);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
static deauthentication() {
|
||||
if (shell instanceof HTMLElement) {
|
||||
// Получены обязательные входные параметры
|
||||
|
||||
fetch('https://rules.mirzaev.sexy/account/panel', {
|
||||
method: 'GET'
|
||||
}).then(
|
||||
(response) => {
|
||||
if (response.status === 200) {
|
||||
// Получен код ответа 200
|
||||
|
||||
response.text().then(
|
||||
(text) => {
|
||||
console.log(text);
|
||||
|
||||
// Запись панели в оболочку
|
||||
shell.outerHTML = text;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static async panel(shell) {
|
||||
if (shell instanceof HTMLElement) {
|
||||
// Получены обязательные входные параметры
|
||||
|
||||
fetch('https://rules.mirzaev.sexy/account/panel', {
|
||||
method: 'GET'
|
||||
}).then(
|
||||
(response) => {
|
||||
if (response.status === 200) {
|
||||
// Получен код ответа 200
|
||||
|
||||
response.text().then(
|
||||
(text) => {
|
||||
console.log(text);
|
||||
|
||||
// Запись панели в оболочку
|
||||
shell.outerHTML = text;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
"use strict";
|
||||
|
||||
class account {
|
||||
static async initialization() {
|
||||
// Запрос
|
||||
return fetch('https://virus.mirzaev.sexy/account/initialization', {
|
||||
method: 'PUT'
|
||||
});
|
||||
}
|
||||
|
||||
static authentication(button) {
|
||||
if (button instanceof HTMLElement) {
|
||||
// Получены обязательные входные параметры
|
||||
|
||||
if (button.classList.contains('active')) {
|
||||
// Кнопка активна (подразумевается)
|
||||
|
||||
if (window.vk !== undefined) {
|
||||
// Найдена инстанция окна
|
||||
|
||||
// Закрытие окна
|
||||
window.vk.close();
|
||||
|
||||
// Удаление окна
|
||||
window.vk = undefined;
|
||||
}
|
||||
|
||||
// Генерация панели
|
||||
this.panel(button.parentElement);
|
||||
|
||||
// Вызов троллера
|
||||
troller.what.single();
|
||||
} else {
|
||||
// Кнопка неактивна (подразумевается)
|
||||
|
||||
// Инициализация активного статуса
|
||||
button.classList.add('active');
|
||||
button.innerText = 'Закрыть';
|
||||
|
||||
// Настройка окна
|
||||
const width = 500;
|
||||
const height = 500;
|
||||
const left = (window.screen.width / 2) - ((width / 2) + 10);
|
||||
const top = (window.screen.height / 2) - ((height / 2) + 50);
|
||||
|
||||
// Инициализация аккаунта
|
||||
this.initialization()
|
||||
.then(
|
||||
(response) => {
|
||||
if (response.status === 401 && typeof response.headers.get('session') === 'string') {
|
||||
// Получен код ответа 401 (не аутентифицирован) и инициализирован аккаунт
|
||||
|
||||
// Открытие окна с аунтентификацией ВКонтакте
|
||||
window.vk = window.open(
|
||||
'https://oauth.vk.com/authorize?client_id=51447080&redirect_uri=https://virus.mirzaev.sexy/account/vk/connect&display=popup&response_type=code&scope=4521990&state=' + response.headers.get('session'),
|
||||
'virus_vk',
|
||||
'left=' + left + ',top=' + top + ',width=' + width + ',height=' + height + ',resizable=no,status=no,toolbar=no,menubar=no,scrollbars=no,location=no,directories=no'
|
||||
);
|
||||
|
||||
// Инициализация ссылки на ядро
|
||||
const _this = this;
|
||||
|
||||
// Инициализация интервала проверки закрытия окна с аунтентификацией ВКонтакте
|
||||
const interval = setInterval(function () {
|
||||
if (window.vk.closed || window.vk === undefined) {
|
||||
// Окно с аутентификацией закрыто
|
||||
|
||||
// Удаление интервала
|
||||
clearInterval(interval);
|
||||
|
||||
// Генерация панели
|
||||
_this.panel(button.parentElement);
|
||||
}
|
||||
}, 100);
|
||||
} else if (response.status === 200) {
|
||||
// Получен код ответа 200 (аутентифицирован)
|
||||
|
||||
// Генерация панели
|
||||
this.panel(button.parentElement);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
static deauthentication() {
|
||||
if (shell instanceof HTMLElement) {
|
||||
// Получены обязательные входные параметры
|
||||
|
||||
fetch('https://virus.mirzaev.sexy/account/panel', {
|
||||
method: 'GET'
|
||||
}).then(
|
||||
(response) => {
|
||||
if (response.status === 200) {
|
||||
// Получен код ответа 200
|
||||
|
||||
response.text().then(
|
||||
(text) => {
|
||||
console.log(text);
|
||||
|
||||
// Запись панели в оболочку
|
||||
shell.outerHTML = text;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static async panel(shell) {
|
||||
if (shell instanceof HTMLElement) {
|
||||
// Получены обязательные входные параметры
|
||||
|
||||
fetch('https://virus.mirzaev.sexy/account/panel', {
|
||||
method: 'GET'
|
||||
}).then(
|
||||
(response) => {
|
||||
if (response.status === 200) {
|
||||
// Получен код ответа 200
|
||||
|
||||
response.text().then(
|
||||
(text) => {
|
||||
console.log(text);
|
||||
|
||||
// Запись панели в оболочку
|
||||
shell.outerHTML = text;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
0
mirzaev/site/rules/system/public/js/graph.js → mirzaev/site/virus/system/public/js/graph.js
Executable file → Normal file
1336
mirzaev/site/rules/system/public/js/hotline.js → mirzaev/site/virus/system/public/js/hotline.js
Executable file → Normal file
0
mirzaev/site/rules/system/public/js/js.cookie.min.js → mirzaev/site/virus/system/public/js/js.cookie.min.js
vendored
Executable file → Normal file
254
mirzaev/site/rules/system/public/js/trolling.js → mirzaev/site/virus/system/public/js/trolling.js
Executable file → Normal file
|
@ -1,127 +1,127 @@
|
|||
"use strict";
|
||||
|
||||
class troller {
|
||||
static what = {
|
||||
enable() {
|
||||
document.body.onmouseleave = function () {
|
||||
// if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.what.start();
|
||||
// }
|
||||
};
|
||||
|
||||
document.body.onmouseenter = function () {
|
||||
troller.what.end();
|
||||
};
|
||||
},
|
||||
disable() {
|
||||
document.body.onmouseleave = document.body.onmouseenter = undefined;
|
||||
},
|
||||
start() {
|
||||
// Отображение изображения
|
||||
document.getElementById('what_image').classList.add('active');
|
||||
|
||||
// Инициализация элемента со звуком
|
||||
const what_sound = document.getElementById('what_sound');
|
||||
|
||||
// Воспроизведение звука
|
||||
what_sound.currentTime = 0;
|
||||
what_sound.play();
|
||||
},
|
||||
end() {
|
||||
// Сокрытие изображения
|
||||
document.getElementById('what_image').classList.remove('active');
|
||||
|
||||
// Остановка звука
|
||||
document.getElementById('what_sound').pause();
|
||||
},
|
||||
single(event = 'onmouseleave') {
|
||||
if (typeof event === 'string') {
|
||||
// Получены обязательные входные параметры
|
||||
// Отображение изображения
|
||||
document.getElementById('what_image').classList.add('active');
|
||||
|
||||
// Инициализация элемента со звуком
|
||||
const what_sound = document.getElementById('what_sound');
|
||||
|
||||
// Воспроизведение звука
|
||||
what_sound.currentTime = 0;
|
||||
what_sound.play();
|
||||
|
||||
document.body[event] = function () {
|
||||
troller.what.end();
|
||||
|
||||
document.body[event] = undefined;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static vk() {
|
||||
setInterval(function () {
|
||||
const sound = document.getElementById('sound_vk');
|
||||
|
||||
if (Math.random() > 0.95) {
|
||||
// 5%
|
||||
|
||||
// Воспроизведение звука
|
||||
sound.currentTime = 0;
|
||||
sound.play();
|
||||
}
|
||||
}, 85000);
|
||||
}
|
||||
|
||||
static whatsapp() {
|
||||
setInterval(function () {
|
||||
const sound = document.getElementById('sound_whatsup');
|
||||
|
||||
if (Math.random() > 0.97) {
|
||||
// 3%
|
||||
|
||||
// Воспроизведение звука
|
||||
sound.currentTime = 0;
|
||||
sound.play();
|
||||
}
|
||||
}, 125000);
|
||||
}
|
||||
|
||||
static iphone() {
|
||||
setInterval(function () {
|
||||
const sound = document.getElementById('sound_iphone');
|
||||
|
||||
if (Math.random() > 0.98) {
|
||||
// 2%
|
||||
|
||||
// Воспроизведение звука
|
||||
sound.currentTime = 0;
|
||||
sound.play();
|
||||
}
|
||||
}, 265000);
|
||||
}
|
||||
}
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.what.enable();
|
||||
}
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.vk();
|
||||
}
|
||||
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.whatsapp();
|
||||
}
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.iphone();
|
||||
}
|
||||
"use strict";
|
||||
|
||||
class troller {
|
||||
static what = {
|
||||
enable() {
|
||||
document.body.onmouseleave = function () {
|
||||
// if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.what.start();
|
||||
// }
|
||||
};
|
||||
|
||||
document.body.onmouseenter = function () {
|
||||
troller.what.end();
|
||||
};
|
||||
},
|
||||
disable() {
|
||||
document.body.onmouseleave = document.body.onmouseenter = undefined;
|
||||
},
|
||||
start() {
|
||||
// Отображение изображения
|
||||
document.getElementById('what_image').classList.add('active');
|
||||
|
||||
// Инициализация элемента со звуком
|
||||
const what_sound = document.getElementById('what_sound');
|
||||
|
||||
// Воспроизведение звука
|
||||
what_sound.currentTime = 0;
|
||||
what_sound.play();
|
||||
},
|
||||
end() {
|
||||
// Сокрытие изображения
|
||||
document.getElementById('what_image').classList.remove('active');
|
||||
|
||||
// Остановка звука
|
||||
document.getElementById('what_sound').pause();
|
||||
},
|
||||
single(event = 'onmouseleave') {
|
||||
if (typeof event === 'string') {
|
||||
// Получены обязательные входные параметры
|
||||
// Отображение изображения
|
||||
document.getElementById('what_image').classList.add('active');
|
||||
|
||||
// Инициализация элемента со звуком
|
||||
const what_sound = document.getElementById('what_sound');
|
||||
|
||||
// Воспроизведение звука
|
||||
what_sound.currentTime = 0;
|
||||
what_sound.play();
|
||||
|
||||
document.body[event] = function () {
|
||||
troller.what.end();
|
||||
|
||||
document.body[event] = undefined;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static vk() {
|
||||
setInterval(function () {
|
||||
const sound = document.getElementById('sound_vk');
|
||||
|
||||
if (Math.random() > 0.95) {
|
||||
// 5%
|
||||
|
||||
// Воспроизведение звука
|
||||
sound.currentTime = 0;
|
||||
sound.play();
|
||||
}
|
||||
}, 85000);
|
||||
}
|
||||
|
||||
static whatsapp() {
|
||||
setInterval(function () {
|
||||
const sound = document.getElementById('sound_whatsup');
|
||||
|
||||
if (Math.random() > 0.97) {
|
||||
// 3%
|
||||
|
||||
// Воспроизведение звука
|
||||
sound.currentTime = 0;
|
||||
sound.play();
|
||||
}
|
||||
}, 125000);
|
||||
}
|
||||
|
||||
static iphone() {
|
||||
setInterval(function () {
|
||||
const sound = document.getElementById('sound_iphone');
|
||||
|
||||
if (Math.random() > 0.98) {
|
||||
// 2%
|
||||
|
||||
// Воспроизведение звука
|
||||
sound.currentTime = 0;
|
||||
sound.play();
|
||||
}
|
||||
}, 265000);
|
||||
}
|
||||
}
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.what.enable();
|
||||
}
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.vk();
|
||||
}
|
||||
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.whatsapp();
|
||||
}
|
||||
|
||||
if (Math.random() > 0.90) {
|
||||
// 10%
|
||||
|
||||
troller.iphone();
|
||||
}
|
0
mirzaev/site/rules/system/public/sounds/iphone.mp3 → mirzaev/site/virus/system/public/sounds/iphone.mp3
Executable file → Normal file
0
mirzaev/site/rules/system/public/sounds/vk.mp3 → mirzaev/site/virus/system/public/sounds/vk.mp3
Executable file → Normal file
0
mirzaev/site/rules/system/public/sounds/what.mp3 → mirzaev/site/virus/system/public/sounds/what.mp3
Executable file → Normal file
0
mirzaev/site/rules/system/public/sounds/whatsup.mp3 → mirzaev/site/virus/system/public/sounds/whatsup.mp3
Executable file → Normal file
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
@ -0,0 +1 @@
|
|||
arangodb.php
|
|
@ -0,0 +1,8 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'endpoint' => 'unix:///var/run/arangodb3/arango.sock',
|
||||
'database' => '',
|
||||
'name' => '',
|
||||
'password' => ''
|
||||
];
|
28
mirzaev/site/rules/system/views/account/panel.html → mirzaev/site/virus/system/views/account/panel.html
Executable file → Normal file
|
@ -1,14 +1,14 @@
|
|||
{% block body %}
|
||||
<section id="panel">
|
||||
{% if account %}
|
||||
{{ account.getKey() }}
|
||||
{% if vk %}
|
||||
{{ vk.mail }}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<button id="login" onclick="return account.authentication(this)">
|
||||
Войти в аккаунт
|
||||
</button>
|
||||
{% endif %}
|
||||
</section>
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<section id="panel">
|
||||
{% if account %}
|
||||
{{ account.getKey() }}
|
||||
{% if vk %}
|
||||
{{ vk.mail }}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<button id="login" onclick="return account.authentication(this)">
|
||||
Войти в аккаунт
|
||||
</button>
|
||||
{% endif %}
|
||||
</section>
|
||||
{% endblock %}
|
22
mirzaev/site/rules/system/views/account/vk.html → mirzaev/site/virus/system/views/account/vk.html
Executable file → Normal file
|
@ -1,11 +1,11 @@
|
|||
{% block body %}
|
||||
<img src="/images/truth.jpg" alt="никому не показывай" style="position: absolute; left: 0; top: 0; width: 100%; height: 100%;">
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
<script>
|
||||
setTimeout(fn => {
|
||||
window.opener.vk.close();
|
||||
}, 2000);
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<img src="/images/truth.jpg" alt="никому не показывай" style="position: absolute; left: 0; top: 0; width: 100%; height: 100%;">
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
<script>
|
||||
setTimeout(fn => {
|
||||
window.opener.vk.close();
|
||||
}, 2000);
|
||||
</script>
|
||||
{% endblock %}
|
38
mirzaev/site/rules/system/views/aside.html → mirzaev/site/virus/system/views/aside.html
Executable file → Normal file
|
@ -1,19 +1,19 @@
|
|||
{% use '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') }} #}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<aside>
|
||||
{{ block('hotline_body') }}
|
||||
</aside>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{# {{ block('hotline_js') }} #}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{# {{ block('hotline_js_init') }} #}
|
||||
{% endblock %}
|
||||
{% use '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') }} #}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<aside>
|
||||
{{ block('hotline_body') }}
|
||||
</aside>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{# {{ block('hotline_js') }} #}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{# {{ block('hotline_js_init') }} #}
|
||||
{% endblock %}
|
66
mirzaev/site/rules/system/views/core.html → mirzaev/site/virus/system/views/core.html
Executable file → Normal file
|
@ -1,33 +1,33 @@
|
|||
<!doctype html>
|
||||
|
||||
<html lang="ru">
|
||||
|
||||
<head>
|
||||
{% use 'head.html' with title as head_title, meta as head_meta, css as head_css %}
|
||||
|
||||
{% block title %}
|
||||
{{ block('head_title') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block meta %}
|
||||
{{ block('head_meta') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ block('head_css') }}
|
||||
{% endblock %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{% include 'js.html' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{% endblock %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<!doctype html>
|
||||
|
||||
<html lang="ru">
|
||||
|
||||
<head>
|
||||
{% use 'head.html' with title as head_title, meta as head_meta, css as head_css %}
|
||||
|
||||
{% block title %}
|
||||
{{ block('head_title') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block meta %}
|
||||
{{ block('head_meta') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ block('head_css') }}
|
||||
{% endblock %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{% include 'js.html' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{% endblock %}
|
||||
</body>
|
||||
|
||||
</html>
|
8
mirzaev/site/rules/system/views/footer.html → mirzaev/site/virus/system/views/footer.html
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
|||
<footer>
|
||||
<!-- <p><a href="http://www.anybrowser.org/campaign/"><img src="/img/logos/any_browser.gif" width="278" height="44" alt="Доступно на любом браузере" /></a></p> -->
|
||||
<!-- <p><a href="/browsers"><img src="/img/logos/any_browser.gif" width="278" height="44" alt="Доступно на любом браузере" /></a></p> -->
|
||||
</footer>
|
||||
<footer>
|
||||
<!-- <p><a href="http://www.anybrowser.org/campaign/"><img src="/img/logos/any_browser.gif" width="278" height="44" alt="Доступно на любом браузере" /></a></p> -->
|
||||
<!-- <p><a href="/browsers"><img src="/img/logos/any_browser.gif" width="278" height="44" alt="Доступно на любом браузере" /></a></p> -->
|
||||
</footer>
|
30
mirzaev/site/rules/system/views/head.html → mirzaev/site/virus/system/views/head.html
Executable file → Normal file
|
@ -1,15 +1,15 @@
|
|||
{% block title %}
|
||||
<title>{% if head.title != empty %}{{head.title}}{% else %}Правила беседы{% endif %}</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block meta %}
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
{% for meta in head.metas %}
|
||||
<meta {% for name, value in meta.attributes %}{{name}}="{{value}}" {% endfor %}>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/main.css" />
|
||||
{% endblock %}
|
||||
{% block title %}
|
||||
<title>{% if head.title != empty %}{{head.title}}{% else %}Скачать вирусы бесплатно{% endif %}</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block meta %}
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
{% for meta in head.metas %}
|
||||
<meta {% for name, value in meta.attributes %}{{name}}="{{value}}" {% endfor %}>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/main.css" />
|
||||
{% endblock %}
|
|
@ -0,0 +1,22 @@
|
|||
{% use 'logo.html' with css as logo_css, body as logo_body, js as logo_js, js_init as logo_js_init %}
|
||||
{% use 'account/panel.html' with body as panel_body %}
|
||||
|
||||
{% block css %}
|
||||
{{ block('logo_css') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<header>
|
||||
{{ block('logo_body') }}
|
||||
{% include 'menu.html' %}
|
||||
{{ block('panel_body') }}
|
||||
</header>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ block('logo_js') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{{ block('logo_js_init') }}
|
||||
{% endblock %}
|
56
mirzaev/site/rules/system/views/hotline/index.html → mirzaev/site/virus/system/views/hotline/index.html
Executable file → Normal file
|
@ -1,28 +1,28 @@
|
|||
{% block css %}
|
||||
<link type="text/css" rel="stylesheet" href="/css/hotline.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% if hotline.id != empty %}
|
||||
<section id="{{ hotline.id }}" class="hotline unselectable" data-hotline="true" {% for name, value in hotline.parameters
|
||||
%} data-hotline-{{ name }}="{{value}}" {% endfor %} {% for name, value in hotline.attributes %} {{ name
|
||||
}}="{{value}}" {% endfor %}>
|
||||
{% for element in hotline.elements %}
|
||||
<{{element.tag??'article'}}>{{ element.content }}</{{element.tag??'article'}}>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/hotline.js" defer></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
<script>
|
||||
document.addEventListener('hotline.loaded', function (e) {
|
||||
// Запуск препроцессора бегущих строк
|
||||
e.detail.hotline.preprocessing();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% block css %}
|
||||
<link type="text/css" rel="stylesheet" href="/css/hotline.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% if hotline.id != empty %}
|
||||
<section id="{{ hotline.id }}" class="hotline unselectable" data-hotline="true" {% for name, value in hotline.parameters
|
||||
%} data-hotline-{{ name }}="{{value}}" {% endfor %} {% for name, value in hotline.attributes %} {{ name
|
||||
}}="{{value}}" {% endfor %}>
|
||||
{% for element in hotline.elements %}
|
||||
<{{element.tag??'article'}}>{{ element.content }}</{{element.tag??'article'}}>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/hotline.js" defer></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
<script>
|
||||
document.addEventListener('hotline.loaded', function (e) {
|
||||
// Запуск препроцессора бегущих строк
|
||||
e.detail.hotline.preprocessing();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
78
mirzaev/site/rules/system/views/index.html → mirzaev/site/virus/system/views/index.html
Executable file → Normal file
|
@ -1,37 +1,41 @@
|
|||
{% extends "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 "trolling.html" with css as trolling_css, body as trolling_body, js as trolling_js %}
|
||||
{% use "header.html" with css as header_css, body as header_body, js as header_js, js_init as header_js_init %}
|
||||
|
||||
{% block css %}
|
||||
{{ block('core_css') }}
|
||||
{{ block('trolling_css') }}
|
||||
{{ block('header_css') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{{ block('core_body') }}
|
||||
{{ block('trolling_body') }}
|
||||
{{ block('header_body') }}
|
||||
|
||||
<main>
|
||||
<noscript>К сожалению мой сайт ещё пока не готов для работы без javascript</noscript>
|
||||
{% block main %}
|
||||
{% include 'rules.html' %}
|
||||
{% endblock %}
|
||||
</main>
|
||||
|
||||
{# {% include 'footer.html' %} #}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ block('core_js') }}
|
||||
{{ block('trolling_js') }}
|
||||
{{ block('header_js') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{{ block('core_js_init') }}
|
||||
{{ block('header_js_init') }}
|
||||
{% endblock %}
|
||||
{% extends "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 "trolling.html" with css as trolling_css, body as trolling_body, js as trolling_js %}
|
||||
{% use "header.html" with css as header_css, body as header_body, js as header_js, js_init as header_js_init %}
|
||||
{% use "aside.html" with css as aside_css, body as aside_body, js as aside_js, js_init as aside_js_init %}
|
||||
|
||||
{% block css %}
|
||||
{{ block('core_css') }}
|
||||
{{ block('trolling_css') }}
|
||||
{{ block('header_css') }}
|
||||
{{ block('aside_css') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{{ block('core_body') }}
|
||||
{{ block('trolling_body') }}
|
||||
{{ block('aside_body') }}
|
||||
{{ block('header_body') }}
|
||||
|
||||
<main>
|
||||
<noscript>К сожалению мой сайт ещё пока не готов для работы без javascript</noscript>
|
||||
{% block main %}
|
||||
{% endblock %}
|
||||
</main>
|
||||
|
||||
{# {% include 'footer.html' %} #}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ block('core_js') }}
|
||||
{{ block('trolling_js') }}
|
||||
{{ block('header_js') }}
|
||||
{{ block('aside_js') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{{ block('core_js_init') }}
|
||||
{{ block('header_js_init') }}
|
||||
{{ block('aside_js_init') }}
|
||||
{% endblock %}
|
8
mirzaev/site/rules/system/views/js.html → mirzaev/site/virus/system/views/js.html
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
|||
{% block js %}
|
||||
<script type="text/javascript" src="/js/js.cookie.min.js" defer></script>
|
||||
<script type="text/javascript" src="/js/account.js" defer></script>
|
||||
{% endblock %}
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/js.cookie.min.js" defer></script>
|
||||
<script type="text/javascript" src="/js/account.js" defer></script>
|
||||
{% endblock %}
|
112
mirzaev/site/rules/system/views/logo.html → mirzaev/site/virus/system/views/logo.html
Executable file → Normal file
|
@ -1,56 +1,56 @@
|
|||
{% use 'hotline/index.html' with css as hotline_css, body as hotline_body, js as hotline_js %}
|
||||
|
||||
{% block css %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/logo.css" />
|
||||
{{ block('hotline_css') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div id="logo" class="unselectable">
|
||||
<h1>VIRUS</h1>
|
||||
<h4>Скачать вирусы бесплатно</h4>
|
||||
|
||||
{% with %}
|
||||
{% set hotline = hotline|merge({'id': 'hotline_logo'}) %}
|
||||
{{ block('hotline_body') }}
|
||||
{% endwith %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block js %}
|
||||
{{ block('hotline_js') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{{ block('hotline_js_init') }}
|
||||
<script>
|
||||
document.addEventListener('hotline.loaded', function (e) {
|
||||
// Запуск препроцессора бегущих строк
|
||||
|
||||
// Инициализация элемента бегущей строки
|
||||
const element_hotline = document.getElementById('hotline');
|
||||
const element_hotline_logo = document.getElementById('hotline_logo');
|
||||
|
||||
// Инициализация слушателя
|
||||
element_hotline.hotline.events.set('move.block', true);
|
||||
element_hotline.hotline.events.set('move.unblock', true);
|
||||
element_hotline.hotline.events.set('onmousemove', true);
|
||||
|
||||
document.addEventListener(`hotline.${element_hotline.id}.move.block`, function (e) {
|
||||
// Копирование блокировки
|
||||
element_hotline_logo.hotline.move = false;
|
||||
});
|
||||
|
||||
document.addEventListener(`hotline.${element_hotline.id}.move.unblock`, function (e) {
|
||||
// Копирование блокировки
|
||||
element_hotline_logo.hotline.move = true;
|
||||
});
|
||||
|
||||
document.addEventListener(`hotline.${element_hotline.id}.onmousemove`, function (e) {
|
||||
// Копирование перемещения
|
||||
element_hotline_logo.hotline.offset(e.detail.to);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% use 'hotline/index.html' with css as hotline_css, body as hotline_body, js as hotline_js %}
|
||||
|
||||
{% block css %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/logo.css" />
|
||||
{{ block('hotline_css') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div id="logo" class="unselectable">
|
||||
<h1>VIRUS</h1>
|
||||
<h4>Скачать вирусы бесплатно</h4>
|
||||
|
||||
{% with %}
|
||||
{% set hotline = hotline|merge({'id': 'hotline_logo'}) %}
|
||||
{{ block('hotline_body') }}
|
||||
{% endwith %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block js %}
|
||||
{{ block('hotline_js') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block js_init %}
|
||||
{{ block('hotline_js_init') }}
|
||||
<script>
|
||||
document.addEventListener('hotline.loaded', function (e) {
|
||||
// Запуск препроцессора бегущих строк
|
||||
|
||||
// Инициализация элемента бегущей строки
|
||||
const element_hotline = document.getElementById('hotline');
|
||||
const element_hotline_logo = document.getElementById('hotline_logo');
|
||||
|
||||
// Инициализация слушателя
|
||||
element_hotline.hotline.events.set('move.block', true);
|
||||
element_hotline.hotline.events.set('move.unblock', true);
|
||||
element_hotline.hotline.events.set('onmousemove', true);
|
||||
|
||||
document.addEventListener(`hotline.${element_hotline.id}.move.block`, function (e) {
|
||||
// Копирование блокировки
|
||||
element_hotline_logo.hotline.move = false;
|
||||
});
|
||||
|
||||
document.addEventListener(`hotline.${element_hotline.id}.move.unblock`, function (e) {
|
||||
// Копирование блокировки
|
||||
element_hotline_logo.hotline.move = true;
|
||||
});
|
||||
|
||||
document.addEventListener(`hotline.${element_hotline.id}.onmousemove`, function (e) {
|
||||
// Копирование перемещения
|
||||
element_hotline_logo.hotline.offset(e.detail.to);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
50
mirzaev/site/rules/system/views/manager.php → mirzaev/site/virus/system/views/manager.php
Executable file → Normal file
|
@ -1,25 +1,25 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\rules\views;
|
||||
|
||||
use mirzaev\minimal\controller;
|
||||
|
||||
use Twig\Loader\FilesystemLoader;
|
||||
use Twig\Environment as view;
|
||||
|
||||
/**
|
||||
* Менеджер представлений
|
||||
*
|
||||
* @package mirzaev\site\rules\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class manager extends controller
|
||||
{
|
||||
public function render(string $file, array $vars = []): ?string
|
||||
{
|
||||
// Генерация представления
|
||||
return (new view(new FilesystemLoader(VIEWS)))->render($file, $vars);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\site\virus\views;
|
||||
|
||||
use mirzaev\minimal\controller;
|
||||
|
||||
use Twig\Loader\FilesystemLoader;
|
||||
use Twig\Environment as view;
|
||||
|
||||
/**
|
||||
* Менеджер представлений
|
||||
*
|
||||
* @package mirzaev\site\virus\controllers
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
final class manager extends controller
|
||||
{
|
||||
public function render(string $file, array $vars = []): ?string
|
||||
{
|
||||
// Генерация представления
|
||||
return (new view(new FilesystemLoader(VIEWS)))->render($file, $vars);
|
||||
}
|
||||
}
|
82
mirzaev/site/rules/system/views/menu.html → mirzaev/site/virus/system/views/menu.html
Executable file → Normal file
30
mirzaev/site/rules/system/views/trolling.html → mirzaev/site/virus/system/views/trolling.html
Executable file → Normal file
|
@ -1,15 +1,15 @@
|
|||
{% block css %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/trolling.css" />
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<img id="what_image" class="hide" src="/images/what.png" />
|
||||
<audio id="what_sound" class="hide" src="/sounds/what.mp3" controls></audio>
|
||||
<audio id="sound_vk" class="hide" src="/sounds/vk.mp3" controls></audio>
|
||||
<audio id="sound_whatsup" class="hide" src="/sounds/whatsup.mp3" controls></audio>
|
||||
<audio id="sound_iphone" class="hide" src="/sounds/iphone.mp3" controls></audio>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script src="/js/trolling.js" defer></script>
|
||||
{% endblock %}
|
||||
{% block css %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/trolling.css" />
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<img id="what_image" class="hide" src="/images/what.png" />
|
||||
<audio id="what_sound" class="hide" src="/sounds/what.mp3" controls></audio>
|
||||
<audio id="sound_vk" class="hide" src="/sounds/vk.mp3" controls></audio>
|
||||
<audio id="sound_whatsup" class="hide" src="/sounds/whatsup.mp3" controls></audio>
|
||||
<audio id="sound_iphone" class="hide" src="/sounds/iphone.mp3" controls></audio>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script src="/js/trolling.js" defer></script>
|
||||
{% endblock %}
|
16
psalm.xml
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<psalm
|
||||
errorLevel="7"
|
||||
resolveFromConfigFile="true"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="https://getpsalm.org/schema/config"
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
|
||||
findUnusedBaselineEntry="true"
|
||||
>
|
||||
<projectFiles>
|
||||
<directory name="mirzaev/site/rules/system" />
|
||||
<ignoreFiles>
|
||||
<directory name="vendor" />
|
||||
</ignoreFiles>
|
||||
</projectFiles>
|
||||
</psalm>
|