Commit 104c36ae authored by Shakarim Sapa's avatar Shakarim Sapa

Merge remote-tracking branch 'origin/master'

parents 2223b811 a01fd672
......@@ -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;
......
......@@ -2,12 +2,13 @@
namespace common\components;
use common\modules\languages\models\Languages;
use common\modules\content\models\CoContent;
class UrlManager extends \yii\web\UrlManager {
public function parseRequest($request)
{
$pages = \common\modules\content\models\CoContent::find()->all();
$pages = CoContent::find()->where(['active' => true])->all();
$rules = [];
foreach($pages as $page)
......
<?php
namespace common\components\activeRecordBehaviors;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use yii\web\UploadedFile;
class FileUploadBehavior extends Behavior
{
public $path;
public $folder;
public $file;
public $unlinkFile = false;
public $field;
public function events()
{
return [
ActiveRecord::EVENT_BEFORE_UPDATE => 'Save',
ActiveRecord::EVENT_BEFORE_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
];
}
private function getAbsolutePath()
{
return Yii::getAlias($this->path);
}
private function uploadFile()
{
if(!file_exists($this->getAbsolutePath()))
{
mkdir($this->getAbsolutePath(), 0777, true);
}
$field = $this->field;
$this->owner->$field = $this->folder . date('dmYHis-') . uniqid() . '.' . $this->file->extension;
$this->file->saveAs($this->getAbsolutePath() . $this->owner->$field);
}
private function deleteFile()
{
$field = $this->field;
if($this->owner->$field && file_exists($this->getAbsolutePath() . $this->owner->$field))
{
unlink($this->getAbsolutePath() . $this->owner->$field);
$this->owner->$field = null;
}
}
public function Save($event)
{
$this->file = UploadedFile::getInstance($this->owner, 'file');
if($this->owner->unlinkFile || $this->file)
{
$this->deleteFile();
}
if($this->file)
{
$this->uploadFile();
}
return true;
}
public function Insert($event)
{
$this->file = UploadedFile::getInstance($this->owner, 'file');
if($this->file)
{
$this->uploadFile();
}
return true;
}
public function Delete($event)
{
$this->deleteFile();
return true;
}
}
<?php
namespace common\components\activeRecordBehaviors;
use yii;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use \common\models\MetaTags;
use common\modules\languages\models\Languages;
class MetaTagBehavior extends Behavior
{
public $meta;
public function events()
{
return [
ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
ActiveRecord::EVENT_INIT => 'eventInit',
ActiveRecord::EVENT_AFTER_FIND => 'eventFind',
ActiveRecord::EVENT_AFTER_UPDATE => 'eventSave',
ActiveRecord::EVENT_AFTER_INSERT => 'eventInsert',
ActiveRecord::EVENT_BEFORE_DELETE => 'eventDelete',
];
}
public function Save($event)
public function eventInit($event)
{
$langs = Languages::find()->all();
if($this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$mt = new MetaTags;
$mt->lang_id = $lang->id;
$this->meta[$lang->id] = $mt;
}
}
}
public function eventFind($event)
{
$langs = Languages::find()->all();
if(!$this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$mt = $this->owner->getMetaTags($lang->id)->one();
if(!$mt)
{
$mt = new MetaTags;
$mt->lang_id = $lang->id;
}
$this->meta[$lang->id] = $mt;
}
}
}
public function eventSave($event)
{
$meta = \Yii::$app->request->post('MetaTags');
if ($meta)
......@@ -46,7 +89,7 @@ class MetaTagBehavior extends Behavior
return true;
}
public function Insert($event)
public function eventInsert($event)
{
$meta = \Yii::$app->request->post('MetaTags');
if ($meta)
......@@ -67,7 +110,7 @@ class MetaTagBehavior extends Behavior
return true;
}
public function Delete($event)
public function eventDelete($event)
{
if($this->owner->metaTags)
{
......
......@@ -32,6 +32,7 @@ class LoginForm extends Model
['phone','safe'],
// password is validated by validatePassword()
['password', 'validatePassword'],
['username', 'validateStatus'],
];
}
......@@ -52,6 +53,23 @@ class LoginForm extends Model
}
}
/**
* Validates the status.
* This method serves as the inline validation for status.
*
* @param string $attribute the attribute currently being validated
* @param array $params the additional name-value pairs given in the rule
*/
public function validateStatus($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if ($user->status != User::STATUS_ACTIVE) {
$this->addError($attribute, 'Пожалуйста, активируйте свой аккаунт.');
}
}
}
/**
* Logs in a user using the provided username and password.
*
......@@ -59,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;
}
}
......@@ -73,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\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();
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,
]);
}
/**
* 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);
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,
]);
}
/**
* 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;
use common\models\MetaTags;
/**
* 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'],
[['preview', 'unlinkFile'], 'safe'],
[['file'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg, gif'],
];
}
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'meta' => [
'class' => 'common\components\activeRecordBehaviors\MetaTagBehavior',
],
'langs' => [
'class' => 'common\modules\languages\components\LanguageHelperBehavior',
'field' => 'post_id',
'langClass' => 'common\modules\blog\models\PostLang',
'actions' => ['create', 'update']
],
'file' => [
'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior',
'path' => '@frontend/web',
'folder' => '/uploads/blog/',
'field' => 'preview'
],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'url' => 'Ссылка',
'active' => 'Видимость',
'file' => 'Изображение',
'preview' => 'Изображение',
'unlinkFile' => 'Удалить изображение',
'created_at' => 'Дата добавления',
'updated_at' => 'Дата обновления',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getMetaTags($lang_id = null)
{
$query = $this->hasMany(MetaTags::className(), ['object_id' => 'id'])->where(['model_id' => get_class($this)]);
if($lang_id)
{
$query->andWhere(['lang_id' => $lang_id]);
}
return $query;
}
/**
* @return \yii\db\ActiveQuery
*/
public function getMetaTag($lang_id = null)
{
$lang_id = ($lang_id === null)? Languages::getCurrent()->id: $lang_id;
return $this->hasOne(MetaTags::className(), ['object_id' => 'id'])->where([
'model_id' => get_class($this),
'lang_id' => $lang_id
]);
}
/**
* @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;
use common\modules\blog\models\Post;
use common\modules\content\widgets\MetaTagsWidget;
/* @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([
'options' => [
'enctype' => 'multipart/form-data'
]
]); ?>
<?= $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); ?>
<?php if($model->preview)
{
echo Html::img(\Yii::$app->params['frontUrl'] . $model->preview);
} ?>
<?= $form->field($model, 'file')->fileInput() ?>
<?= $form->field($model, 'unlinkFile')->checkbox(); ?>
<ul class="nav nav-pills">
<?php $c = 0; foreach ($model->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 ($model->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() ?>
<?= MetaTagsWidget::widget([
'model' => $model->meta[$lang_id],
'form' => $form,
])?>
</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,
]) ?>
</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'],
[
'attribute' => 'url',
'format' => 'raw',
'value' => function($model)
{
return Html::a($model->url, \Yii::$app->params['frontUrl'] . '/blog/' . $model->url, ['target' => '_blank', 'title' => 'Просмотреть как страницу видит пользователь', 'data-toggle'=>"tooltip"]);
}
],
[
'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,
]) ?>
</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>
<?php
namespace common\modules\content\components;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use common\modules\content\models\CoContentLang;
class CoContentLangBehavior 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('CoContentLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = CoContentLang::find()->where([
'content_id' => $this->owner->id,
'lang_id' => $lang_id,
])->one();
if (!$lang)
{
$lang = new CoContentLang;
}
$attributes['content_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('CoContentLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$meta_tag = new CoContentLang;
$attributes['content_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$meta_tag->setAttributes($attributes);
$meta_tag->save(false);
}
}
return true;
}
public function Delete($event)
{
if($this->owner->langs)
{
foreach ($this->owner->langs as $lang)
{
$lang->delete();
}
}
return true;
}
}
......@@ -78,15 +78,7 @@ class BlockAdminController extends AdminController
*/
public function actionCreate()
{
$model = new CoBlocks;
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = new CoBlocksLang;
$lng->lang_id = $lang->id;
$langs[$lang->id] = $lng;
}
$model = new CoBlocks;
Yii::$app->controller->page_title = 'Добавить блок';
......@@ -118,7 +110,6 @@ class BlockAdminController extends AdminController
return $this->render('create', [
'model' => $model,
'langs' => $langs
]);
}
......@@ -130,22 +121,7 @@ class BlockAdminController extends AdminController
*/
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 CoBlocksLang;
$lng->lang_id = $lang->id;
}
$langs[$lang->id] = $lng;
}
$model = $this->findModel($id);
Yii::$app->controller->page_title = 'Редактировать блок';
......@@ -177,7 +153,6 @@ class BlockAdminController extends AdminController
return $this->render('update', [
'model' => $model,
'langs' => $langs
]);
}
......
......@@ -84,19 +84,6 @@ class ContentAdminController extends AdminController
public function actionCreate()
{
$model = new CoContent;
$langs = [];
$meta = [];
foreach (Languages::find()->all() as $lang)
{
$lng = new CoContentLang;
$lng->lang_id = $lang->id;
$langs[$lang->id] = $lng;
$mt = new \common\models\MetaTags;
$mt->lang_id = $lang->id;
$meta[$lang->id] = $mt;
}
Yii::$app->controller->page_title = 'Добавить страницу';
......@@ -112,18 +99,9 @@ class ContentAdminController extends AdminController
try
{
$model->attributes = Yii::$app->request->post('CoContent');
$model->image = UploadedFile::getInstance($model, 'image');
if($model->validate())
if($model->save())
{
if($model->image)
{
$model->upload();
$model->image = null;
}
$model->save();
$transaction->commit();
return $this->redirect(['manage']);
}
......@@ -137,8 +115,6 @@ class ContentAdminController extends AdminController
return $this->render('create', [
'model' => $model,
'meta' => $meta,
'langs' => $langs
]);
}
......@@ -151,31 +127,6 @@ class ContentAdminController extends AdminController
public function actionUpdate($id)
{
$model = $this->findModel($id);
$langs = [];
$meta = [];
foreach (Languages::find()->all() as $lang)
{
$mt = $model->getMetaTags($lang->id)->one();
if(!$mt)
{
$mt = new \common\models\MetaTags;
$mt->lang_id = $lang->id;
}
$meta[$lang->id] = $mt;
$lng = $model->getLang($lang->id)->one();
if(!$lng)
{
$lng = new CoContentLang;
$lng->lang_id = $lang->id;
}
$langs[$lang->id] = $lng;
}
Yii::$app->controller->page_title = 'Редактировать страницу';
......@@ -191,23 +142,9 @@ class ContentAdminController extends AdminController
try
{
$model->attributes = Yii::$app->request->post('CoContent');
$model->image = UploadedFile::getInstance($model, 'image');
if($model->validate())
if($model->save())
{
if($model->image)
{
if($model->preview)
{
$model->deletePreview();
}
$model->upload();
$model->image = null;
}
$model->save();
$transaction->commit();
return $this->redirect(['manage']);
}
......@@ -221,8 +158,6 @@ class ContentAdminController extends AdminController
return $this->render('update', [
'model' => $model,
'meta' => $meta,
'langs' => $langs,
]);
}
......
......@@ -40,8 +40,11 @@ class CoBlocks extends \common\components\ActiveRecordModel
{
return [
'langs' => [
'class' => 'common\modules\content\components\CoBlocksLangBehavior',
]
'class' => 'common\modules\languages\components\LanguageHelperBehavior',
'field' => 'block_id',
'langClass' => 'common\modules\content\models\CoBlocksLang',
'actions' => ['create', 'update']
],
];
}
......
......@@ -32,10 +32,6 @@ class CoContent extends \common\components\ActiveRecordModel
const CUSTOM_DARK = 'dark';
const CUSTOM_WHITE = 'white';
const PHOTO_FOLDER = '/uploads/content/';
public $image;
public static $cutom_list = [
self::CUSTOM_DARK => 'Темный',
self::CUSTOM_WHITE => 'Светлый',
......@@ -59,7 +55,16 @@ class CoContent extends \common\components\ActiveRecordModel
'class' => 'common\components\activeRecordBehaviors\MetaTagBehavior',
],
'langs' => [
'class' => 'common\modules\content\components\CoContentLangBehavior',
'class' => 'common\modules\languages\components\LanguageHelperBehavior',
'field' => 'content_id',
'langClass' => 'common\modules\content\models\CoContentLang',
'actions' => ['create', 'update']
],
'file' => [
'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior',
'path' => '@frontend/web',
'folder' => '/uploads/content/',
'field' => 'preview'
],
'timestamp' => [
'class' => TimestampBehavior::className(),
......@@ -100,7 +105,7 @@ class CoContent extends \common\components\ActiveRecordModel
{
return [
[['active'], 'integer'],
[['image'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg, gif'],
[['file'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg, gif'],
[['url'], 'required'],
[['url'], 'string', 'max' => 250],
[['category_id', 'priority', 'custom'], 'safe'],
......@@ -118,7 +123,7 @@ class CoContent extends \common\components\ActiveRecordModel
'category_id' => Yii::t('content', 'Category ID'),
'url' => Yii::t('content', 'Url'),
'name' => Yii::t('content', 'Name'),
'image' => 'Превью',
'file' => 'Превью',
'custom' => 'Заголовок',
'priority' => 'Приоритет в Sitemap',
'title' => Yii::t('content', 'Title'),
......@@ -176,36 +181,4 @@ class CoContent extends \common\components\ActiveRecordModel
{
return $this->hasMany(CoContentLang::className(), ['content_id' => 'id']);
}
private function getPath()
{
return Yii::getAlias('@frontend/web') . self::PHOTO_FOLDER;
}
public function upload()
{
if ($this->validate())
{
if(!file_exists($this->getPath()))
{
mkdir($this->getPath(), 0777, true);
}
$this->preview = date('dmYHis-') . uniqid() . '.' . $this->image->extension;
$this->image->saveAs($this->getPath() . $this->preview);
return true;
}
else
{
return false;
}
}
public function deletePreview()
{
if(file_exists($this->getPath() . $this->preview))
{
unlink($this->getPath() . $this->preview);
}
}
}
......@@ -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">
......@@ -57,13 +30,13 @@ $this->registerJs($js, \yii\web\View::POS_READY, 'tinymceLoad');
<?= $form->field($model, 'title')->textInput(['maxlength' => 250])->hint('Заголовок страницы виден пользователю сайта и как правило оформляется в тег &lt;h1&gt;. Если дизайном страницы не предусмотрен вывод заголовка, то он не будет выводиться даже если был введен в данное поле.') ?>
<ul class="nav nav-pills">
<?php $c = 0; foreach ($langs as $i => $block) : $c++; ?>
<?php $c = 0; foreach ($model->langs as $i => $block) : $c++; ?>
<li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$block->lang->url?>" data-toggle="tab"><?=$block->lang->name?></a></li>
<?php endforeach; ?>
</ul>
<div class="tab-content">
<?php $c = 0; foreach ($langs as $block) : $c++;
<?php $c = 0; foreach ($model->langs as $block) : $c++;
$lang_id = $block->lang->id; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$block->lang->url;?>">
......
......@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs
]) ?>
</div>
......@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs
]) ?>
</div>
......@@ -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();
?>
......@@ -78,13 +47,13 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
<?php if($model->preview)
{
echo Html::img(\Yii::$app->params['frontUrl'] . CoContent::PHOTO_FOLDER . $model->preview);
echo Html::img(\Yii::$app->params['frontUrl'] . $model->preview);
} ?>
<?= $form->field($model, 'image')->fileInput() ?>
<?= $form->field($model, 'file')->fileInput() ?>
<ul class="nav nav-pills">
<?php $c = 0; foreach ($langs as $i => $content) : $c++; ?>
<?php $c = 0; foreach ($model->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>
......@@ -103,7 +72,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
?>
<div class="tab-content">
<?php $c = 0; foreach ($langs as $content) : $c++;
<?php $c = 0; foreach ($model->langs as $content) : $c++;
$lang_id = $content->lang->id; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$content->lang->url;?>">
......@@ -114,7 +83,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
<?= $form->field($content, '['.$lang_id.']text')->textArea()->hint($block_hint) ?>
<?= MetaTagsWidget::widget([
'model' => $meta[$lang_id],
'model' => $model->meta[$lang_id],
'form' => $form,
])?>
......
......@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'meta' => $meta,
'langs' => $langs
]) ?>
</div>
......@@ -28,7 +28,7 @@ use common\modules\content\models\CoCategory;
'attribute' => 'url',
'format' => 'raw',
'value' => function($data) {
return Html::a($data->url, Yii::$app->params['frontUrl'].($data->url!='/'?'/':'').$data->url, ['target' => '_blank', 'title' => 'Просмотреть как страницу видит пользователь', 'data-toggle'=>"tooltip"]);$data->category->name;
return Html::a($data->url, Yii::$app->params['frontUrl'].($data->url!='/'?'/':'').$data->url, ['target' => '_blank', 'title' => 'Просмотреть как страницу видит пользователь', 'data-toggle'=>"tooltip"]);
}
],
[
......
......@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'meta' => $meta,
'langs' => $langs,
]) ?>
</div>
\ No newline at end of file
......@@ -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 {
......
<?php
namespace common\modules\content\components;
namespace common\modules\languages\components;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use common\modules\content\models\CoBlocksLang;
class CoBlocksLangBehavior extends Behavior
use common\modules\languages\models\Languages;
class LanguageHelperBehavior extends Behavior
{
public $langs;
public $langClass;
public $field;
public $langField = 'lang_id';
public $actions;
public function events()
{
return [
ActiveRecord::EVENT_INIT => 'eventInit',
ActiveRecord::EVENT_AFTER_FIND => 'eventFind',
ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
];
}
private function getShotNameClass()
{
return (new \ReflectionClass($this->langClass))->getShortName();
}
public function eventInit($event)
{
if(in_array(Yii::$app->controller->action->id, $this->actions))
{
$langs = Languages::find()->all();
if($this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$field = $this->langField;
$lng = new $this->langClass;
$lng->$field = $lang->id;
$this->langs[$lang->id] = $lng;
}
}
}
}
public function eventFind($event)
{
if(in_array(Yii::$app->controller->action->id, $this->actions))
{
$langs = Languages::find()->all();
if(!$this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$lng = $this->owner->getLang($lang->id)->one();
if(!$lng)
{
$field = $this->langField;
$lng = new $this->langClass;
$lng->$field = $lang->id;
}
$this->langs[$lang->id] = $lng;
}
}
}
}
public function Save($event)
{
$langs = Yii::$app->request->post('CoBlocksLang');
$langs = Yii::$app->request->post($this->getShotNameClass());
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = CoBlocksLang::find()->where([
'block_id' => $this->owner->id,
'lang_id' => $lang_id,
$class = $this->langClass;
$lang = $class::find()->where([
$this->field => $this->owner->id,
$this->langField => $lang_id,
])->one();
if (!$lang)
{
$lang = new CoBlocksLang;
$lang = new $class;
}
$attributes['block_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$attributes[$this->field] = $this->owner->id;
$attributes[$this->langField] = $lang_id;
$lang->setAttributes( $attributes );
if(!$lang->save()) die(print_r($lang->errors));
......@@ -47,18 +111,20 @@ class CoBlocksLangBehavior extends Behavior
public function Insert($event)
{
$langs = Yii::$app->request->post('CoBlocksLang');
$langs = Yii::$app->request->post($this->getShotNameClass());
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$meta_tag = new CoBlocksLang;
$class = $this->langClass;
$lang = new $class;
$attributes['block_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$attributes[$this->field] = $this->owner->id;
$attributes[$this->langField] = $lang_id;
$meta_tag->setAttributes($attributes);
$meta_tag->save(false);
$lang->setAttributes($attributes);
$lang->save(false);
}
}
......
......@@ -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");
......
......@@ -110,19 +110,8 @@ class ReviewAdminController extends AdminController
'Добавить отзыв'
];
$model->load(Yii::$app->request->post());
$model->image = UploadedFile::getInstance($model, 'image');
if (Yii::$app->request->isPost && $model->validate())
if ($model->load(Yii::$app->request->post()) && $model->save())
{
if($model->image)
{
$model->upload();
$model->image = null;
}
$model->save();
return $this->redirect(['manage']);
}
else
......@@ -152,24 +141,8 @@ class ReviewAdminController extends AdminController
'Редактировать отзыв'
];
$model->load(Yii::$app->request->post());
$model->image = UploadedFile::getInstance($model, 'image');
if (Yii::$app->request->isPost && $model->validate())
if ($model->load(Yii::$app->request->post()) && $model->save())
{
if($model->image)
{
if($model->photo)
{
$model->deletePhoto();
}
$model->upload();
$model->image = null;
}
$model->save();
return $this->redirect(['manage']);
}
else
......
......@@ -14,8 +14,9 @@ return [
'title' => [
'type' => 'text',
],
($model->photo?Html::img(\Yii::$app->params['frontUrl'] . Reviews::PHOTO_FOLDER . $model->photo):''),
'image' => ['type' => 'file', 'class' => 'form-control',],
($model->photo?Html::img(\Yii::$app->params['frontUrl'] . $model->photo):''),
'unlinkFile' => ['type' => 'checkbox', 'class' => 'form-control',],
'file' => ['type' => 'file', 'class' => 'form-control',],
'video' => ['type' => 'text', 'class' => 'form-control',],
'date' => ['type' => 'date', 'class' => 'form-control',],
'text' => ['type' => 'textarea', 'class' => 'form-control'],
......
......@@ -34,10 +34,6 @@ use Yii;
*/
class Reviews extends \common\components\ActiveRecordModel
{
public $image;
const PHOTO_FOLDER = '/uploads/reviews/';
private static $rate = [
'rate_usability' => [
0 => 'Не определено',
......@@ -65,7 +61,8 @@ class Reviews extends \common\components\ActiveRecordModel
],
];
public static function getSource($type) {
public static function getSource($type)
{
return self::$rate[$type];
}
......@@ -81,12 +78,19 @@ class Reviews extends \common\components\ActiveRecordModel
return 'Отзывы';
}
// public function getUser() {
// return $this->hasOne(\common\modules\scoring\models\ScClient::className(), ['id' => 'user_id']);
// }
public function getOperator() {
return $this->hasOne(\common\modules\users\models\User::className(), ['id' => 'admin_id']);
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'file' => [
'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior',
'path' => '@frontend/web',
'folder' => '/uploads/reviews/',
'field' => 'photo'
],
];
}
/**
......@@ -97,23 +101,16 @@ class Reviews extends \common\components\ActiveRecordModel
return [
[['text', 'date', 'notification_send', 'show_in_module'], 'required'],
[['admin_id', 'priority', 'notification_send', 'order', 'cat_id', 'show_in_module', 'rate_usability', 'rate_loyality', 'rate_profit'], 'integer'],
[['image'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg, gif'],
[['file'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg, gif'],
[['text', 'state', 'attendant_products'], 'string'],
[['admin_id'], 'adminIdValidate'],
[['date', 'answer', 'good', 'bad', 'date_create', 'notification_date', 'rate_usability', 'rate_loyality', 'rate_profit', 'title', 'order', 'photo', 'state', 'video'], 'safe'],
[['date', 'answer', 'good', 'bad', 'date_create', 'notification_date', 'rate_usability', 'rate_loyality', 'rate_profit', 'title', 'order', 'photo', 'state', 'video', 'unlinkFile'], 'safe'],
// [['lang'], 'string', 'max' => 2],
[['title'], 'string', 'max' => 250],
[['email', 'video'], 'string', 'max' => 255]
];
}
public function adminIdValidate($attr, $value) {
if(empty($this->answer))
if(empty($this->$attr))
$this->addError($attr, 'Выберите опреатора');
}
/**
* @inheritdoc
*/
......@@ -131,7 +128,7 @@ class Reviews extends \common\components\ActiveRecordModel
'bad' => Yii::t('reviews', 'Не понравилось'),
'photo' => Yii::t('reviews', 'Фото'),
'video' => Yii::t('reviews', 'Ссылка на видео'),
'image' => Yii::t('reviews', 'Фото'),
'file' => Yii::t('reviews', 'Фото'),
'state' => Yii::t('reviews', 'Состояние'),
'date' => Yii::t('reviews', 'Дата'),
'date_create' => Yii::t('reviews', 'Создана'),
......@@ -146,9 +143,17 @@ class Reviews extends \common\components\ActiveRecordModel
'rate_usability' => Yii::t('reviews', 'Удобство'),
'rate_loyality' => Yii::t('reviews', 'Лояльность'),
'rate_profit' => Yii::t('reviews', 'Выгода'),
'unlinkFile' => 'Удалить фото'
];
}
public function adminIdValidate($attr, $value) {
if(empty($this->answer))
if(empty($this->$attr))
$this->addError($attr, 'Выберите опреатора');
}
public function hasComment() {
if(!empty($this->answer))
return true;
......@@ -204,35 +209,8 @@ class Reviews extends \common\components\ActiveRecordModel
return parent::beforeSave($insert);
}
private function getPath()
public function getOperator()
{
return Yii::getAlias('@frontend/web') . self::PHOTO_FOLDER;
}
public function upload()
{
if ($this->validate())
{
if(!file_exists($this->getPath()))
{
mkdir($this->getPath(), 0777, true);
}
$this->photo = date('dmYHis-') . uniqid() . '.' . $this->image->extension;
$this->image->saveAs($this->getPath() . $this->photo);
return true;
}
else
{
return false;
}
}
public function deletePhoto()
{
if(file_exists($this->getPath() . $this->photo))
{
unlink($this->getPath() . $this->photo);
}
return $this->hasOne(\common\modules\users\models\User::className(), ['id' => 'admin_id']);
}
}
......@@ -2,15 +2,12 @@
namespace common\modules\school\controllers;
use Yii;
use common\components\BaseController;
use common\modules\school\models\Courses;
use common\modules\school\models\SearchCourses;
use common\modules\school\models\SearchLessons;
use common\modules\users\models\User;
use \common\modules\rbac\models\AuthAssignment;
use common\models\LoginForm;
class CourseController extends BaseController
{
......@@ -29,9 +26,14 @@ class CourseController extends BaseController
$dataProvider = $searchModel->search($search);
$modelUser = new User();
$modelLogin = new LoginForm();
$form = new \common\components\BaseForm('/common/modules/users/forms/RegistrationUserForm', $modelUser);
$formPopup = new \common\components\BaseForm('/common/modules/users/forms/RegistrationUserPopupForm', $modelUser);
return $this->render('index', ['dataProvider' => $dataProvider, 'form' => $form->out, 'formPopup' => $formPopup->out]);
$formLogin = new \common\components\BaseForm('/common/modules/users/forms/LoginForm', $modelLogin);
$formLoginPopup = new \common\components\BaseForm('/common/modules/users/forms/LoginPopupForm', $modelLogin);
return $this->render('index', ['dataProvider' => $dataProvider, 'form' => $form->out, 'formLogin' => $formLogin->out,
'formPopup' => $formPopup->out, 'formLoginPopup' => $formLoginPopup->out]);
}
public function actionView($id)
......
......@@ -8,11 +8,11 @@
<div class="col-md-3 col-md-offset-3 col-xs-6 col-sm-12">
<ul class="sh_social">
<li>
<a href="#"><img src="images/icon/sh_social_vk.png" height="30" width="30" alt=""></a>
<a href="#"><img src="images/icon/sh_social_fb.png" height="30" width="30" alt=""></a>
<a href="#"><img src="images/icon/sh_social_tw.png" height="30" width="30" alt=""></a>
<a href="#"><img src="images/icon/sh_social_gp.png" height="30" width="30" alt=""></a>
<a href="#"><img src="images/icon/sh_social_t.png" height="30" width="30" alt=""></a>
<a href="#"><img src="/images/icon/sh_social_vk.png" height="30" width="30" alt=""></a>
<a href="#"><img src="/images/icon/sh_social_fb.png" height="30" width="30" alt=""></a>
<a href="#"><img src="/images/icon/sh_social_tw.png" height="30" width="30" alt=""></a>
<a href="#"><img src="/images/icon/sh_social_gp.png" height="30" width="30" alt=""></a>
<a href="#"><img src="/images/icon/sh_social_t.png" height="30" width="30" alt=""></a>
</li>
</ul>
</div>
......@@ -57,26 +57,28 @@
</div>
</div>
</section>
<?php if (Yii::$app->user->isGuest): ?>
<section class="sh_ft">
<div class="container">
<div class="row">
<div class="col-md-4 col-xs-6 col-sm-12">
<?php
echo $form;
?>
<?php echo \common\modules\eauth\widgets\SocialWidget::widget(['action' => '/site/login']); ?>
<div class="usl">Проходя регистрацию вы подтверждаете<br><a href="#">согласие на обработку персональных данных.</a></div>
</div>
<div class="col-md-8 col-xs-6 col-sm-12">
<div class="reg_title">Регистрация на курс <br> Лекции для менеджеров it-отрасли</div>
<p>Каждую неделю мы будем высылать тебе по 1 видео-уроку, который позволит тебе освоить данную тему. Просмотр уроков и бонусных материалов - бесплатный. </p>
<p>Более того, самому активному пользователь мы предусмотрели приз в размере 15 000 руб. Все что надо, что бы получить награду, это смотреть ролики и проявлять активность.</p>
<?php if (Yii::$app->user->isGuest):?>
<section class="sh_ft">
<div class="container">
<div class="row">
<div class="col-md-4 col-xs-6 col-sm-12">
<?php
echo $form;
?>
<?php
echo $formLogin;
?>
<?php echo \common\modules\eauth\widgets\SocialWidget::widget(['action' => '/site/login']); ?>
</div>
<div class="col-md-8 col-xs-6 col-sm-12">
<div class="reg_title">Регистрация на курс <br> Лекции для менеджеров it-отрасли</div>
<p>Каждую неделю мы будем высылать тебе по 1 видео-уроку, который позволит тебе освоить данную тему. Просмотр уроков и бонусных материалов - бесплатный. </p>
<p>Более того, самому активному пользователь мы предусмотрели приз в размере 15 000 руб. Все что надо, что бы получить награду, это смотреть ролики и проявлять активность.</p>
</div>
</div>
</div>
</div>
</section>
<?php endif ?>
</section>
<?php endif;?>
<div class="tr_foot"></div>
<footer>
......@@ -95,7 +97,7 @@
<div class="row">
<div class="col-md-3 col-xs-3 col-sm-12">
<div class="foot_logo">
<img src="images/foot_logo.png" height="51" width="192" alt="">
<img src="/images/foot_logo.png" height="51" width="192" alt="">
</div>
</div>
<div class="col-md-6 col-xs-6 col-sm-12">
......@@ -109,7 +111,7 @@
</ul>
</div>
<div class="col-md-3 col-xs-3 col-sm-12">
<div class="taskon"><img src="images/taskon.png" height="31" width="100" alt=""></div>
<div class="taskon"><img src="/images/taskon.png" height="31" width="100" alt=""></div>
<div class="copyring">Powered by Taskon <br> Собственная разработка Арт Проект</div>
</div>
</div>
......@@ -130,12 +132,14 @@
</div>
<div id="reg_form" class="popup">
<!-- <div class="txtbtnclose">Закрыть</div> -->
<span class="popup__title">Регистрация</span>
<?php
echo $formPopup;
?>
<span class="popup_text">Проходя регистрацию вы подтверждаете<br>
<a href="#">согласие на обработку персональных данных.</a></span>
<?php
echo $formLoginPopup;
?>
<?php echo \common\modules\eauth\widgets\SocialWidget::widget(['action' => '/site/login']); ?>
</div>
</div>
......
......@@ -15,7 +15,7 @@
<div class="blip_kurs">За просмотр этих курсов<br> мы заплатим 15 000 руб.</div>
<?php endif;?>
<div class="kurs_foot clearfix">
<?php if($model->type == Courses::TYPE_DV):?>
<?php if($model->type == Courses::TYPE_DV && Yii::$app->user->isGuest):?>
<a href="#reg_form" class="kurs_bt popup-form">Предварительная регистрация</a>
<?php else:?>
<a href="<?php echo Url::toRoute(['/school/course/view', 'id' => $model->id]);?>" class="kurs_bt">Подробнее</a>
......
......@@ -41,7 +41,7 @@ class UserController extends \common\components\BaseController {
"Login" => "Авторизация",
"Logout" => "Выход",
"Registration" => "Регистрация",
"ActivateAccount" => "Активация аккаунта",
"Activate" => "Активация аккаунта",
"ActivateAccountRequest" => "Запрос на активацию аккаунта",
"ChangePassword" => "Смена пароля",
"ChangePasswordRequest" => "Запрос на смену пароля",
......@@ -110,15 +110,17 @@ 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'];
if ($model->validate()) {
$model->password = md5($model->password);
$model->password = Yii::$app->getSecurity()->generatePasswordHash($model->password);
$model->activate_code = md5($model->password . 'xdf5sf');
$model->source = User::SOURCE_DEFAULT;
$model->save(false);
......@@ -145,8 +147,8 @@ class UserController extends \common\components\BaseController {
}
public function actionActivateAccount($code) {
$user = User::model()->findByAttributes(array('activate_code' => $code));
public function actionActivate($code) {
$user = User::findOne(['activate_code' => $code]);
if ($user===null)
\Yii::$app->getSession()->setFlash('error_activate', 'Неверные данные активации аккаунта!');
......@@ -155,7 +157,7 @@ class UserController extends \common\components\BaseController {
$user->activate_code = null;
$user->status = User::STATUS_ACTIVE;
$user->save(false);
\Yii::$app->getSession()->setFlash('success_activate', 'Неверные данные активации аккаунта!');
\Yii::$app->getSession()->setFlash('success_activate', 'Вы активировали свой аккаунт.');
$subject = 'Активация аккаунта на сайте '.Yii::$app->params['frontUrl'];
Yii::$app->mailer->compose('activateSuccess', ['link' => Yii::$app->params['frontUrl']])
->setFrom(Yii::$app->params['adminEmail'])
......
<?php
return array(
/*return array(
'activeForm'=>array(
'id' => 'user-form',
'class' => 'CActiveForm',
......@@ -13,4 +13,30 @@ return array(
'buttons' => array(
'submit' => array('type' => 'submit', 'value' => 'Войти')
)
);
\ No newline at end of file
);*/
$elements = [
'errors_login' => '<div class="errors_login"></div>',
'username' => ['type' => 'text', 'placeholder'=>"E-mail", 'options'=>['label'=>false],
'inputOptions'=>['class'=>'input_st field-input required alphanumeric']],
'password' => ['type' => 'password', 'placeholder'=>"Пароль", 'options'=>['label'=>false],
'inputOptions'=>['class'=>'input_st field-input required alphanumeric']],
'button_submit' => '<a href="javascript:void(0)" class="submit_form_login">
<div class="save-button sh_bt_send">
Войти
</div>
</a>',
'registration_link' => '<a class="reg_form_link" href="javascript:void(0)">Регистрация</a>',
];
return [
'activeForm'=>[
'id' => 'login_form',
'options' => [
'enctype' => 'multipart/form-data'
],
],
'elements' => $elements,
];
<?php
$elements = [
'title_login' => '<span class="popup__title">Авторизация</span>',
'errors_login' => '<div class="errors_login_popup"></div>',
'username' => ['type' => 'text', 'placeholder'=>"E-mail", 'options'=>['label'=>false],
'inputOptions'=>['class'=>'input_st field-input required alphanumeric']],
'password' => ['type' => 'password', 'placeholder'=>"Пароль", 'options'=>['label'=>false],
'inputOptions'=>['class'=>'input_st field-input required alphanumeric']],
'button_submit' => '<a href="javascript:void(0)" class="submit_form_login_popup">
<div class="save-button sh_bt_send">
Войти
</div>
</a>',
'registration_link' => '<a class="reg_popup_link" href="javascript:void(0)">Регистрация</a>',
];
return [
'activeForm'=>[
'id' => 'login_form_popup',
'options' => [
'enctype' => 'multipart/form-data'
],
],
'elements' => $elements,
];
......@@ -28,6 +28,10 @@ $elements = [
Записаться
</div>
</a>',
'login_link' => '<a class="login_form_link" href="javascript:void(0)">Уже есть аккаунт?</a>',
'text-reg' => '<span class="popup_text">Проходя регистрацию вы подтверждаете<br>
<a href="javascript:void(0)">согласие на обработку персональных данных.</a></span>',
];
......
......@@ -2,6 +2,7 @@
use common\modules\users\models\User;
$elements = [
'title_reg' => '<span class="popup__title">Регистрация</span>',
'errors_reg' => '<div class="errors-reg_popup"></div>',
'name' => ['type' => 'text', 'placeholder'=>"Ваше имя*", 'options'=>['label'=>false],
'inputOptions'=>['class'=>'input_st field-input required alphanumeric']],
......@@ -28,6 +29,10 @@ $elements = [
Записаться
</div>
</a>',
'login_popup_link' => '<a class="login_form_popup_link" href="javascript:void(0)">Уже есть аккаунт?</a>',
'text-reg' => '<span class="popup_text">Проходя регистрацию вы подтверждаете<br>
<a href="javascript:void(0)">согласие на обработку персональных данных.</a></span>',
];
......
<?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 сфере',
......@@ -247,7 +246,7 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
*/
public static function findByUsername($username)
{
return static::findOne(['email' => $username, 'status' => self::STATUS_ACTIVE]);
return static::findOne(['email' => $username/*, 'status' => self::STATUS_ACTIVE*/]);
}
/**
......@@ -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');
}
}
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160210_053816_add_column_posts extends Migration
{
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
$this->addColumn('posts', 'preview', Schema::TYPE_STRING.'(60) DEFAULT NULL');
}
public function safeDown()
{
$this->dropColumn('posts', 'preview');
}
}
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160210_061532_fix_file_columns extends Migration
{
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
$this->alterColumn('posts', 'preview', Schema::TYPE_STRING.'(100) DEFAULT NULL');
$this->alterColumn('co_content', 'preview', Schema::TYPE_STRING.'(100) DEFAULT NULL');
$this->alterColumn('reviews', 'photo', Schema::TYPE_STRING.'(100) DEFAULT NULL');
}
public function safeDown()
{
$this->alterColumn('posts', 'preview', Schema::TYPE_STRING.'(60) DEFAULT NULL');
$this->alterColumn('co_content', 'preview', Schema::TYPE_STRING.'(50) DEFAULT NULL');
$this->alterColumn('reviews', 'photo', Schema::TYPE_STRING.'(50) DEFAULT NULL');
}
}
......@@ -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,13 +153,14 @@ 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',
'login/eauth/<service_eauth:google|facebook|vk|twitter>' => 'site/login',
'login' => 'site/login',
'logout' => 'site/logout',
'activate/<code>'=>'users/user/activateAccount',
'activate/<code>'=>'users/user/activate',
'<page:(/)>' => 'content/page/view',
'<_m>/<_c>/<_a>/<id:\d+>' => '<_m>/<_c>/<_a>',
......
......@@ -168,11 +168,15 @@ class SiteController extends BaseController
}
}
echo '<pre>'; die(var_dump('1')); echo '</pre>';
//Yii::$app->user->getIdentity()->getRole()
$model = new LoginForm();
$model->load(Yii::$app->request->post());
$model->login();
if ($model->validate()) {
Yii::$app->user->login($model->getUser(), $model->rememberMe ? 3600 * 24 * 30 : 0);
$this->redirect(array("/school/course/index"));
} else {
echo json_encode(array('errors'=>$model->getErrors()));
}
}
/*public function actionLogin()
......
<?php
return [
'About' => 'О компании',
'Portfolio' => 'Портфолио',
'Portfolio' => 'Кейсы',
'Blog' => 'Блог',
'Contacts' => 'Контакты',
'Analytics school' => 'Школа аналитики',
......
......@@ -5,7 +5,7 @@ use yii\helpers\Html;
$reviews = Reviews::find()
->where(['state' => 'active'])
->orderBy('created_at DESC')
->limit(2)
->limit(1)
->all();
?>
<?php if($reviews) : ?>
......@@ -22,7 +22,7 @@ $reviews = Reviews::find()
<?php if($review->photo) : ?>
<div class="col-md-3 col-xs-4 col-sm-12">
<div class="rev_img">
<img src="<?=Reviews::PHOTO_FOLDER . $review->photo?>">
<img src="<?=$review->photo?>">
</div>
</div>
<?php endif; ?>
......
......@@ -3,7 +3,10 @@ use \common\modules\content\models\CoContent;
use yii\helpers\Html;
$models = CoContent::find()
->where(['category_id' => 4])
->where([
'category_id' => 4,
'active' => true
])
->orderBy('id DESC')
->all();
?>
......@@ -13,7 +16,7 @@ $models = CoContent::find()
<?php foreach ($models as $model) : ?>
<div class="col-md-6 col-xs-6 col-sm-12">
<div class="keys_block_small">
<img src="<?=CoContent::PHOTO_FOLDER . $model->preview?>" height="338" width="455">
<img src="<?=$model->preview?>" height="338" width="455">
<div class="keys_small_title" <?if($model->custom==CoContent::CUSTOM_WHITE){?>style="color:#fff;"<?}?>><?=$model->lang->title?></div>
<div class="keys_small_foot">
<?=Html::a('<span>Подробнее</span>', ['/'.$model->url], ['class' => 'keys_small_btn_more'])?>
......
......@@ -3,9 +3,15 @@ use \common\modules\content\models\CoContent;
use yii\helpers\Html;
use yii\helpers\Url;
$models = CoContent::find()->where(['category_id' => 5])->orderBy('id DESC')->all();
$models = CoContent::find()->where([
'category_id' => 5,
'active' => true
])->orderBy('id DESC')->all();
$cases = CoContent::find()->where(['category_id' => 4]);
$cases = CoContent::find()->where([
'category_id' => 4,
'active' => true
]);
?>
<?php if($models) : ?>
<div class="row">
......@@ -24,9 +30,9 @@ $cases = CoContent::find()->where(['category_id' => 4]);
<span class="others_project__subtitle"><?=$model->lang->title?></span>
<p class="others_project__txt"><?=$model->lang->text?></p>
<a href="<?=Url::to(['/' . $model->url])?>" class="others_project__bt">Подробнее</a>
<a href="<?=Url::to(['/case'])?>" class="others_project__link">Все проекты (<?=$cases->count();?>)</a>
<a href="<?=Url::to(['/portfolio'])?>" class="others_project__link">Все проекты (<?=$cases->count();?>)</a>
</div>
<img src="<?=CoContent::PHOTO_FOLDER . $model->preview?>" height="476" width="489">
<img src="<?=$model->preview?>" height="476" width="489">
</div>
<?php endforeach; ?>
......
......@@ -8,9 +8,9 @@ $reviews = Reviews::find()
->all();
?>
<?php if($reviews) : ?>
<section class="rev_sec">
<section class="rev_sec reviews-block">
<div class="container">
<div class="row" style="margin-top:50px;">
<div class="row" style="margin:50px -15px 0;">
<div class="col-md-12 col-xs-12 col-sm-12">
<span class="rev_title">Отзывы о нас</span>
</div>
......@@ -21,7 +21,7 @@ $reviews = Reviews::find()
<?php if($review->photo) : ?>
<div class="col-md-3 col-xs-4 col-sm-12">
<div class="rev_img">
<img src="<?=Reviews::PHOTO_FOLDER . $review->photo?>">
<img src="<?=$review->photo?>">
</div>
</div>
<?php endif; ?>
......
......@@ -43,4 +43,17 @@ section .container ul:not([class]) li,
section .container ol:not([class]) li {
margin: 0 0 15px 0;
color: #2d323a;
}
section.reviews-block .row {
margin-bottom: 50px;
}
a.login_form_link, a.login_form_popup_link, a.reg_popup_link, a.reg_form_link{
margin-top: 20px;
display: block;
}
#login_form, #login_form_popup{
display:none;
}
.sh_ft .popup_text, .reg_form .popup_text{
margin-top: 10px;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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