Compare commits
No commits in common. "5519b1c9f3809d796c0b223b3afb6bda632199bc" and "f25af8e78a9a3ac0e5715e4746b347d3d800d824" have entirely different histories.
5519b1c9f3
...
f25af8e78a
|
@ -1,43 +0,0 @@
|
||||||
# yii console commands
|
|
||||||
/yii
|
|
||||||
/yii_test
|
|
||||||
/yii_test.bat
|
|
||||||
|
|
||||||
# phpstorm project files
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# netbeans project files
|
|
||||||
nbproject
|
|
||||||
|
|
||||||
# zend studio for eclipse project files
|
|
||||||
.buildpath
|
|
||||||
.project
|
|
||||||
.settings
|
|
||||||
|
|
||||||
# windows thumbnail cache
|
|
||||||
Thumbs.db
|
|
||||||
|
|
||||||
# composer vendor dir
|
|
||||||
/vendor
|
|
||||||
|
|
||||||
# composer itself is not needed
|
|
||||||
composer.phar
|
|
||||||
|
|
||||||
# Mac DS_Store Files
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# phpunit itself is not needed
|
|
||||||
phpunit.phar
|
|
||||||
# local phpunit config
|
|
||||||
/phpunit.xml
|
|
||||||
|
|
||||||
# vagrant runtime
|
|
||||||
/.vagrant
|
|
||||||
|
|
||||||
# ignore generated files
|
|
||||||
/frontend/web/index.php
|
|
||||||
/frontend/web/index-test.php
|
|
||||||
/frontend/web/robots.txt
|
|
||||||
/backend/web/index.php
|
|
||||||
/backend/web/index-test.php
|
|
||||||
/backend/web/robots.txt
|
|
29
LICENSE.md
29
LICENSE.md
|
@ -1,29 +0,0 @@
|
||||||
Copyright © 2008 by Yii Software LLC (http://www.yiisoft.com)
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in
|
|
||||||
the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
* Neither the name of Yii Software LLC nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived
|
|
||||||
from this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
||||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
||||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
87
README.md
87
README.md
|
@ -1,86 +1,3 @@
|
||||||
Support WebEffector.ru
|
# new-support.webeffector.ru
|
||||||
-
|
|
||||||
|
|
||||||
## CodeStyle
|
refactor support.webeffector.ru
|
||||||
|
|
||||||
DataBase => kebabStyle
|
|
||||||
|
|
||||||
PHP => camelCaseStyle
|
|
||||||
|
|
||||||
## Starting
|
|
||||||
|
|
||||||
#### Stack:
|
|
||||||
|
|
||||||
- php 8.1.27
|
|
||||||
- mysql 8
|
|
||||||
- Docker [docker.com](https://www.docker.com/get-started/)
|
|
||||||
|
|
||||||
#### Docker
|
|
||||||
|
|
||||||
Init:
|
|
||||||
|
|
||||||
docker-compose run --rm php ./init --env=Development --overwrite
|
|
||||||
|
|
||||||
Composer install:
|
|
||||||
|
|
||||||
docker-compose run --rm php composer install
|
|
||||||
|
|
||||||
Run Yii migrations:
|
|
||||||
|
|
||||||
Init application
|
|
||||||
|
|
||||||
docker-compose run --rm php ./yii migrate 2
|
|
||||||
|
|
||||||
Init RBAC
|
|
||||||
|
|
||||||
docker-compose run --rm php ./yii migrate 4 --migrationPath=@yii/rbac/migrations
|
|
||||||
|
|
||||||
Migrate other
|
|
||||||
|
|
||||||
docker-compose run --rm php ./yii migrate
|
|
||||||
|
|
||||||
Dump:
|
|
||||||
|
|
||||||
docker ps
|
|
||||||
|
|
||||||
docker exec -it номер_контейнера_mysql bash
|
|
||||||
|
|
||||||
mysql -u root -proot db_name < /dump/dump.sql
|
|
||||||
|
|
||||||
### Use
|
|
||||||
|
|
||||||
Hosts:
|
|
||||||
|
|
||||||
127.0.0.1 web.local
|
|
||||||
127.0.0.1 admin.web.local
|
|
||||||
|
|
||||||
Up:
|
|
||||||
|
|
||||||
docker-compose up -d
|
|
||||||
|
|
||||||
Down:
|
|
||||||
|
|
||||||
docker-compose down
|
|
||||||
|
|
||||||
ReBuild without a cache:
|
|
||||||
|
|
||||||
docker-compose build --no-cache php
|
|
||||||
|
|
||||||
Url dev:
|
|
||||||
|
|
||||||
frontend: [web.local](http://web.local)
|
|
||||||
|
|
||||||
backend: [admin.web.local](http://admin.web.local)
|
|
||||||
|
|
||||||
Url stage:
|
|
||||||
|
|
||||||
frontend: [example.webeffector.ru](https://example.webeffector.ru)
|
|
||||||
|
|
||||||
backend: [admin-example.webeffector.ru](https://admin-example.webeffector.ru)
|
|
||||||
|
|
||||||
|
|
||||||
Test data for stage/dev:
|
|
||||||
|
|
||||||
- Администратор admin@web.local:admin
|
|
||||||
- Менеджер manager@web.local:manager
|
|
||||||
- Пользователь user@web.local:user
|
|
|
@ -1,88 +0,0 @@
|
||||||
require 'yaml'
|
|
||||||
require 'fileutils'
|
|
||||||
|
|
||||||
required_plugins_installed = nil
|
|
||||||
required_plugins = %w( vagrant-hostmanager vagrant-vbguest )
|
|
||||||
required_plugins.each do |plugin|
|
|
||||||
unless Vagrant.has_plugin? plugin
|
|
||||||
system "vagrant plugin install #{plugin}"
|
|
||||||
required_plugins_installed = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# IF plugin[s] was just installed - restart required
|
|
||||||
if required_plugins_installed
|
|
||||||
# Get CLI command[s] and call again
|
|
||||||
system 'vagrant' + ARGV.to_s.gsub(/\[\"|\", \"|\"\]/, ' ')
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
|
|
||||||
domains = {
|
|
||||||
frontend: 'y2aa-frontend.test',
|
|
||||||
backend: 'y2aa-backend.test'
|
|
||||||
}
|
|
||||||
|
|
||||||
config = {
|
|
||||||
local: './vagrant/config/vagrant-local.yml',
|
|
||||||
example: './vagrant/config/vagrant-local.example.yml'
|
|
||||||
}
|
|
||||||
|
|
||||||
# copy config from example if local config not exists
|
|
||||||
FileUtils.cp config[:example], config[:local] unless File.exist?(config[:local])
|
|
||||||
# read config
|
|
||||||
options = YAML.load_file config[:local]
|
|
||||||
|
|
||||||
# check github token
|
|
||||||
if options['github_token'].nil? || options['github_token'].to_s.length != 40
|
|
||||||
puts "You must place REAL GitHub token into configuration:\n/yii2-app-advanced/vagrant/config/vagrant-local.yml"
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
|
|
||||||
# vagrant configurate
|
|
||||||
Vagrant.configure(2) do |config|
|
|
||||||
# select the box
|
|
||||||
config.vm.box = 'bento/ubuntu-18.04'
|
|
||||||
|
|
||||||
# should we ask about box updates?
|
|
||||||
config.vm.box_check_update = options['box_check_update']
|
|
||||||
|
|
||||||
config.vm.provider 'virtualbox' do |vb|
|
|
||||||
# machine cpus count
|
|
||||||
vb.cpus = options['cpus']
|
|
||||||
# machine memory size
|
|
||||||
vb.memory = options['memory']
|
|
||||||
# machine name (for VirtualBox UI)
|
|
||||||
vb.name = options['machine_name']
|
|
||||||
end
|
|
||||||
|
|
||||||
# machine name (for vagrant console)
|
|
||||||
config.vm.define options['machine_name']
|
|
||||||
|
|
||||||
# machine name (for guest machine console)
|
|
||||||
config.vm.hostname = options['machine_name']
|
|
||||||
|
|
||||||
# network settings
|
|
||||||
config.vm.network 'private_network', ip: options['ip']
|
|
||||||
|
|
||||||
# sync: folder 'yii2-app-advanced' (host machine) -> folder '/app' (guest machine)
|
|
||||||
config.vm.synced_folder './', '/app', owner: 'vagrant', group: 'vagrant'
|
|
||||||
|
|
||||||
# disable folder '/vagrant' (guest machine)
|
|
||||||
config.vm.synced_folder '.', '/vagrant', disabled: true
|
|
||||||
|
|
||||||
# hosts settings (host machine)
|
|
||||||
config.vm.provision :hostmanager
|
|
||||||
config.hostmanager.enabled = true
|
|
||||||
config.hostmanager.manage_host = true
|
|
||||||
config.hostmanager.ignore_private_ip = false
|
|
||||||
config.hostmanager.include_offline = true
|
|
||||||
config.hostmanager.aliases = domains.values
|
|
||||||
|
|
||||||
# provisioners
|
|
||||||
config.vm.provision 'shell', path: './vagrant/provision/once-as-root.sh', args: [options['timezone'], options['ip']]
|
|
||||||
config.vm.provision 'shell', path: './vagrant/provision/once-as-vagrant.sh', args: [options['github_token']], privileged: false
|
|
||||||
config.vm.provision 'shell', path: './vagrant/provision/always-as-root.sh', run: 'always'
|
|
||||||
|
|
||||||
# post-install message (vagrant console)
|
|
||||||
config.vm.post_up_message = "Frontend URL: http://#{domains[:frontend]}\nBackend URL: http://#{domains[:backend]}"
|
|
||||||
end
|
|
|
@ -1,4 +0,0 @@
|
||||||
FROM yiisoftware/yii2-php:8.1-apache
|
|
||||||
|
|
||||||
# Change document root for Apache
|
|
||||||
RUN sed -i -e 's|/app/web|/app/backend/web|g' /etc/apache2/sites-available/000-default.conf
|
|
|
@ -1,23 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace backend\assets;
|
|
||||||
|
|
||||||
use yii\web\AssetBundle;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Main backend application asset bundle.
|
|
||||||
*/
|
|
||||||
class AppAsset extends AssetBundle
|
|
||||||
{
|
|
||||||
public $basePath = '@webroot';
|
|
||||||
public $baseUrl = '@web';
|
|
||||||
public $css = [
|
|
||||||
'css/site.css',
|
|
||||||
];
|
|
||||||
public $js = [
|
|
||||||
];
|
|
||||||
public $depends = [
|
|
||||||
'yii\web\YiiAsset',
|
|
||||||
'yii\bootstrap5\BootstrapAsset',
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
namespace: backend\tests
|
|
||||||
actor_suffix: Tester
|
|
||||||
paths:
|
|
||||||
tests: tests
|
|
||||||
output: tests/_output
|
|
||||||
data: tests/_data
|
|
||||||
support: tests/_support
|
|
||||||
bootstrap: _bootstrap.php
|
|
||||||
settings:
|
|
||||||
colors: true
|
|
||||||
memory_limit: 1024M
|
|
||||||
modules:
|
|
||||||
config:
|
|
||||||
Yii2:
|
|
||||||
configFile: 'config/codeception-local.php'
|
|
|
@ -1,4 +0,0 @@
|
||||||
codeception-local.php
|
|
||||||
main-local.php
|
|
||||||
params-local.php
|
|
||||||
test-local.php
|
|
|
@ -1 +0,0 @@
|
||||||
<?php
|
|
|
@ -1,50 +0,0 @@
|
||||||
<?php
|
|
||||||
$params = array_merge(
|
|
||||||
require __DIR__ . '/../../common/config/params.php',
|
|
||||||
require __DIR__ . '/../../common/config/params-local.php',
|
|
||||||
require __DIR__ . '/params.php',
|
|
||||||
require __DIR__ . '/params-local.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
return [
|
|
||||||
'id' => 'app-backend',
|
|
||||||
'basePath' => dirname(__DIR__),
|
|
||||||
'controllerNamespace' => 'backend\controllers',
|
|
||||||
'bootstrap' => ['log'],
|
|
||||||
'modules' => [],
|
|
||||||
'components' => [
|
|
||||||
'request' => [
|
|
||||||
'csrfParam' => '_csrf-backend',
|
|
||||||
],
|
|
||||||
'user' => [
|
|
||||||
'identityClass' => 'common\models\User',
|
|
||||||
'enableAutoLogin' => true,
|
|
||||||
'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
|
|
||||||
],
|
|
||||||
'session' => [
|
|
||||||
// this is the name of the session cookie used for login on the backend
|
|
||||||
'name' => 'advanced-backend',
|
|
||||||
],
|
|
||||||
'log' => [
|
|
||||||
'traceLevel' => YII_DEBUG ? 3 : 0,
|
|
||||||
'targets' => [
|
|
||||||
[
|
|
||||||
'class' => \yii\log\FileTarget::class,
|
|
||||||
'levels' => ['error', 'warning'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'errorHandler' => [
|
|
||||||
'errorAction' => 'site/error',
|
|
||||||
],
|
|
||||||
/*
|
|
||||||
'urlManager' => [
|
|
||||||
'enablePrettyUrl' => true,
|
|
||||||
'showScriptName' => false,
|
|
||||||
'rules' => [
|
|
||||||
],
|
|
||||||
],
|
|
||||||
*/
|
|
||||||
],
|
|
||||||
'params' => $params,
|
|
||||||
];
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
return [
|
|
||||||
'adminEmail' => 'admin@example.com',
|
|
||||||
];
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
return [
|
|
||||||
'id' => 'app-backend-tests',
|
|
||||||
'components' => [
|
|
||||||
'assetManager' => [
|
|
||||||
'basePath' => __DIR__ . '/../web/assets',
|
|
||||||
],
|
|
||||||
'urlManager' => [
|
|
||||||
'showScriptName' => true,
|
|
||||||
],
|
|
||||||
'request' => [
|
|
||||||
'cookieValidationKey' => 'test',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,104 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace backend\controllers;
|
|
||||||
|
|
||||||
use common\models\LoginForm;
|
|
||||||
use Yii;
|
|
||||||
use yii\filters\VerbFilter;
|
|
||||||
use yii\filters\AccessControl;
|
|
||||||
use yii\web\Controller;
|
|
||||||
use yii\web\Response;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Site controller
|
|
||||||
*/
|
|
||||||
class SiteController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function behaviors()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'access' => [
|
|
||||||
'class' => AccessControl::class,
|
|
||||||
'rules' => [
|
|
||||||
[
|
|
||||||
'actions' => ['login', 'error'],
|
|
||||||
'allow' => true,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'actions' => ['logout', 'index'],
|
|
||||||
'allow' => true,
|
|
||||||
'roles' => ['@'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'verbs' => [
|
|
||||||
'class' => VerbFilter::class,
|
|
||||||
'actions' => [
|
|
||||||
'logout' => ['post'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function actions()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'error' => [
|
|
||||||
'class' => \yii\web\ErrorAction::class,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays homepage.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function actionIndex()
|
|
||||||
{
|
|
||||||
return $this->render('index');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Login action.
|
|
||||||
*
|
|
||||||
* @return string|Response
|
|
||||||
*/
|
|
||||||
public function actionLogin()
|
|
||||||
{
|
|
||||||
if (!Yii::$app->user->isGuest) {
|
|
||||||
return $this->goHome();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->layout = 'blank';
|
|
||||||
|
|
||||||
$model = new LoginForm();
|
|
||||||
if ($model->load(Yii::$app->request->post()) && $model->login()) {
|
|
||||||
return $this->goBack();
|
|
||||||
}
|
|
||||||
|
|
||||||
$model->password = '';
|
|
||||||
|
|
||||||
return $this->render('login', [
|
|
||||||
'model' => $model,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logout action.
|
|
||||||
*
|
|
||||||
* @return Response
|
|
||||||
*/
|
|
||||||
public function actionLogout()
|
|
||||||
{
|
|
||||||
Yii::$app->user->logout();
|
|
||||||
|
|
||||||
return $this->goHome();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
*
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
defined('YII_DEBUG') or define('YII_DEBUG', true);
|
|
||||||
defined('YII_ENV') or define('YII_ENV', 'test');
|
|
||||||
defined('YII_APP_BASE_PATH') or define('YII_APP_BASE_PATH', __DIR__.'/../../');
|
|
||||||
|
|
||||||
require_once YII_APP_BASE_PATH . '/vendor/autoload.php';
|
|
||||||
require_once YII_APP_BASE_PATH . '/vendor/yiisoft/yii2/Yii.php';
|
|
||||||
require_once YII_APP_BASE_PATH . '/common/config/bootstrap.php';
|
|
||||||
require_once __DIR__ . '/../config/bootstrap.php';
|
|
|
@ -1,13 +0,0 @@
|
||||||
<?php
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'username' => 'erau',
|
|
||||||
'auth_key' => 'tUu1qHcde0diwUol3xeI-18MuHkkprQI',
|
|
||||||
// password_0
|
|
||||||
'password_hash' => '$2y$13$nJ1WDlBaGcbCdbNC5.5l4.sgy.OMEKCqtDQOdQ2OWpgiKRWYyzzne',
|
|
||||||
'password_reset_token' => 'RkD_Jw0_8HEedzLk7MM-ZKEFfYR7VbMr_1392559490',
|
|
||||||
'created_at' => '1392559490',
|
|
||||||
'updated_at' => '1392559490',
|
|
||||||
'email' => 'sfriesen@jenkins.info',
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1 +0,0 @@
|
||||||
_generated
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace backend\tests;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inherited Methods
|
|
||||||
* @method void wantToTest($text)
|
|
||||||
* @method void wantTo($text)
|
|
||||||
* @method void execute($callable)
|
|
||||||
* @method void expectTo($prediction)
|
|
||||||
* @method void verify($prediction)
|
|
||||||
* @method void amGoingTo($argumentation)
|
|
||||||
* @method void am($role)
|
|
||||||
* @method void lookForwardTo($achieveValue)
|
|
||||||
* @method void comment($description)
|
|
||||||
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
|
|
||||||
*
|
|
||||||
* @SuppressWarnings(PHPMD)
|
|
||||||
*/
|
|
||||||
class FunctionalTester extends \Codeception\Actor
|
|
||||||
{
|
|
||||||
use _generated\FunctionalTesterActions;
|
|
||||||
/**
|
|
||||||
* Define custom actions here
|
|
||||||
*/
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace backend\tests;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inherited Methods
|
|
||||||
* @method void wantToTest($text)
|
|
||||||
* @method void wantTo($text)
|
|
||||||
* @method void execute($callable)
|
|
||||||
* @method void expectTo($prediction)
|
|
||||||
* @method void verify($prediction)
|
|
||||||
* @method void amGoingTo($argumentation)
|
|
||||||
* @method void am($role)
|
|
||||||
* @method void lookForwardTo($achieveValue)
|
|
||||||
* @method void comment($description)
|
|
||||||
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
|
|
||||||
*
|
|
||||||
* @SuppressWarnings(PHPMD)
|
|
||||||
*/
|
|
||||||
class UnitTester extends \Codeception\Actor
|
|
||||||
{
|
|
||||||
use _generated\UnitTesterActions;
|
|
||||||
/**
|
|
||||||
* Define custom actions here
|
|
||||||
*/
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
suite_namespace: backend\tests\functional
|
|
||||||
actor: FunctionalTester
|
|
||||||
modules:
|
|
||||||
enabled:
|
|
||||||
- Yii2
|
|
|
@ -1,44 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace backend\tests\functional;
|
|
||||||
|
|
||||||
use backend\tests\FunctionalTester;
|
|
||||||
use common\fixtures\UserFixture;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class LoginCest
|
|
||||||
*/
|
|
||||||
class LoginCest
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Load fixtures before db transaction begin
|
|
||||||
* Called in _before()
|
|
||||||
* @see \Codeception\Module\Yii2::_before()
|
|
||||||
* @see \Codeception\Module\Yii2::loadFixtures()
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function _fixtures()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'user' => [
|
|
||||||
'class' => UserFixture::class,
|
|
||||||
'dataFile' => codecept_data_dir() . 'login_data.php'
|
|
||||||
]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param FunctionalTester $I
|
|
||||||
*/
|
|
||||||
public function loginUser(FunctionalTester $I)
|
|
||||||
{
|
|
||||||
$I->amOnRoute('/site/login');
|
|
||||||
$I->fillField('Username', 'erau');
|
|
||||||
$I->fillField('Password', 'password_0');
|
|
||||||
$I->click('login-button');
|
|
||||||
|
|
||||||
$I->see('Logout (erau)', 'form button[type=submit]');
|
|
||||||
$I->dontSeeLink('Login');
|
|
||||||
$I->dontSeeLink('Signup');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Here you can initialize variables via \Codeception\Util\Fixtures class
|
|
||||||
* to store data in global array and use it in Cests.
|
|
||||||
*
|
|
||||||
* ```php
|
|
||||||
* // Here _bootstrap.php
|
|
||||||
* \Codeception\Util\Fixtures::add('user1', ['name' => 'davert']);
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* In Cests
|
|
||||||
*
|
|
||||||
* ```php
|
|
||||||
* \Codeception\Util\Fixtures::get('user1');
|
|
||||||
* ```
|
|
||||||
*/
|
|
|
@ -1,2 +0,0 @@
|
||||||
suite_namespace: backend\tests\unit
|
|
||||||
actor: UnitTester
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Here you can initialize variables via \Codeception\Util\Fixtures class
|
|
||||||
* to store data in global array and use it in Tests.
|
|
||||||
*
|
|
||||||
* ```php
|
|
||||||
* // Here _bootstrap.php
|
|
||||||
* \Codeception\Util\Fixtures::add('user1', ['name' => 'davert']);
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* In Tests
|
|
||||||
*
|
|
||||||
* ```php
|
|
||||||
* \Codeception\Util\Fixtures::get('user1');
|
|
||||||
* ```
|
|
||||||
*/
|
|
|
@ -1,33 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var string $content */
|
|
||||||
|
|
||||||
use backend\assets\AppAsset;
|
|
||||||
use yii\helpers\Html;
|
|
||||||
|
|
||||||
AppAsset::register($this);
|
|
||||||
?>
|
|
||||||
<?php $this->beginPage() ?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="<?= Yii::$app->language ?>" class="h-100">
|
|
||||||
<head>
|
|
||||||
<meta charset="<?= Yii::$app->charset ?>">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
||||||
<?php $this->registerCsrfMetaTags() ?>
|
|
||||||
<title><?= Html::encode($this->title) ?></title>
|
|
||||||
<?php $this->head() ?>
|
|
||||||
</head>
|
|
||||||
<body class="d-flex flex-column h-100">
|
|
||||||
<?php $this->beginBody() ?>
|
|
||||||
|
|
||||||
<main role="main">
|
|
||||||
<div class="container">
|
|
||||||
<?= $content ?>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<?php $this->endBody() ?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php $this->endPage();
|
|
|
@ -1,81 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var \yii\web\View $this */
|
|
||||||
/** @var string $content */
|
|
||||||
|
|
||||||
use backend\assets\AppAsset;
|
|
||||||
use common\widgets\Alert;
|
|
||||||
use yii\bootstrap5\Breadcrumbs;
|
|
||||||
use yii\bootstrap5\Html;
|
|
||||||
use yii\bootstrap5\Nav;
|
|
||||||
use yii\bootstrap5\NavBar;
|
|
||||||
|
|
||||||
AppAsset::register($this);
|
|
||||||
?>
|
|
||||||
<?php $this->beginPage() ?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="<?= Yii::$app->language ?>" class="h-100">
|
|
||||||
<head>
|
|
||||||
<meta charset="<?= Yii::$app->charset ?>">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
||||||
<?php $this->registerCsrfMetaTags() ?>
|
|
||||||
<title><?= Html::encode($this->title) ?></title>
|
|
||||||
<?php $this->head() ?>
|
|
||||||
</head>
|
|
||||||
<body class="d-flex flex-column h-100">
|
|
||||||
<?php $this->beginBody() ?>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
<?php
|
|
||||||
NavBar::begin([
|
|
||||||
'brandLabel' => Yii::$app->name,
|
|
||||||
'brandUrl' => Yii::$app->homeUrl,
|
|
||||||
'options' => [
|
|
||||||
'class' => 'navbar navbar-expand-md navbar-dark bg-dark fixed-top',
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
$menuItems = [
|
|
||||||
['label' => 'Home', 'url' => ['/site/index']],
|
|
||||||
];
|
|
||||||
if (Yii::$app->user->isGuest) {
|
|
||||||
$menuItems[] = ['label' => 'Login', 'url' => ['/site/login']];
|
|
||||||
}
|
|
||||||
echo Nav::widget([
|
|
||||||
'options' => ['class' => 'navbar-nav me-auto mb-2 mb-md-0'],
|
|
||||||
'items' => $menuItems,
|
|
||||||
]);
|
|
||||||
if (Yii::$app->user->isGuest) {
|
|
||||||
echo Html::tag('div',Html::a('Login',['/site/login'],['class' => ['btn btn-link login text-decoration-none']]),['class' => ['d-flex']]);
|
|
||||||
} else {
|
|
||||||
echo Html::beginForm(['/site/logout'], 'post', ['class' => 'd-flex'])
|
|
||||||
. Html::submitButton(
|
|
||||||
'Logout (' . Yii::$app->user->identity->username . ')',
|
|
||||||
['class' => 'btn btn-link logout text-decoration-none']
|
|
||||||
)
|
|
||||||
. Html::endForm();
|
|
||||||
}
|
|
||||||
NavBar::end();
|
|
||||||
?>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<main role="main" class="flex-shrink-0">
|
|
||||||
<div class="container">
|
|
||||||
<?= Breadcrumbs::widget([
|
|
||||||
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
|
|
||||||
]) ?>
|
|
||||||
<?= Alert::widget() ?>
|
|
||||||
<?= $content ?>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer class="footer mt-auto py-3 text-muted">
|
|
||||||
<div class="container">
|
|
||||||
<p class="float-start">© <?= Html::encode(Yii::$app->name) ?> <?= date('Y') ?></p>
|
|
||||||
<p class="float-end"><?= Yii::powered() ?></p>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<?php $this->endBody() ?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php $this->endPage();
|
|
|
@ -1,27 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var string $name */
|
|
||||||
/** @var string $message */
|
|
||||||
/** @var Exception $exception*/
|
|
||||||
|
|
||||||
use yii\helpers\Html;
|
|
||||||
|
|
||||||
$this->title = $name;
|
|
||||||
?>
|
|
||||||
<div class="site-error">
|
|
||||||
|
|
||||||
<h1><?= Html::encode($this->title) ?></h1>
|
|
||||||
|
|
||||||
<div class="alert alert-danger">
|
|
||||||
<?= nl2br(Html::encode($message)) ?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The above error occurred while the Web server was processing your request.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Please contact us if you think this is a server error. Thank you.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
|
|
@ -1,53 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
|
|
||||||
$this->title = 'My Yii Application';
|
|
||||||
?>
|
|
||||||
<div class="site-index">
|
|
||||||
|
|
||||||
<div class="jumbotron text-center bg-transparent">
|
|
||||||
<h1 class="display-4">Congratulations!</h1>
|
|
||||||
|
|
||||||
<p class="lead">You have successfully created your Yii-powered application.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Get started with Yii</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="body-content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<h2>Heading</h2>
|
|
||||||
|
|
||||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
|
|
||||||
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
|
||||||
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
||||||
fugiat nulla pariatur.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-outline-secondary" href="https://www.yiiframework.com/doc/">Yii Documentation »</a></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<h2>Heading</h2>
|
|
||||||
|
|
||||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
|
|
||||||
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
|
||||||
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
||||||
fugiat nulla pariatur.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-outline-secondary" href="https://www.yiiframework.com/forum/">Yii Forum »</a></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<h2>Heading</h2>
|
|
||||||
|
|
||||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
|
|
||||||
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
|
||||||
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
||||||
fugiat nulla pariatur.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-outline-secondary" href="https://www.yiiframework.com/extensions/">Yii Extensions »</a></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,32 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var yii\bootstrap5\ActiveForm $form */
|
|
||||||
/** @var \common\models\LoginForm $model */
|
|
||||||
|
|
||||||
use yii\bootstrap5\ActiveForm;
|
|
||||||
use yii\bootstrap5\Html;
|
|
||||||
|
|
||||||
$this->title = 'Login';
|
|
||||||
?>
|
|
||||||
<div class="site-login">
|
|
||||||
<div class="mt-5 offset-lg-3 col-lg-6">
|
|
||||||
<h1><?= Html::encode($this->title) ?></h1>
|
|
||||||
|
|
||||||
<p>Please fill out the following fields to login:</p>
|
|
||||||
|
|
||||||
<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'password')->passwordInput() ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'rememberMe')->checkbox() ?>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<?= Html::submitButton('Login', ['class' => 'btn btn-primary btn-block', 'name' => 'login-button']) ?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php ActiveForm::end(); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1,90 +0,0 @@
|
||||||
main > .container {
|
|
||||||
padding: 70px 15px 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
font-size: .9em;
|
|
||||||
height: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer > .container {
|
|
||||||
padding-right: 15px;
|
|
||||||
padding-left: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.not-set {
|
|
||||||
color: #c55;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add sorting icons to gridview sort links */
|
|
||||||
a.asc:after, a.desc:after {
|
|
||||||
content: '';
|
|
||||||
left: 3px;
|
|
||||||
display: inline-block;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border: solid 5px transparent;
|
|
||||||
margin: 4px 4px 2px 4px;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.asc:after {
|
|
||||||
border-bottom: solid 7px #212529;
|
|
||||||
border-top-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.desc:after {
|
|
||||||
border-top: solid 7px #212529;
|
|
||||||
border-bottom-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid-view th,
|
|
||||||
.grid-view td:last-child {
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid-view .filters input,
|
|
||||||
.grid-view .filters select {
|
|
||||||
min-width: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hint-block {
|
|
||||||
display: block;
|
|
||||||
margin-top: 5px;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error-summary {
|
|
||||||
color: #a94442;
|
|
||||||
background: #fdf7f7;
|
|
||||||
border-left: 3px solid #eed3d7;
|
|
||||||
padding: 10px 20px;
|
|
||||||
margin: 0 0 15px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* align the logout "link" (button in form) of the navbar */
|
|
||||||
.nav li > form > button.logout {
|
|
||||||
padding-top: 7px;
|
|
||||||
color: rgba(255, 255, 255, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media(max-width:767px) {
|
|
||||||
.nav li > form > button.logout {
|
|
||||||
display:block;
|
|
||||||
text-align: left;
|
|
||||||
width: 100%;
|
|
||||||
padding: 10px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav > li > form > button.logout:focus,
|
|
||||||
.nav > li > form > button.logout:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
color: rgba(255, 255, 255, 0.75);
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav > li > form > button.logout:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 318 B |
|
@ -1,9 +0,0 @@
|
||||||
# global codeception file to run tests from all apps
|
|
||||||
include:
|
|
||||||
- common
|
|
||||||
- frontend
|
|
||||||
- backend
|
|
||||||
paths:
|
|
||||||
output: console/runtime/output
|
|
||||||
settings:
|
|
||||||
colors: true
|
|
|
@ -1,15 +0,0 @@
|
||||||
namespace: common\tests
|
|
||||||
actor_suffix: Tester
|
|
||||||
paths:
|
|
||||||
tests: tests
|
|
||||||
output: tests/_output
|
|
||||||
data: tests/_data
|
|
||||||
support: tests/_support
|
|
||||||
bootstrap: _bootstrap.php
|
|
||||||
settings:
|
|
||||||
colors: true
|
|
||||||
memory_limit: 1024M
|
|
||||||
modules:
|
|
||||||
config:
|
|
||||||
Yii2:
|
|
||||||
configFile: 'config/codeception-local.php'
|
|
|
@ -1,4 +0,0 @@
|
||||||
codeception-local.php
|
|
||||||
main-local.php
|
|
||||||
params-local.php
|
|
||||||
test-local.php
|
|
|
@ -1,33 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class only exists here for IDE (PHPStorm/Netbeans/...) autocompletion.
|
|
||||||
* This file is never included anywhere.
|
|
||||||
* Adjust this file to match classes configured in your application config, to enable IDE autocompletion for custom components.
|
|
||||||
* Example: A property phpdoc can be added in `__Application` class as `@property \vendor\package\Rollbar|__Rollbar $rollbar` and adding a class in this file
|
|
||||||
* ```php
|
|
||||||
* // @property of \vendor\package\Rollbar goes here
|
|
||||||
* class __Rollbar {
|
|
||||||
* }
|
|
||||||
* ```
|
|
||||||
*/
|
|
||||||
class Yii {
|
|
||||||
/**
|
|
||||||
* @var \yii\web\Application|\yii\console\Application|__Application
|
|
||||||
*/
|
|
||||||
public static $app;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @property yii\rbac\DbManager $authManager
|
|
||||||
* @property \yii\web\User|__WebUser $user
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class __Application {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @property app\models\User $identity
|
|
||||||
*/
|
|
||||||
class __WebUser {
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
<?php
|
|
||||||
Yii::setAlias('@common', dirname(__DIR__));
|
|
||||||
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
|
|
||||||
Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
|
|
||||||
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');
|
|
|
@ -1,13 +0,0 @@
|
||||||
<?php
|
|
||||||
return [
|
|
||||||
'aliases' => [
|
|
||||||
'@bower' => '@vendor/bower-asset',
|
|
||||||
'@npm' => '@vendor/npm-asset',
|
|
||||||
],
|
|
||||||
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
|
|
||||||
'components' => [
|
|
||||||
'cache' => [
|
|
||||||
'class' => \yii\caching\FileCache::class,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,9 +0,0 @@
|
||||||
<?php
|
|
||||||
return [
|
|
||||||
'adminEmail' => 'admin@example.com',
|
|
||||||
'supportEmail' => 'support@example.com',
|
|
||||||
'senderEmail' => 'noreply@example.com',
|
|
||||||
'senderName' => 'Example.com mailer',
|
|
||||||
'user.passwordResetTokenExpire' => 3600,
|
|
||||||
'user.passwordMinLength' => 8,
|
|
||||||
];
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
return [
|
|
||||||
'id' => 'app-common-tests',
|
|
||||||
'basePath' => dirname(__DIR__),
|
|
||||||
'components' => [
|
|
||||||
'user' => [
|
|
||||||
'class' => \yii\web\User::class,
|
|
||||||
'identityClass' => 'common\models\User',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace common\fixtures;
|
|
||||||
|
|
||||||
use yii\test\ActiveFixture;
|
|
||||||
|
|
||||||
class UserFixture extends ActiveFixture
|
|
||||||
{
|
|
||||||
public $modelClass = 'common\models\User';
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use yii\helpers\Html;
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var common\models\User $user */
|
|
||||||
|
|
||||||
$verifyLink = Yii::$app->urlManager->createAbsoluteUrl(['site/verify-email', 'token' => $user->verification_token]);
|
|
||||||
?>
|
|
||||||
<div class="verify-email">
|
|
||||||
<p>Hello <?= Html::encode($user->username) ?>,</p>
|
|
||||||
|
|
||||||
<p>Follow the link below to verify your email:</p>
|
|
||||||
|
|
||||||
<p><?= Html::a(Html::encode($verifyLink), $verifyLink) ?></p>
|
|
||||||
</div>
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var common\models\User $user */
|
|
||||||
|
|
||||||
$verifyLink = Yii::$app->urlManager->createAbsoluteUrl(['site/verify-email', 'token' => $user->verification_token]);
|
|
||||||
?>
|
|
||||||
Hello <?= $user->username ?>,
|
|
||||||
|
|
||||||
Follow the link below to verify your email:
|
|
||||||
|
|
||||||
<?= $verifyLink ?>
|
|
|
@ -1,24 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use yii\helpers\Html;
|
|
||||||
|
|
||||||
/** @var \yii\web\View $this view component instance */
|
|
||||||
/** @var \yii\mail\MessageInterface $message the message being composed */
|
|
||||||
/** @var string $content main view render result */
|
|
||||||
|
|
||||||
?>
|
|
||||||
<?php $this->beginPage() ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=<?= Yii::$app->charset ?>" />
|
|
||||||
<title><?= Html::encode($this->title) ?></title>
|
|
||||||
<?php $this->head() ?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<?php $this->beginBody() ?>
|
|
||||||
<?= $content ?>
|
|
||||||
<?php $this->endBody() ?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php $this->endPage();
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var \yii\web\View $this view component instance */
|
|
||||||
/** @var \yii\mail\MessageInterface $message the message being composed */
|
|
||||||
/** @var string $content main view render result */
|
|
||||||
|
|
||||||
?>
|
|
||||||
<?php $this->beginPage() ?>
|
|
||||||
<?php $this->beginBody() ?>
|
|
||||||
<?= $content ?>
|
|
||||||
<?php $this->endBody() ?>
|
|
||||||
<?php $this->endPage() ?>
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use yii\helpers\Html;
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var common\models\User $user */
|
|
||||||
|
|
||||||
$resetLink = Yii::$app->urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]);
|
|
||||||
?>
|
|
||||||
<div class="password-reset">
|
|
||||||
<p>Hello <?= Html::encode($user->username) ?>,</p>
|
|
||||||
|
|
||||||
<p>Follow the link below to reset your password:</p>
|
|
||||||
|
|
||||||
<p><?= Html::a(Html::encode($resetLink), $resetLink) ?></p>
|
|
||||||
</div>
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var common\models\User $user */
|
|
||||||
|
|
||||||
$resetLink = Yii::$app->urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]);
|
|
||||||
?>
|
|
||||||
Hello <?= $user->username ?>,
|
|
||||||
|
|
||||||
Follow the link below to reset your password:
|
|
||||||
|
|
||||||
<?= $resetLink ?>
|
|
|
@ -1,79 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace common\models;
|
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use yii\base\Model;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Login form
|
|
||||||
*/
|
|
||||||
class LoginForm extends Model
|
|
||||||
{
|
|
||||||
public $username;
|
|
||||||
public $password;
|
|
||||||
public $rememberMe = true;
|
|
||||||
|
|
||||||
private $_user;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
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
|
|
||||||
*/
|
|
||||||
protected function getUser()
|
|
||||||
{
|
|
||||||
if ($this->_user === null) {
|
|
||||||
$this->_user = User::findByUsername($this->username);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->_user;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,213 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace common\models;
|
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use yii\base\NotSupportedException;
|
|
||||||
use yii\behaviors\TimestampBehavior;
|
|
||||||
use yii\db\ActiveRecord;
|
|
||||||
use yii\web\IdentityInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* User model
|
|
||||||
*
|
|
||||||
* @property integer $id
|
|
||||||
* @property string $username
|
|
||||||
* @property string $password_hash
|
|
||||||
* @property string $password_reset_token
|
|
||||||
* @property string $verification_token
|
|
||||||
* @property string $email
|
|
||||||
* @property string $auth_key
|
|
||||||
* @property integer $status
|
|
||||||
* @property integer $created_at
|
|
||||||
* @property integer $updated_at
|
|
||||||
* @property string $password write-only password
|
|
||||||
*/
|
|
||||||
class User extends ActiveRecord implements IdentityInterface
|
|
||||||
{
|
|
||||||
const STATUS_DELETED = 0;
|
|
||||||
const STATUS_INACTIVE = 9;
|
|
||||||
const STATUS_ACTIVE = 10;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public static function tableName()
|
|
||||||
{
|
|
||||||
return '{{%user}}';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function behaviors()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
TimestampBehavior::class,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function rules()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
['status', 'default', 'value' => self::STATUS_INACTIVE],
|
|
||||||
['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_INACTIVE, self::STATUS_DELETED]],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public static function findIdentity($id)
|
|
||||||
{
|
|
||||||
return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public static function findIdentityByAccessToken($token, $type = null)
|
|
||||||
{
|
|
||||||
throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds user by username
|
|
||||||
*
|
|
||||||
* @param string $username
|
|
||||||
* @return static|null
|
|
||||||
*/
|
|
||||||
public static function findByUsername($username)
|
|
||||||
{
|
|
||||||
return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds user by password reset token
|
|
||||||
*
|
|
||||||
* @param string $token password reset token
|
|
||||||
* @return static|null
|
|
||||||
*/
|
|
||||||
public static function findByPasswordResetToken($token)
|
|
||||||
{
|
|
||||||
if (!static::isPasswordResetTokenValid($token)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return static::findOne([
|
|
||||||
'password_reset_token' => $token,
|
|
||||||
'status' => self::STATUS_ACTIVE,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds user by verification email token
|
|
||||||
*
|
|
||||||
* @param string $token verify email token
|
|
||||||
* @return static|null
|
|
||||||
*/
|
|
||||||
public static function findByVerificationToken($token) {
|
|
||||||
return static::findOne([
|
|
||||||
'verification_token' => $token,
|
|
||||||
'status' => self::STATUS_INACTIVE
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds out if password reset token is valid
|
|
||||||
*
|
|
||||||
* @param string $token password reset token
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function isPasswordResetTokenValid($token)
|
|
||||||
{
|
|
||||||
if (empty($token)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$timestamp = (int) substr($token, strrpos($token, '_') + 1);
|
|
||||||
$expire = Yii::$app->params['user.passwordResetTokenExpire'];
|
|
||||||
return $timestamp + $expire >= time();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->getPrimaryKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function getAuthKey()
|
|
||||||
{
|
|
||||||
return $this->auth_key;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function validateAuthKey($authKey)
|
|
||||||
{
|
|
||||||
return $this->getAuthKey() === $authKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates password
|
|
||||||
*
|
|
||||||
* @param string $password password to validate
|
|
||||||
* @return bool if password provided is valid for current user
|
|
||||||
*/
|
|
||||||
public function validatePassword($password)
|
|
||||||
{
|
|
||||||
return Yii::$app->security->validatePassword($password, $this->password_hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates password hash from password and sets it to the model
|
|
||||||
*
|
|
||||||
* @param string $password
|
|
||||||
*/
|
|
||||||
public function setPassword($password)
|
|
||||||
{
|
|
||||||
$this->password_hash = Yii::$app->security->generatePasswordHash($password);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates "remember me" authentication key
|
|
||||||
*/
|
|
||||||
public function generateAuthKey()
|
|
||||||
{
|
|
||||||
$this->auth_key = Yii::$app->security->generateRandomString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates new password reset token
|
|
||||||
*/
|
|
||||||
public function generatePasswordResetToken()
|
|
||||||
{
|
|
||||||
$this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates new token for email verification
|
|
||||||
*/
|
|
||||||
public function generateEmailVerificationToken()
|
|
||||||
{
|
|
||||||
$this->verification_token = Yii::$app->security->generateRandomString() . '_' . time();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes password reset token
|
|
||||||
*/
|
|
||||||
public function removePasswordResetToken()
|
|
||||||
{
|
|
||||||
$this->password_reset_token = null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
defined('YII_DEBUG') or define('YII_DEBUG', true);
|
|
||||||
defined('YII_ENV') or define('YII_ENV', 'test');
|
|
||||||
defined('YII_APP_BASE_PATH') or define('YII_APP_BASE_PATH', __DIR__.'/../../');
|
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
|
||||||
require_once __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php';
|
|
||||||
require __DIR__ . '/../config/bootstrap.php';
|
|
|
@ -1,14 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'username' => 'bayer.hudson',
|
|
||||||
'auth_key' => 'HP187Mvq7Mmm3CTU80dLkGmni_FUH_lR',
|
|
||||||
//password_0
|
|
||||||
'password_hash' => '$2y$13$EjaPFBnZOQsHdGuHI.xvhuDp1fHpo8hKRSk6yshqa9c5EG8s3C3lO',
|
|
||||||
'password_reset_token' => 'ExzkCOaYc1L8IOBs4wdTGGbgNiG3Wz1I_1402312317',
|
|
||||||
'created_at' => '1402312317',
|
|
||||||
'updated_at' => '1402312317',
|
|
||||||
'email' => 'nicole.paucek@schultz.info',
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1 +0,0 @@
|
||||||
_generated
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace common\tests;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inherited Methods
|
|
||||||
* @method void wantToTest($text)
|
|
||||||
* @method void wantTo($text)
|
|
||||||
* @method void execute($callable)
|
|
||||||
* @method void expectTo($prediction)
|
|
||||||
* @method void verify($prediction)
|
|
||||||
* @method void amGoingTo($argumentation)
|
|
||||||
* @method void am($role)
|
|
||||||
* @method void lookForwardTo($achieveValue)
|
|
||||||
* @method void comment($description)
|
|
||||||
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
|
|
||||||
*
|
|
||||||
* @SuppressWarnings(PHPMD)
|
|
||||||
*/
|
|
||||||
class UnitTester extends \Codeception\Actor
|
|
||||||
{
|
|
||||||
use _generated\UnitTesterActions;
|
|
||||||
/**
|
|
||||||
* Define custom actions here
|
|
||||||
*/
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
suite_namespace: common\tests\unit
|
|
||||||
actor: UnitTester
|
|
||||||
bootstrap: false
|
|
||||||
modules:
|
|
||||||
enabled:
|
|
||||||
- Yii2:
|
|
||||||
part: fixtures
|
|
|
@ -1,67 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace common\tests\unit\models;
|
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use common\models\LoginForm;
|
|
||||||
use common\fixtures\UserFixture;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Login form test
|
|
||||||
*/
|
|
||||||
class LoginFormTest extends \Codeception\Test\Unit
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var \common\tests\UnitTester
|
|
||||||
*/
|
|
||||||
protected $tester;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function _fixtures()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'user' => [
|
|
||||||
'class' => UserFixture::class,
|
|
||||||
'dataFile' => codecept_data_dir() . 'user.php'
|
|
||||||
]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLoginNoUser()
|
|
||||||
{
|
|
||||||
$model = new LoginForm([
|
|
||||||
'username' => 'not_existing_username',
|
|
||||||
'password' => 'not_existing_password',
|
|
||||||
]);
|
|
||||||
|
|
||||||
verify($model->login())->false();
|
|
||||||
verify(Yii::$app->user->isGuest)->true();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLoginWrongPassword()
|
|
||||||
{
|
|
||||||
$model = new LoginForm([
|
|
||||||
'username' => 'bayer.hudson',
|
|
||||||
'password' => 'wrong_password',
|
|
||||||
]);
|
|
||||||
|
|
||||||
verify($model->login())->false();
|
|
||||||
verify( $model->errors)->arrayHasKey('password');
|
|
||||||
verify(Yii::$app->user->isGuest)->true();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLoginCorrect()
|
|
||||||
{
|
|
||||||
$model = new LoginForm([
|
|
||||||
'username' => 'bayer.hudson',
|
|
||||||
'password' => 'password_0',
|
|
||||||
]);
|
|
||||||
|
|
||||||
verify($model->login())->true();
|
|
||||||
verify($model->errors)->arrayHasNotKey('password');
|
|
||||||
verify(Yii::$app->user->isGuest)->false();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace common\widgets;
|
|
||||||
|
|
||||||
use Yii;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Alert widget renders a message from session flash. All flash messages are displayed
|
|
||||||
* in the sequence they were assigned using setFlash. You can set message as following:
|
|
||||||
*
|
|
||||||
* ```php
|
|
||||||
* Yii::$app->session->setFlash('error', 'This is the message');
|
|
||||||
* Yii::$app->session->setFlash('success', 'This is the message');
|
|
||||||
* Yii::$app->session->setFlash('info', 'This is the message');
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* Multiple messages could be set as follows:
|
|
||||||
*
|
|
||||||
* ```php
|
|
||||||
* Yii::$app->session->setFlash('error', ['Error 1', 'Error 2']);
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @author Kartik Visweswaran <kartikv2@gmail.com>
|
|
||||||
* @author Alexander Makarov <sam@rmcreative.ru>
|
|
||||||
*/
|
|
||||||
class Alert extends \yii\bootstrap5\Widget
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var array the alert types configuration for the flash messages.
|
|
||||||
* This array is setup as $key => $value, where:
|
|
||||||
* - key: the name of the session flash variable
|
|
||||||
* - value: the bootstrap alert type (i.e. danger, success, info, warning)
|
|
||||||
*/
|
|
||||||
public $alertTypes = [
|
|
||||||
'error' => 'alert-danger',
|
|
||||||
'danger' => 'alert-danger',
|
|
||||||
'success' => 'alert-success',
|
|
||||||
'info' => 'alert-info',
|
|
||||||
'warning' => 'alert-warning'
|
|
||||||
];
|
|
||||||
/**
|
|
||||||
* @var array the options for rendering the close button tag.
|
|
||||||
* Array will be passed to [[\yii\bootstrap\Alert::closeButton]].
|
|
||||||
*/
|
|
||||||
public $closeButton = [];
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function run()
|
|
||||||
{
|
|
||||||
$session = Yii::$app->session;
|
|
||||||
$flashes = $session->getAllFlashes();
|
|
||||||
$appendClass = isset($this->options['class']) ? ' ' . $this->options['class'] : '';
|
|
||||||
|
|
||||||
foreach ($flashes as $type => $flash) {
|
|
||||||
if (!isset($this->alertTypes[$type])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ((array) $flash as $i => $message) {
|
|
||||||
echo \yii\bootstrap5\Alert::widget([
|
|
||||||
'body' => $message,
|
|
||||||
'closeButton' => $this->closeButton,
|
|
||||||
'options' => array_merge($this->options, [
|
|
||||||
'id' => $this->getId() . '-' . $type . '-' . $i,
|
|
||||||
'class' => $this->alertTypes[$type] . $appendClass,
|
|
||||||
]),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$session->removeFlash($type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
{
|
|
||||||
"name": "yiisoft/yii2-app-advanced",
|
|
||||||
"description": "Yii 2 Advanced Project Template",
|
|
||||||
"keywords": ["yii2", "framework", "advanced", "project template"],
|
|
||||||
"homepage": "https://www.yiiframework.com/",
|
|
||||||
"type": "project",
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
|
|
||||||
"forum": "https://www.yiiframework.com/forum/",
|
|
||||||
"wiki": "https://www.yiiframework.com/wiki/",
|
|
||||||
"irc": "ircs://irc.libera.chat:6697/yii",
|
|
||||||
"source": "https://github.com/yiisoft/yii2"
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.4.0",
|
|
||||||
"yiisoft/yii2": "~2.0.45",
|
|
||||||
"yiisoft/yii2-bootstrap5": "~2.0.2",
|
|
||||||
"yiisoft/yii2-symfonymailer": "~2.0.3"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"yiisoft/yii2-debug": "~2.1.0",
|
|
||||||
"yiisoft/yii2-gii": "~2.2.0",
|
|
||||||
"yiisoft/yii2-faker": "~2.0.0",
|
|
||||||
"phpunit/phpunit": "~9.5.0",
|
|
||||||
"codeception/codeception": "^5.0.0 || ^4.0",
|
|
||||||
"codeception/lib-innerbrowser": "^4.0 || ^3.0 || ^1.1",
|
|
||||||
"codeception/module-asserts": "^3.0 || ^1.1",
|
|
||||||
"codeception/module-yii2": "^1.1",
|
|
||||||
"codeception/module-filesystem": "^3.0 || ^2.0 || ^1.1",
|
|
||||||
"codeception/verify": "^3.0 || ^2.2",
|
|
||||||
"symfony/browser-kit": "^6.0 || >=2.7 <=4.2.4"
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"psr-4": {
|
|
||||||
"common\\tests\\": ["common/tests/", "common/tests/_support"],
|
|
||||||
"backend\\tests\\": ["backend/tests/", "backend/tests/_support"],
|
|
||||||
"frontend\\tests\\": ["frontend/tests/", "frontend/tests/_support"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"allow-plugins": {
|
|
||||||
"yiisoft/yii2-composer" : true
|
|
||||||
},
|
|
||||||
"process-timeout": 1800,
|
|
||||||
"fxp-asset": {
|
|
||||||
"enabled": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"repositories": [
|
|
||||||
{
|
|
||||||
"type": "composer",
|
|
||||||
"url": "https://asset-packagist.org"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +0,0 @@
|
||||||
main-local.php
|
|
||||||
params-local.php
|
|
||||||
test-local.php
|
|
|
@ -1 +0,0 @@
|
||||||
<?php
|
|
|
@ -1,36 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$params = array_merge(
|
|
||||||
require __DIR__ . '/../../common/config/params.php',
|
|
||||||
require __DIR__ . '/../../common/config/params-local.php',
|
|
||||||
require __DIR__ . '/params.php',
|
|
||||||
require __DIR__ . '/params-local.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
return [
|
|
||||||
'id' => 'app-console',
|
|
||||||
'basePath' => dirname(__DIR__),
|
|
||||||
'bootstrap' => ['log'],
|
|
||||||
'controllerNamespace' => 'console\controllers',
|
|
||||||
'aliases' => [
|
|
||||||
'@bower' => '@vendor/bower-asset',
|
|
||||||
'@npm' => '@vendor/npm-asset',
|
|
||||||
],
|
|
||||||
'controllerMap' => [
|
|
||||||
'fixture' => [
|
|
||||||
'class' => \yii\console\controllers\FixtureController::class,
|
|
||||||
'namespace' => 'common\fixtures',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'components' => [
|
|
||||||
'log' => [
|
|
||||||
'targets' => [
|
|
||||||
[
|
|
||||||
'class' => \yii\log\FileTarget::class,
|
|
||||||
'levels' => ['error', 'warning'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'params' => $params,
|
|
||||||
];
|
|
|
@ -1,5 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'adminEmail' => 'admin@example.com',
|
|
||||||
];
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
];
|
|
|
@ -1,33 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use yii\db\Migration;
|
|
||||||
|
|
||||||
class m130524_201442_init extends Migration
|
|
||||||
{
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
$tableOptions = null;
|
|
||||||
if ($this->db->driverName === 'mysql') {
|
|
||||||
// https://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
|
|
||||||
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->createTable('{{%user}}', [
|
|
||||||
'id' => $this->primaryKey(),
|
|
||||||
'username' => $this->string()->notNull()->unique(),
|
|
||||||
'auth_key' => $this->string(32)->notNull(),
|
|
||||||
'password_hash' => $this->string()->notNull(),
|
|
||||||
'password_reset_token' => $this->string()->unique(),
|
|
||||||
'email' => $this->string()->notNull()->unique(),
|
|
||||||
|
|
||||||
'status' => $this->smallInteger()->notNull()->defaultValue(10),
|
|
||||||
'created_at' => $this->integer()->notNull(),
|
|
||||||
'updated_at' => $this->integer()->notNull(),
|
|
||||||
], $tableOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function down()
|
|
||||||
{
|
|
||||||
$this->dropTable('{{%user}}');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use \yii\db\Migration;
|
|
||||||
|
|
||||||
class m190124_110200_add_verification_token_column_to_user_table extends Migration
|
|
||||||
{
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
$this->addColumn('{{%user}}', 'verification_token', $this->string()->defaultValue(null));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function down()
|
|
||||||
{
|
|
||||||
$this->dropColumn('{{%user}}', 'verification_token');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
*
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1,48 +0,0 @@
|
||||||
version: '3'
|
|
||||||
services:
|
|
||||||
nginx:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/images/nginx/Dockerfile
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
volumes:
|
|
||||||
- ./docker/config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
|
||||||
- ./:/var/www/:z
|
|
||||||
depends_on:
|
|
||||||
- php
|
|
||||||
networks:
|
|
||||||
- internal
|
|
||||||
|
|
||||||
php:
|
|
||||||
build: docker/images/php
|
|
||||||
volumes:
|
|
||||||
- ./:/var/www/:z
|
|
||||||
- ./docker/logs/nginx:/var/log/nginx
|
|
||||||
networks:
|
|
||||||
- internal
|
|
||||||
working_dir: /var/www
|
|
||||||
extra_hosts:
|
|
||||||
- "host.docker.internal:host-gateway"
|
|
||||||
|
|
||||||
mysql:
|
|
||||||
image: mysql:8.0
|
|
||||||
command: [ 'mysqld', '--default-authentication-plugin=mysql_native_password','--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ]
|
|
||||||
container_name: mysql-web
|
|
||||||
environment:
|
|
||||||
MYSQL_DATABASE: web
|
|
||||||
MYSQL_ROOT_PASSWORD: root
|
|
||||||
TZ: Europe/Moscow
|
|
||||||
ports:
|
|
||||||
- 3020:3306
|
|
||||||
volumes:
|
|
||||||
- ./docker/logs/mysql:/var/log/mysql/
|
|
||||||
- ./docker/config/mysql:/etc/mysql/conf.d
|
|
||||||
- ./docker/db/data:/var/lib/mysql
|
|
||||||
- ./docker/dump:/dump
|
|
||||||
networks:
|
|
||||||
- internal
|
|
||||||
|
|
||||||
networks:
|
|
||||||
internal:
|
|
||||||
driver: bridge
|
|
|
@ -1 +0,0 @@
|
||||||
!.gitignore
|
|
|
@ -1,16 +0,0 @@
|
||||||
[mysqld]
|
|
||||||
skip-log-bin
|
|
||||||
sql_mode=""
|
|
||||||
|
|
||||||
# Slow query settings:
|
|
||||||
slow_query_log=0
|
|
||||||
slow_query_log_file=/var/log/mysql/slow.log
|
|
||||||
long_query_time=10
|
|
||||||
|
|
||||||
default_authentication_plugin = mysql_native_password
|
|
||||||
|
|
||||||
character-set-server=utf8mb4
|
|
||||||
collation-server=utf8mb4_unicode_ci
|
|
||||||
|
|
||||||
[client]
|
|
||||||
default-character-set=utf8mb4
|
|
|
@ -1,66 +0,0 @@
|
||||||
worker_processes 4;
|
|
||||||
|
|
||||||
http {
|
|
||||||
tcp_nopush on;
|
|
||||||
tcp_nodelay on;
|
|
||||||
keepalive_timeout 65;
|
|
||||||
types_hash_max_size 2048;
|
|
||||||
client_max_body_size 20m;
|
|
||||||
|
|
||||||
include /etc/nginx/mime.types;
|
|
||||||
default_type application/octet-stream;
|
|
||||||
|
|
||||||
access_log /var/www/docker/logs/nginx/access.log;
|
|
||||||
error_log /var/www/docker/logs/nginx/error.log;
|
|
||||||
|
|
||||||
gzip on;
|
|
||||||
gzip_disable "msie6";
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name content.local;
|
|
||||||
root /var/www/frontend/web;
|
|
||||||
index index.php index.html index.htm;
|
|
||||||
try_files $uri /$uri /index.php?$query_string;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ /index.php?$query_string;
|
|
||||||
root /var/www/frontend/web;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~ ^/.+\.php(/|$) {
|
|
||||||
fastcgi_pass php:9000;
|
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.*)$;
|
|
||||||
include fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
||||||
fastcgi_param HTTPS off;
|
|
||||||
fastcgi_read_timeout 3000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name admin.content.local;
|
|
||||||
root /var/www/backend/web;
|
|
||||||
index index.php index.html index.htm;
|
|
||||||
try_files $uri /$uri /index.php?$query_string;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ /index.php?$query_string;
|
|
||||||
root /var/www/backend/web;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~ ^/.+\.php(/|$) {
|
|
||||||
fastcgi_pass php:9000;
|
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.*)$;
|
|
||||||
include fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
||||||
fastcgi_param HTTPS off;
|
|
||||||
fastcgi_read_timeout 3000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 768;
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1,8 +0,0 @@
|
||||||
FROM nginx:latest
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
mc
|
|
||||||
|
|
||||||
COPY ./docker/config/nginx/nginx.conf /etc/nginx/nginx.conf
|
|
||||||
|
|
||||||
ENV TZ="Europe/Moscow"
|
|
|
@ -1,38 +0,0 @@
|
||||||
FROM php:8.1-fpm
|
|
||||||
|
|
||||||
RUN apt-get update; \
|
|
||||||
apt-get install -y libmagickwand-dev; \
|
|
||||||
pecl install imagick; \
|
|
||||||
docker-php-ext-enable imagick; \
|
|
||||||
true
|
|
||||||
|
|
||||||
RUN apt-get install -y \
|
|
||||||
libicu-dev \
|
|
||||||
curl \
|
|
||||||
wget \
|
|
||||||
git \
|
|
||||||
mc \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libonig-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libmcrypt-dev \
|
|
||||||
libgmp-dev \
|
|
||||||
default-jre \
|
|
||||||
&& docker-php-ext-install gd \
|
|
||||||
&& docker-php-ext-install gmp \
|
|
||||||
&& docker-php-ext-configure intl \
|
|
||||||
&& docker-php-ext-install intl \
|
|
||||||
&& pecl update-channels && pecl install mcrypt && docker-php-ext-enable mcrypt \
|
|
||||||
&& docker-php-ext-install -j$(nproc) iconv mbstring mysqli pdo_mysql zip
|
|
||||||
|
|
||||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
|
||||||
|
|
||||||
ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini
|
|
||||||
|
|
||||||
WORKDIR /var/www/
|
|
||||||
|
|
||||||
ENV TZ="Europe/Moscow"
|
|
||||||
|
|
||||||
CMD ["php-fpm"]
|
|
|
@ -1,11 +0,0 @@
|
||||||
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
|
|
||||||
display_errors = Off
|
|
||||||
display_startup_errors = Off
|
|
||||||
|
|
||||||
post_max_size = 64M
|
|
||||||
upload_max_filesize = 64M
|
|
||||||
max_execution_time = 300
|
|
||||||
max_input_time = 600
|
|
||||||
max_input_vars = 1000
|
|
||||||
memory_limit = 2000M
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
|
@ -1,8 +0,0 @@
|
||||||
192.168.65.1 - - [13/Jun/2024:16:34:40 +0300] "GET / HTTP/1.1" 403 187 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
||||||
192.168.65.1 - - [13/Jun/2024:16:34:40 +0300] "GET /favicon.ico HTTP/1.1" 200 318 "http://web.local/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
||||||
192.168.65.1 - - [13/Jun/2024:16:49:29 +0300] "GET / HTTP/1.1" 200 1545 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
||||||
192.168.65.1 - - [13/Jun/2024:16:49:29 +0300] "GET /css/site.css HTTP/1.1" 200 1858 "http://web.local/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
||||||
192.168.65.1 - - [13/Jun/2024:16:49:29 +0300] "GET /assets/46f1484b/dist/css/bootstrap.css HTTP/1.1" 200 281046 "http://web.local/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
||||||
192.168.65.1 - - [13/Jun/2024:16:49:29 +0300] "GET /assets/f5fa1b4e/jquery.js HTTP/1.1" 200 285314 "http://web.local/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
||||||
192.168.65.1 - - [13/Jun/2024:16:49:29 +0300] "GET /assets/e5b7c8da/yii.js HTTP/1.1" 200 20981 "http://web.local/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
||||||
192.168.65.1 - - [13/Jun/2024:16:49:29 +0300] "GET /assets/46f1484b/dist/js/bootstrap.bundle.js HTTP/1.1" 200 207819 "http://web.local/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
|
@ -1 +0,0 @@
|
||||||
2024/06/13 16:34:40 [error] 29#29: *1 directory index of "/var/www/frontend/web/" is forbidden, client: 192.168.65.1, server: content.local, request: "GET / HTTP/1.1", host: "web.local"
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return yii\helpers\ArrayHelper::merge(
|
|
||||||
require dirname(dirname(__DIR__)) . '/common/config/codeception-local.php',
|
|
||||||
require __DIR__ . '/main.php',
|
|
||||||
require __DIR__ . '/main-local.php',
|
|
||||||
require __DIR__ . '/test.php',
|
|
||||||
require __DIR__ . '/test-local.php',
|
|
||||||
[
|
|
||||||
]
|
|
||||||
);
|
|
|
@ -1,25 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$config = [
|
|
||||||
'components' => [
|
|
||||||
'request' => [
|
|
||||||
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
|
|
||||||
'cookieValidationKey' => '',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
if (!YII_ENV_TEST) {
|
|
||||||
// configuration adjustments for 'dev' environment
|
|
||||||
$config['bootstrap'][] = 'debug';
|
|
||||||
$config['modules']['debug'] = [
|
|
||||||
'class' => \yii\debug\Module::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
$config['bootstrap'][] = 'gii';
|
|
||||||
$config['modules']['gii'] = [
|
|
||||||
'class' => \yii\gii\Module::class,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $config;
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
];
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
];
|
|
|
@ -1,27 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// NOTE: Make sure this file is not accessible when deployed to production
|
|
||||||
if (!in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) {
|
|
||||||
die('You are not allowed to access this file.');
|
|
||||||
}
|
|
||||||
|
|
||||||
defined('YII_DEBUG') or define('YII_DEBUG', true);
|
|
||||||
defined('YII_ENV') or define('YII_ENV', 'test');
|
|
||||||
|
|
||||||
require __DIR__ . '/../../vendor/autoload.php';
|
|
||||||
require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php';
|
|
||||||
require __DIR__ . '/../../common/config/bootstrap.php';
|
|
||||||
require __DIR__ . '/../config/bootstrap.php';
|
|
||||||
|
|
||||||
$config = yii\helpers\ArrayHelper::merge(
|
|
||||||
require __DIR__ . '/../../common/config/main.php',
|
|
||||||
require __DIR__ . '/../../common/config/main-local.php',
|
|
||||||
require __DIR__ . '/../../common/config/test.php',
|
|
||||||
require __DIR__ . '/../../common/config/test-local.php',
|
|
||||||
require __DIR__ . '/../config/main.php',
|
|
||||||
require __DIR__ . '/../config/main-local.php',
|
|
||||||
require __DIR__ . '/../config/test.php',
|
|
||||||
require __DIR__ . '/../config/test-local.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
(new yii\web\Application($config))->run();
|
|
|
@ -1,18 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
defined('YII_DEBUG') or define('YII_DEBUG', true);
|
|
||||||
defined('YII_ENV') or define('YII_ENV', 'dev');
|
|
||||||
|
|
||||||
require __DIR__ . '/../../vendor/autoload.php';
|
|
||||||
require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php';
|
|
||||||
require __DIR__ . '/../../common/config/bootstrap.php';
|
|
||||||
require __DIR__ . '/../config/bootstrap.php';
|
|
||||||
|
|
||||||
$config = yii\helpers\ArrayHelper::merge(
|
|
||||||
require __DIR__ . '/../../common/config/main.php',
|
|
||||||
require __DIR__ . '/../../common/config/main-local.php',
|
|
||||||
require __DIR__ . '/../config/main.php',
|
|
||||||
require __DIR__ . '/../config/main-local.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
(new yii\web\Application($config))->run();
|
|
|
@ -1,2 +0,0 @@
|
||||||
User-agent: *
|
|
||||||
Disallow: /
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return yii\helpers\ArrayHelper::merge(
|
|
||||||
require __DIR__ . '/main.php',
|
|
||||||
require __DIR__ . '/main-local.php',
|
|
||||||
require __DIR__ . '/test.php',
|
|
||||||
require __DIR__ . '/test-local.php',
|
|
||||||
[
|
|
||||||
'components' => [
|
|
||||||
'request' => [
|
|
||||||
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
|
|
||||||
'cookieValidationKey' => '',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
]
|
|
||||||
);
|
|
|
@ -1,43 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'components' => [
|
|
||||||
'db' => [
|
|
||||||
'class' => \yii\db\Connection::class,
|
|
||||||
'dsn' => 'mysql:host=mysql-web;dbname=web',
|
|
||||||
'username' => 'root',
|
|
||||||
'password' => 'root',
|
|
||||||
'charset' => 'utf8',
|
|
||||||
],
|
|
||||||
'mailer' => [
|
|
||||||
'class' => \yii\symfonymailer\Mailer::class,
|
|
||||||
'viewPath' => '@common/mail',
|
|
||||||
// send all mails to a file by default.
|
|
||||||
'useFileTransport' => true,
|
|
||||||
// You have to set
|
|
||||||
//
|
|
||||||
// 'useFileTransport' => false,
|
|
||||||
//
|
|
||||||
// and configure a transport for the mailer to send real emails.
|
|
||||||
//
|
|
||||||
// SMTP server example:
|
|
||||||
// 'transport' => [
|
|
||||||
// 'scheme' => 'smtps',
|
|
||||||
// 'host' => '',
|
|
||||||
// 'username' => '',
|
|
||||||
// 'password' => '',
|
|
||||||
// 'port' => 465,
|
|
||||||
// 'dsn' => 'native://default',
|
|
||||||
// ],
|
|
||||||
//
|
|
||||||
// DSN example:
|
|
||||||
// 'transport' => [
|
|
||||||
// 'dsn' => 'smtp://user:pass@smtp.example.com:25',
|
|
||||||
// ],
|
|
||||||
//
|
|
||||||
// See: https://symfony.com/doc/current/mailer.html#using-built-in-transports
|
|
||||||
// Or if you use a 3rd party service, see:
|
|
||||||
// https://symfony.com/doc/current/mailer.html#using-a-3rd-party-transport
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
];
|
|
|
@ -1,9 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'components' => [
|
|
||||||
'db' => [
|
|
||||||
'dsn' => 'mysql:host=localhost;dbname=yii2advanced_test',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'bootstrap' => ['gii'],
|
|
||||||
'modules' => [
|
|
||||||
'gii' => 'yii\gii\Module',
|
|
||||||
],
|
|
||||||
];
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
];
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
];
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return yii\helpers\ArrayHelper::merge(
|
|
||||||
require dirname(dirname(__DIR__)) . '/common/config/codeception-local.php',
|
|
||||||
require __DIR__ . '/main.php',
|
|
||||||
require __DIR__ . '/main-local.php',
|
|
||||||
require __DIR__ . '/test.php',
|
|
||||||
require __DIR__ . '/test-local.php',
|
|
||||||
[
|
|
||||||
]
|
|
||||||
);
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue