first commit
This commit is contained in:
commit
b87eb71ca7
43
.gitignore
vendored
Executable file
43
.gitignore
vendored
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
# 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
Executable file
29
LICENSE.md
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
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.
|
60
README.md
Executable file
60
README.md
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/yiisoft" target="_blank">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/993323" height="100px">
|
||||||
|
</a>
|
||||||
|
<h1 align="center">Yii 2 Advanced Project Template</h1>
|
||||||
|
<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
Yii 2 Advanced Project Template is a skeleton [Yii 2](https://www.yiiframework.com/) application best for
|
||||||
|
developing complex Web applications with multiple tiers.
|
||||||
|
|
||||||
|
The template includes three tiers: front end, back end, and console, each of which
|
||||||
|
is a separate Yii application.
|
||||||
|
|
||||||
|
The template is designed to work in a team development environment. It supports
|
||||||
|
deploying the application in different environments.
|
||||||
|
|
||||||
|
Documentation is at [docs/guide/README.md](docs/guide/README.md).
|
||||||
|
|
||||||
|
[![Latest Stable Version](https://img.shields.io/packagist/v/yiisoft/yii2-app-advanced.svg)](https://packagist.org/packages/yiisoft/yii2-app-advanced)
|
||||||
|
[![Total Downloads](https://img.shields.io/packagist/dt/yiisoft/yii2-app-advanced.svg)](https://packagist.org/packages/yiisoft/yii2-app-advanced)
|
||||||
|
[![build](https://github.com/yiisoft/yii2-app-advanced/workflows/build/badge.svg)](https://github.com/yiisoft/yii2-app-advanced/actions?query=workflow%3Abuild)
|
||||||
|
|
||||||
|
DIRECTORY STRUCTURE
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
```
|
||||||
|
common
|
||||||
|
config/ contains shared configurations
|
||||||
|
mail/ contains view files for e-mails
|
||||||
|
models/ contains model classes used in both backend and frontend
|
||||||
|
tests/ contains tests for common classes
|
||||||
|
console
|
||||||
|
config/ contains console configurations
|
||||||
|
controllers/ contains console controllers (commands)
|
||||||
|
migrations/ contains database migrations
|
||||||
|
models/ contains console-specific model classes
|
||||||
|
runtime/ contains files generated during runtime
|
||||||
|
backend
|
||||||
|
assets/ contains application assets such as JavaScript and CSS
|
||||||
|
config/ contains backend configurations
|
||||||
|
controllers/ contains Web controller classes
|
||||||
|
models/ contains backend-specific model classes
|
||||||
|
runtime/ contains files generated during runtime
|
||||||
|
tests/ contains tests for backend application
|
||||||
|
views/ contains view files for the Web application
|
||||||
|
web/ contains the entry script and Web resources
|
||||||
|
frontend
|
||||||
|
assets/ contains application assets such as JavaScript and CSS
|
||||||
|
config/ contains frontend configurations
|
||||||
|
controllers/ contains Web controller classes
|
||||||
|
models/ contains frontend-specific model classes
|
||||||
|
runtime/ contains files generated during runtime
|
||||||
|
tests/ contains tests for frontend application
|
||||||
|
views/ contains view files for the Web application
|
||||||
|
web/ contains the entry script and Web resources
|
||||||
|
widgets/ contains frontend widgets
|
||||||
|
vendor/ contains dependent 3rd-party packages
|
||||||
|
environments/ contains environment-based overrides
|
||||||
|
```
|
88
Vagrantfile
vendored
Executable file
88
Vagrantfile
vendored
Executable file
@ -0,0 +1,88 @@
|
|||||||
|
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
|
4
backend/Dockerfile
Executable file
4
backend/Dockerfile
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
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
|
23
backend/assets/AppAsset.php
Executable file
23
backend/assets/AppAsset.php
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
<?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',
|
||||||
|
];
|
||||||
|
}
|
15
backend/codeception.yml
Executable file
15
backend/codeception.yml
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
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'
|
4
backend/config/.gitignore
vendored
Executable file
4
backend/config/.gitignore
vendored
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
codeception-local.php
|
||||||
|
main-local.php
|
||||||
|
params-local.php
|
||||||
|
test-local.php
|
1
backend/config/bootstrap.php
Executable file
1
backend/config/bootstrap.php
Executable file
@ -0,0 +1 @@
|
|||||||
|
<?php
|
66
backend/config/main.php
Executable file
66
backend/config/main.php
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
<?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'],
|
||||||
|
'homeUrl' => '/secure',
|
||||||
|
'modules' => [
|
||||||
|
'table' => [
|
||||||
|
'class' => 'app\modules\table\Table',
|
||||||
|
],
|
||||||
|
'category' => [
|
||||||
|
'class' => 'app\modules\category\Category',
|
||||||
|
],
|
||||||
|
'product' => [
|
||||||
|
'class' => 'app\modules\product\Product',
|
||||||
|
],
|
||||||
|
'order' => [
|
||||||
|
'class' => 'app\modules\order\Order',
|
||||||
|
],
|
||||||
|
'banner' => [
|
||||||
|
'class' => 'app\modules\banner\Banner',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'components' => [
|
||||||
|
'request' => [
|
||||||
|
'csrfParam' => '_csrf-backend',
|
||||||
|
'baseUrl' => '/secure',
|
||||||
|
],
|
||||||
|
'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,
|
||||||
|
];
|
5
backend/config/params.php
Executable file
5
backend/config/params.php
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'adminEmail' => 'admin@example.com',
|
||||||
|
'bsVersion' => '4.x'
|
||||||
|
];
|
15
backend/config/test.php
Executable file
15
backend/config/test.php
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'id' => 'app-backend-tests',
|
||||||
|
'components' => [
|
||||||
|
'assetManager' => [
|
||||||
|
'basePath' => __DIR__ . '/../web/assets',
|
||||||
|
],
|
||||||
|
'urlManager' => [
|
||||||
|
'showScriptName' => true,
|
||||||
|
],
|
||||||
|
'request' => [
|
||||||
|
'cookieValidationKey' => 'test',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
104
backend/controllers/SiteController.php
Executable file
104
backend/controllers/SiteController.php
Executable file
@ -0,0 +1,104 @@
|
|||||||
|
<?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
backend/models/.gitkeep
Executable file
1
backend/models/.gitkeep
Executable file
@ -0,0 +1 @@
|
|||||||
|
*
|
24
backend/modules/banner/Banner.php
Executable file
24
backend/modules/banner/Banner.php
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\banner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* banner module definition class
|
||||||
|
*/
|
||||||
|
class Banner extends \yii\base\Module
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public $controllerNamespace = 'app\modules\banner\controllers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
|
||||||
|
// custom initialization code goes here
|
||||||
|
}
|
||||||
|
}
|
151
backend/modules/banner/controllers/BannerController.php
Executable file
151
backend/modules/banner/controllers/BannerController.php
Executable file
@ -0,0 +1,151 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\banner\controllers;
|
||||||
|
|
||||||
|
use common\models\Banner;
|
||||||
|
use yii\data\ActiveDataProvider;
|
||||||
|
use yii\web\Controller;
|
||||||
|
use yii\web\NotFoundHttpException;
|
||||||
|
use yii\filters\VerbFilter;
|
||||||
|
use yii\web\UploadedFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BannerController implements the CRUD actions for Banner model.
|
||||||
|
*/
|
||||||
|
class BannerController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function behaviors()
|
||||||
|
{
|
||||||
|
return array_merge(
|
||||||
|
parent::behaviors(),
|
||||||
|
[
|
||||||
|
'verbs' => [
|
||||||
|
'class' => VerbFilter::className(),
|
||||||
|
'actions' => [
|
||||||
|
'delete' => ['POST'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all Banner models.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
$dataProvider = new ActiveDataProvider([
|
||||||
|
'query' => Banner::find(),
|
||||||
|
/*
|
||||||
|
'pagination' => [
|
||||||
|
'pageSize' => 50
|
||||||
|
],
|
||||||
|
'sort' => [
|
||||||
|
'defaultOrder' => [
|
||||||
|
'id' => SORT_DESC,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
*/
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $this->render('index', [
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a single Banner model.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionView($id)
|
||||||
|
{
|
||||||
|
return $this->render('view', [
|
||||||
|
'model' => $this->findModel($id),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Banner model.
|
||||||
|
* If creation is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
*/
|
||||||
|
public function actionCreate()
|
||||||
|
{
|
||||||
|
$model = new Banner();
|
||||||
|
|
||||||
|
if ($this->request->isPost) {
|
||||||
|
$model->load($this->request->post());
|
||||||
|
if (UploadedFile::getInstance($model, 'photo')) {
|
||||||
|
$model->photo = UploadedFile::getInstance($model, 'photo');
|
||||||
|
$model->photo->saveAs("@frontend/web/images/banner/{$model->photo->baseName}.{$model->photo->extension}");
|
||||||
|
$model->photo = '/frontend/web/images/banner/' . $model->photo->baseName . $model->photo->extension;
|
||||||
|
}
|
||||||
|
if ($model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$model->loadDefaultValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('create', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates an existing Banner model.
|
||||||
|
* If update is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionUpdate($id)
|
||||||
|
{
|
||||||
|
$model = $this->findModel($id);
|
||||||
|
|
||||||
|
if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('update', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes an existing Banner model.
|
||||||
|
* If deletion is successful, the browser will be redirected to the 'index' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return \yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionDelete($id)
|
||||||
|
{
|
||||||
|
$this->findModel($id)->delete();
|
||||||
|
|
||||||
|
return $this->redirect(['index']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the Banner model based on its primary key value.
|
||||||
|
* If the model is not found, a 404 HTTP exception will be thrown.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return Banner the loaded model
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
protected function findModel($id)
|
||||||
|
{
|
||||||
|
if (($model = Banner::findOne(['id' => $id])) !== null) {
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotFoundHttpException('The requested page does not exist.');
|
||||||
|
}
|
||||||
|
}
|
20
backend/modules/banner/controllers/DefaultController.php
Executable file
20
backend/modules/banner/controllers/DefaultController.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\banner\controllers;
|
||||||
|
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default controller for the `banner` module
|
||||||
|
*/
|
||||||
|
class DefaultController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Renders the index view for the module
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
return $this->render('index');
|
||||||
|
}
|
||||||
|
}
|
41
backend/modules/banner/views/banner/_form.php
Executable file
41
backend/modules/banner/views/banner/_form.php
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use kartik\widgets\FileInput;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\ActiveForm;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Banner $model */
|
||||||
|
/** @var yii\widgets\ActiveForm $form */
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="banner-form">
|
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(); ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'photo')->widget(FileInput::class, [
|
||||||
|
'pluginOptions' => [
|
||||||
|
'showZoom' => false,
|
||||||
|
'initialPreview' => [
|
||||||
|
$model->photo != null ? Html::img('@web/images/banner/' . $model->photo, ['class' => 'file-preview-image']) : null,
|
||||||
|
],
|
||||||
|
'overwriteInitial' => true,
|
||||||
|
'showCaption' => false,
|
||||||
|
'showUpload' => false,
|
||||||
|
'showRemove' => true,
|
||||||
|
'showDetails' => true,
|
||||||
|
'browseClass' => 'btn btn-primary btn-block',
|
||||||
|
'browseIcon' => '<i class="fa fa-camera"></i> ',
|
||||||
|
'browseLabel' => 'Выберите фото',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'rating')->textInput() ?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php ActiveForm::end(); ?>
|
||||||
|
|
||||||
|
</div>
|
20
backend/modules/banner/views/banner/create.php
Executable file
20
backend/modules/banner/views/banner/create.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Banner $model */
|
||||||
|
|
||||||
|
$this->title = 'Create Banner';
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Banners', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="banner-create">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
42
backend/modules/banner/views/banner/index.php
Executable file
42
backend/modules/banner/views/banner/index.php
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use common\models\Banner;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\helpers\Url;
|
||||||
|
use yii\grid\ActionColumn;
|
||||||
|
use yii\grid\GridView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var yii\data\ActiveDataProvider $dataProvider */
|
||||||
|
|
||||||
|
$this->title = 'Banners';
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="banner-index">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Create Banner', ['create'], ['class' => 'btn btn-success']) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<?= GridView::widget([
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
'columns' => [
|
||||||
|
['class' => 'yii\grid\SerialColumn'],
|
||||||
|
|
||||||
|
'id',
|
||||||
|
'photo',
|
||||||
|
'rating',
|
||||||
|
[
|
||||||
|
'class' => ActionColumn::className(),
|
||||||
|
'urlCreator' => function ($action, Banner $model, $key, $index, $column) {
|
||||||
|
return Url::toRoute([$action, 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]); ?>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
21
backend/modules/banner/views/banner/update.php
Executable file
21
backend/modules/banner/views/banner/update.php
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Banner $model */
|
||||||
|
|
||||||
|
$this->title = 'Update Banner: ' . $model->id;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Banners', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]];
|
||||||
|
$this->params['breadcrumbs'][] = 'Update';
|
||||||
|
?>
|
||||||
|
<div class="banner-update">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
38
backend/modules/banner/views/banner/view.php
Executable file
38
backend/modules/banner/views/banner/view.php
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\DetailView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Banner $model */
|
||||||
|
|
||||||
|
$this->title = $model->id;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Banners', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
\yii\web\YiiAsset::register($this);
|
||||||
|
?>
|
||||||
|
<div class="banner-view">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
|
||||||
|
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
|
||||||
|
'class' => 'btn btn-danger',
|
||||||
|
'data' => [
|
||||||
|
'confirm' => 'Are you sure you want to delete this item?',
|
||||||
|
'method' => 'post',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?= DetailView::widget([
|
||||||
|
'model' => $model,
|
||||||
|
'attributes' => [
|
||||||
|
'id',
|
||||||
|
'photo',
|
||||||
|
'rating',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
12
backend/modules/banner/views/default/index.php
Executable file
12
backend/modules/banner/views/default/index.php
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
<div class="banner-default-index">
|
||||||
|
<h1><?= $this->context->action->uniqueId ?></h1>
|
||||||
|
<p>
|
||||||
|
This is the view content for action "<?= $this->context->action->id ?>".
|
||||||
|
The action belongs to the controller "<?= get_class($this->context) ?>"
|
||||||
|
in the "<?= $this->context->module->id ?>" module.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You may customize this page by editing the following file:<br>
|
||||||
|
<code><?= __FILE__ ?></code>
|
||||||
|
</p>
|
||||||
|
</div>
|
24
backend/modules/category/Category.php
Executable file
24
backend/modules/category/Category.php
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\category;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* category module definition class
|
||||||
|
*/
|
||||||
|
class Category extends \yii\base\Module
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public $controllerNamespace = 'app\modules\category\controllers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
|
||||||
|
// custom initialization code goes here
|
||||||
|
}
|
||||||
|
}
|
144
backend/modules/category/controllers/CategoryController.php
Executable file
144
backend/modules/category/controllers/CategoryController.php
Executable file
@ -0,0 +1,144 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\category\controllers;
|
||||||
|
|
||||||
|
use common\models\Category;
|
||||||
|
use yii\data\ActiveDataProvider;
|
||||||
|
use yii\web\Controller;
|
||||||
|
use yii\web\NotFoundHttpException;
|
||||||
|
use yii\filters\VerbFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CategoryController implements the CRUD actions for Category model.
|
||||||
|
*/
|
||||||
|
class CategoryController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function behaviors()
|
||||||
|
{
|
||||||
|
return array_merge(
|
||||||
|
parent::behaviors(),
|
||||||
|
[
|
||||||
|
'verbs' => [
|
||||||
|
'class' => VerbFilter::className(),
|
||||||
|
'actions' => [
|
||||||
|
'delete' => ['POST'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all Category models.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
$dataProvider = new ActiveDataProvider([
|
||||||
|
'query' => Category::find(),
|
||||||
|
/*
|
||||||
|
'pagination' => [
|
||||||
|
'pageSize' => 50
|
||||||
|
],
|
||||||
|
'sort' => [
|
||||||
|
'defaultOrder' => [
|
||||||
|
'id' => SORT_DESC,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
*/
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $this->render('index', [
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a single Category model.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionView($id)
|
||||||
|
{
|
||||||
|
return $this->render('view', [
|
||||||
|
'model' => $this->findModel($id),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Category model.
|
||||||
|
* If creation is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
*/
|
||||||
|
public function actionCreate()
|
||||||
|
{
|
||||||
|
$model = new Category();
|
||||||
|
|
||||||
|
if ($this->request->isPost) {
|
||||||
|
if ($model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$model->loadDefaultValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('create', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates an existing Category model.
|
||||||
|
* If update is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionUpdate($id)
|
||||||
|
{
|
||||||
|
$model = $this->findModel($id);
|
||||||
|
|
||||||
|
if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('update', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes an existing Category model.
|
||||||
|
* If deletion is successful, the browser will be redirected to the 'index' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return \yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionDelete($id)
|
||||||
|
{
|
||||||
|
$this->findModel($id)->delete();
|
||||||
|
|
||||||
|
return $this->redirect(['index']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the Category model based on its primary key value.
|
||||||
|
* If the model is not found, a 404 HTTP exception will be thrown.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return Category the loaded model
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
protected function findModel($id)
|
||||||
|
{
|
||||||
|
if (($model = Category::findOne(['id' => $id])) !== null) {
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotFoundHttpException('The requested page does not exist.');
|
||||||
|
}
|
||||||
|
}
|
20
backend/modules/category/controllers/DefaultController.php
Executable file
20
backend/modules/category/controllers/DefaultController.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\category\controllers;
|
||||||
|
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default controller for the `category` module
|
||||||
|
*/
|
||||||
|
class DefaultController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Renders the index view for the module
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
return $this->render('index');
|
||||||
|
}
|
||||||
|
}
|
27
backend/modules/category/views/category/_form.php
Executable file
27
backend/modules/category/views/category/_form.php
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\ActiveForm;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Category $model */
|
||||||
|
/** @var yii\widgets\ActiveForm $form */
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="category-form">
|
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(); ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'description')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'slug')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php ActiveForm::end(); ?>
|
||||||
|
|
||||||
|
</div>
|
20
backend/modules/category/views/category/create.php
Executable file
20
backend/modules/category/views/category/create.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Category $model */
|
||||||
|
|
||||||
|
$this->title = 'Create Category';
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Categories', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="category-create">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
43
backend/modules/category/views/category/index.php
Executable file
43
backend/modules/category/views/category/index.php
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use common\models\Category;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\helpers\Url;
|
||||||
|
use yii\grid\ActionColumn;
|
||||||
|
use yii\grid\GridView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var yii\data\ActiveDataProvider $dataProvider */
|
||||||
|
|
||||||
|
$this->title = 'Categories';
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="category-index">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Create Category', ['create'], ['class' => 'btn btn-success']) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<?= GridView::widget([
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
'columns' => [
|
||||||
|
['class' => 'yii\grid\SerialColumn'],
|
||||||
|
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'slug',
|
||||||
|
[
|
||||||
|
'class' => ActionColumn::className(),
|
||||||
|
'urlCreator' => function ($action, Category $model, $key, $index, $column) {
|
||||||
|
return Url::toRoute([$action, 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]); ?>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
21
backend/modules/category/views/category/update.php
Executable file
21
backend/modules/category/views/category/update.php
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Category $model */
|
||||||
|
|
||||||
|
$this->title = 'Update Category: ' . $model->name;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Categories', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->id]];
|
||||||
|
$this->params['breadcrumbs'][] = 'Update';
|
||||||
|
?>
|
||||||
|
<div class="category-update">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
39
backend/modules/category/views/category/view.php
Executable file
39
backend/modules/category/views/category/view.php
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\DetailView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Category $model */
|
||||||
|
|
||||||
|
$this->title = $model->name;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Categories', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
\yii\web\YiiAsset::register($this);
|
||||||
|
?>
|
||||||
|
<div class="category-view">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
|
||||||
|
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
|
||||||
|
'class' => 'btn btn-danger',
|
||||||
|
'data' => [
|
||||||
|
'confirm' => 'Are you sure you want to delete this item?',
|
||||||
|
'method' => 'post',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?= DetailView::widget([
|
||||||
|
'model' => $model,
|
||||||
|
'attributes' => [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'slug',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
12
backend/modules/category/views/default/index.php
Executable file
12
backend/modules/category/views/default/index.php
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
<div class="category-default-index">
|
||||||
|
<h1><?= $this->context->action->uniqueId ?></h1>
|
||||||
|
<p>
|
||||||
|
This is the view content for action "<?= $this->context->action->id ?>".
|
||||||
|
The action belongs to the controller "<?= get_class($this->context) ?>"
|
||||||
|
in the "<?= $this->context->module->id ?>" module.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You may customize this page by editing the following file:<br>
|
||||||
|
<code><?= __FILE__ ?></code>
|
||||||
|
</p>
|
||||||
|
</div>
|
24
backend/modules/order/Order.php
Executable file
24
backend/modules/order/Order.php
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* order module definition class
|
||||||
|
*/
|
||||||
|
class Order extends \yii\base\Module
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public $controllerNamespace = 'app\modules\order\controllers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
|
||||||
|
// custom initialization code goes here
|
||||||
|
}
|
||||||
|
}
|
20
backend/modules/order/controllers/DefaultController.php
Executable file
20
backend/modules/order/controllers/DefaultController.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\order\controllers;
|
||||||
|
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default controller for the `order` module
|
||||||
|
*/
|
||||||
|
class DefaultController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Renders the index view for the module
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
return $this->render('index');
|
||||||
|
}
|
||||||
|
}
|
144
backend/modules/order/controllers/OrderController.php
Executable file
144
backend/modules/order/controllers/OrderController.php
Executable file
@ -0,0 +1,144 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\order\controllers;
|
||||||
|
|
||||||
|
use common\models\Order;
|
||||||
|
use yii\data\ActiveDataProvider;
|
||||||
|
use yii\web\Controller;
|
||||||
|
use yii\web\NotFoundHttpException;
|
||||||
|
use yii\filters\VerbFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OrderController implements the CRUD actions for Order model.
|
||||||
|
*/
|
||||||
|
class OrderController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function behaviors()
|
||||||
|
{
|
||||||
|
return array_merge(
|
||||||
|
parent::behaviors(),
|
||||||
|
[
|
||||||
|
'verbs' => [
|
||||||
|
'class' => VerbFilter::className(),
|
||||||
|
'actions' => [
|
||||||
|
'delete' => ['POST'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all Order models.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
$dataProvider = new ActiveDataProvider([
|
||||||
|
'query' => Order::find(),
|
||||||
|
/*
|
||||||
|
'pagination' => [
|
||||||
|
'pageSize' => 50
|
||||||
|
],
|
||||||
|
'sort' => [
|
||||||
|
'defaultOrder' => [
|
||||||
|
'id' => SORT_DESC,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
*/
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $this->render('index', [
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a single Order model.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionView($id)
|
||||||
|
{
|
||||||
|
return $this->render('view', [
|
||||||
|
'model' => $this->findModel($id),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Order model.
|
||||||
|
* If creation is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
*/
|
||||||
|
public function actionCreate()
|
||||||
|
{
|
||||||
|
$model = new Order();
|
||||||
|
|
||||||
|
if ($this->request->isPost) {
|
||||||
|
if ($model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$model->loadDefaultValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('create', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates an existing Order model.
|
||||||
|
* If update is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionUpdate($id)
|
||||||
|
{
|
||||||
|
$model = $this->findModel($id);
|
||||||
|
|
||||||
|
if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('update', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes an existing Order model.
|
||||||
|
* If deletion is successful, the browser will be redirected to the 'index' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return \yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionDelete($id)
|
||||||
|
{
|
||||||
|
$this->findModel($id)->delete();
|
||||||
|
|
||||||
|
return $this->redirect(['index']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the Order model based on its primary key value.
|
||||||
|
* If the model is not found, a 404 HTTP exception will be thrown.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return Order the loaded model
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
protected function findModel($id)
|
||||||
|
{
|
||||||
|
if (($model = Order::findOne(['id' => $id])) !== null) {
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotFoundHttpException('The requested page does not exist.');
|
||||||
|
}
|
||||||
|
}
|
12
backend/modules/order/views/default/index.php
Executable file
12
backend/modules/order/views/default/index.php
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
<div class="order-default-index">
|
||||||
|
<h1><?= $this->context->action->uniqueId ?></h1>
|
||||||
|
<p>
|
||||||
|
This is the view content for action "<?= $this->context->action->id ?>".
|
||||||
|
The action belongs to the controller "<?= get_class($this->context) ?>"
|
||||||
|
in the "<?= $this->context->module->id ?>" module.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You may customize this page by editing the following file:<br>
|
||||||
|
<code><?= __FILE__ ?></code>
|
||||||
|
</p>
|
||||||
|
</div>
|
35
backend/modules/order/views/order/_form.php
Executable file
35
backend/modules/order/views/order/_form.php
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\ActiveForm;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Order $model */
|
||||||
|
/** @var yii\widgets\ActiveForm $form */
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="order-form">
|
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(); ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'user_id')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'table_id')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'strength')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'amount')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'status')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'created_at')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'updated_at')->textInput() ?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php ActiveForm::end(); ?>
|
||||||
|
|
||||||
|
</div>
|
20
backend/modules/order/views/order/create.php
Executable file
20
backend/modules/order/views/order/create.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Order $model */
|
||||||
|
|
||||||
|
$this->title = 'Create Order';
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Orders', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="order-create">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
47
backend/modules/order/views/order/index.php
Executable file
47
backend/modules/order/views/order/index.php
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use common\models\Order;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\helpers\Url;
|
||||||
|
use yii\grid\ActionColumn;
|
||||||
|
use yii\grid\GridView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var yii\data\ActiveDataProvider $dataProvider */
|
||||||
|
|
||||||
|
$this->title = 'Orders';
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="order-index">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Create Order', ['create'], ['class' => 'btn btn-success']) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<?= GridView::widget([
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
'columns' => [
|
||||||
|
['class' => 'yii\grid\SerialColumn'],
|
||||||
|
|
||||||
|
'id',
|
||||||
|
'user_id',
|
||||||
|
'table_id',
|
||||||
|
'strength',
|
||||||
|
'amount',
|
||||||
|
//'status',
|
||||||
|
//'created_at',
|
||||||
|
//'updated_at',
|
||||||
|
[
|
||||||
|
'class' => ActionColumn::className(),
|
||||||
|
'urlCreator' => function ($action, Order $model, $key, $index, $column) {
|
||||||
|
return Url::toRoute([$action, 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]); ?>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
21
backend/modules/order/views/order/update.php
Executable file
21
backend/modules/order/views/order/update.php
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Order $model */
|
||||||
|
|
||||||
|
$this->title = 'Update Order: ' . $model->id;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Orders', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]];
|
||||||
|
$this->params['breadcrumbs'][] = 'Update';
|
||||||
|
?>
|
||||||
|
<div class="order-update">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
43
backend/modules/order/views/order/view.php
Executable file
43
backend/modules/order/views/order/view.php
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\DetailView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Order $model */
|
||||||
|
|
||||||
|
$this->title = $model->id;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Orders', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
\yii\web\YiiAsset::register($this);
|
||||||
|
?>
|
||||||
|
<div class="order-view">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
|
||||||
|
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
|
||||||
|
'class' => 'btn btn-danger',
|
||||||
|
'data' => [
|
||||||
|
'confirm' => 'Are you sure you want to delete this item?',
|
||||||
|
'method' => 'post',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?= DetailView::widget([
|
||||||
|
'model' => $model,
|
||||||
|
'attributes' => [
|
||||||
|
'id',
|
||||||
|
'user_id',
|
||||||
|
'table_id',
|
||||||
|
'strength',
|
||||||
|
'amount',
|
||||||
|
'status',
|
||||||
|
'created_at',
|
||||||
|
'updated_at',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
24
backend/modules/product/Product.php
Executable file
24
backend/modules/product/Product.php
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\product;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* product module definition class
|
||||||
|
*/
|
||||||
|
class Product extends \yii\base\Module
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public $controllerNamespace = 'app\modules\product\controllers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
|
||||||
|
// custom initialization code goes here
|
||||||
|
}
|
||||||
|
}
|
20
backend/modules/product/controllers/DefaultController.php
Executable file
20
backend/modules/product/controllers/DefaultController.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\product\controllers;
|
||||||
|
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default controller for the `product` module
|
||||||
|
*/
|
||||||
|
class DefaultController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Renders the index view for the module
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
return $this->render('index');
|
||||||
|
}
|
||||||
|
}
|
151
backend/modules/product/controllers/ProductController.php
Executable file
151
backend/modules/product/controllers/ProductController.php
Executable file
@ -0,0 +1,151 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\product\controllers;
|
||||||
|
|
||||||
|
use common\models\Product;
|
||||||
|
use yii\data\ActiveDataProvider;
|
||||||
|
use yii\web\Controller;
|
||||||
|
use yii\web\NotFoundHttpException;
|
||||||
|
use yii\filters\VerbFilter;
|
||||||
|
use yii\web\UploadedFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ProductController implements the CRUD actions for Product model.
|
||||||
|
*/
|
||||||
|
class ProductController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function behaviors()
|
||||||
|
{
|
||||||
|
return array_merge(
|
||||||
|
parent::behaviors(),
|
||||||
|
[
|
||||||
|
'verbs' => [
|
||||||
|
'class' => VerbFilter::className(),
|
||||||
|
'actions' => [
|
||||||
|
'delete' => ['POST'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all Product models.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
$dataProvider = new ActiveDataProvider([
|
||||||
|
'query' => Product::find(),
|
||||||
|
/*
|
||||||
|
'pagination' => [
|
||||||
|
'pageSize' => 50
|
||||||
|
],
|
||||||
|
'sort' => [
|
||||||
|
'defaultOrder' => [
|
||||||
|
'id' => SORT_DESC,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
*/
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $this->render('index', [
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a single Product model.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionView($id)
|
||||||
|
{
|
||||||
|
return $this->render('view', [
|
||||||
|
'model' => $this->findModel($id),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Product model.
|
||||||
|
* If creation is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
*/
|
||||||
|
public function actionCreate()
|
||||||
|
{
|
||||||
|
$model = new Product();
|
||||||
|
|
||||||
|
if ($this->request->isPost) {
|
||||||
|
$model->load($this->request->post());
|
||||||
|
if (UploadedFile::getInstance($model, 'photo')) {
|
||||||
|
$model->photo = UploadedFile::getInstance($model, 'photo');
|
||||||
|
$model->photo->saveAs("@frontend/web/images/product/{$model->photo->baseName}.{$model->photo->extension}");
|
||||||
|
$model->photo = '/frontend/web/images/product/' . $model->photo->baseName . $model->photo->extension;
|
||||||
|
}
|
||||||
|
if ($model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$model->loadDefaultValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('create', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates an existing Product model.
|
||||||
|
* If update is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionUpdate($id)
|
||||||
|
{
|
||||||
|
$model = $this->findModel($id);
|
||||||
|
|
||||||
|
if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('update', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes an existing Product model.
|
||||||
|
* If deletion is successful, the browser will be redirected to the 'index' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return \yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionDelete($id)
|
||||||
|
{
|
||||||
|
$this->findModel($id)->delete();
|
||||||
|
|
||||||
|
return $this->redirect(['index']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the Product model based on its primary key value.
|
||||||
|
* If the model is not found, a 404 HTTP exception will be thrown.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return Product the loaded model
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
protected function findModel($id)
|
||||||
|
{
|
||||||
|
if (($model = Product::findOne(['id' => $id])) !== null) {
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotFoundHttpException('The requested page does not exist.');
|
||||||
|
}
|
||||||
|
}
|
12
backend/modules/product/views/default/index.php
Executable file
12
backend/modules/product/views/default/index.php
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
<div class="product-default-index">
|
||||||
|
<h1><?= $this->context->action->uniqueId ?></h1>
|
||||||
|
<p>
|
||||||
|
This is the view content for action "<?= $this->context->action->id ?>".
|
||||||
|
The action belongs to the controller "<?= get_class($this->context) ?>"
|
||||||
|
in the "<?= $this->context->module->id ?>" module.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You may customize this page by editing the following file:<br>
|
||||||
|
<code><?= __FILE__ ?></code>
|
||||||
|
</p>
|
||||||
|
</div>
|
66
backend/modules/product/views/product/_form.php
Executable file
66
backend/modules/product/views/product/_form.php
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use kartik\widgets\FileInput;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\ActiveForm;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Product $model */
|
||||||
|
/** @var yii\widgets\ActiveForm $form */
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="product-form">
|
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(); ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'type')->dropDownList(
|
||||||
|
$model::TypesWithLabels(),
|
||||||
|
[
|
||||||
|
'prompt' => 'Выберите Тип...',
|
||||||
|
]
|
||||||
|
) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'description')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'price')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'status')->dropDownList([1 => 'Активен', 0 => 'Не активен'])?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'photo')->widget(FileInput::class, [
|
||||||
|
'pluginOptions' => [
|
||||||
|
'showZoom' => false,
|
||||||
|
'initialPreview' => [
|
||||||
|
$model->photo != null ? Html::img('@frontend/web/images/product/' . $model->photo, ['class' => 'file-preview-image']) : null,
|
||||||
|
],
|
||||||
|
'overwriteInitial' => true,
|
||||||
|
'showCaption' => false,
|
||||||
|
'showUpload' => false,
|
||||||
|
'showRemove' => true,
|
||||||
|
'showDetails' => true,
|
||||||
|
'browseClass' => 'btn btn-primary btn-block',
|
||||||
|
'browseIcon' => '<i class="fa fa-camera"></i> ',
|
||||||
|
'browseLabel' => 'Выберите фото',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'quantity')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'taste')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'strength')->dropDownList(
|
||||||
|
$model::TabacooStrengthWithLabel()
|
||||||
|
) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'category_id')->dropDownList(
|
||||||
|
\yii\helpers\ArrayHelper::map(\common\models\Category::find()->asArray()->all(), 'id', 'name')
|
||||||
|
) ?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php ActiveForm::end(); ?>
|
||||||
|
|
||||||
|
</div>
|
20
backend/modules/product/views/product/create.php
Executable file
20
backend/modules/product/views/product/create.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Product $model */
|
||||||
|
|
||||||
|
$this->title = 'Create Product';
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Products', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="product-create">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
49
backend/modules/product/views/product/index.php
Executable file
49
backend/modules/product/views/product/index.php
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use common\models\Product;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\helpers\Url;
|
||||||
|
use yii\grid\ActionColumn;
|
||||||
|
use yii\grid\GridView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var yii\data\ActiveDataProvider $dataProvider */
|
||||||
|
|
||||||
|
$this->title = 'Products';
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="product-index">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Create Product', ['create'], ['class' => 'btn btn-success']) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<?= GridView::widget([
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
'columns' => [
|
||||||
|
['class' => 'yii\grid\SerialColumn'],
|
||||||
|
|
||||||
|
'id',
|
||||||
|
'type',
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'price',
|
||||||
|
//'status',
|
||||||
|
//'quantity',
|
||||||
|
//'taste',
|
||||||
|
//'strength',
|
||||||
|
//'category_id',
|
||||||
|
[
|
||||||
|
'class' => ActionColumn::className(),
|
||||||
|
'urlCreator' => function ($action, Product $model, $key, $index, $column) {
|
||||||
|
return Url::toRoute([$action, 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]); ?>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
21
backend/modules/product/views/product/update.php
Executable file
21
backend/modules/product/views/product/update.php
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Product $model */
|
||||||
|
|
||||||
|
$this->title = 'Update Product: ' . $model->name;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Products', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->id]];
|
||||||
|
$this->params['breadcrumbs'][] = 'Update';
|
||||||
|
?>
|
||||||
|
<div class="product-update">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
45
backend/modules/product/views/product/view.php
Executable file
45
backend/modules/product/views/product/view.php
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\DetailView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Product $model */
|
||||||
|
|
||||||
|
$this->title = $model->name;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Products', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
\yii\web\YiiAsset::register($this);
|
||||||
|
?>
|
||||||
|
<div class="product-view">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
|
||||||
|
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
|
||||||
|
'class' => 'btn btn-danger',
|
||||||
|
'data' => [
|
||||||
|
'confirm' => 'Are you sure you want to delete this item?',
|
||||||
|
'method' => 'post',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?= DetailView::widget([
|
||||||
|
'model' => $model,
|
||||||
|
'attributes' => [
|
||||||
|
'id',
|
||||||
|
'type',
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'price',
|
||||||
|
'status',
|
||||||
|
'quantity',
|
||||||
|
'taste',
|
||||||
|
'strength',
|
||||||
|
'category_id',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
24
backend/modules/table/Table.php
Executable file
24
backend/modules/table/Table.php
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* table module definition class
|
||||||
|
*/
|
||||||
|
class Table extends \yii\base\Module
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public $controllerNamespace = 'app\modules\table\controllers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
|
||||||
|
// custom initialization code goes here
|
||||||
|
}
|
||||||
|
}
|
20
backend/modules/table/controllers/DefaultController.php
Executable file
20
backend/modules/table/controllers/DefaultController.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\table\controllers;
|
||||||
|
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default controller for the `table` module
|
||||||
|
*/
|
||||||
|
class DefaultController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Renders the index view for the module
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
return $this->render('index');
|
||||||
|
}
|
||||||
|
}
|
144
backend/modules/table/controllers/TableController.php
Executable file
144
backend/modules/table/controllers/TableController.php
Executable file
@ -0,0 +1,144 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\modules\table\controllers;
|
||||||
|
|
||||||
|
use common\models\Table;
|
||||||
|
use yii\data\ActiveDataProvider;
|
||||||
|
use yii\web\Controller;
|
||||||
|
use yii\web\NotFoundHttpException;
|
||||||
|
use yii\filters\VerbFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TableController implements the CRUD actions for Table model.
|
||||||
|
*/
|
||||||
|
class TableController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function behaviors()
|
||||||
|
{
|
||||||
|
return array_merge(
|
||||||
|
parent::behaviors(),
|
||||||
|
[
|
||||||
|
'verbs' => [
|
||||||
|
'class' => VerbFilter::className(),
|
||||||
|
'actions' => [
|
||||||
|
'delete' => ['POST'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all Table models.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
$dataProvider = new ActiveDataProvider([
|
||||||
|
'query' => Table::find(),
|
||||||
|
/*
|
||||||
|
'pagination' => [
|
||||||
|
'pageSize' => 50
|
||||||
|
],
|
||||||
|
'sort' => [
|
||||||
|
'defaultOrder' => [
|
||||||
|
'id' => SORT_DESC,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
*/
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $this->render('index', [
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a single Table model.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionView($id)
|
||||||
|
{
|
||||||
|
return $this->render('view', [
|
||||||
|
'model' => $this->findModel($id),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Table model.
|
||||||
|
* If creation is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
*/
|
||||||
|
public function actionCreate()
|
||||||
|
{
|
||||||
|
$model = new Table();
|
||||||
|
|
||||||
|
if ($this->request->isPost) {
|
||||||
|
if ($model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$model->loadDefaultValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('create', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates an existing Table model.
|
||||||
|
* If update is successful, the browser will be redirected to the 'view' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return string|\yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionUpdate($id)
|
||||||
|
{
|
||||||
|
$model = $this->findModel($id);
|
||||||
|
|
||||||
|
if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
|
||||||
|
return $this->redirect(['view', 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('update', [
|
||||||
|
'model' => $model,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes an existing Table model.
|
||||||
|
* If deletion is successful, the browser will be redirected to the 'index' page.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return \yii\web\Response
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
public function actionDelete($id)
|
||||||
|
{
|
||||||
|
$this->findModel($id)->delete();
|
||||||
|
|
||||||
|
return $this->redirect(['index']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the Table model based on its primary key value.
|
||||||
|
* If the model is not found, a 404 HTTP exception will be thrown.
|
||||||
|
* @param int $id ID
|
||||||
|
* @return Table the loaded model
|
||||||
|
* @throws NotFoundHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
protected function findModel($id)
|
||||||
|
{
|
||||||
|
if (($model = Table::findOne(['id' => $id])) !== null) {
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotFoundHttpException('The requested page does not exist.');
|
||||||
|
}
|
||||||
|
}
|
12
backend/modules/table/views/default/index.php
Executable file
12
backend/modules/table/views/default/index.php
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
<div class="table-default-index">
|
||||||
|
<h1><?= $this->context->action->uniqueId ?></h1>
|
||||||
|
<p>
|
||||||
|
This is the view content for action "<?= $this->context->action->id ?>".
|
||||||
|
The action belongs to the controller "<?= get_class($this->context) ?>"
|
||||||
|
in the "<?= $this->context->module->id ?>" module.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You may customize this page by editing the following file:<br>
|
||||||
|
<code><?= __FILE__ ?></code>
|
||||||
|
</p>
|
||||||
|
</div>
|
29
backend/modules/table/views/table/_form.php
Executable file
29
backend/modules/table/views/table/_form.php
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\ActiveForm;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Table $model */
|
||||||
|
/** @var yii\widgets\ActiveForm $form */
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="table-form">
|
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(); ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'places')->textInput() ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'type')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<?= $form->field($model, 'slug')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php ActiveForm::end(); ?>
|
||||||
|
|
||||||
|
</div>
|
20
backend/modules/table/views/table/create.php
Executable file
20
backend/modules/table/views/table/create.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Table $model */
|
||||||
|
|
||||||
|
$this->title = 'Create Table';
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Tables', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="table-create">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
44
backend/modules/table/views/table/index.php
Executable file
44
backend/modules/table/views/table/index.php
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use common\models\Table;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\helpers\Url;
|
||||||
|
use yii\grid\ActionColumn;
|
||||||
|
use yii\grid\GridView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var yii\data\ActiveDataProvider $dataProvider */
|
||||||
|
|
||||||
|
$this->title = 'Tables';
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
?>
|
||||||
|
<div class="table-index">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Create Table', ['create'], ['class' => 'btn btn-success']) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<?= GridView::widget([
|
||||||
|
'dataProvider' => $dataProvider,
|
||||||
|
'columns' => [
|
||||||
|
['class' => 'yii\grid\SerialColumn'],
|
||||||
|
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'places',
|
||||||
|
'type',
|
||||||
|
'slug',
|
||||||
|
[
|
||||||
|
'class' => ActionColumn::className(),
|
||||||
|
'urlCreator' => function ($action, Table $model, $key, $index, $column) {
|
||||||
|
return Url::toRoute([$action, 'id' => $model->id]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]); ?>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
21
backend/modules/table/views/table/update.php
Executable file
21
backend/modules/table/views/table/update.php
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Table $model */
|
||||||
|
|
||||||
|
$this->title = 'Update Table: ' . $model->name;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Tables', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->id]];
|
||||||
|
$this->params['breadcrumbs'][] = 'Update';
|
||||||
|
?>
|
||||||
|
<div class="table-update">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<?= $this->render('_form', [
|
||||||
|
'model' => $model,
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
40
backend/modules/table/views/table/view.php
Executable file
40
backend/modules/table/views/table/view.php
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
use yii\widgets\DetailView;
|
||||||
|
|
||||||
|
/** @var yii\web\View $this */
|
||||||
|
/** @var common\models\Table $model */
|
||||||
|
|
||||||
|
$this->title = $model->name;
|
||||||
|
$this->params['breadcrumbs'][] = ['label' => 'Tables', 'url' => ['index']];
|
||||||
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
|
\yii\web\YiiAsset::register($this);
|
||||||
|
?>
|
||||||
|
<div class="table-view">
|
||||||
|
|
||||||
|
<h1><?= Html::encode($this->title) ?></h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
|
||||||
|
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
|
||||||
|
'class' => 'btn btn-danger',
|
||||||
|
'data' => [
|
||||||
|
'confirm' => 'Are you sure you want to delete this item?',
|
||||||
|
'method' => 'post',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?= DetailView::widget([
|
||||||
|
'model' => $model,
|
||||||
|
'attributes' => [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'places',
|
||||||
|
'type',
|
||||||
|
'slug',
|
||||||
|
],
|
||||||
|
]) ?>
|
||||||
|
|
||||||
|
</div>
|
2
backend/runtime/.gitignore
vendored
Executable file
2
backend/runtime/.gitignore
vendored
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
10
backend/tests/_bootstrap.php
Executable file
10
backend/tests/_bootstrap.php
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
<?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';
|
0
backend/tests/_data/.gitignore
vendored
Executable file
0
backend/tests/_data/.gitignore
vendored
Executable file
13
backend/tests/_data/login_data.php
Executable file
13
backend/tests/_data/login_data.php
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
<?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',
|
||||||
|
],
|
||||||
|
];
|
2
backend/tests/_output/.gitignore
vendored
Executable file
2
backend/tests/_output/.gitignore
vendored
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
1
backend/tests/_support/.gitignore
vendored
Executable file
1
backend/tests/_support/.gitignore
vendored
Executable file
@ -0,0 +1 @@
|
|||||||
|
_generated
|
26
backend/tests/_support/FunctionalTester.php
Executable file
26
backend/tests/_support/FunctionalTester.php
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
<?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
|
||||||
|
*/
|
||||||
|
}
|
26
backend/tests/_support/UnitTester.php
Executable file
26
backend/tests/_support/UnitTester.php
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
<?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
|
||||||
|
*/
|
||||||
|
}
|
5
backend/tests/functional.suite.yml
Executable file
5
backend/tests/functional.suite.yml
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
suite_namespace: backend\tests\functional
|
||||||
|
actor: FunctionalTester
|
||||||
|
modules:
|
||||||
|
enabled:
|
||||||
|
- Yii2
|
44
backend/tests/functional/LoginCest.php
Executable file
44
backend/tests/functional/LoginCest.php
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
<?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');
|
||||||
|
}
|
||||||
|
}
|
16
backend/tests/functional/_bootstrap.php
Executable file
16
backend/tests/functional/_bootstrap.php
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
<?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');
|
||||||
|
* ```
|
||||||
|
*/
|
2
backend/tests/unit.suite.yml
Executable file
2
backend/tests/unit.suite.yml
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
suite_namespace: backend\tests\unit
|
||||||
|
actor: UnitTester
|
16
backend/tests/unit/_bootstrap.php
Executable file
16
backend/tests/unit/_bootstrap.php
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
<?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');
|
||||||
|
* ```
|
||||||
|
*/
|
33
backend/views/layouts/blank.php
Executable file
33
backend/views/layouts/blank.php
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
<?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();
|
42
backend/views/layouts/content.php
Executable file
42
backend/views/layouts/content.php
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
/* @var $content string */
|
||||||
|
|
||||||
|
use yii\bootstrap4\Breadcrumbs;
|
||||||
|
?>
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<!-- Content Header (Page header) -->
|
||||||
|
<div class="content-header">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row mb-2">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<h1 class="m-0">
|
||||||
|
<?php
|
||||||
|
if (!is_null($this->title)) {
|
||||||
|
echo \yii\helpers\Html::encode($this->title);
|
||||||
|
} else {
|
||||||
|
echo \yii\helpers\Inflector::camelize($this->context->id);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</h1>
|
||||||
|
</div><!-- /.col -->
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<?php
|
||||||
|
echo Breadcrumbs::widget([
|
||||||
|
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
|
||||||
|
'options' => [
|
||||||
|
'class' => 'breadcrumb float-sm-right'
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
?>
|
||||||
|
</div><!-- /.col -->
|
||||||
|
</div><!-- /.row -->
|
||||||
|
</div><!-- /.container-fluid -->
|
||||||
|
</div>
|
||||||
|
<!-- /.content-header -->
|
||||||
|
|
||||||
|
<!-- Main content -->
|
||||||
|
<div class="content">
|
||||||
|
<?= $content ?><!-- /.container-fluid -->
|
||||||
|
</div>
|
||||||
|
<!-- /.content -->
|
||||||
|
</div>
|
5
backend/views/layouts/control-sidebar.php
Executable file
5
backend/views/layouts/control-sidebar.php
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
<!-- Control Sidebar -->
|
||||||
|
<aside class="control-sidebar control-sidebar-dark">
|
||||||
|
<!-- Control sidebar content goes here -->
|
||||||
|
</aside>
|
||||||
|
<!-- /.control-sidebar -->
|
7
backend/views/layouts/footer.php
Executable file
7
backend/views/layouts/footer.php
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
<footer class="main-footer">
|
||||||
|
<strong>Copyright © 2014-2021 <a href="https://adminlte.io">AdminLTE.io</a>.</strong>
|
||||||
|
All rights reserved.
|
||||||
|
<div class="float-right d-none d-sm-inline-block">
|
||||||
|
<b>Version</b> 3.1.0
|
||||||
|
</div>
|
||||||
|
</footer>
|
38
backend/views/layouts/main-login.php
Executable file
38
backend/views/layouts/main-login.php
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* @var $this \yii\web\View */
|
||||||
|
/* @var $content string */
|
||||||
|
|
||||||
|
\hail812\adminlte3\assets\AdminLteAsset::register($this);
|
||||||
|
$this->registerCssFile('https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700');
|
||||||
|
$this->registerCssFile('https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css');
|
||||||
|
\hail812\adminlte3\assets\PluginAsset::register($this)->add(['fontawesome', 'icheck-bootstrap']);
|
||||||
|
?>
|
||||||
|
<?php $this->beginPage() ?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="<?= Yii::$app->charset ?>">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<title>AdminLTE 3 | Log in</title>
|
||||||
|
<!-- Tell the browser to be responsive to screen width -->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<?php $this->registerCsrfMetaTags() ?>
|
||||||
|
<?php $this->head() ?>
|
||||||
|
</head>
|
||||||
|
<body class="hold-transition login-page">
|
||||||
|
<?php $this->beginBody() ?>
|
||||||
|
<div class="login-box">
|
||||||
|
<div class="login-logo">
|
||||||
|
<a href="<?=Yii::$app->homeUrl?>"><b>Admin</b>LTE</a>
|
||||||
|
</div>
|
||||||
|
<!-- /.login-logo -->
|
||||||
|
|
||||||
|
<?= $content ?>
|
||||||
|
</div>
|
||||||
|
<!-- /.login-box -->
|
||||||
|
|
||||||
|
<?php $this->endBody() ?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
<?php $this->endPage() ?>
|
54
backend/views/layouts/main.php
Executable file
54
backend/views/layouts/main.php
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* @var $this \yii\web\View */
|
||||||
|
/* @var $content string */
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
\hail812\adminlte3\assets\FontAwesomeAsset::register($this);
|
||||||
|
\hail812\adminlte3\assets\AdminLteAsset::register($this);
|
||||||
|
$this->registerCssFile('https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback');
|
||||||
|
|
||||||
|
$assetDir = Yii::$app->assetManager->getPublishedUrl('@vendor/almasaeed2010/adminlte/dist');
|
||||||
|
|
||||||
|
$publishedRes = Yii::$app->assetManager->publish('@vendor/hail812/yii2-adminlte3/src/web/js');
|
||||||
|
$this->registerJsFile($publishedRes[1].'/control_sidebar.js', ['depends' => '\hail812\adminlte3\assets\AdminLteAsset']);
|
||||||
|
?>
|
||||||
|
<?php $this->beginPage() ?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="<?= Yii::$app->language ?>">
|
||||||
|
<head>
|
||||||
|
<meta charset="<?= Yii::$app->charset ?>">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<?php $this->registerCsrfMetaTags() ?>
|
||||||
|
<title><?= Html::encode($this->title) ?></title>
|
||||||
|
<?php $this->head() ?>
|
||||||
|
</head>
|
||||||
|
<body class="hold-transition sidebar-mini">
|
||||||
|
<?php $this->beginBody() ?>
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
<!-- Navbar -->
|
||||||
|
<?= $this->render('navbar', ['assetDir' => $assetDir]) ?>
|
||||||
|
<!-- /.navbar -->
|
||||||
|
|
||||||
|
<!-- Main Sidebar Container -->
|
||||||
|
<?= $this->render('sidebar', ['assetDir' => $assetDir]) ?>
|
||||||
|
|
||||||
|
<!-- Content Wrapper. Contains page content -->
|
||||||
|
<?= $this->render('content', ['content' => $content, 'assetDir' => $assetDir]) ?>
|
||||||
|
<!-- /.content-wrapper -->
|
||||||
|
|
||||||
|
<!-- Control Sidebar -->
|
||||||
|
<?= $this->render('control-sidebar') ?>
|
||||||
|
<!-- /.control-sidebar -->
|
||||||
|
|
||||||
|
<!-- Main Footer -->
|
||||||
|
<?= $this->render('footer') ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php $this->endBody() ?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
<?php $this->endPage() ?>
|
26
backend/views/layouts/navbar.php
Executable file
26
backend/views/layouts/navbar.php
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
|
||||||
|
|
||||||
|
<!-- Right navbar links -->
|
||||||
|
<ul class="navbar-nav ml-auto">
|
||||||
|
<li class="nav-item">
|
||||||
|
<?= Html::a('<i class="fas fa-sign-out-alt"></i>', ['/site/logout'], ['data-method' => 'post', 'class' => 'nav-link']) ?>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" data-widget="fullscreen" href="#" role="button">
|
||||||
|
<i class="fas fa-expand-arrows-alt"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button">
|
||||||
|
<i class="fas fa-th-large"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<!-- /.navbar -->
|
47
backend/views/layouts/sidebar.php
Executable file
47
backend/views/layouts/sidebar.php
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
<aside class="main-sidebar sidebar-dark-primary elevation-4">
|
||||||
|
<!-- Brand Logo -->
|
||||||
|
<a href="index3.html" class="brand-link">
|
||||||
|
<img src="<?=$assetDir?>/img/AdminLTELogo.png" alt="AdminLTE Logo" class="brand-image img-circle elevation-3" style="opacity: .8">
|
||||||
|
<span class="brand-text font-weight-light">AdminLTE 3</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!-- Sidebar -->
|
||||||
|
<div class="sidebar">
|
||||||
|
<!-- Sidebar user panel (optional) -->
|
||||||
|
|
||||||
|
<!-- SidebarSearch Form -->
|
||||||
|
<!-- href be escaped -->
|
||||||
|
<!-- <div class="form-inline">
|
||||||
|
<div class="input-group" data-widget="sidebar-search">
|
||||||
|
<input class="form-control form-control-sidebar" type="search" placeholder="Search" aria-label="Search">
|
||||||
|
<div class="input-group-append">
|
||||||
|
<button class="btn btn-sidebar">
|
||||||
|
<i class="fas fa-search fa-fw"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<!-- Sidebar Menu -->
|
||||||
|
<nav class="mt-2">
|
||||||
|
<?php
|
||||||
|
echo \hail812\adminlte\widgets\Menu::widget([
|
||||||
|
'items' => [
|
||||||
|
['label' => 'Products', 'icon' => 'th', 'url' => ['/product/product']],
|
||||||
|
['label' => 'Categories', 'icon' => 'th', 'url' => ['/category/category']],
|
||||||
|
['label' => 'Orders', 'icon' => 'th', 'url' => ['/order/order']],
|
||||||
|
['label' => 'Tables', 'icon' => 'th', 'url' => ['/table/table']],
|
||||||
|
['label' => 'Banners', 'icon' => 'th', 'url' => ['/banner/banner']],
|
||||||
|
|
||||||
|
['label' => 'Yii2 PROVIDED', 'header' => true],
|
||||||
|
['label' => 'Login', 'url' => ['site/login'], 'icon' => 'sign-in-alt', 'visible' => Yii::$app->user->isGuest],
|
||||||
|
['label' => 'Gii', 'icon' => 'file-code', 'url' => ['/gii'], 'target' => '_blank'],
|
||||||
|
['label' => 'Debug', 'icon' => 'bug', 'url' => ['/debug'], 'target' => '_blank'],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
?>
|
||||||
|
</nav>
|
||||||
|
<!-- /.sidebar-menu -->
|
||||||
|
</div>
|
||||||
|
<!-- /.sidebar -->
|
||||||
|
</aside>
|
27
backend/views/site/error.php
Executable file
27
backend/views/site/error.php
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
<?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>
|
53
backend/views/site/index.php
Executable file
53
backend/views/site/index.php
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
<?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>
|
32
backend/views/site/login.php
Executable file
32
backend/views/site/login.php
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
<?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>
|
2
backend/web/assets/.gitignore
vendored
Executable file
2
backend/web/assets/.gitignore
vendored
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
90
backend/web/css/site.css
Executable file
90
backend/web/css/site.css
Executable file
@ -0,0 +1,90 @@
|
|||||||
|
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;
|
||||||
|
}
|
BIN
backend/web/favicon.ico
Executable file
BIN
backend/web/favicon.ico
Executable file
Binary file not shown.
After Width: | Height: | Size: 318 B |
9
codeception.yml
Executable file
9
codeception.yml
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
# global codeception file to run tests from all apps
|
||||||
|
include:
|
||||||
|
- common
|
||||||
|
- frontend
|
||||||
|
- backend
|
||||||
|
paths:
|
||||||
|
output: console/runtime/output
|
||||||
|
settings:
|
||||||
|
colors: true
|
20
common/classes/Debug.php
Executable file
20
common/classes/Debug.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace common\classes;
|
||||||
|
|
||||||
|
class Debug
|
||||||
|
{
|
||||||
|
public static function prn($content)
|
||||||
|
{
|
||||||
|
echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
|
||||||
|
print_r($content);
|
||||||
|
echo '</pre>';
|
||||||
|
}
|
||||||
|
public static function dd($content)
|
||||||
|
{
|
||||||
|
echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
|
||||||
|
print_r($content);
|
||||||
|
echo '</pre>';
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
}
|
15
common/codeception.yml
Executable file
15
common/codeception.yml
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
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'
|
4
common/config/.gitignore
vendored
Executable file
4
common/config/.gitignore
vendored
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
codeception-local.php
|
||||||
|
main-local.php
|
||||||
|
params-local.php
|
||||||
|
test-local.php
|
33
common/config/__autocomplete.php
Executable file
33
common/config/__autocomplete.php
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
<?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 {
|
||||||
|
}
|
5
common/config/bootstrap.php
Executable file
5
common/config/bootstrap.php
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
<?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');
|
13
common/config/main.php
Executable file
13
common/config/main.php
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'aliases' => [
|
||||||
|
'@bower' => '@vendor/bower-asset',
|
||||||
|
'@npm' => '@vendor/npm-asset',
|
||||||
|
],
|
||||||
|
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
|
||||||
|
'components' => [
|
||||||
|
'cache' => [
|
||||||
|
'class' => \yii\caching\FileCache::class,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
9
common/config/params.php
Executable file
9
common/config/params.php
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'adminEmail' => 'admin@example.com',
|
||||||
|
'supportEmail' => 'support@example.com',
|
||||||
|
'senderEmail' => 'noreply@example.com',
|
||||||
|
'senderName' => 'Example.com mailer',
|
||||||
|
'user.passwordResetTokenExpire' => 3600,
|
||||||
|
'user.passwordMinLength' => 8,
|
||||||
|
];
|
11
common/config/test.php
Executable file
11
common/config/test.php
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'id' => 'app-common-tests',
|
||||||
|
'basePath' => dirname(__DIR__),
|
||||||
|
'components' => [
|
||||||
|
'user' => [
|
||||||
|
'class' => \yii\web\User::class,
|
||||||
|
'identityClass' => 'common\models\User',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
10
common/fixtures/UserFixture.php
Executable file
10
common/fixtures/UserFixture.php
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace common\fixtures;
|
||||||
|
|
||||||
|
use yii\test\ActiveFixture;
|
||||||
|
|
||||||
|
class UserFixture extends ActiveFixture
|
||||||
|
{
|
||||||
|
public $modelClass = 'common\models\User';
|
||||||
|
}
|
16
common/mail/emailVerify-html.php
Executable file
16
common/mail/emailVerify-html.php
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
<?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>
|
12
common/mail/emailVerify-text.php
Executable file
12
common/mail/emailVerify-text.php
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
<?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 ?>
|
24
common/mail/layouts/html.php
Executable file
24
common/mail/layouts/html.php
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
<?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();
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user