Создание аутентификации и регистрации на ArangoDB через Ajax + фронтенд правки

This commit is contained in:
RedHood 2020-12-24 09:57:19 +10:00
parent 59faa344cb
commit e0a6ae88e4
22 changed files with 755 additions and 317 deletions

View File

@ -20,7 +20,7 @@
"bower-asset/bootstrap": "*", "bower-asset/bootstrap": "*",
"npm-asset/jquery": "^3.5", "npm-asset/jquery": "^3.5",
"bower-asset/jquery": "^3.5", "bower-asset/jquery": "^3.5",
"pbazsi/yii2-arangodb": "2.0", "explosivebit/arangodb": "^2.0",
"triagens/arangodb": "^3.6" "triagens/arangodb": "^3.6"
}, },
"require-dev": { "require-dev": {
@ -39,7 +39,10 @@
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"mirzaev\\skillparts\\": "mirzaev/skillparts/system" "mirzaev\\skillparts\\": "mirzaev/skillparts/system"
} },
"classmap": [
"vendor/explosivebit"
]
}, },
"autoload-dev": { "autoload-dev": {
"psr-4": { "psr-4": {
@ -86,7 +89,7 @@
{ {
"type": "package", "type": "package",
"package": { "package": {
"name": "pbazsi/yii2-arangodb", "name": "explosivebit/arangodb",
"version": "2.0", "version": "2.0",
"source": { "source": {
"type": "git", "type": "git",

156
composer.lock generated
View File

@ -4,14 +4,14 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "5c6fa00f67028dbc18572600d2a1935d", "content-hash": "d83ed7a25bd848237d6ae45b945471f6",
"packages": [ "packages": [
{ {
"name": "bower-asset/bootstrap", "name": "bower-asset/bootstrap",
"version": "v3.4.1", "version": "v3.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "git@github.com:twbs/bootstrap.git", "url": "https://github.com/twbs/bootstrap.git",
"reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e" "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e"
}, },
"dist": { "dist": {
@ -302,6 +302,16 @@
], ],
"time": "2020-11-14T15:56:27+00:00" "time": "2020-11-14T15:56:27+00:00"
}, },
{
"name": "explosivebit/arangodb",
"version": "2.0",
"source": {
"type": "git",
"url": "https://github.com/pBazsi/yii2-arangodb.git",
"reference": "master"
},
"type": "library"
},
{ {
"name": "ezyang/htmlpurifier", "name": "ezyang/htmlpurifier",
"version": "v4.13.0", "version": "v4.13.0",
@ -364,16 +374,6 @@
"MIT" "MIT"
] ]
}, },
{
"name": "pBazsi/yii2-arangodb",
"version": "2.0",
"source": {
"type": "git",
"url": "https://github.com/pBazsi/yii2-arangodb.git",
"reference": "master"
},
"type": "library"
},
{ {
"name": "swiftmailer/swiftmailer", "name": "swiftmailer/swiftmailer",
"version": "v6.2.4", "version": "v6.2.4",
@ -1835,21 +1835,21 @@
}, },
{ {
"name": "codeception/verify", "name": "codeception/verify",
"version": "2.1.0", "version": "2.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Codeception/Verify.git", "url": "https://github.com/Codeception/Verify.git",
"reference": "11fa56c223ae7188174c4ba50c68454d83b254e9" "reference": "1cdac1867c33801ae8e4833015153766ef403c92"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Codeception/Verify/zipball/11fa56c223ae7188174c4ba50c68454d83b254e9", "url": "https://api.github.com/repos/Codeception/Verify/zipball/1cdac1867c33801ae8e4833015153766ef403c92",
"reference": "11fa56c223ae7188174c4ba50c68454d83b254e9", "reference": "1cdac1867c33801ae8e4833015153766ef403c92",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-dom": "*", "ext-dom": "*",
"php": "^7.3", "php": "^7.3 || ^8.0",
"phpunit/phpunit": "^9.3" "phpunit/phpunit": "^9.3"
}, },
"type": "library", "type": "library",
@ -1876,7 +1876,7 @@
} }
], ],
"description": "BDD assertion library for PHPUnit", "description": "BDD assertion library for PHPUnit",
"time": "2020-09-03T04:43:01+00:00" "time": "2020-12-18T16:18:31+00:00"
}, },
{ {
"name": "doctrine/instantiator", "name": "doctrine/instantiator",
@ -1945,16 +1945,16 @@
}, },
{ {
"name": "fakerphp/faker", "name": "fakerphp/faker",
"version": "v1.12.1", "version": "v1.13.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/FakerPHP/Faker.git", "url": "https://github.com/FakerPHP/Faker.git",
"reference": "841e8bdde345cc1ea9f98e776959e7531cadea0e" "reference": "ab3f5364d01f2c2c16113442fb987d26e4004913"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/FakerPHP/Faker/zipball/841e8bdde345cc1ea9f98e776959e7531cadea0e", "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/ab3f5364d01f2c2c16113442fb987d26e4004913",
"reference": "841e8bdde345cc1ea9f98e776959e7531cadea0e", "reference": "ab3f5364d01f2c2c16113442fb987d26e4004913",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1989,11 +1989,7 @@
"faker", "faker",
"fixtures" "fixtures"
], ],
"support": { "time": "2020-12-18T16:50:48+00:00"
"issues": "https://github.com/FakerPHP/Faker/issues",
"source": "https://github.com/FakerPHP/Faker/tree/v1.12.1"
},
"time": "2020-12-11T10:39:41+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
@ -2295,16 +2291,16 @@
}, },
{ {
"name": "phar-io/version", "name": "phar-io/version",
"version": "3.0.3", "version": "3.0.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phar-io/version.git", "url": "https://github.com/phar-io/version.git",
"reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" "reference": "e4782611070e50613683d2b9a57730e9a3ba5451"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451",
"reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", "reference": "e4782611070e50613683d2b9a57730e9a3ba5451",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2338,7 +2334,7 @@
} }
], ],
"description": "Library for handling version information and constraints", "description": "Library for handling version information and constraints",
"time": "2020-11-30T09:21:21+00:00" "time": "2020-12-13T23:18:30+00:00"
}, },
{ {
"name": "php-webdriver/webdriver", "name": "php-webdriver/webdriver",
@ -4142,16 +4138,16 @@
}, },
{ {
"name": "symfony/browser-kit", "name": "symfony/browser-kit",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/browser-kit.git", "url": "https://github.com/symfony/browser-kit.git",
"reference": "4fc769a12282a12bc47f883f04f01ff3777e369b" "reference": "87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/4fc769a12282a12bc47f883f04f01ff3777e369b", "url": "https://api.github.com/repos/symfony/browser-kit/zipball/87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a",
"reference": "4fc769a12282a12bc47f883f04f01ff3777e369b", "reference": "87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4192,9 +4188,6 @@
], ],
"description": "Symfony BrowserKit Component", "description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/browser-kit/tree/v5.2.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4209,20 +4202,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-11-14T11:04:29+00:00" "time": "2020-12-18T08:03:05+00:00"
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "3e0564fb08d44a98bd5f1960204c958e57bd586b" "reference": "47c02526c532fb381374dab26df05e7313978976"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/3e0564fb08d44a98bd5f1960204c958e57bd586b", "url": "https://api.github.com/repos/symfony/console/zipball/47c02526c532fb381374dab26df05e7313978976",
"reference": "3e0564fb08d44a98bd5f1960204c958e57bd586b", "reference": "47c02526c532fb381374dab26df05e7313978976",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4303,20 +4296,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-11-28T11:24:18+00:00" "time": "2020-12-18T08:03:05+00:00"
}, },
{ {
"name": "symfony/css-selector", "name": "symfony/css-selector",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/css-selector.git", "url": "https://github.com/symfony/css-selector.git",
"reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256" "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", "url": "https://api.github.com/repos/symfony/css-selector/zipball/f789e7ead4c79e04ca9a6d6162fc629c89bd8054",
"reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4365,7 +4358,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-10-28T21:31:18+00:00" "time": "2020-12-08T17:02:38+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@ -4433,16 +4426,16 @@
}, },
{ {
"name": "symfony/dom-crawler", "name": "symfony/dom-crawler",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dom-crawler.git", "url": "https://github.com/symfony/dom-crawler.git",
"reference": "0969122fe144dd8ab2e8c98c7e03eedc621b368c" "reference": "ee7cf316fb0de786cfe5ae32ee79502b290c81ea"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/0969122fe144dd8ab2e8c98c7e03eedc621b368c", "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ee7cf316fb0de786cfe5ae32ee79502b290c81ea",
"reference": "0969122fe144dd8ab2e8c98c7e03eedc621b368c", "reference": "ee7cf316fb0de786cfe5ae32ee79502b290c81ea",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4486,9 +4479,6 @@
], ],
"description": "Symfony DomCrawler Component", "description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dom-crawler/tree/v5.2.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4503,20 +4493,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-10-24T12:01:57+00:00" "time": "2020-12-18T08:02:46+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c" "reference": "1c93f7a1dff592c252574c79a8635a8a80856042"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1c93f7a1dff592c252574c79a8635a8a80856042",
"reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", "reference": "1c93f7a1dff592c252574c79a8635a8a80856042",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4585,7 +4575,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-11-01T16:14:45+00:00" "time": "2020-12-18T08:03:05+00:00"
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
@ -4665,16 +4655,16 @@
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "fd8305521692f27eae3263895d1ef1571c71a78d" "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/fd8305521692f27eae3263895d1ef1571c71a78d", "url": "https://api.github.com/repos/symfony/finder/zipball/0b9231a5922fd7287ba5b411893c0ecd2733e5ba",
"reference": "fd8305521692f27eae3263895d1ef1571c71a78d", "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4719,7 +4709,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-11-18T09:42:36+00:00" "time": "2020-12-08T17:02:38+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@ -5033,16 +5023,16 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "240e74140d4d956265048f3025c0aecbbc302d54" "reference": "bd8815b8b6705298beaa384f04fabd459c10bedd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/240e74140d4d956265048f3025c0aecbbc302d54", "url": "https://api.github.com/repos/symfony/process/zipball/bd8815b8b6705298beaa384f04fabd459c10bedd",
"reference": "240e74140d4d956265048f3025c0aecbbc302d54", "reference": "bd8815b8b6705298beaa384f04fabd459c10bedd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5088,7 +5078,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-11-02T15:47:15+00:00" "time": "2020-12-08T17:03:37+00:00"
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
@ -5168,16 +5158,16 @@
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed",
"reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5244,20 +5234,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-10-24T12:08:07+00:00" "time": "2020-12-05T07:33:16+00:00"
}, },
{ {
"name": "symfony/yaml", "name": "symfony/yaml",
"version": "v5.2.0", "version": "v5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/yaml.git", "url": "https://github.com/symfony/yaml.git",
"reference": "bb73619b2ae5121bbbcd9f191dfd53ded17ae598" "reference": "290ea5e03b8cf9b42c783163123f54441fb06939"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/bb73619b2ae5121bbbcd9f191dfd53ded17ae598", "url": "https://api.github.com/repos/symfony/yaml/zipball/290ea5e03b8cf9b42c783163123f54441fb06939",
"reference": "bb73619b2ae5121bbbcd9f191dfd53ded17ae598", "reference": "290ea5e03b8cf9b42c783163123f54441fb06939",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5316,7 +5306,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2020-11-28T10:57:20+00:00" "time": "2020-12-08T17:02:38+00:00"
}, },
{ {
"name": "theseer/tokenizer", "name": "theseer/tokenizer",

View File

@ -31,12 +31,14 @@ class AppAsset extends AssetBundle
'css/footer.css' 'css/footer.css'
]; ];
public $js = [ public $js = [
'https://kit.fontawesome.com/d7e922c226.js',
'https://code.jquery.com/jquery-3.5.1.min.js', 'https://code.jquery.com/jquery-3.5.1.min.js',
'js/bootstrap/popper.min.js', 'js/bootstrap/popper.min.js',
'js/bootstrap/bootstrap.min.js', 'js/bootstrap/bootstrap.min.js',
'https://cdn.jsdelivr.net/bxslider/4.1.1/jquery.bxslider.min.js', 'https://cdn.jsdelivr.net/bxslider/4.1.1/jquery.bxslider.min.js',
'js/account.js',
'js/ticker.js', 'js/ticker.js',
'https://kit.fontawesome.com/d7e922c226.js' 'js/reinitialization.js'
]; ];
public $depends = [ public $depends = [
'yii\web\YiiAsset', 'yii\web\YiiAsset',

View File

@ -1,16 +1,15 @@
<?php <?php
$params = require __DIR__ . '/params.php';
$db = require __DIR__ . '/db.php';
$config = [ $config = [
'id' => 'basic-console', 'id' => 'basic-console',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'bootstrap' => ['log'], 'bootstrap' => ['log'],
'controllerNamespace' => 'app\commands', 'controllerNamespace' => 'app\commands',
'aliases' => [ 'aliases' => [
'@vendor' => dirname(__DIR__) . '../../../../vendor',
'@bower' => '@vendor/bower-asset', '@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset', '@npm' => '@vendor/npm-asset',
'@explosivebit' => '@vendor/explosivebit',
'@tests' => '@app/tests', '@tests' => '@app/tests',
], ],
'components' => [ 'components' => [
@ -25,16 +24,15 @@ $config = [
], ],
], ],
], ],
'db' => $db, 'arangodb' => require __DIR__ . '/db.php'
], ],
'params' => $params, 'params' => require __DIR__ . '/params.php',
/*
'controllerMap' => [ 'controllerMap' => [
'fixture' => [ // Fixture generation command line. 'arangodb-migrate' => 'explosivebit\arangodb\console\controllers\MigrateController',
'fixture' => [
'class' => 'yii\faker\FixtureController', 'class' => 'yii\faker\FixtureController',
], ],
], ]
*/
]; ];
if (YII_ENV_DEV) { if (YII_ENV_DEV) {

View File

@ -1,14 +1,14 @@
<?php <?php
return [ use ArangoDBClient\ConnectionOptions;
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=;dbname=',
'username' => '',
'password' => '',
'charset' => 'utf8',
// Schema cache options (for production environment) return [
//'enableSchemaCache' => true, 'class' => '\explosivebit\arangodb\Connection',
//'schemaCacheDuration' => 60, 'connectionOptions' => [
//'schemaCache' => 'cache', ConnectionOptions::OPTION_DATABASE => '',
ConnectionOptions::OPTION_ENDPOINT => 'tcp://127.0.0.1:8529',
ConnectionOptions::OPTION_AUTH_TYPE => 'Basic',
ConnectionOptions::OPTION_AUTH_USER => '',
ConnectionOptions::OPTION_AUTH_PASSWD => '',
],
]; ];

View File

@ -1,6 +1,4 @@
<?php <?php
$params = require __DIR__ . '/params.php';
$db = require __DIR__ . '/test_db.php';
/** /**
* Application configuration shared by all test types * Application configuration shared by all test types
@ -14,7 +12,7 @@ return [
], ],
'language' => 'en-US', 'language' => 'en-US',
'components' => [ 'components' => [
'db' => $db, 'db' => require __DIR__ . '/test_db.php',
'mailer' => [ 'mailer' => [
'useFileTransport' => true, 'useFileTransport' => true,
], ],
@ -25,7 +23,7 @@ return [
'showScriptName' => true, 'showScriptName' => true,
], ],
'user' => [ 'user' => [
'identityClass' => 'app\models\User', 'identityClass' => 'app\models\Account',
], ],
'request' => [ 'request' => [
'cookieValidationKey' => 'test', 'cookieValidationKey' => 'test',
@ -38,5 +36,5 @@ return [
*/ */
], ],
], ],
'params' => $params, 'params' => require __DIR__ . '/params.php',
]; ];

View File

@ -1,31 +1,34 @@
<?php <?php
use ArangoDBClient\ConnectionOptions;
$params = require __DIR__ . '/params.php';
$db = require __DIR__ . '/db.php';
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'bootstrap' => ['log'], 'bootstrap' => ['log'],
'aliases' => [ 'aliases' => [
'@vendor' => '../../../../vendor', '@vendor' => dirname(__DIR__) . '../../../../vendor',
'@bower' => '@vendor/bower-asset', '@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset', '@npm' => '@vendor/npm-asset',
'@explosivebit' => '@vendor/explosivebit',
], ],
'components' => [ 'components' => [
'request' => [ 'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => '', 'cookieValidationKey' => '',
'baseUrl' => ''
],
'cache' => [
'class' => 'yii\caching\FileCache',
], ],
// 'cache' => [
// 'class' => 'yii\caching\FileCache',
// ],
'user' => [ 'user' => [
'identityClass' => 'app\models\User', 'identityClass' => 'app\models\Account',
'enableAutoLogin' => true, 'enableAutoLogin' => true,
], ],
// 'session' => [
// 'class' => 'yii\web\Session',
// 'cookieParams' => ['lifetime' => 3600 * 24 * 30 * 12],
// 'timeout' => 3600 * 24 * 30 * 12,
// 'useCookies' => true,
// ],
'errorHandler' => [ 'errorHandler' => [
'errorAction' => 'site/error', 'errorAction' => 'site/error',
], ],
@ -45,32 +48,29 @@ $config = [
], ],
], ],
], ],
'db' => $db, 'arangodb' => require __DIR__ . '/db.php',
'arangodb' => [
'class' => '\explosivebit\arangodb\Connection',
'connectionOptions' => [
ConnectionOptions::OPTION_DATABASE => '',
ConnectionOptions::OPTION_ENDPOINT => '',
ConnectionOptions::OPTION_AUTH_TYPE => 'Basic',
ConnectionOptions::OPTION_AUTH_USER => '',
ConnectionOptions::OPTION_AUTH_PASSWD => '',
],
],
'urlManager' => [ 'urlManager' => [
'enablePrettyUrl' => true, 'enablePrettyUrl' => true,
'showScriptName' => false, 'showScriptName' => false,
'rules' => [], 'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'site'],
'<action>' => 'site/<action>'
],
], ],
], ],
'params' => $params, 'params' => require __DIR__ . '/params.php',
]; ];
if (YII_ENV_DEV) { if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug'; $config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [ $config['modules']['debug'] = [
'class' => 'yii\debug\Module', 'class' => 'yii\debug\Module',
'panels' => [
'ArangoDB' => [
'class' => 'explosivebit\arangodb\panels\arangodb\ArangoDbPanel'
]
],
// uncomment the following to add your IP if you are not connecting from localhost. // uncomment the following to add your IP if you are not connecting from localhost.
//'allowedIPs' => ['127.0.0.1', '::1'], //'allowedIPs' => ['127.0.0.1', '::1'],
]; ];

View File

@ -7,11 +7,14 @@ use yii\filters\AccessControl;
use yii\web\Controller; use yii\web\Controller;
use yii\web\Response; use yii\web\Response;
use yii\filters\VerbFilter; use yii\filters\VerbFilter;
use app\models\LoginForm; use app\models\AuthenticationForm;
use app\models\RegistrationForm;
use app\models\ContactForm; use app\models\ContactForm;
use app\models\Account;
class SiteController extends Controller class SiteController extends Controller
{ {
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -19,7 +22,7 @@ class SiteController extends Controller
{ {
return [ return [
'access' => [ 'access' => [
'class' => AccessControl::className(), 'class' => AccessControl::class,
'only' => ['logout'], 'only' => ['logout'],
'rules' => [ 'rules' => [
[ [
@ -30,7 +33,7 @@ class SiteController extends Controller
], ],
], ],
'verbs' => [ 'verbs' => [
'class' => VerbFilter::className(), 'class' => VerbFilter::class,
'actions' => [ 'actions' => [
'logout' => ['post'], 'logout' => ['post'],
], ],
@ -64,26 +67,94 @@ class SiteController extends Controller
return $this->render('index'); return $this->render('index');
} }
/**
* Identification action.
*
* @return Response
*/
public function actionIdentification()
{
if (Yii::$app->request->isAjax) {
Yii::$app->response->format = Response::FORMAT_JSON;
if (Yii::$app->user->isGuest) {
return [
'menu' => '<a onclick="authentication()">Вход</a>',
'_csrf' => Yii::$app->request->getCsrfToken()
];
} else {
$mail = Yii::$app->user->identity->mail;
return [
'menu' => <<<HTML
<p class="m-0">
<a class="text-dark" href="/cart"><i class="fas fa-shopping-cart mr-4"></i></a>
<a class="text-dark" href="/orders"><i class="fas fa-list mr-4"></i></a>
<a class="text-dark" onclick="deauthentication()">Выход ($mail)</a>
</p>
HTML,
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
}
}
/** /**
* Login action. * Login action.
* *
* @return Response|string * @return Response|string
*/ */
public function actionLogin() public function actionAuthentication()
{ {
$model = new AuthenticationForm(Yii::$app->request->post()['AuthenticationForm'] ?? Yii::$app->request->get()['AuthenticationForm']);
if (Yii::$app->request->isAjax) {
// AJAX-POST-запрос
if (!Yii::$app->user->isGuest) { if (!Yii::$app->user->isGuest) {
return $this->goHome(); // Аккаунт уже авторизован
Yii::$app->response->statusCode = 403;
return [
'form' => $this->renderPartial('index'),
'_csrf' => Yii::$app->request->getCsrfToken()
];
} }
$model = new LoginForm(); Yii::$app->response->format = Response::FORMAT_JSON;
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack(); if (isset($model->mail, $model->pswd)) {
if ($model->load(Yii::$app->request->post()) && $model->authentication()) {
return [
'menu' => <<<HTML
<p class="m-0">
<a class="text-dark" href="/cart"><i class="fas fa-shopping-cart mr-4"></i></a>
<a class="text-dark" href="/orders"><i class="fas fa-list mr-4"></i></a>
<a class="text-dark" onclick="deauthentication()">Выход ($model->mail)</a>
</p>
HTML,
'form' => $this->renderPartial('index'),
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
} else {
return [
'menu' => '<a onclick="authentication()">Вход</a>',
'form' => $this->renderPartial('authentication', compact('model')),
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
} else if (Yii::$app->request->isPost) {
// POST-запрос
} else {
// GET-запрос и прочие
if (!Yii::$app->user->isGuest) {
// Аккаунт уже авторизован
Yii::$app->response->redirect('/');
}
} }
$model->password = ''; return $this->render('authentication', compact('model'));
return $this->render('login', [
'model' => $model,
]);
} }
/** /**
@ -91,11 +162,101 @@ class SiteController extends Controller
* *
* @return Response * @return Response
*/ */
public function actionLogout() public function actionDeauthentication()
{ {
if (Yii::$app->request->isAjax) {
// AJAX-POST-запрос
Yii::$app->response->format = Response::FORMAT_JSON;
Yii::$app->user->logout(); Yii::$app->user->logout();
return $this->goHome(); return [
'menu' => '<a onclick="authentication()">Вход</a>',
'form' => $this->renderPartial('index'),
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
Yii::$app->response->redirect('/');
}
/**
* Login action.
*
* @return Response|string
*/
public function actionRegistration()
{
$model = new RegistrationForm(Yii::$app->request->post()['RegistrationForm'] ?? Yii::$app->request->get()['RegistrationForm']);
if (Yii::$app->request->isAjax) {
// AJAX-POST-запрос
if (!Yii::$app->user->isGuest) {
// Аккаунт уже авторизован
Yii::$app->response->statusCode = 302;
return [
'form' => $this->renderPartial('index'),
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
Yii::$app->response->format = Response::FORMAT_JSON;
if (isset($model->mail, $model->pswd)) {
// Аккаунт передал необходимые параметры
// Инициализация нового аккаунта
$account = new Account();
$account->mail = $model->mail;
$account->pswd = Yii::$app->security->generatePasswordHash($model->pswd);
if ($model->load(Yii::$app->request->post()) && $model->validate() && $account->save()) {
// Данные прошли проверку и аккаунт был создан
return [
'menu' => <<<HTML
<p class="m-0">
<a class="text-dark" href="/cart"><i class="fas fa-shopping-cart mr-4"></i></a>
<a class="text-dark" href="/orders"><i class="fas fa-list mr-4"></i></a>
<a class="text-dark" onclick="deauthentication()">Выход ($account->mail)</a>
</p>
HTML,
'form' => $this->renderPartial('index'),
'_csrf' => Yii::$app->request->getCsrfToken()
];
} else {
// Данные не прошли проверку
Yii::$app->response->statusCode = 400;
return [
'form' => $this->renderPartial('registration', compact('model')),
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
} else {
// Аккаунт не передал необходимые параметры
return [
'menu' => '<a onclick="authentication()">Вход</a>',
'form' => $this->renderPartial('registration', compact('model')),
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
} else if (Yii::$app->request->isPost) {
// POST-запрос
return;
} else {
// GET-запрос и прочие
if (!Yii::$app->user->isGuest) {
// Аккаунт уже авторизован
Yii::$app->response->redirect('/');
}
}
return $this->render('registration', compact('model'));
} }
/** /**

View File

@ -0,0 +1,20 @@
<?php
use explosivebit\arangodb\Migration;
class m201219_074926_create_account_collection extends Migration
{
public function up()
{
$this->createCollection('account');
}
public function down()
{
// $this->delete('accounts', 'mail');
// $this->delete('accounts', 'name');
// $this->delete('accounts', 'pswd');
$this->dropCollection('account');
}
}

View File

@ -0,0 +1,115 @@
<?php
namespace app\models;
use Yii;
use yii\web\IdentityInterface;
use explosivebit\arangodb\ActiveRecord;
class Account extends ActiveRecord implements IdentityInterface
{
public $_mail;
public $_pswd;
public $_name;
public $_simc;
public $_sity;
public $_comp;
public $_taxn;
public $_auth;
/**
* @return string the name of the index associated with this ActiveRecord class.
*/
public static function collectionName()
{
return 'account';
}
/**
* @return array list of attribute names.
*/
public function attributes()
{
return ['mail', 'pswd', 'auth', 'name' => 'sex', 'simc', 'sity', 'comp', 'taxn', 'auth'];
}
/**
* @return int|string current user ID
*/
public function getId()
{
return $this->mail;
}
/**
* @return string current user auth key
*/
public function getAuthKey()
{
return $this->auth;
}
/**
* Finds an identity by the given ID.
*
* @param string|int $id the ID to be looked for
* @return IdentityInterface|null the identity object that matches the given ID.
*/
public static function findIdentity($mail)
{
return static::findOne(['mail' => $mail]);
}
/**
* Finds an identity by the given token.
*
* @param string $token the token to be looked for
* @return IdentityInterface|null the identity object that matches the given token.
*/
public static function findIdentityByAccessToken($pass, $type = null)
{
return static::findOne(['pass' => $pass]);
}
/**
* Finds user by mail
*
* @param string $mail
* @return static|null
*/
public static function findByMail($mail)
{
return static::findOne(['mail' => $mail]);
}
/**
* Validates password
*
* @param string $pswd password to validate
* @return bool if password provided is valid for current user
*/
public function validatePassword($pswd)
{
return Yii::$app->security->validatePassword($pswd, $this->pswd);
}
/**
* @param string $auth
* @return bool if auth key is valid for current user
*/
public function validateAuthKey($auth)
{
return $this->getAuthKey() === $auth;
}
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
if ($this->isNewRecord) {
$this->auth = Yii::$app->security->generateRandomString();
}
return true;
}
return false;
}
}

View File

@ -0,0 +1,91 @@
<?php
namespace app\models;
use Yii;
use yii\base\Model;
use app\models\Account;
/**
* LoginForm is the model behind the login form.
*
* @property-read Account|null $account This property is read-only.
*
*/
class AuthenticationForm extends Model
{
public $mail;
public $pswd;
public $auto = true;
private $account = false;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
// accountname and password are both required
[['mail', 'pswd'], 'required'],
// rememberMe must be a boolean value
['auto', 'boolean'],
// pswd is validated by validatePassword()
['pswd', 'validatePassword'],
];
}
public function attributeLabels()
{
return [
'mail' => 'Почта',
'pswd' => 'Пароль',
'auto' => 'Запомнить'
];
}
/**
* Validates the password.
* This method serves as the inline validation for password.
*
* @param string $attribute the attribute currently being validated
* @param array $params the additional name-value pairs given in the rule
*/
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$account = $this->getAccount();
if (!$account || !$account->validatePassword($this->pswd)) {
$this->addError($attribute, 'Не удалось идентифицировать');
}
}
}
/**
* Logs in a account using the provided accountname and password.
* @return bool whether the account is logged in successfully
*/
public function authentication()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getAccount(), $this->auto ? 3600*24*30 : 0);
}
return false;
}
/**
* Finds account by [[accountname]]
*
* @return Account|null
*/
public function getAccount()
{
if ($this->account === false) {
$this->account = Account::findByMail($this->mail);
}
return $this->account;
}
}

View File

@ -1,81 +0,0 @@
<?php
namespace app\models;
use Yii;
use yii\base\Model;
/**
* LoginForm is the model behind the login form.
*
* @property-read User|null $user This property is read-only.
*
*/
class LoginForm extends Model
{
public $username;
public $password;
public $rememberMe = true;
private $_user = false;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
// username and password are both required
[['username', 'password'], 'required'],
// rememberMe must be a boolean value
['rememberMe', 'boolean'],
// password is validated by validatePassword()
['password', 'validatePassword'],
];
}
/**
* Validates the password.
* This method serves as the inline validation for password.
*
* @param string $attribute the attribute currently being validated
* @param array $params the additional name-value pairs given in the rule
*/
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, 'Incorrect username or password.');
}
}
}
/**
* Logs in a user using the provided username and password.
* @return bool whether the user is logged in successfully
*/
public function login()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
}
return false;
}
/**
* Finds user by [[username]]
*
* @return User|null
*/
public function getUser()
{
if ($this->_user === false) {
$this->_user = User::findByUsername($this->username);
}
return $this->_user;
}
}

View File

@ -0,0 +1,28 @@
<?php
namespace app\models;
use yii\base\Model;
use app\models\Account;
class RegistrationForm extends Model
{
public $mail;
public $pswd;
public function rules()
{
return [
[['mail', 'pswd'], 'required', 'message' => 'Заполните поле'],
['mail', 'unique', 'targetClass' => Account::class, 'message' => 'Почта уже привязана к другому аккаунту'],
];
}
public function attributeLabels()
{
return [
'mail' => 'Почта',
'pswd' => 'Пароль',
];
}
}

View File

@ -17,7 +17,7 @@ AppAsset::register($this);
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<?php $this->registerCsrfMetaTags() ?> <?php $this->registerCsrfMetaTags() ?>
<title><?= Html::encode($this->title) ?></title> <title><?= Html::encode($this->title ?? 'SkillParts') ?></title>
<?php $this->head() ?> <?php $this->head() ?>
</head> </head>
@ -28,13 +28,11 @@ AppAsset::register($this);
<div class="container"> <div class="container">
<div class="row mt-3 mt-sm-0 pt-3"> <div class="row mt-3 mt-sm-0 pt-3">
<div class="col-3 col-sm-4 col-md-2 d-flex flex-column justify-content-end logotype"> <div class="col-3 col-sm-4 col-md-2 d-flex flex-column justify-content-end logotype">
<img class="img-fluid" src="/img/logos/skillparts.png" alt="SkillParts"> <a href="/"><img class="img-fluid" src="/img/logos/skillparts.png" alt="SkillParts"></a>
</div> </div>
<div class="col ml-auto text-right d-flex flex-column justify-content-end"> <div class="col ml-auto text-right d-flex flex-column justify-content-end">
<div class="row"> <div class="row">
<div class="col"> <nav id="nav" class="col"></nav>
<p class="m-0"><i class="fas fa-shopping-cart mr-4"></i><i class="fas fa-list mr-4"></i><a>Личный кабинет</a></p>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -72,7 +70,7 @@ AppAsset::register($this);
<input id="catalog_search_panel_button_3" class="btn btn-sm5 text-white button_clean" type="radio" name="catalog_search_panel_buttons" value="catalog_search_panel_button_3"> <input id="catalog_search_panel_button_3" class="btn btn-sm5 text-white button_clean" type="radio" name="catalog_search_panel_buttons" value="catalog_search_panel_button_3">
<label class="mb-0 px-3 px-md-4 py-1" for="catalog_search_panel_button_3">Третья кнопка</label> --> <label class="mb-0 px-3 px-md-4 py-1" for="catalog_search_panel_button_3">Третья кнопка</label> -->
<form class="d-flex catalog_search"> <form class="d-flex catalog_search">
<input type="text" class="form-control col-8 col-lg-10 catalog_search_line" id="productNumber" placeholder="Номер запчасти, например: 45223503481"> <input type="text" class="form-control col-8 col-lg-10 catalog_search_line" id="productNumber" placeholder="Введите номер запчасти, например: 45223503481">
<button type="submit" class="col btn button_clean catalog_search_button">ПОИСК</button> <button type="submit" class="col btn button_clean catalog_search_button">ПОИСК</button>
</form> </form>
</div> </div>
@ -100,9 +98,6 @@ AppAsset::register($this);
<small class="row mb-1"><a>Поставщикам</a></small> <small class="row mb-1"><a>Поставщикам</a></small>
<small class="row mb-1"><a>Партнерская сеть</a></small> <small class="row mb-1"><a>Партнерская сеть</a></small>
</div> </div>
<!-- <p class="pull-left">&copy; My Company <?= date('Y') ?></p>
<p class="pull-right"><?= Yii::powered() ?></p> -->
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -8,27 +8,31 @@ use yii\helpers\Html;
use yii\bootstrap\ActiveForm; use yii\bootstrap\ActiveForm;
$this->title = 'Login'; $this->title = 'Login';
$this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-login"> <div class="site-login">
<h1><?= Html::encode($this->title) ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>Please fill out the following fields to login:</p> <p>Please fill out the following fields to login:</p>
<?php $form = ActiveForm::begin([ <?php $form = ActiveForm::begin([
'id' => 'login-form', 'id' => 'form_authentication',
'layout' => 'horizontal', 'layout' => 'horizontal',
'fieldConfig' => [ 'fieldConfig' => [
'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>", 'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
'labelOptions' => ['class' => 'col-lg-1 control-label'], 'labelOptions' => ['class' => 'col-lg-1 control-label'],
], ],
'action' => false,
'options' => [
'onsubmit' => 'authentication(this); return false;'
]
]); ?> ]); ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> <?= $form->field($model, 'mail')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput() ?> <?= $form->field($model, 'pswd')->passwordInput() ?>
<?= $form->field($model, 'rememberMe')->checkbox([ <?= $form->field($model, 'auto')->checkbox([
'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-8\">{error}</div>", 'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-8\">{error}</div>",
]) ?> ]) ?>

View File

@ -8,7 +8,7 @@ $this->title = 'SkillParts';
<div class="info_panel mb-4"> <div class="info_panel mb-4">
<div class="container h-100 d-flex flex-column justify-content-center"> <div class="container h-100 d-flex flex-column justify-content-center">
<p class="col-lg-8 mb-4 gilroy">Проблема с подбором запчастей?</p> <p class="col-lg-8 mb-4 gilroy">Проблема с подбором запчастей?</p>
<button class="text-white btn button_clean button_call">Связаться с менеджером</button> <a class="text-white btn button_clean button_call" href="/call">Связаться с менеджером</a>
</div> </div>
<div class="h-100 d-flex flex-column justify-content-end"> <div class="h-100 d-flex flex-column justify-content-end">
<img class="img-fluid" src="/img/photos/963K_cutted.webp" alt="Связаться с менеджером"> <img class="img-fluid" src="/img/photos/963K_cutted.webp" alt="Связаться с менеджером">

View File

@ -0,0 +1,21 @@
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>
<?php $form = ActiveForm::begin([
'id' => 'form_registration',
'action' => false,
'options' => [
'onsubmit' => 'registration(this); return false;'
]
]) ?>
<?= $form->field($model, 'mail') ?>
<?= $form->field($model, 'pswd')->passwordInput() ?>
<div class="form-group">
<div>
<?= Html::submitButton('Регистрация', ['class' => 'btn btn-success']) ?>
</div>
</div>
<?php ActiveForm::end() ?>

View File

@ -18,15 +18,15 @@ ssl_certificate_key '%sprogdir%/userdata/config/cert_files/server.key'
# ssl_trusted_certificate ''; # ssl_trusted_certificate '';
# Force HTTPS # Force HTTPS
# add_header Strict-Transport-Security 'max-age=2592000' always; add_header Strict-Transport-Security 'max-age=2592000' always;
# if ($scheme ~* ^(?!https).*$) { if ($scheme ~* ^(?!https).*$) {
# return 301 https://$host$request_uri; return 301 https://$host$request_uri;
# } }
# Force www.site.com => site.com # Force www.site.com => site.com
# if ($host ~* ^www\.(.+)$) { if ($host ~* ^www\.(.+)$) {
# return 301 $scheme://$1$request_uri; return 301 $scheme://$1$request_uri;
# } }
# Disable access to backup/config/command/log files # Disable access to backup/config/command/log files
# if ($uri ~* ^.+\.(?:bak|co?nf|in[ci]|log|orig|sh|sql|tar|sql|t?gz|cmd|bat)$) { # if ($uri ~* ^.+\.(?:bak|co?nf|in[ci]|log|orig|sh|sql|tar|sql|t?gz|cmd|bat)$) {
@ -70,38 +70,6 @@ location / {
include '%sprogdir%/userdata/config/nginx_fastcgi_params.txt'; include '%sprogdir%/userdata/config/nginx_fastcgi_params.txt';
} }
} }
# Service configuration (do not edit!)
# ----------------------------
location /openserver/ {
root '%sprogdir%/modules/system/html';
autoindex off;
index index.php index.html index.htm;
%allow%allow all;
allow 127.0.0.0/8;
allow ::1/128;
allow %ips%;
deny all;
location ~* ^/openserver/.+\.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv|svgz?|ttf|ttc|otf|eot|woff2?)$ {
expires 1d;
access_log off;
}
location /openserver/server-status {
stub_status on;
}
location ~ ^/openserver/.*\.php$ {
try_files $fastcgi_script_name =404;
fastcgi_index index.php;
fastcgi_pass backend;
include '%sprogdir%/userdata/config/nginx_fastcgi_params.txt';
}
}
# End service configuration
# ----------------------------
} }
# ---------------------------- # ----------------------------

View File

@ -8,5 +8,5 @@
.bx-wrapper .bx-viewport { .bx-wrapper .bx-viewport {
width: 100vw !important; width: 100vw !important;
height: 4rem !important; height: 2rem !important;
} }

View File

@ -0,0 +1,113 @@
function identification() {
$.ajax({
url: '/identification',
type: 'post',
dataType: 'json',
data: { '_csrf': yii.getCsrfToken() },
success: function (data) {
// Обновление документа
document.getElementById('nav').innerHTML = data.menu;
$('meta[name=csrf-token]').prop("content", data._csrf);
// Реинициализация
reinitialization();
}
});
};
function authentication(form) {
if (form == undefined) {
form = { '_csrf': yii.getCsrfToken() };
} else {
form = $(form).serialize();
}
$.ajax({
url: '/authentication',
type: 'post',
dataType: 'json',
data: form,
success: function (data, status) {
// Обновление документа
document.getElementById('nav').innerHTML = data.menu;
document.getElementsByTagName('main')[0].innerHTML = data.form;
$('meta[name=csrf-token]').prop("content", data._csrf);
// Перенаправление
history.pushState({}, document.title, '/');
// Реинициализация
reinitialization();
},
error: function (data, status) {
// Обновление документа
document.getElementsByTagName('main')[0].innerHTML = data.responseJSON.form;
$('meta[name=csrf-token]').prop("content", data.responseJSON._csrf);
if (statis === 403) {
// Перенаправление
history.pushState({}, document.title, '/');
}
// Реинициализация
reinitialization();
}
});
};
function deauthentication() {
$.ajax({
url: '/deauthentication',
type: 'post',
dataType: 'json',
data: { '_csrf': yii.getCsrfToken() },
success: function (data) {
// Обновление документа
document.getElementById('nav').innerHTML = data.menu;
document.getElementsByTagName('main')[0].innerHTML = data.form;
$('meta[name=csrf-token]').prop("content", data._csrf);
// Перенаправление
history.pushState({}, document.title, '/');
// Реинициализация
reinitialization();
}
});
};
function registration(form) {
$.ajax({
url: '/registration',
type: 'post',
dataType: 'json',
data: $(form).serialize(),
success: function (data) {
// Обновление документа
document.getElementById('nav').innerHTML = data.menu;
document.getElementsByTagName('main')[0].innerHTML = data.form;
$('meta[name=csrf-token]').prop("content", data._csrf);
// Перенаправление
history.pushState({}, document.title, '/');
// Реинициализация
reinitialization();
},
error: function (data) {
// Обновление документа
document.getElementsByTagName('main')[0].innerHTML = data.responseJSON.form;
$('meta[name=csrf-token]').prop("content", data.responseJSON._csrf);
if (statis === 403) {
// Перенаправление
history.pushState({}, document.title, '/');
}
// Реинициализация
reinitialization();
}
});
};
document.addEventListener('DOMContentLoaded', identification(), true);

View File

@ -0,0 +1,5 @@
function reinitialization() {
// Функции которые должны быть запущены при инициализации документа
tickerInit('all');
}

View File

@ -1,8 +1,15 @@
$('.ticker').bxSlider({ function tickerInit(ticker) {
ticker = $('.ticker').bxSlider({
minSlides: 1, minSlides: 1,
maxSlides: 18, maxSlides: 100,
slideWidth: 189,
slideMargin: 0, slideMargin: 0,
ticker: true, ticker: true,
speed: 50000 speed: 80000
}); });
}
function tickerReinit(ticker) {
ticker.reloadSlider();
}
document.addEventListener('DOMContentLoaded', tickerInit(), true);