Commit daf3bac0 authored by Виталий Мурашко's avatar Виталий Мурашко

Merge branch 'master' of http://git.task-on.com/ktask/task-on.com

parents 68a9ed2a 2c2d7846
......@@ -18,12 +18,19 @@ class AppAsset extends AssetBundle
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'plugins/bootstrap-datepicker/css/datepicker3.css',
'plugins/bootstrap-datetimepicker/css/datetimepicker.css',
'plugins/switchery/switchery.min.css',
'plugins/powerange/powerange.min.css',
'css/site.css',
];
public $js = [
'plugins/jquery-ui/ui/minified/jquery-ui.min.js',
'plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js',
'plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ru.js',
'plugins/tinymce/js/tinymce/tinymce.min.js',
];
public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
}
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace backend\assets;
use yii\web\AssetBundle;
/**
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class HeadAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
];
public $js = [
'plugins/switchery/switchery.min.js',
'plugins/powerange/powerange.min.js',
'js/form-slider-switcher.demo.min.js',
'js/apps.min.js',
'js/packages/adminBaseClasses/buttonSet.js',
'js/packages/adminBaseClasses/gridBase.js',
];
public $jsOptions = [
'position' => \yii\web\View::POS_HEAD
];
public $depends = [
];
}
......@@ -18,6 +18,7 @@ return [
'content' => ['class' => 'common\modules\content\Module'],
'bids' => ['class' => 'common\modules\bids\Module'],
'faq' => ['class' => 'common\modules\faq\Module'],
'blog' => ['class' => 'common\modules\blog\Module'],
'reviews' => ['class' => 'common\modules\reviews\Module'],
'users' => ['class' => 'common\modules\users\users'],
'testings' => ['class' => 'common\modules\testings\Module'],
......@@ -65,8 +66,6 @@ return [
'assetManager'=>[
'linkAssets' => true,
'bundles' => [
'yii\web\YiiAsset' => [
],
'yii\bootstrap\BootstrapPluginAsset' => [
'js' => [
],
......@@ -77,7 +76,7 @@ return [
'plugins/jquery/jquery-1.9.1.min.js',
],
'jsOptions' => [
'position' => \yii\web\View::POS_BEGIN,
'position' => \yii\web\View::POS_HEAD,
],
],
'yii\jui\JuiAsset' => [
......@@ -87,7 +86,7 @@ return [
'plugins/jquery-ui/ui/minified/jquery.ui.widget.min.js',
],
'jsOptions' => [
'position' => \yii\web\View::POS_BEGIN,
'position' => \yii\web\View::POS_HEAD,
],
'css' => [],
],
......
......@@ -13,7 +13,6 @@ use yii\filters\VerbFilter;
class SiteController extends Controller
{
public $page_title = 'SiteController';
/**
* @inheritdoc
......@@ -29,7 +28,7 @@ class SiteController extends Controller
'allow' => true,
],
[
'actions' => ['logout', 'index'],
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
......@@ -56,67 +55,28 @@ class SiteController extends Controller
];
}
public function actionIndex()
{
return $this->render('index');
}
public function actionLogin()
{
if (!\Yii::$app->user->isGuest) {
if (!\Yii::$app->user->isGuest)
{
return $this->goHome();
}
$this->page_title = 'Панель управления';
$this->layout = "blank";
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
if ($model->load(Yii::$app->request->post()) && $model->login())
{
return $this->goBack();
} else {
}
else
{
return $this->render('login', [
'model' => $model,
]);
}
}
public function actionLogin1()
{
if (!Yii::app()->user->isGuest)
{
throw new CException('Вы уже авторизованы!');
}
$this->layout = "//layouts/adminLogin";
$model = new User("Login");
$params = array(
"model" => $model,
"error_code" => null
);
if (isset($_POST["User"]))
{
$model->attributes = $_POST["User"];
if ($model->validate())
{
$identity = new UserIdentity($_POST["User"]["email"], $_POST["User"]["password"], $_POST["User"]["remember_me"]);
if ($identity->authenticate(false))
{
Yii::app()->user->setState("_allowToUseTiny", (Yii::app()->user->checkAccess('admin')));
$this->redirect($this->url("/main/mainAdmin"));
}
else
{
$params["error_code"] = $identity->errorCode;
}
}
}
$this->render("login", $params);
}
public function actionLogout()
{
......
<!-- ================== BEGIN BASE CSS STYLE ================== -->
<?php $this->registerCssFile('http://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/fonts.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/jquery-ui/themes/base/minified/jquery-ui.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/bootstrap/css/bootstrap.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/font-awesome/css/font-awesome.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/animate.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/style.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/style-responsive.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/theme/default.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/simple-line-icons/simple-line-icons.css', ['position' => \yii\web\View::POS_HEAD]);?>
<?php $this->registerCssFile('/css/custom.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<!-- ================== END BASE CSS STYLE ================== -->
<!-- ================== BEGIN PAGE LEVEL STYLE ================== -->
<?php $this->registerCssFile('/plugins/jquery-jvectormap/jquery-jvectormap-1.2.2.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/bootstrap-datepicker/css/datepicker.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/bootstrap-datepicker/css/datepicker3.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/gritter/css/jquery.gritter.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<!-- ================== END PAGE LEVEL STYLE ================== -->
<!-- ================== BEGIN PAGE LEVEL STYLE ================== -->
<?php $this->registerCssFile('/plugins/DataTables/css/data-table.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<!-- ================== END PAGE LEVEL STYLE ================== -->
<!-- ================== BEGIN BASE JS ================== -->
<?php $this->registerJsFile('/plugins/pace/pace.min.js', ['position' => \yii\web\View::POS_HEAD ]);?>
<!-- ================== END BASE JS ================== -->
<!-- ================== PagerSelector ================ -->
<?php
// moved in AdminGrid::run()
/*$publish = Yii::$app->assetManager->publish(
Yii::getAlias('@app/../common/js/plugins')
);
$this->registerJsFile($publish[1].'/gridview/gridBase.js', ['position'=>$this::POS_END]);
$this->registerJsFile($publish[1].'/gridview/grid.js', ['position'=>$this::POS_END]);
$this->registerJsFile($publish[1].'/gridview/pocket.js', ['position'=>$this::POS_END]);*/
?>
<!-- ================== PagerSelector ================ -->
\ No newline at end of file
<?php $this->registerCssFile('http://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/fonts.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/jquery-ui/themes/base/minified/jquery-ui.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/bootstrap/css/bootstrap.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/font-awesome/css/font-awesome.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/animate.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/style.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/style-responsive.min.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/css/theme/default.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/simple-line-icons/simple-line-icons.css', ['position' => \yii\web\View::POS_HEAD]);?>
<?php $this->registerCssFile('/css/custom.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/jquery-jvectormap/jquery-jvectormap-1.2.2.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/bootstrap-datepicker/css/datepicker.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/bootstrap-datepicker/css/datepicker3.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/gritter/css/jquery.gritter.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerCssFile('/plugins/DataTables/css/data-table.css', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerJsFile('/plugins/pace/pace.min.js', ['position' => \yii\web\View::POS_HEAD ]);?>
<?php $this->registerJsFile('/js/form-load.js', ['position' => \yii\web\View::POS_END ]);?>
<?php
use backend\assets\AppAsset;
use backend\assets;
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
......@@ -8,7 +8,8 @@ use yii\widgets\Breadcrumbs;
/* @var $this \yii\web\View */
/* @var $content string */
//die('-!-!-');
AppAsset::register($this);
assets\AppAsset::register($this);
assets\HeadAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
......@@ -69,8 +70,11 @@ AppAsset::register($this);
<a href="javascript:;"><img src="/img/user-13.jpg" alt="" /></a>
</div-->
<div class="info">
<?php echo \yii::$app->user->identity->name?>
<small><?php echo \yii::$app->user->identity->getPost()?></small>
<?php if(!\yii::$app->user->isGuest)
{
echo \yii::$app->user->identity->name ?>
<small><?php echo \yii::$app->user->identity->getPost()?></small>
<?php } ?>
</div>
</li>
</ul>
......
......@@ -119,4 +119,5 @@ a.desc:after {
}
.file-widget{
margin-bottom: 20px;
}
\ No newline at end of file
}
.control-label {min-width: 100px;}
\ No newline at end of file
Test
\ No newline at end of file
$(function() {
$('.datepicker-autoClose').datepicker({
dateFormat: 'dd.mm.yy',
todayHighlight: true,
regional: 'ru',
autoclose: true,
todayBtn: true
});
$('.datetimepicker-autoClose').datetimepicker({
todayHighlight: true,
language: 'ru',
autoclose: true,
todayBtn: true,
format: 'dd.mm.yyyy hh:ii'
});
FormSliderSwitcher.init();
tinymce.init({
selector: "textarea",theme: "modern",
language: "ru_RU",
custom_elements: "emstart,emend,header,main,span",
extended_valid_elements: "span[id|name|class|style],i[id|name|class|style],ul[id|name|class|style],li[id|name|class|style]",
height: '350px',
menubar: "edit insert view format table tools",
plugins: [
"advlist autolink link image code lists charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars insertdatetime media nonbreaking",
"table contextmenu directionality emoticons paste textcolor responsivefilemanager"
],
toolbar1: "undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | styleselect",
toolbar2: "| responsivefilemanager | link unlink anchor | image media | forecolor backcolor | print preview code ",
image_advtab: true ,
forced_root_block : false,
external_filemanager_path:"/filemanager/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: { "filemanager" : "/filemanager/plugin.min.js"}
});
});
<?php
use \common\components;
namespace common\components;
use Yii;
use yii\base\NotSupportedException;
use common\modules\users\models\User;
abstract class AdminController extends \common\components\BaseController
{
public $layout='//main';
public $layout = '//main';
public $tabs;
......@@ -17,23 +21,14 @@ abstract class AdminController extends \common\components\BaseController
{
parent::init();
$admin_url = $this->url('/users/userAdmin/login');
if(\Yii::$app->user->isGuest)
if(Yii::$app->user->isGuest)
{
$this->redirect('/site/login');
\Yii::$app->end();
return $this->redirect('/site/login');
}
if(\Yii::$app->user->identity->getRole() == 'user')
$this->redirect('/');
if (\Yii::$app->user->isGuest && $_SERVER['REQUEST_URI'] != $admin_url)
if(Yii::$app->user->identity->role != User::ROLE_ADMIN)
{
$this->redirect($admin_url);
throw new NotSupportedException('The requested page does not exist.');
}
$this->view->registerJsFile('/js/packages/adminBaseClasses/buttonSet.js');
$this->view->registerJsFile('/js/packages/adminBaseClasses/gridBase.js');
}
}
......@@ -94,7 +94,6 @@ abstract class BaseController extends Controller
private function _setMetaTags($action)
{
if ($action->id != 'view' || $this instanceof AdminController)
{
return false;
......@@ -126,7 +125,13 @@ abstract class BaseController extends Controller
{
$class = $this->getModelClass();
if($class == 'Faq')
{
$class = '\common\modules\faq\models\Faq';
}
elseif($class == 'Post')
{
$class = '\common\modules\blog\models\Post';
}
$page_model = new $class;
$page_model = $page_model::findOne(['url' => $url]);
......
......@@ -16,97 +16,6 @@ class BaseForm extends \yii\widgets\ActiveForm
public $cancel_button_show = true;
public function run() {
//parent::run();
//$out = ob_get_contents();
//ob_get_clean();
$view = $this->getView();
//ActiveFormAsset::register($view);
/*$view->registerCssFile('/plugins/bootstrap-datepicker/css/datepicker.css', ['position' => \yii\web\View::POS_HEAD ]);*/
$view->registerCssFile('/plugins/bootstrap-datepicker/css/datepicker3.css', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerCssFile('/plugins/bootstrap-datetimepicker/css/datetimepicker.css', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerCssFile('/plugins/switchery/switchery.min.css', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerCssFile('/plugins/powerange/powerange.min.css', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerJsFile('/js/form-plugins.demo.js', ['position' => \yii\web\View::POS_END ]);
// $view->registerJsFile('/plugins/bootstrap-datepicker/js/bootstrap-datepicker.js', ['position' => \yii\web\View::POS_END ]);
// $view->registerJsFile('/plugins/bootstrap-datepicker/js/locales/bootstrap-datepicker.ru.js', ['position' => \yii\web\View::POS_END ]);
$view->registerJsFile('/plugins/jquery-ui/ui/minified/jquery-ui.min.js', ['position' => \yii\web\View::POS_END ]);
$view->registerJsFile('/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js', ['position' => \yii\web\View::POS_END ]);
$view->registerJsFile('/plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ru.js', ['position' => \yii\web\View::POS_END ]);
$view->registerJsFile('/plugins/switchery/switchery.min.js', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerJsFile('/plugins/powerange/powerange.min.js', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerJsFile('/js/form-slider-switcher.demo.min.js', ['position' => \yii\web\View::POS_HEAD ]);
/*$view->registerJsFile('/plugins/ckeditor/ckeditor.js', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerJsFile('/plugins/ckeditor/config.js', ['position' => \yii\web\View::POS_HEAD ]);*/
//$view->registerJsFile('//tinymce.cachefly.net/4.1/tinymce.min.js', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerJsFile('/plugins/tinymce/js/tinymce/tinymce.min.js', ['position' => \yii\web\View::POS_END ]);
$view->registerJsFile('/js/apps.min.js', ['position' => \yii\web\View::POS_HEAD ]);
$js = <<<JS
/*"use strict";
$.fn.datepicker.defaults.format = "dd.mm.yyyy";
$.fn.datepicker.defaults.language= 'ru';*/
JS;
$view->registerJs($js, \yii\web\View::POS_END, 'formLoad1');
$js = <<<JS
//$('.datepicker-autoClose').datetimepicker({
"use strict";
$('.datepicker-autoClose').datepicker({
dateFormat: 'dd.mm.yy',
todayHighlight: true,
regional: 'ru',
autoclose: true,
todayBtn: true
});
$('.datetimepicker-autoClose').datetimepicker({
todayHighlight: true,
language: 'ru',
autoclose: true,
todayBtn: true,
format: 'dd.mm.yyyy hh:ii'
});
FormSliderSwitcher.init();
tinymce.init({
selector: "textarea",theme: "modern",
language: "ru_RU",
custom_elements: "emstart,emend,header,main,span",
extended_valid_elements: "span[id|name|class|style],i[id|name|class|style],ul[id|name|class|style],li[id|name|class|style]",
height: '350px',
menubar: "edit insert view format table tools",
plugins: [
"advlist autolink link image code lists charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars insertdatetime media nonbreaking",
"table contextmenu directionality emoticons paste textcolor responsivefilemanager"
],
toolbar1: "undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | styleselect",
toolbar2: "| responsivefilemanager | link unlink anchor | image media | forecolor backcolor | print preview code ",
image_advtab: true ,
forced_root_block : false,
external_filemanager_path:"/filemanager/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: { "filemanager" : "/filemanager/plugin.min.js"}
});
JS;
$view->registerJs($js, \yii\web\View::POS_READY, 'formLoad');
$view->registerCss(".control-label {min-width: 100px;}");
//return $out;
}
public function __construct($config, $model = null, $parent = null)
{
$this->model = $model;
......
......@@ -77,9 +77,20 @@ class LoginForm extends Model
*/
public function login()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
} else {
if ($this->validate())
{
$user = $this->getUser();
if(Yii::$app->id == 'app-backend' && $user->role != User::ROLE_ADMIN)
{
return false;
}
else
{
return Yii::$app->user->login($user, $this->rememberMe ? 3600 * 24 * 30 : 0);
}
}
else
{
return false;
}
}
......@@ -91,7 +102,8 @@ class LoginForm extends Model
*/
public function getUser()
{
if ($this->_user === false) {
if ($this->_user === false)
{
$this->_user = User::findByUsername($this->username);
}
......
<?php
namespace common\modules\blog;
/**
* blog module definition class
*/
class Module extends \common\components\WebModule
{
/**
* @inheritdoc
*/
public $controllerNamespace = 'common\modules\blog\controllers';
public $menu_icons = 'fa fa-file-o';
/**
* @inheritdoc
*/
public function init()
{
parent::init();
// custom initialization code goes here
}
public static function description()
{
return 'Блог';
}
public static function version()
{
return '1.0';
}
public static function name()
{
return 'Управление блогом';
}
public static function adminMenu()
{
return array(
'Записи' => '/blog/post-admin/manage',
);
}
}
<?php
namespace common\modules\blog\components;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use common\modules\blog\models\PostLang;
class PostLangBehavior extends Behavior
{
public function events()
{
return [
ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
];
}
public function Save($event)
{
$langs = Yii::$app->request->post('PostLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = PostLang::find()->where([
'post_id' => $this->owner->id,
'lang_id' => $lang_id,
])->one();
if (!$lang)
{
$lang = new PostLang;
}
$attributes['post_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$lang->setAttributes( $attributes );
if(!$lang->save()) die(print_r($lang->errors));
}
}
return true;
}
public function Insert($event)
{
$langs = Yii::$app->request->post('PostLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = new PostLang;
$attributes['post_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$lang->setAttributes($attributes);
$lang->save(false);
}
}
return true;
}
public function Delete($event)
{
if($this->owner->langs)
{
foreach ($this->owner->langs as $lang)
{
$lang->delete();
}
}
return true;
}
}
<?php
namespace common\modules\blog\controllers;
use Yii;
use common\components\AdminController;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use common\modules\languages\models\Languages;
use common\modules\blog\models\Post;
use common\modules\blog\models\PostLang;
use common\modules\blog\models\SearchPost;
/**
* PostAdminController implements the CRUD actions for Post model.
*/
class PostAdminController extends AdminController
{
public static function actionsTitles(){
return [
'Manage' => 'Управление записями',
'Create' => 'Добавление записи',
'Update' => 'Редактирование записи',
'Delete' => 'Удаление записи',
'View' => 'Просмотр записи',
];
}
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}
/**
* Lists all Post models.
* @return mixed
*/
public function actionManage()
{
$searchModel = new SearchPost();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('manage', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
/**
* Displays a single Post model.
* @param integer $id
* @return mixed
*/
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
/**
* Creates a new Post model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
{
$model = new Post();
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = new PostLang;
$lng->lang_id = $lang->id;
$langs[$lang->id] = $lng;
}
if (Yii::$app->request->isPost)
{
$model->attributes = Yii::$app->request->post('Post');
$transaction = Yii::$app->db->beginTransaction();
try
{
if($model->save())
{
$transaction->commit();
}
return $this->redirect(['manage']);
}
catch (\Exception $e)
{
$transaction->rollBack();
throw $e;
}
}
return $this->render('create', [
'model' => $model,
'langs' => $langs,
]);
}
/**
* Updates an existing Post model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = $model->getLang($lang->id)->one();
if(!$lng)
{
$lng = new PostLang;
$lng->lang_id = $lang->id;
}
$langs[$lang->id] = $lng;
}
if (Yii::$app->request->isPost)
{
$model->attributes = Yii::$app->request->post('Post');
$transaction = Yii::$app->db->beginTransaction();
try
{
if($model->save())
{
$transaction->commit();
}
return $this->redirect(['manage']);
}
catch (\Exception $e)
{
$transaction->rollBack();
throw $e;
}
}
return $this->render('update', [
'model' => $model,
'langs' => $langs,
]);
}
/**
* Deletes an existing Post model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$this->findModel($id)->delete();
return $this->redirect(['index']);
}
/**
* Finds the Post model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return Post the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
if (($model = Post::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}
<?php
namespace common\modules\blog\controllers;
use Yii;
use common\components\BaseController;
use yii\web\NotFoundHttpException;
use common\modules\blog\models\Post;
/**
* PostController implements the CRUD actions for Post model.
*/
class PostController extends BaseController
{
public static function actionsTitles(){
return [
'View' => 'Просмотр записи',
];
}
/**
* Displays a single Post model.
* @param string $url
* @return mixed
*/
public function actionView($url)
{
return $this->render('view', [
'model' => $this->findModelByUrl($url),
]);
}
/**
* Finds the Post model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param string $url
* @return Post the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModelByUrl($url)
{
if (($model = Post::find()->where(['url' => $url])->one()) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}
<?php
namespace common\modules\blog\models;
use Yii;
use common\modules\languages\models\Languages;
use common\modules\blog\models\PostLang;
use common\modules\blog\models\PostTags;
/**
* This is the model class for table "posts".
*
* @property integer $id
* @property string $url
* @property integer $active
* @property integer $created_at
* @property integer $updated_at
*
* @property PostsLang[] $postsLangs
* @property PostsTagsAssign[] $postsTagsAssigns
* @property PostsTags[] $tags
*/
class Post extends \common\components\ActiveRecordModel
{
const ACTIVE_FALSE = 0;
const ACTIVE_TRUE = 1;
public static $active_title = [
self::ACTIVE_FALSE => 'Скрыта',
self::ACTIVE_TRUE => 'Доступна',
];
/**
* @inheritdoc
*/
public static function tableName()
{
return 'posts';
}
public function name()
{
return 'Посты';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['url', 'active'], 'required'],
[['active', 'created_at', 'updated_at'], 'integer'],
[['url'], 'string', 'max' => 255],
[['url'], 'unique'],
];
}
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'langs' => [
'class' => 'common\modules\blog\components\PostLangBehavior',
],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'url' => 'Ссылка',
'active' => 'Видимость',
'created_at' => 'Дата добавления',
'updated_at' => 'Дата обновления',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getLang($lang_id = null)
{
$lang_id = ($lang_id === null)? Languages::getCurrent()->id: $lang_id;
return $this->hasOne(PostLang::className(), ['post_id' => 'id'])->where('lang_id = :lang_id', [':lang_id' => $lang_id]);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getLangs()
{
return $this->hasMany(PostLang::className(), ['post_id' => 'id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getTags()
{
return $this->hasMany(PostTags::className(), ['id' => 'tag_id'])->viaTable('posts_tags_assign', ['post_id' => 'id']);
}
}
<?php
namespace common\modules\blog\models;
use Yii;
use common\modules\languages\models\Languages;
use common\modules\blog\models\Post;
/**
* This is the model class for table "posts_lang".
*
* @property integer $id
* @property integer $post_id
* @property integer $lang_id
* @property string $title
* @property string $text
* @property integer $created_at
* @property integer $updated_at
*
* @property Posts $post
* @property Languages $lang
*/
class PostLang extends \common\components\ActiveRecordModel
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'posts_lang';
}
public function name()
{
return 'Языковые посты';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['post_id', 'lang_id'], 'required'],
[['post_id', 'lang_id', 'created_at', 'updated_at'], 'integer'],
[['text'], 'string'],
[['title'], 'string', 'max' => 255],
[['post_id'], 'exist', 'skipOnError' => true, 'targetClass' => Post::className(), 'targetAttribute' => ['post_id' => 'id']],
[['lang_id'], 'exist', 'skipOnError' => true, 'targetClass' => Languages::className(), 'targetAttribute' => ['lang_id' => 'id']],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'post_id' => 'Запись',
'lang_id' => 'Язык',
'title' => 'Заголовок',
'text' => 'Контент',
'created_at' => 'Дата добавления',
'updated_at' => 'Дата обновления',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getPost()
{
return $this->hasOne(Post::className(), ['id' => 'post_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getLang()
{
return $this->hasOne(Languages::className(), ['id' => 'lang_id']);
}
}
<?php
namespace common\modules\blog\models;
use Yii;
use common\modules\blog\models\Post;
/**
* This is the model class for table "posts_tags".
*
* @property integer $id
* @property string $name
* @property integer $created_at
* @property integer $updated_at
*
* @property PostsTagsAssign[] $postsTagsAssigns
* @property Posts[] $posts
*/
class PostTag extends \common\components\ActiveRecordModel
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'posts_tags';
}
public function name()
{
return 'Теги';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['name'], 'required'],
[['created_at', 'updated_at'], 'integer'],
[['name'], 'string', 'max' => 255],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'name' => 'Имя тега',
'created_at' => 'Дата добавления',
'updated_at' => 'Дата обновления',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getPosts()
{
return $this->hasMany(Post::className(), ['id' => 'post_id'])->viaTable('posts_tags_assign', ['tag_id' => 'id']);
}
}
<?php
namespace common\modules\blog\models;
use Yii;
use common\modules\blog\models\Post;
use common\modules\blog\models\PostTags;
/**
* This is the model class for table "posts_tags_assign".
*
* @property integer $id
* @property integer $tag_id
* @property integer $post_id
* @property integer $created_at
* @property integer $updated_at
*
* @property Posts $post
* @property PostsTags $tag
*/
class PostTagAssign extends \common\components\ActiveRecordModel
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'posts_tags_assign';
}
public function name()
{
return 'Связь тегов и постов';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['tag_id', 'post_id'], 'required'],
[['tag_id', 'post_id', 'created_at', 'updated_at'], 'integer'],
[['tag_id', 'post_id'], 'unique', 'targetAttribute' => ['tag_id', 'post_id'], 'message' => 'The combination of Tag ID and Post ID has already been taken.'],
[['post_id'], 'exist', 'skipOnError' => true, 'targetClass' => Post::className(), 'targetAttribute' => ['post_id' => 'id']],
[['tag_id'], 'exist', 'skipOnError' => true, 'targetClass' => PostTags::className(), 'targetAttribute' => ['tag_id' => 'id']],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'tag_id' => 'Тег',
'post_id' => 'Запись',
'created_at' => 'Дата добавления',
'updated_at' => 'Дата обновления',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getPost()
{
return $this->hasOne(Post::className(), ['id' => 'post_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getTag()
{
return $this->hasOne(PostTags::className(), ['id' => 'tag_id']);
}
}
<?php
namespace common\modules\blog\models;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use common\modules\blog\models\Post;
/**
* SearchPost represents the model behind the search form about `common\modules\blog\models\Post`.
*/
class SearchPost extends Post
{
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'active', 'created_at', 'updated_at'], 'integer'],
[['url'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = Post::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'active' => $this->active,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
]);
$query->andFilterWhere(['like', 'url', $this->url]);
return $dataProvider;
}
}
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model common\modules\blog\models\Post */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="post-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'url')->textInput(['maxlength' => 250])->hint('Для создания ЧПУ («Человеку Понятный Урл») укажите латинскими буквами путь, например, razdel/podrazdel/nazvanie_stranici.html') ?>
<?= $form->field($model, 'active', [
'template' => '{input}<a href="#" class="btn btn-xs btn-success m-l-5 disabled">Страница скрыта от пользователя / Страница видна пользователю</a>'
])->checkbox([
'data-theme' => 'self',
'data-render' => 'switchery',
'data-classname' => 'switchery',
'label' => ' '
], false); ?>
<ul class="nav nav-pills">
<?php $c = 0; foreach ($langs as $i => $content) : $c++; ?>
<li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$content->lang->url?>" data-toggle="tab"><?=$content->lang->name?></a></li>
<?php endforeach; ?>
</ul>
<div class="tab-content">
<?php $c = 0; foreach ($langs as $content) : $c++;
$lang_id = $content->lang->id; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$content->lang->url;?>">
<?= $form->field($content, '['.$lang_id.']title')->textInput(['maxlength' => 250])->hint('Заголовок страницы виден пользователю сайта и как правило оформляется в тег &lt;h1&gt;. Если дизайном страницы не предусмотрен вывод заголовка, то он не будет выводиться даже если был введен в данное поле.') ?>
<?= $form->field($content, '['.$lang_id.']text')->textArea() ?>
</div>
<?php endforeach; ?>
</div>
<div class="form-group">
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model common\modules\blog\models\SearchPost */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="post-search">
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>
<?= $form->field($model, 'id') ?>
<?= $form->field($model, 'url') ?>
<?= $form->field($model, 'active') ?>
<?= $form->field($model, 'created_at') ?>
<?= $form->field($model, 'updated_at') ?>
<div class="form-group">
<?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
<?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\modules\blog\models\Post */
$this->title = 'Create Post';
$this->params['breadcrumbs'][] = ['label' => 'Posts', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="post-create">
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs,
]) ?>
</div>
<?php
use yii\helpers\Html;
use yii\grid\GridView;
use common\modules\blog\models\Post;
/* @var $this yii\web\View */
/* @var $searchModel common\modules\blog\models\SearchPost */
/* @var $dataProvider yii\data\ActiveDataProvider */
$this->title = 'Posts';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="post-index">
<p>
<?= Html::a('Добавить', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
// ['class' => 'yii\grid\SerialColumn'],
'url:url',
[
'attribute' => 'active',
'filter' => Post::$active_title,
'value' => function($model)
{
return Post::$active_title[$model->active];
}
],
[
'class' => 'common\components\ColorActionColumn',
'template' => '{update} {delete}',
],
],
]); ?>
</div>
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\modules\blog\models\Post */
$this->title = 'Update Post: ' . ' ' . $model->id;
$this->params['breadcrumbs'][] = ['label' => 'Posts', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]];
$this->params['breadcrumbs'][] = 'Update';
?>
<div class="post-update">
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs,
]) ?>
</div>
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
/* @var $this yii\web\View */
/* @var $model common\modules\blog\models\Post */
$this->title = $model->id;
$this->params['breadcrumbs'][] = ['label' => 'Posts', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="post-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',
'url:url',
'active',
'created_at',
'updated_at',
],
]) ?>
</div>
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
/* @var $this yii\web\View */
/* @var $model common\modules\blog\models\Post */
$this->title = $model->id;
$this->params['breadcrumbs'][] = ['label' => 'Posts', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="post-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',
'url:url',
'active',
'created_at',
'updated_at',
],
]) ?>
</div>
......@@ -52,13 +52,13 @@ class CoBlocksLangBehavior extends Behavior
{
foreach ($langs as $lang_id => $attributes)
{
$meta_tag = new CoBlocksLang;
$lang = new CoBlocksLang;
$attributes['block_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$meta_tag->setAttributes($attributes);
$meta_tag->save(false);
$lang->setAttributes($attributes);
$lang->save(false);
}
}
......
......@@ -52,13 +52,13 @@ class CoContentLangBehavior extends Behavior
{
foreach ($langs as $lang_id => $attributes)
{
$meta_tag = new CoContentLang;
$lang = new CoContentLang;
$attributes['content_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$meta_tag->setAttributes($attributes);
$meta_tag->save(false);
$lang->setAttributes($attributes);
$lang->save(false);
}
}
......
......@@ -10,33 +10,6 @@ use common\modules\content\models\CoBlocks;
/* @var $model common\modules\content\models\CoBlocks */
/* @var $form yii\widgets\ActiveForm */
$this->registerJsFile('/plugins/tinymce/js/tinymce/tinymce.min.js', ['position' => \yii\web\View::POS_END ]);
$js = <<<JS
tinymce.init({
selector: "textarea",theme: "modern",
language: "ru_RU",
custom_elements: "emstart,emend,header,main,span",
extended_valid_elements: "span[id|name|class|style],i[id|name|class|style],ul[id|name|class|style],li[id|name|class|style]",
height: '350px',
menubar: "edit insert view format table tools",
plugins: [
"advlist autolink link image code lists charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars insertdatetime media nonbreaking",
"table contextmenu directionality emoticons paste textcolor responsivefilemanager"
],
toolbar1: "undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | styleselect",
toolbar2: "| responsivefilemanager | link unlink anchor | image media | forecolor backcolor | print preview code ",
image_advtab: true ,
forced_root_block : false,
external_filemanager_path:"/filemanager/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: { "filemanager" : "/filemanager/plugin.min.js"}
});
JS;
$this->registerJs($js, \yii\web\View::POS_READY, 'tinymceLoad');
?>
<div class="co-content-form">
......
......@@ -11,37 +11,6 @@ use common\modules\content\widgets\MetaTagsWidget;
/* @var $model common\modules\content\models\CoContent */
/* @var $form yii\widgets\ActiveForm */
$this->registerJsFile('/plugins/switchery/switchery.min.js', ['position' => \yii\web\View::POS_HEAD ]);
$this->registerCssFile('/plugins/switchery/switchery.min.css', ['position' => \yii\web\View::POS_HEAD ]);
$this->registerJsFile('/js/form-slider-switcher.demo.min.js', ['position' => \yii\web\View::POS_HEAD ]);
$this->registerJsFile('/plugins/tinymce/js/tinymce/tinymce.min.js', ['position' => \yii\web\View::POS_END ]);
$js = <<<JS
FormSliderSwitcher.init();
tinymce.init({
selector: "textarea",theme: "modern",
language: "ru_RU",
custom_elements: "emstart,emend,header,main,span",
extended_valid_elements: "span[id|name|class|style],i[id|name|class|style],ul[id|name|class|style],li[id|name|class|style]",
height: '350px',
menubar: "edit insert view format table tools",
plugins: [
"advlist autolink link image code lists charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars insertdatetime media nonbreaking",
"table contextmenu directionality emoticons paste textcolor responsivefilemanager"
],
toolbar1: "undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | styleselect",
toolbar2: "| responsivefilemanager | link unlink anchor | image media | forecolor backcolor | print preview code ",
image_advtab: true ,
forced_root_block : false,
external_filemanager_path:"/filemanager/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: { "filemanager" : "/filemanager/plugin.min.js"}
});
JS;
$this->registerJs($js, \yii\web\View::POS_READY, 'switcheryLoad');
$blocks = \common\modules\content\models\CoBlocks::find()->all();
?>
......
......@@ -95,10 +95,10 @@ class UserEAuth extends \common\components\ActiveRecordModel
// Assign service token
$modelEAuth = $model->eauth ? $model->eauth : new UserEauth();
$modelEAuth->user_id = $model->user_id;
$modelEAuth->user_id = $model->id;
$modelEAuth->{$eauthField} = $socialProfile['id'];
$modelEAuth->update(false, [$eauthField]);
echo '<pre>'; die(var_dump($model)); echo '</pre>';
return $model;
}
else {
......
......@@ -27,24 +27,32 @@ class RoleAdminController extends \common\components\AdminController
public function actionChangeaccess() {
if(!empty($_GET['user_id']) && !empty($_GET['item']) && !empty($_GET['op'])) {
if(!empty($_GET['user_id']) && !empty($_GET['item']) && !empty($_GET['op']))
{
$op = $_GET['op'];
$user_id = $_GET['user_id'];
$item = $_GET['item'];
$r = \yii::$app->authManager->getPermission($item);
if($op == 'assign')
if(!\yii::$app->authManager->checkAccess($user_id, $item)) {
{
if(!\yii::$app->authManager->checkAccess($user_id, $item))
{
\yii::$app->authManager->assign($r, $user_id);
echo 'assigned';
die();
}
}
else
if(\yii::$app->authManager->checkAccess($user_id, $item)) {
{
if(\yii::$app->authManager->checkAccess($user_id, $item))
{
\yii::$app->authManager->revoke($r, $user_id);
echo 'deassigned';
die();
}
}
}
}
......
......@@ -42,30 +42,11 @@ echo AdminGrid::widget([
$view = $this;
$view->registerJsFile('/plugins/switchery/switchery.min.js', ['position' => \yii\web\View::POS_END ]);
$view->registerJsFile('/plugins/powerange/powerange.min.js', ['position' => \yii\web\View::POS_END ]);
$view->registerJsFile('/js/form-slider-switcher.demo.min.js', ['position' => \yii\web\View::POS_END ]);
$view->registerCssFile('/plugins/switchery/switchery.min.css', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerCssFile('/plugins/powerange/powerange.min.css', ['position' => \yii\web\View::POS_HEAD ]);
$view->registerCss('.table.table-striped.table-bordered.dataTable.DTFC_Cloned .sc.sortt.ui-sortable tr {height: 59px;}');
$tbl = <<<JS
var TableManageFixedColumns = function () {
"use strict";
return {
//main function
init: function () {
FormSliderSwitcher.init();
}
};
}();
JS;
$view->registerJs($tbl, $view::POS_END);
$url = \yii\helpers\Url::toRoute('changeaccess');
$js = <<<JS
TableManageFixedColumns.init();
$(document).on("click","span.switchery", function(){
var state = $(this).prev().attr("checked");
var user_id = $(this).prev().attr("user-id");
......
<?php
namespace common\modules\users\controllers;
use Yii;
use yii\filters\VerbFilter;
use yii\helpers\Url;
use yii\web\NotFoundHttpException;
use yii\filters\AccessControl;
use himiklab\sortablegrid\SortableGridAction;
use common\modules\users\models\User;
use common\models\LoginForm;
use common\modules\users\forms\UserForm;
use common\modules\rbac\models\AuthAssignment;
use yii\filters\AccessControl;
use Yii;
use yii\filters\VerbFilter;
use himiklab\sortablegrid\SortableGridAction;
class UserAdminController extends \common\components\AdminController
{
public static function actionsTitles()
{
return array(
"Login" => "Авторизация",
"Manage" => !empty($_GET['is_deleted'])?"Удаленные пользователи":"Все пользователи",
"View" => "Просмотр пользователя",
"Create" => "Добавление пользователя",
......@@ -24,16 +25,21 @@ class UserAdminController extends \common\components\AdminController
"Delete" => "Безвозвратное удаление пользователя",
"SendNewPassword" => "Безвозвратное удаление пользователя",
"SetDeletedFlag" => "Удаление и восстановление пользователя",
"ImportCSV" => "Импорт пользователей из CSV-файла",
"ImportCSV1" => "Импорт пользо",
"Test" => "Импорт пользо",
"Import" => "Импорт пользователей из CSV-файла",
"Captcha" => "",
"Sort" => "",
"Block" => "",
);
}
public function actions()
{
return [
'sort' => [
'class' => \himiklab\sortablegrid\SortableGridAction::className(),
'modelName' => \common\modules\users\models\User::className(),
],
];
}
/**
* @inheritdoc
*/
......@@ -72,19 +78,7 @@ class UserAdminController extends \common\components\AdminController
$this->redirect(['/rbac/role-admin/manage']);
}
public function actions()
{
return [
'captcha' => [
'class' => '\yii\captcha\CaptchaAction',
//'captchaAction' => '/users/user-admin/captcha',
],
'sort' => [
'class' => \himiklab\sortablegrid\SortableGridAction::className(),
'modelName' => \common\modules\users\models\User::className(),
],
];
}
public function actionSendNewPassword($id)
{
......@@ -131,175 +125,6 @@ class UserAdminController extends \common\components\AdminController
$this->render('sendNewPassword', array('form' => $form));
}
public function actionImport()
{
$olds = UserOld::model()->findAll();
$new = new User;
$auth = Yii::app()->authManager;
//add role
foreach ($olds as $old)
{
if ($new->findByAttributes(array('login'=> $old->login)))
{
continue;
}
$new->isNewRecord = true;
$new->id = null;
if ($old->howtoappeal == 'Уважаемая')
{
$new->gender = 'men';
}
elseif ($old->howtoappeal == 'Уважаемый')
{
$new->gender = 'women';
}
else
{
}
//city
$city = City::model()->findByAttributes(array('name'=> $old->city));
if (!$city)
{
$city = new City;
$city->name = $old->city;
$city->save();
}
$new->city_id = $city->id;
$new->password = md5($old->pass);
$new->status = $old->isAct = 1 ? 'active' : 'new';
$new->date_create = date('Y-m-d H:i:s', strtotime($old->regdate));
$fields = array(
'company' => 'company',
'delflag' => 'is_deleted',
'post' => 'post',
'name' => 'first_name',
'surname' => 'last_name',
'patron' => 'patronymic',
'email' => 'email',
'login' => 'login',
'postindex' => 'postindex',
'address' => 'address',
'phone1' => 'phone',
'phone2' => 'phone_ext',
'fax' => 'fax',
);
foreach ($fields as $key=> $val)
{
$new->$val = $old->$key;
}
$new->save(false);
switch ($old->grid)
{
case 1:
$role = 'schneider_electric';
break;
case 2:
$role = 'diller';
break;
case 4:
$role = 'residential';
break;
case 5:
$role = 'test';
continue;
break;
case 6:
$role = 'eds';
break;
case 7:
$role = 'e_commerce';
break;
case 8:
$role = 'admin_sertifikate';
break;
case 9:
$role = 'admin';
break;
case 11:
$role = 'do_dor';
break;
case 15:
$role = 'urezanni_dostup';
break;
case 20:
$role = 'prom_partners';
break;
case 21:
$role = 'admin_sklad';
break;
case 22:
$role = 'si';
break;
case 24:
$role = 'admin_tarif';
break;
}
$auth->assign($role, $new->id);
}
}
public function actionLogin()
{
if (!Yii::app()->user->isGuest)
{
throw new CException('Вы уже авторизованы!');
}
$this->layout = "//layouts/adminLogin";
$model = new User("Login");
$params = array(
"model" => $model,
"error_code" => null
);
if (isset($_POST["User"]))
{
$model->attributes = $_POST["User"];
if ($model->validate())
{
$identity = new UserIdentity($_POST["User"]["email"], $_POST["User"]["password"], $_POST["User"]["remember_me"]);
if ($identity->authenticate(false))
{
Yii::app()->user->setState("_allowToUseTiny", (Yii::app()->user->checkAccess('admin')));
$this->redirect($this->url("/main/mainAdmin"));
}
else
{
$params["error_code"] = $identity->errorCode;
}
}
}
$this->render("login", $params);
}
public function actionTest(){
$items = array();
$model = AuthAssignment::model()->findAll();
foreach($model as $item){
$items[$item->userid][] = $item->itemname;
}
foreach($items as $key=>$value){
if(count($value)>1){
print_r($value);
echo $key.'<br/>';}
}
}
public function actionManage($is_deleted = 0)
{
......@@ -330,27 +155,40 @@ class UserAdminController extends \common\components\AdminController
));
}
private function saveEmailToNewUser($user, $password)
{
$body = Setting::getValue('email_to_new_user');
$subject = Setting::getValue('email_to_new_user_subject');
$mailer_letter = MailerLetter::model();
$body = $mailer_letter->compileText($body, array(
'gender' => 'Уважаемый(ая)',
'user' => $user,
'password' => $password
));
MailerModule::sendMail($user->email, $subject, $body);
}
public function actionCreate()
{
$model = new User;
$model->scenario = User::SCENARIO_CREATE;
$model->status = "active";
$model->role = "manager";
if (!isset($_POST['User']))
$model->send_email = true;
$form = '';
$this->performAjaxValidation($model);
if (!isset($_POST['User']))
{
$model->send_email = true;
}
\Yii::$app->controller->page_title = 'Добавить пользователя';
\Yii::$app->controller->page_title = 'Добавить пользователя';
\Yii::$app->controller->tabs = array(
"управление пользователями" => Url::toRoute("manage"),
);
\yii::$app->controller->breadcrumbs = [
['Все пользователи' => '/users/user-admin/manage'],
'Новый пользователь',
];
\Yii::$app->controller->tabs = array(
"управление пользователями" => Url::toRoute("manage"),
);
\yii::$app->controller->breadcrumbs = [
['Все пользователи' => '/users/user-admin/manage'],
'Новый пользователь',
];
if (isset($_POST['User']))
{
......@@ -361,68 +199,32 @@ if (!isset($_POST['User']))
$password = $model->password;
$model->password = \Yii::$app->security->generatePasswordHash($model->password);
$model->activate_code=\Yii::$app->security->generatePasswordHash($model->password.'xdf5sf');
$model->activate_code=\Yii::$app->security->generatePasswordHash($model->password.'xdf5sf');
if(!$model->save(false)) die(print_r($model->error));
/*$assignment = new AuthAssignment();
$assignment->item_name = $model->role;
$assignment->user_id = $model->id;
$assignment->save();*/
/*if ($model->send_email)
{
//$this->saveEmailToNewUser($model, $password);
$email = Yii::app()->email;
$email->to = $model->email;
$email->from = Setting::getValue('admin_email');
$email->subject = 'Авторизация пользователя на '.Setting::getValue('site_url');
if($model->status == "new")
$email->message = Yii::app()->controller->renderInternal(Yii::getPathOfAlias('application.views.yii-mail.activate').'.php', array('activateCode' => $model->activate_code,'user' => $model,'password' => $password), true);
if($model->status == "active")
$email->message = Yii::app()->controller->renderInternal(Yii::getPathOfAlias('application.views.yii-mail.active_already').'.php', array('activateCode' => $model->activate_code,'user' => $model,'password' => $password), true);
$email->send();
}*/
$this->redirect(array(
'/rbac/role-admin/manage',
'id' => $model->id,
'is_created'=>1
));
}
//else die(print_r($model->errors));
}
$form = new \common\components\BaseForm('/common/modules/users/forms/UserForm', $model);
return $this->render('create', array('form' => $form->out, 'model' => $model));
}
private function saveEmailToNewUser($user, $password)
{
$body = Setting::getValue('email_to_new_user');
$subject = Setting::getValue('email_to_new_user_subject');
$mailer_letter = MailerLetter::model();
$body = $mailer_letter->compileText($body, array(
'gender' => 'Уважаемый(ая)',
'user' => $user,
'password' => $password
));
MailerModule::sendMail($user->email, $subject, $body);
return $this->render('create', [
'form' => $form->out,
'model' => $model
]);
}
public function actionUpdate($id)
{
$model = $this->loadModel($id);
$model->password_c = $model->password;
$model->password_c = $model->password = null;
$model->scenario = User::SCENARIO_UPDATE;
$model->role = $model->getRole();
$old_password = $model->password;
$this->performAjaxValidation($model);
\yii::$app->controller->page_title = 'Редактирование пользователя <small>' . $model->name.'</small>';
......@@ -458,31 +260,21 @@ if (!isset($_POST['User']))
));
}
}
//die(print_r(\yii::getAlias($this->module->id)));
$form = new \common\components\BaseForm('/common/modules/users/forms/UserForm', $model);
//$form = ActiveFormMy::widget(['options'=>]);
//$form = '\common\modules\users\forms\UserForm';
//unset($form->spsFields['captcha']);
//die(print_r($form->out));
return $this->render('update', array(
'form' => $form->out,
'model' => $model,
));
}
public function actionDelete($id)
{
$model = User::find()->where(['id'=>$id])->one();
$model->delete();
$this->findModel($id)->delete();
if (!isset($_GET['ajax']))
{
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : ['/rbac/role-admin/manage']);
}
return $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : ['/rbac/role-admin/manage']);
}
public function actionSetDeletedFlag($id, $is_deleted)
{
$model = $this->loadModel($id);
......@@ -491,115 +283,22 @@ if (!isset($_POST['User']))
$model->date_delete = new CDbExpression('NOW()');
$model->save(false);
$this->redirect($this->createUrl('manage'));
return $this->redirect($this->createUrl('manage'));
}
public function actionImportCSV()
/**
* Finds the Faq model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return Faq the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
$model = User::model();
$model->scenario = User::SCENARIO_CSV_IMPORT;
$form = new BaseForm('users.ImportCSVForm', $model);
$params = array('form' => $form);
if (isset($_POST['User']))
{
$model->attributes = $_POST['User'];
if ($model->validate())
{
$csv_file = CUploadedFile::getInstance($model, 'csv_file');
$labels = array('gender', 'last_name', 'first_name', 'patronymic', 'company', 'city_id', 'postindex', 'address', 'email', 'login', 'password', 'post', 'phone', 'phone_ext', 'fax', 'status');
$users = array();
$attr_labels = $model->attributeLabels();
$resource = CSVHelper::open($csv_file->tempName);
$data = CSVHelper::fgetcsv($resource);
$data = CSVHelper::fgetcsv($resource);
try {
while ($data = CSVHelper::fgetcsv($resource)) {
if (count($data) < 2) break;
if (!($data[0] || $data[1] || $data[2] || $data[3] || $data[4])) continue;
if (!$labels) {
$labels = $data;
foreach ($labels as $i => $label) {
$labels[$i] = in_array($label, $attr_labels) ? array_search($label, $attr_labels) : null;
}
continue;
}
$user = array();
foreach ($data as $i => $value) {
if (!$labels[$i]) continue;
$user[$labels[$i]] = $value;
}
$users[] = $user;
}
$params = array('attr_labels' => $attr_labels, 'users' => $users, 'send_email' => $model->send_email);
} catch (Exception $e){
echo 'Импорт прошел неудачно, проверьте структуру файла-шаблона:' . $e->getMessage();
}
}
if (($model = User::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
else if (isset($_POST['users']))
{
$count = 0;
foreach ($_POST['users'] as $data)
{
if (!isset($data['checked'])) continue;
$count++;
$user = User::model()->findByAttributes(array('login' => $data['login']));
if ($user===null)
$user = new User;
$user->attributes = $data;
$user->validate();
if ($data['password']) {
$user->password = md5($data['password']);
} else {
$data['password'] = PasswordGenerator::generate(7);
$user->password = md5($data['password']);
}
if ($data['gender'])
$user->gender = in_array($data['gender'], array('м', 'М', 'm', 'M')) ? User::GENDER_MAN : User::GENDER_WOMAN;
$city_id = trim($data['city_id']);
if (!empty($city_id))
{
$city = City::model()->findByAttributes(array('name' => $city_id));
if (!$city)
{
$city = new City;
$city->name = $city_id;
$city->save();
}
}
$user->is_deleted = 0;
$user->save(false);
if ($_POST['send_email'])
$this->saveEmailToNewUser($user, $data['password']);
if (!Yii::app()->authManager->isAssigned($_POST['role'], $user->id))
Yii::app()->authManager->assign($_POST['role'], $user->id);
}
Yii::app()->user->setFlash('import_done', "Импорт данных завершен! Импортировано: $count записей");
}
$this->render('importCSV', $params);
}
}
\ No newline at end of file
......@@ -110,9 +110,11 @@ class UserController extends \common\components\BaseController {
}
public function actionRegistration() {
public function actionRegistration()
{
$model = new User();
$model->scenario = User::SCENARIO_REGISTRATION;
$model->role = User::ROLE_USER;
if (isset($_POST['User'])) {
$model->attributes = $_POST['User'];
......
<?php
use common\modules\rbac\models\AuthItem;
// use common\modules\rbac\models\AuthItem;
use common\modules\users\models\User;
use yii\helpers\ArrayHelper;
// use yii\helpers\ArrayHelper;
$roles = AuthItem::find(
['type' => AuthItem::TYPE_ROLE],
"name != '" . AuthItem::ROLE_GUEST . "'"
)->all();
// $roles = AuthItem::find(
// ['type' => AuthItem::TYPE_ROLE],
// "name != '" . AuthItem::ROLE_GUEST . "'"
// )->all();
return [
'activeForm'=>[
'id' => 'user-form',
'class' => 'ActiveForm',
'options' => ['class' => 'form-horizontal'],
'fieldConfig' => [
// 'template' => '<div class="form-group">{label}<div class="col-md-9">{input}</div><div class="col-md-9">{error}</div></div>',
'labelOptions' => ['class' => 'col-md-3 control-label'],
],
'enableAjaxValidation' => false,
// 'htmlOptions'=>['class'=>'registr'),
],
'elements' => [
'send_email' => ['type' => 'checkbox'],
......@@ -30,11 +22,6 @@ return [
'phone' => ['type' => 'text', 'class' => 'form-control'],
'mobile_phone' => ['type' => 'text', 'class' => 'form-control'],
'skype' => ['type' => 'text', 'class' => 'form-control'],
/*'status' => [
'type' => 'dropdownlist',
'items' => User::$status_list,
'class' => 'form-control',
],*/
'status' => [
'type' => 'checkbox',
'value' => 'active',
......@@ -45,16 +32,11 @@ return [
],
'role' => [
'type' => 'dropdownlist',
'items' => ArrayHelper::map($roles, 'name', 'description'),
'items' => User::$role_list,
'class' => 'form-control',
],
'password' => ['type' => 'password', 'class' => 'form-control', 'pwd-id' => 'passwordStrengthDiv'],
'password_c' => ['type' => 'password', 'class' => 'form-control', 'pwd-id' => 'passwordStrengthDiv2'],
/*'captcha' => [
'type' => 'captcha',
'label' => 'Введите код с картинки',
'class' => 'form-control'
],*/
],
'buttons' => [
'sp1' => ['type' => 'htmlBlock', 'value' => '<div class="col-md-8 col-sm-6" style="padding-left: 0;">',],
......
......@@ -30,6 +30,9 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
const STATUS_NEW = 'new';
const STATUS_BLOCKED = 'blocked';
const ROLE_ADMIN = 'admin';
const ROLE_USER = 'user';
const GENDER_MAN = "man";
const GENDER_WOMAN = "woman";
......@@ -56,25 +59,21 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
const SCENARIO_SOCIAL_REGISTRATION = 'SocialRegistration';
const SOURCE_DEFAULT = 'direct';
// public $email;
public $role;
public $password_c;
public $captcha;
public $remember_me = false;
public $activate_error;
// public $activate_code;
// public $checked;
public $csv_file;
public $send_email;
public $generate_new;
// public $fio;
// public $phone;
// public $mobile_phone;
// public $skype;
public $tmp; //for external using. no delete!
// public $post;
public $profile;
public static $role_list = [
self::ROLE_ADMIN => 'Доступ в админ-панель',
self::ROLE_USER => 'Доступ к сайту',
];
public static $occupation_list = [
self::OCCUPATION_CHIEF_IT => 'Руководитель в IT сфере',
......@@ -268,11 +267,16 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
]);
}
public function getPost() {
public function getPost()
{
if(!empty($this->post))
{
return $this->post;
}
else
{
return 'Должность не определена';
}
}
/**
......@@ -430,28 +434,6 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
{
$this->activate_code = md5($this->id . $this->name . $this->email . time(true) . rand(5, 10));
}
public function getRole()
{
// $auth = AuthItem::find()->joinWith('assignment', true)
// ->andWhere(['rule_name' => 'group'])
// ->andWhere(['auth_assignment.user_id' => $this->id])
// ->one();
//
// return $auth->name;
$assigment = AuthAssignment::find(['userid' => $this->id])->one();
if (!$assigment)
{
$assigment = new AuthAssignment();
$assigment->item_name = AuthItem::ROLE_DEFAULT;
$assigment->user_id = $this->id;
$assigment->save(false);
}
return $assigment->role;
return 'admin';
}
public function getRoleName()
{
......@@ -472,13 +454,11 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
return $out;
}
public function isRootRole()
{
return $this->role->name == AuthItem::ROLE_ROOT;
}
public function sendActivationMail()
{
$mailler_letter = MailerLetter::model();
......
<style type="text/css">
.old_value {
text-decoration: line-through;
color: #990000;
}
</style>
<?php if (isset($form)): ?>
<?php if (Yii::app()->user->hasFlash('import_done')): ?>
<?php echo $this->msg(Yii::app()->user->getFlash('import_done'), 'ok'); ?>
<?php endif ?>
<span style="font-size: 14px; color: #008C66;">Краткая инструкция по файла реестра пользователей</span><br /><br />
<div>
Для загрузки реестра пользователей на сайт необходимо:
<ol>
<ul>1. заполнить <a href="/upload/users/users.xls">шаблон</a> в формате MS Excel. Поля для назначения тестов имеют формат "да/нет".</ul>
<ul>2. сохранить файл как CSV (разделители-запятые)</ul>
<ul>3. выбрать группу пользователей из раскрывающегося списка выше</ul>
<ul>4. загрузить файл на сайт c помощью кнопки ниже</ul>
</ol>
<span style="color: red;">Важно!</span> Не используйте клавишу ENTER для перевода строки при заполнении шаблона. Если это необходимо, пользуйтесь вместо этого тегом <strong><span style="color: red">&lt;br&gt;</span></strong>.
<?php echo $form; ?>
<?php endif ?>
<?php if (isset($users)): ?>
<form method="post">
<input type="hidden" name="role" value="<?php echo $_POST['User']['role'] ?>" />
<input type="hidden" name="send_email" value="<?php echo $_POST['User']['send_email'] ?>" />
<?php
$model = User::model();
$model->scenario = User::SCENARIO_CSV_IMPORT;
?>
<?php foreach ($users as $i => $user): ?>
<?php
$user["password"] = isset($user["password"]) ? $user["password"] : PasswordGenerator::generate(6);
$object = $model->findByAttributes(array('login' => trim($user['login'])));
if ($object)
{
foreach ($object->attributes as $attr => $value)
{
if (isset($user[$attr]) && ($user[$attr] != $value))
{
if ($attr == 'password')
{
$user[$attr] = trim($user[$attr]);
if (empty($user[$attr]))
{
$object->$attr = null;
continue;
}
if (md5($user[$attr]) != $object->$attr)
{
$object->$attr = "<div class='old_value'>{$value}</div> <br/> {$user[$attr]}";
}
else
{
$object->$attr = $user[$attr];
}
}
else if ($attr == 'city_id')
{
if ($object->city)
{
if ($user[$attr] && $user[$attr] != $object->city->name)
{
$object->$attr = "<div class='old_value'>{$object->city->name}</div> <br/> {$user[$attr]}";
}
else
{
$object->$attr = $object->city->name;
}
}
}
else
{
$object->$attr = "<div class='old_value'>{$value}</div><br/> {$user[$attr]}";
}
}
}
}
else
{
$object = new User;
$object->attributes = $user;
$object->password = $user["password"];
}
$checked = 'checked';
?>
<h3 style="color: <?php echo $object->isNewRecord ? 'green' : 'orange' ?>">
<input type="checkbox" name='users[<?php echo $i; ?>][checked]'<?php echo $object->isNewRecord ? $checked : ''; ?>> &nbsp;
<?php echo $object->isNewRecord ? 'Будет добавлено' : 'Будет отредактировано'; ?>
</h3>
<?php
$this->widget('application.components.DetailView', array(
'data' => $object,
'attributes' => array(
'last_name:raw',
'first_name:raw',
'patronymic:raw',
'email:raw',
'login:raw',
'password:raw',
'phone:raw',
'phone_ext:raw',
'fax:raw',
array('name' => 'city_id', 'type' => 'raw', 'value' => isset($model->city) ? $model->city->name : null),
'company:raw',
'post:raw',
'address:raw',
),
));
?>
<?php foreach ($user as $label => $value): ?>
<input type='hidden' name='users[<?php echo $i; ?>][<?php echo $label; ?>]' value='<?php echo $value; ?>' />
<?php endforeach ?>
<br/>
<?php endforeach ?>
<input type="submit" value="Обновить" class="submit mid" />
</form>
<?php endif ?>
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160209_151440_add_table_blog extends Migration
{
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
$this->createTable('posts', [
'id' => Schema::TYPE_PK,
'url' => Schema::TYPE_STRING.'(255) NOT NULL',
'active' => Schema::TYPE_INTEGER.'(1) NOT NULL',
'created_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
'updated_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
]);
$this->createIndex('posts_url_unique', 'posts', 'url', true);
$this->createTable('posts_lang', [
'id' => Schema::TYPE_PK,
'post_id' => Schema::TYPE_INTEGER.'(11) NOT NULL',
'lang_id' => Schema::TYPE_INTEGER.'(11) NOT NULL',
'title' => Schema::TYPE_STRING.'(255) DEFAULT NULL',
'text' => 'longtext DEFAULT NULL',
'created_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
'updated_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
]);
$this->createTable('posts_tags', [
'id' => Schema::TYPE_PK,
'name' => Schema::TYPE_STRING.'(255) NOT NULL',
'created_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
'updated_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
]);
$this->createIndex('posts_tags_index', 'posts_tags', 'name');
$this->createTable('posts_tags_assign', [
'id' => Schema::TYPE_PK,
'tag_id' => Schema::TYPE_INTEGER.'(11) NOT NULL',
'post_id' => Schema::TYPE_INTEGER.'(11) NOT NULL',
'created_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
'updated_at' => Schema::TYPE_INTEGER.'(11) DEFAULT NULL',
]);
$this->createIndex('posts_tags_assign_tag_id_post_id_unique', 'posts_tags_assign', ['tag_id', 'post_id'], true);
$this->addForeignKey(
'fk_posts_lang_lang_id_languages_id',
'posts_lang', 'lang_id',
'languages', 'id'
);
$this->addForeignKey(
'fk_posts_lang_posts_id_post_id',
'posts_lang', 'post_id',
'posts', 'id'
);
$this->addForeignKey(
'fk_posts_tags_assign_tag_id_posts_tags_id',
'posts_tags_assign', 'tag_id',
'posts_tags', 'id'
);
$this->addForeignKey(
'fk_posts_tags_assign_post_id_posts_id',
'posts_tags_assign', 'post_id',
'posts', 'id'
);
}
public function safeDown()
{
$this->dropForeignKey('fk_posts_lang_lang_id_languages_id', 'posts_lang');
$this->dropForeignKey('fk_posts_lang_posts_id_post_id', 'posts_lang');
$this->dropForeignKey('fk_posts_tags_assign_tag_id_posts_tags_id', 'posts_tags_assign');
$this->dropForeignKey('fk_posts_tags_assign_post_id_posts_id', 'posts_tags_assign');
$this->dropIndex('posts_tags_index', 'posts_tags');
$this->dropIndex('posts_url_unique', 'posts');
$this->dropIndex('posts_tags_assign_tag_id_post_id_unique', 'posts_tags_assign');
$this->dropTable('posts');
$this->dropTable('posts_lang');
$this->dropTable('posts_tags');
$this->dropTable('posts_tags_assign');
}
}
......@@ -23,6 +23,7 @@ return [
'bids' => ['class' => 'common\modules\bids\Module'],
'testings' => ['class' => 'common\modules\testings\Module',],
'users' => ['class' => 'common\modules\users\users',],
'blog' => ['class' => 'common\modules\blog\Module'],
'sitemap' => [
'class' => 'himiklab\sitemap\Sitemap',
'models' => [
......@@ -152,6 +153,7 @@ return [
'faq/view/all' => 'faq/faq/all',
'faq/<url>' => 'faq/faq/view',
'faq' => 'faq/faq/index',
'blog/<url>' => 'blog/post/view',
'school' => 'school/course/index',
'school/course/<id>' => 'school/course/view',
'school/lesson/<id>' => 'school/lesson/view',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment