Commit a559e91458c5bbb5a5ae3b32bc6d14b0fecc3376

Authored by andryeyev
2 parents 4cd4defc fe5be656

Merge branch 'master' into Dmitryi

Showing 157 changed files with 2125 additions and 925 deletions   Show diff stats
backend/controllers/AdminMenuController.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\controllers;
  4 +
  5 +use Yii;
  6 +use backend\models\AdminMenu;
  7 +use backend\models\AdminMenuSearch;
  8 +use yii\web\Controller;
  9 +use yii\web\NotFoundHttpException;
  10 +use yii\filters\VerbFilter;
  11 +
  12 +/**
  13 + * AdminMenuController implements the CRUD actions for AdminMenu model.
  14 + */
  15 +class AdminMenuController extends Controller
  16 +{
  17 + public $layout = 'settings';
  18 +
  19 + public function behaviors()
  20 + {
  21 + return [
  22 + 'verbs' => [
  23 + 'class' => VerbFilter::className(),
  24 + 'actions' => [
  25 + 'delete' => ['post'],
  26 + ],
  27 + ],
  28 + ];
  29 + }
  30 +
  31 + /**
  32 + * Lists all AdminMenu models.
  33 + * @return mixed
  34 + */
  35 + public function actionIndex()
  36 + {
  37 + $searchModel = new AdminMenuSearch();
  38 + $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  39 +
  40 + return $this->render('index', [
  41 + 'searchModel' => $searchModel,
  42 + 'dataProvider' => $dataProvider,
  43 + ]);
  44 + }
  45 +
  46 + /**
  47 + * Displays a single AdminMenu model.
  48 + * @param integer $id
  49 + * @return mixed
  50 + */
  51 + public function actionView($id)
  52 + {
  53 + return $this->render('view', [
  54 + 'model' => $this->findModel($id),
  55 + ]);
  56 + }
  57 +
  58 + /**
  59 + * Creates a new AdminMenu model.
  60 + * If creation is successful, the browser will be redirected to the 'view' page.
  61 + * @return mixed
  62 + */
  63 + public function actionCreate()
  64 + {
  65 + $model = new AdminMenu();
  66 + if ($model->load(Yii::$app->request->post()) && $model->save()) {
  67 + return $this->redirect(['view', 'id' => $model->admin_menu_id]);
  68 + } else {
  69 + return $this->render('create', [
  70 + 'model' => $model,
  71 + ]);
  72 + }
  73 + }
  74 +
  75 + /**
  76 + * Updates an existing AdminMenu model.
  77 + * If update is successful, the browser will be redirected to the 'view' page.
  78 + * @param integer $id
  79 + * @return mixed
  80 + */
  81 + public function actionUpdate($id)
  82 + {
  83 + $model = $this->findModel($id);
  84 +
  85 + if ($model->load(Yii::$app->request->post()) && $model->save()) {
  86 + return $this->redirect(['view', 'id' => $model->adminmenu_id]);
  87 + } else {
  88 + return $this->render('update', [
  89 + 'model' => $model,
  90 + ]);
  91 + }
  92 + }
  93 +
  94 + /**
  95 + * Deletes an existing AdminMenu model.
  96 + * If deletion is successful, the browser will be redirected to the 'index' page.
  97 + * @param integer $id
  98 + * @return mixed
  99 + */
  100 + public function actionDelete($id)
  101 + {
  102 + $this->findModel($id)->delete();
  103 +
  104 + return $this->redirect(['index']);
  105 + }
  106 +
  107 + /**
  108 + * Finds the AdminMenu model based on its primary key value.
  109 + * If the model is not found, a 404 HTTP exception will be thrown.
  110 + * @param integer $id
  111 + * @return AdminMenu the loaded model
  112 + * @throws NotFoundHttpException if the model cannot be found
  113 + */
  114 + protected function findModel($id)
  115 + {
  116 + if (($model = AdminMenu::findOne($id)) !== null) {
  117 + return $model;
  118 + } else {
  119 + throw new NotFoundHttpException('The requested page does not exist.');
  120 + }
  121 + }
  122 +
  123 +}
backend/controllers/LanguageController.php
@@ -54,7 +54,7 @@ class LanguageController extends Controller @@ -54,7 +54,7 @@ class LanguageController extends Controller
54 { 54 {
55 if(!empty(Yii::$app->request->get('id'))) { 55 if(!empty(Yii::$app->request->get('id'))) {
56 $model = $this->findModel(Yii::$app->request->get('id')); 56 $model = $this->findModel(Yii::$app->request->get('id'));
57 - $model->active = 1; 57 + $model->status = 1;
58 $model->save(); 58 $model->save();
59 return $this->redirect(['index']); 59 return $this->redirect(['index']);
60 } else { 60 } else {
@@ -77,7 +77,7 @@ class LanguageController extends Controller @@ -77,7 +77,7 @@ class LanguageController extends Controller
77 public function actionDelete($id) 77 public function actionDelete($id)
78 { 78 {
79 $model = $this->findModel($id); 79 $model = $this->findModel($id);
80 - $model->active = 0; 80 + $model->status = 0;
81 $model->save(); 81 $model->save();
82 82
83 return $this->redirect(['index']); 83 return $this->redirect(['index']);
@@ -152,18 +152,18 @@ class LanguageController extends Controller @@ -152,18 +152,18 @@ class LanguageController extends Controller
152 public function actionDeleteAdress($id) 152 public function actionDeleteAdress($id)
153 { 153 {
154 $model = $this->findModelAdress($id); 154 $model = $this->findModelAdress($id);
155 - $children = $model->hasMany(Option::className(), ['parent_id' => 'option_id'])->all(); 155 + $children = $model->hasMany(Option::className(), ['option_pid' => 'option_id'])->all();
156 $langs = array(); 156 $langs = array();
157 if(!empty($children)) { 157 if(!empty($children)) {
158 foreach($children as $child) { 158 foreach($children as $child) {
159 - $langs = OptionLang::findAll(['id' => $child->option_id]); 159 + $langs = OptionLang::findAll(['option_language_id' => $child->option_id]);
160 foreach($langs as $lang) { 160 foreach($langs as $lang) {
161 $lang->delete(); 161 $lang->delete();
162 } 162 }
163 $child->delete(); 163 $child->delete();
164 } 164 }
165 } 165 }
166 - $langs = OptionLang::findAll(['id' => $id]); 166 + $langs = OptionLang::findAll(['option_language_id' => $id]);
167 foreach($langs as $lang) { 167 foreach($langs as $lang) {
168 $lang->delete(); 168 $lang->delete();
169 } 169 }
backend/controllers/MenuController.php
@@ -118,4 +118,5 @@ class MenuController extends Controller @@ -118,4 +118,5 @@ class MenuController extends Controller
118 throw new NotFoundHttpException('The requested page does not exist.'); 118 throw new NotFoundHttpException('The requested page does not exist.');
119 } 119 }
120 } 120 }
  121 +
121 } 122 }
backend/controllers/MenuLocationController.php
@@ -4,7 +4,7 @@ namespace backend\controllers; @@ -4,7 +4,7 @@ namespace backend\controllers;
4 4
5 use Yii; 5 use Yii;
6 use backend\models\MenuLocation; 6 use backend\models\MenuLocation;
7 -use backend\models\MenuSearchLocation; 7 +use backend\models\MenuLocationSearch;
8 use yii\web\Controller; 8 use yii\web\Controller;
9 use yii\web\NotFoundHttpException; 9 use yii\web\NotFoundHttpException;
10 use yii\filters\VerbFilter; 10 use yii\filters\VerbFilter;
@@ -32,7 +32,7 @@ class MenuLocationController extends Controller @@ -32,7 +32,7 @@ class MenuLocationController extends Controller
32 */ 32 */
33 public function actionIndex() 33 public function actionIndex()
34 { 34 {
35 - $searchModel = new MenuSearchLocation(); 35 + $searchModel = new MenuLocationSearch();
36 $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 36 $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
37 37
38 return $this->render('index', [ 38 return $this->render('index', [
backend/controllers/SettingsController.php 0 → 100644
  1 +<?php
  2 +namespace backend\controllers;
  3 +
  4 +use Yii;
  5 +use yii\filters\AccessControl;
  6 +use yii\web\Controller;
  7 +use common\models\LoginForm;
  8 +use yii\filters\VerbFilter;
  9 +use backend\models\Profile;
  10 +use common\models\User;
  11 +use frontend\models\Option;
  12 +use yii\data\ActiveDataProvider;
  13 +use yii\validators\BooleanValidator;
  14 +use yii\validators\StringValidator;
  15 +/**
  16 + * Site controller
  17 + */
  18 +class SettingsController extends Controller
  19 +{
  20 + public $layout = 'settings';
  21 + /**
  22 + * @inheritdoc
  23 + */
  24 + public function actions()
  25 + {
  26 + return [
  27 + 'error' => [
  28 + 'class' => 'yii\web\ErrorAction',
  29 + ],
  30 + ];
  31 + }
  32 +
  33 + public function actionIndex()
  34 + {
  35 + return $this->render('index');
  36 + }
  37 +
  38 +}
backend/controllers/SiteController.php
@@ -57,7 +57,19 @@ class SiteController extends Controller @@ -57,7 +57,19 @@ class SiteController extends Controller
57 57
58 public function actionIndex() 58 public function actionIndex()
59 { 59 {
60 - return $this->render('index'); 60 +/*
  61 + if (Yii::$app->user->can('site/index'))
  62 + {
  63 +
  64 + }
  65 + else
  66 + {
  67 + Yii::$app->getSession()->setFlash('error', 'Доступ закрыт..');
  68 +
  69 + return $this->redirect('/');
  70 + }
  71 +*/
  72 + return $this->render('index');
61 } 73 }
62 74
63 public function actionLogin() 75 public function actionLogin()
backend/controllers/TerminController.php
@@ -10,6 +10,7 @@ use yii\web\NotFoundHttpException; @@ -10,6 +10,7 @@ use yii\web\NotFoundHttpException;
10 use yii\filters\VerbFilter; 10 use yii\filters\VerbFilter;
11 use backend\models\TerminLang; 11 use backend\models\TerminLang;
12 use backend\models\TerminStructure; 12 use backend\models\TerminStructure;
  13 +use yii\filters\AccessControl;
13 14
14 /** 15 /**
15 * TerminController implements the CRUD actions for Termin model. 16 * TerminController implements the CRUD actions for Termin model.
backend/models/AdminMenu.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use Yii;
  6 +
  7 +/**
  8 + * This is the model class for table "admin_menu".
  9 + *
  10 + * @property integer $admin_menu_id
  11 + * @property integer $admin_menu_pid
  12 + * @property integer $status
  13 + * @property integer $hide_min
  14 + * @property integer $sort
  15 + * @property string $name
  16 + * @property string $path
  17 + * @property string $param
  18 + *
  19 + * @property AdminMenu $parent
  20 + * @property AdminMenu[] $adminMenus
  21 + * @property AdminMenuAccessGroup[] $adminMenuAccessGroups
  22 + * @property AdminMenuAccessUser[] $adminMenuAccessUsers
  23 + */
  24 +class AdminMenu extends \yii\db\ActiveRecord
  25 +{
  26 +
  27 + public $parentt;
  28 + /**
  29 + * @inheritdoc
  30 + */
  31 + public static function tableName()
  32 + {
  33 + return 'admin_menu';
  34 + }
  35 +
  36 + /**
  37 + * @inheritdoc
  38 + */
  39 + public function rules()
  40 + {
  41 + return [
  42 + [['admin_menu_pid', 'status', 'hide_min', 'sort'], 'integer'],
  43 + [['name'], 'required'],
  44 + [['name', 'path', 'param','parentt'], 'string']
  45 + ];
  46 + }
  47 +
  48 + /**
  49 + * @inheritdoc
  50 + */
  51 + public function attributeLabels()
  52 + {
  53 + return [
  54 + 'admin_menu_id' => Yii::t('app', 'Admin menu ID'),
  55 + 'admin_menu_pid' => Yii::t('app', 'Admin menu parent ID'),
  56 + 'status' => Yii::t('app', 'Status'),
  57 + 'hide_min' => Yii::t('app', 'Hide Min'),
  58 + 'sort' => Yii::t('app', 'Sort'),
  59 + 'name' => Yii::t('app', 'Name'),
  60 + 'path' => Yii::t('app', 'Path'),
  61 + 'param' => Yii::t('app', 'Params'),
  62 + 'parentt' => Yii::t('app', 'Parent item')
  63 + ];
  64 + }
  65 +
  66 + /**
  67 + * @return \yii\db\ActiveQuery
  68 + */
  69 + public function getParent()
  70 + {
  71 + return $this->hasOne(AdminMenu::className(), ['admin_menu_id' => 'admin_menu_pid']);
  72 + }
  73 +
  74 + /**
  75 + * @return \yii\db\ActiveQuery
  76 + */
  77 + public function getAdminMenus()
  78 + {
  79 + return $this->hasMany(AdminMenu::className(), ['admin_menu_pid' => 'admin_menu_id']);
  80 + }
  81 +
  82 + /**
  83 + * @return \yii\db\ActiveQuery
  84 + */
  85 + public function getAdminMenuAccessGroups()
  86 + {
  87 + return $this->hasMany(AdminMenuAccessGroup::className(), ['admin_menu_id' => 'admin_menu_id']);
  88 + }
  89 +
  90 + /**
  91 + * @return \yii\db\ActiveQuery
  92 + */
  93 + public function getAdminMenuAccessUsers()
  94 + {
  95 + return $this->hasMany(AdminMenuAccessUser::className(), ['admin_menu_id' => 'admin_menu_id']);
  96 + }
  97 +
  98 + public static function buildMenu($withValues = false)
  99 + {
  100 + $result = [];
  101 + $roots = self::find()->where(['admin_menu_pid' => NULL])->with(['adminMenus'])->all();
  102 + foreach($roots as $root) {
  103 + if($root->adminMenus) {
  104 + $result[] = ['label' => Yii::t('app', $root->name), 'id' => $root->admin_menu_id, 'options' => ['class' => 'header']];
  105 + foreach($root->adminMenus as $submenu) {
  106 + if($submenu->adminMenus) {
  107 + $items = [];
  108 + foreach($submenu->adminMenus as $item) {
  109 + $items[] = ['label' => Yii::t('app', $item->name), 'id' => $item->admin_menu_id, 'icon' => 'fa fa-circle-o', 'url' => array_merge([$item->path], \common\models\Tools::parseUrlParams($item->param))];
  110 + }
  111 + $result[] = ['label' => Yii::t('app', $submenu->name), 'id' => $submenu->admin_menu_id, 'icon' => 'fa fa-circle-o', 'url' => '#', 'items' => $items];
  112 + unset($items);
  113 + } else {
  114 + $result[] = ['label' => Yii::t('app', $submenu->name), 'id' => $submenu->admin_menu_id, 'icon' => 'fa fa-circle-o', 'url' => array_merge([$submenu->path], \common\models\Tools::parseUrlParams($submenu->param))];
  115 + }
  116 + }
  117 + }
  118 + }
  119 + return $result;
  120 + }
  121 +
  122 + public static function buildMenuSelect()
  123 + {
  124 + $result = [];
  125 + $roots = self::find()->where(['admin_menu_pid' => NULL])->with(['adminMenus'])->all();
  126 + foreach($roots as $root) {
  127 + if($root->adminMenus) {
  128 + $items = [];
  129 + foreach($root->adminMenus as $submenu) {
  130 + $items[] = ['label' => Yii::t('app', $submenu->name), 'id' => $submenu->admin_menu_id];
  131 + }
  132 + $result[] = ['label' => Yii::t('app', $root->name), 'id' => $root->admin_menu_id, 'items' => $items];
  133 + unset($items);
  134 + } else {
  135 + $result[] = ['label' => Yii::t('app', $root->name), 'id' => $root->admin_menu_id];
  136 + }
  137 + }
  138 + return $result;
  139 + }
  140 +
  141 + public function beforeSave($insert)
  142 + {
  143 + if (parent::beforeSave($insert)) {
  144 + if(!$this->admin_menu_pid) {
  145 + $this->admin_menu_pid = NULL;
  146 + }
  147 + return true;
  148 + } else {
  149 + return false;
  150 + }
  151 + }
  152 +}
backend/models/AdminMenuAccessGroup.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use Yii;
  6 +
  7 +/**
  8 + * This is the model class for table "admin_menu_access_group".
  9 + *
  10 + * @property integer $admin_menu_access_group_id
  11 + * @property integer $admin_menu_id
  12 + * @property string $group
  13 + *
  14 + * @property AdminMenu $menu
  15 + * @property AuthRule $group0
  16 + */
  17 +class AdminMenuAccessGroup extends \yii\db\ActiveRecord
  18 +{
  19 + /**
  20 + * @inheritdoc
  21 + */
  22 + public static function tableName()
  23 + {
  24 + return 'admin_menu_access_group';
  25 + }
  26 +
  27 + /**
  28 + * @inheritdoc
  29 + */
  30 + public function rules()
  31 + {
  32 + return [
  33 + [['admin_menu_id'], 'integer'],
  34 + [['group'], 'string']
  35 + ];
  36 + }
  37 +
  38 + /**
  39 + * @inheritdoc
  40 + */
  41 + public function attributeLabels()
  42 + {
  43 + return [
  44 + 'admin_menu_access_group_id' => Yii::t('app', 'Admin Access Group ID'),
  45 + 'admin_menu_id' => Yii::t('app', 'Admin Menu ID'),
  46 + 'group' => Yii::t('app', 'Group'),
  47 + ];
  48 + }
  49 +
  50 + /**
  51 + * @return \yii\db\ActiveQuery
  52 + */
  53 + public function getMenu()
  54 + {
  55 + return $this->hasOne(AdminMenu::className(), ['admin_menu_id' => 'admin_menu_id']);
  56 + }
  57 +
  58 + /**
  59 + * @return \yii\db\ActiveQuery
  60 + */
  61 + public function getGroup0()
  62 + {
  63 + return $this->hasOne(AuthRule::className(), ['name' => 'group']);
  64 + }
  65 +}
backend/models/AdminMenuAccessUser.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use common\models\User;
  6 +use Yii;
  7 +
  8 +/**
  9 + * This is the model class for table "admin_menu_access_user".
  10 + *
  11 + * @property integer $admin_menu_id
  12 + * @property integer $user_id
  13 + * @property integer $admin_menu_access_user_id
  14 + *
  15 + * @property AdminMenu $menu
  16 + * @property User $user
  17 + */
  18 +class AdminMenuAccessUser extends \yii\db\ActiveRecord
  19 +{
  20 + /**
  21 + * @inheritdoc
  22 + */
  23 + public static function tableName()
  24 + {
  25 + return 'admin_menu_access_user';
  26 + }
  27 +
  28 + /**
  29 + * @inheritdoc
  30 + */
  31 + public function rules()
  32 + {
  33 + return [
  34 + [['admin_menu_id', 'user_id'], 'integer']
  35 + ];
  36 + }
  37 +
  38 + /**
  39 + * @inheritdoc
  40 + */
  41 + public function attributeLabels()
  42 + {
  43 + return [
  44 + 'admin_menu_id' => Yii::t('app', 'Admin Menu ID'),
  45 + 'user_id' => Yii::t('app', 'User ID'),
  46 + 'admin_menu_access_user_id' => Yii::t('app', 'Admin Menu Access User ID'),
  47 + ];
  48 + }
  49 +
  50 + /**
  51 + * @return \yii\db\ActiveQuery
  52 + */
  53 + public function getMenu()
  54 + {
  55 + return $this->hasOne(AdminMenu::className(), ['admin_menu_id' => 'admin_menu_id']);
  56 + }
  57 +
  58 + /**
  59 + * @return \yii\db\ActiveQuery
  60 + */
  61 + public function getUser()
  62 + {
  63 + return $this->hasOne(User::className(), ['id' => 'user_id']);
  64 + }
  65 +}
backend/models/AdminMenuSearch.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use Yii;
  6 +use yii\base\Model;
  7 +use yii\data\ActiveDataProvider;
  8 +use backend\models\AdminMenu;
  9 +
  10 +/**
  11 + * AdminMenuSearch represents the model behind the search form about `backend\models\AdminMenu`.
  12 + */
  13 +class AdminMenuSearch extends AdminMenu
  14 +{
  15 +
  16 +
  17 + /**
  18 + * @inheritdoc
  19 + */
  20 + public function rules()
  21 + {
  22 + return [
  23 + [['admin_menu_id', 'admin_menu_pid', 'status', 'hide_min', 'sort'], 'integer'],
  24 + [['name', 'path', 'param','parentt'], 'safe'],
  25 + ];
  26 + }
  27 +
  28 + /**
  29 + * @inheritdoc
  30 + */
  31 + public function scenarios()
  32 + {
  33 + // bypass scenarios() implementation in the parent class
  34 + return Model::scenarios();
  35 + }
  36 +
  37 + /**
  38 + * Creates data provider instance with search query applied
  39 + *
  40 + * @param array $params
  41 + *
  42 + * @return ActiveDataProvider
  43 + */
  44 + public function search($params)
  45 + {
  46 + $query = AdminMenu::find();
  47 +
  48 + $dataProvider = new ActiveDataProvider([
  49 + 'query' => $query,
  50 + 'pagination' => [
  51 + 'pageSize' => 5
  52 + ],
  53 + 'sort' => [
  54 + 'attributes' => [
  55 + 'admin_menu_id',
  56 + 'name',
  57 + 'path',
  58 + 'param',
  59 + 'status',
  60 + 'hide_min',
  61 + 'parentt' => [
  62 + 'asc' => ['name' => SORT_ASC],
  63 + 'desc' => ['name' => SORT_DESC],
  64 + 'default' => SORT_DESC
  65 + ]
  66 + ]
  67 + ]
  68 + ]);
  69 +
  70 + $this->load($params);
  71 +
  72 + if (!$this->validate()) {
  73 + // uncomment the following line if you do not want to return any records when validation fails
  74 + // $query->where('0=1');
  75 + return $dataProvider;
  76 + }
  77 +
  78 + $query->andFilterWhere([
  79 + 'admin_menu_id' => $this->admin_menu_id,
  80 + 'admin_menu_pid' => $this->admin_menu_pid,
  81 + 'status' => $this->status,
  82 + 'hide_min' => $this->hide_min,
  83 + 'sort' => $this->sort
  84 + ]);
  85 +
  86 +
  87 + $query->andFilterWhere(['like', 'name', $this->name])
  88 + ->andFilterWhere(['like', 'path', $this->path])
  89 + ->andFilterWhere(['like', 'param', $this->param])
  90 + ->andFilterWhere(['in', 'admin_menu_pid', $this->find()->select(['admin_menu_id'])->andFilterWhere(['like', 'name', $this->parentt])->column()]);
  91 +
  92 + return $dataProvider;
  93 + }
  94 +}
backend/models/Import.php
@@ -42,7 +42,7 @@ class Import extends \yii\db\ActiveRecord @@ -42,7 +42,7 @@ class Import extends \yii\db\ActiveRecord
42 $termin_pid = 8; 42 $termin_pid = 8;
43 // $template_id шаблон каьегорий 43 // $template_id шаблон каьегорий
44 $template_id = 3; 44 $template_id = 3;
45 - $lang_id = 2; 45 + $language_id = 2;
46 $type = 'H'; 46 $type = 'H';
47 47
48 // массив для импортп товаров 48 // массив для импортп товаров
@@ -69,7 +69,7 @@ class Import extends \yii\db\ActiveRecord @@ -69,7 +69,7 @@ class Import extends \yii\db\ActiveRecord
69 // массив для поиска/добавления термина 69 // массив для поиска/добавления термина
70 $basic = [ 70 $basic = [
71 'type' => $type, 71 'type' => $type,
72 - 'lang_id' => $lang_id, 72 + 'language_id' => $language_id,
73 'template_id' => $template_id, 73 'template_id' => $template_id,
74 ]; 74 ];
75 75
backend/models/LanguageSearch.php
@@ -19,8 +19,8 @@ class LanguageSearch extends Language @@ -19,8 +19,8 @@ class LanguageSearch extends Language
19 { 19 {
20 return [ 20 return [
21 [['language_id'], 'integer'], 21 [['language_id'], 'integer'],
22 - [['lang_code', 'language_name'], 'safe'],  
23 - [['is_default', 'active'], 'boolean'], 22 + [['language_code', 'language_name'], 'safe'],
  23 + [['is_default', 'status'], 'boolean'],
24 ]; 24 ];
25 } 25 }
26 26
@@ -59,12 +59,12 @@ class LanguageSearch extends Language @@ -59,12 +59,12 @@ class LanguageSearch extends Language
59 $query->andFilterWhere([ 59 $query->andFilterWhere([
60 'language_id' => $this->language_id, 60 'language_id' => $this->language_id,
61 'is_default' => $this->is_default, 61 'is_default' => $this->is_default,
62 - 'active' => $this->active, 62 + 'status' => $this->status,
63 ]); 63 ]);
64 64
65 - $query->andFilterWhere(['like', 'lang_code', $this->lang_code]) 65 + $query->andFilterWhere(['like', 'language_code', $this->language_code])
66 ->andFilterWhere(['like', 'language_name', $this->language_name]) 66 ->andFilterWhere(['like', 'language_name', $this->language_name])
67 - ->andWhere(['active' => '1']) 67 + ->andWhere(['status' => '1'])
68 ->andWhere(['>', 'language_id', '0']); 68 ->andWhere(['>', 'language_id', '0']);
69 69
70 return $dataProvider; 70 return $dataProvider;
@@ -89,12 +89,12 @@ class LanguageSearch extends Language @@ -89,12 +89,12 @@ class LanguageSearch extends Language
89 $query->andFilterWhere([ 89 $query->andFilterWhere([
90 'language_id' => $this->language_id, 90 'language_id' => $this->language_id,
91 'is_default' => $this->is_default, 91 'is_default' => $this->is_default,
92 - 'active' => $this->active, 92 + 'status' => $this->status,
93 ]); 93 ]);
94 94
95 - $query->andFilterWhere(['like', 'lang_code', $this->lang_code]) 95 + $query->andFilterWhere(['like', 'language_code', $this->language_code])
96 ->andFilterWhere(['like', 'language_name', $this->language_name]) 96 ->andFilterWhere(['like', 'language_name', $this->language_name])
97 - ->andWhere(['active' => '0']); 97 + ->andWhere(['status' => '0']);
98 98
99 return $dataProvider; 99 return $dataProvider;
100 } 100 }
backend/models/Menu.php
@@ -80,7 +80,7 @@ class Menu extends \yii\db\ActiveRecord @@ -80,7 +80,7 @@ class Menu extends \yii\db\ActiveRecord
80 AND menu_location.menu_location_name = \''.$location_name.'\' 80 AND menu_location.menu_location_name = \''.$location_name.'\'
81 INNER JOIN termin ON termin.termin_id = menu.termin_id 81 INNER JOIN termin ON termin.termin_id = menu.termin_id
82 INNER JOIN termin_lang ON termin_lang.termin_id = menu.termin_id 82 INNER JOIN termin_lang ON termin_lang.termin_id = menu.termin_id
83 - AND termin_lang.lang_id = '.Yii::$app->params['lang_id'].' 83 + AND termin_lang.language_id = '.Yii::$app->params['language_id'].'
84 ORDER BY menu.level ASC, menu.sortorder ASC 84 ORDER BY menu.level ASC, menu.sortorder ASC
85 ')->queryAll(); 85 ')->queryAll();
86 /* 86 /*
@@ -90,8 +90,13 @@ class Menu extends \yii\db\ActiveRecord @@ -90,8 +90,13 @@ class Menu extends \yii\db\ActiveRecord
90 ->join( 90 ->join(
91 'INNER JOIN', 91 'INNER JOIN',
92 'termin_lang.termin_id = menu.termin_id', 92 'termin_lang.termin_id = menu.termin_id',
93 - ['lang_id' => yii::$app->params['lang_id']]) 93 + ['language_id' => yii::$app->params['language_id']])
94 ->all(); 94 ->all();
95 */ 95 */
96 } 96 }
  97 +
  98 + public function getTerminLang()
  99 + {
  100 + return $this->hasOne(TerminLang::className(), ['termin_id' => 'termin_id']);
  101 + }
97 } 102 }
backend/models/MenuLocation.php
@@ -59,6 +59,6 @@ class MenuLocation extends \yii\db\ActiveRecord @@ -59,6 +59,6 @@ class MenuLocation extends \yii\db\ActiveRecord
59 */ 59 */
60 public function getLangs() 60 public function getLangs()
61 { 61 {
62 - return $this->hasMany(Language::className(), ['language_id' => 'lang_id'])->viaTable('menu_location_lang', ['menu_location_id' => 'menu_location_id']); 62 + return $this->hasMany(Language::className(), ['language_id' => 'language_id'])->viaTable('menu_location_lang', ['menu_location_id' => 'menu_location_id']);
63 } 63 }
64 } 64 }
backend/models/MenuLocationLang.php
@@ -9,7 +9,7 @@ use Yii; @@ -9,7 +9,7 @@ use Yii;
9 * 9 *
10 * @property integer $menu_location_id 10 * @property integer $menu_location_id
11 * @property string $menu_location_title 11 * @property string $menu_location_title
12 - * @property integer $lang_id 12 + * @property integer $language_id
13 * 13 *
14 * @property Language $lang 14 * @property Language $lang
15 * @property MenuLocation $menuLocation 15 * @property MenuLocation $menuLocation
@@ -30,8 +30,8 @@ class MenuLocationLang extends \yii\db\ActiveRecord @@ -30,8 +30,8 @@ class MenuLocationLang extends \yii\db\ActiveRecord
30 public function rules() 30 public function rules()
31 { 31 {
32 return [ 32 return [
33 - [['menu_location_id', 'menu_location_title', 'lang_id'], 'required'],  
34 - [['menu_location_id', 'lang_id'], 'integer'], 33 + [['menu_location_id', 'menu_location_title', 'language_id'], 'required'],
  34 + [['menu_location_id', 'language_id'], 'integer'],
35 [['menu_location_title'], 'string', 'max' => 250] 35 [['menu_location_title'], 'string', 'max' => 250]
36 ]; 36 ];
37 } 37 }
@@ -44,7 +44,7 @@ class MenuLocationLang extends \yii\db\ActiveRecord @@ -44,7 +44,7 @@ class MenuLocationLang extends \yii\db\ActiveRecord
44 return [ 44 return [
45 'menu_location_id' => Yii::t('app', 'Menu Location ID'), 45 'menu_location_id' => Yii::t('app', 'Menu Location ID'),
46 'menu_location_title' => Yii::t('app', 'Menu Location Title'), 46 'menu_location_title' => Yii::t('app', 'Menu Location Title'),
47 - 'lang_id' => Yii::t('app', 'Lang ID'), 47 + 'language_id' => Yii::t('app', 'Lang ID'),
48 ]; 48 ];
49 } 49 }
50 50
@@ -53,7 +53,7 @@ class MenuLocationLang extends \yii\db\ActiveRecord @@ -53,7 +53,7 @@ class MenuLocationLang extends \yii\db\ActiveRecord
53 */ 53 */
54 public function getLang() 54 public function getLang()
55 { 55 {
56 - return $this->hasOne(Language::className(), ['language_id' => 'lang_id']); 56 + return $this->hasOne(Language::className(), ['language_id' => 'language_id']);
57 } 57 }
58 58
59 /** 59 /**
backend/models/MenuSearch.php
@@ -49,7 +49,8 @@ class MenuSearch extends Menu @@ -49,7 +49,8 @@ class MenuSearch extends Menu
49 49
50 $this->load($params); 50 $this->load($params);
51 51
52 - if (!$this->validate()) { 52 + if (! $this->validate())
  53 + {
53 // uncomment the following line if you do not want to return any records when validation fails 54 // uncomment the following line if you do not want to return any records when validation fails
54 // $query->where('0=1'); 55 // $query->where('0=1');
55 return $dataProvider; 56 return $dataProvider;
@@ -67,7 +68,7 @@ class MenuSearch extends Menu @@ -67,7 +68,7 @@ class MenuSearch extends Menu
67 ]); 68 ]);
68 69
69 $query->andFilterWhere(['like', 'name', $this->name]) 70 $query->andFilterWhere(['like', 'name', $this->name])
70 - ->andFilterWhere(['like', 'url', $this->url]); 71 + ->andFilterWhere(['like', 'url', $this->url]);
71 72
72 return $dataProvider; 73 return $dataProvider;
73 } 74 }
backend/models/NewOptionsLang.php
@@ -9,7 +9,7 @@ use Yii; @@ -9,7 +9,7 @@ use Yii;
9 * 9 *
10 * @property integer $primary 10 * @property integer $primary
11 * @property integer $id 11 * @property integer $id
12 - * @property integer $lang_id 12 + * @property integer $language_id
13 * @property string $value 13 * @property string $value
14 */ 14 */
15 class NewOptionsLang extends \yii\db\ActiveRecord 15 class NewOptionsLang extends \yii\db\ActiveRecord
@@ -32,7 +32,7 @@ class NewOptionsLang extends \yii\db\ActiveRecord @@ -32,7 +32,7 @@ class NewOptionsLang extends \yii\db\ActiveRecord
32 { 32 {
33 return [ 33 return [
34 [['id', 'value'], 'required'], 34 [['id', 'value'], 'required'],
35 - [['id', 'lang_id'], 'integer'], 35 + [['id', 'language_id'], 'integer'],
36 [['value'], 'string'] 36 [['value'], 'string']
37 ]; 37 ];
38 } 38 }
@@ -45,7 +45,7 @@ class NewOptionsLang extends \yii\db\ActiveRecord @@ -45,7 +45,7 @@ class NewOptionsLang extends \yii\db\ActiveRecord
45 return [ 45 return [
46 'primary' => Yii::t('app', 'Primary'), 46 'primary' => Yii::t('app', 'Primary'),
47 'id' => Yii::t('app', 'ID'), 47 'id' => Yii::t('app', 'ID'),
48 - 'lang_id' => Yii::t('app', 'Lang ID'), 48 + 'language_id' => Yii::t('app', 'Lang ID'),
49 'value' => Yii::t('app', 'Value'), 49 'value' => Yii::t('app', 'Value'),
50 ]; 50 ];
51 } 51 }
backend/models/NewOptionsLangSearch.php
@@ -18,7 +18,7 @@ class NewOptionsLangSearch extends NewOptionsLang @@ -18,7 +18,7 @@ class NewOptionsLangSearch extends NewOptionsLang
18 public function rules() 18 public function rules()
19 { 19 {
20 return [ 20 return [
21 - [['primary', 'id', 'lang_id'], 'integer'], 21 + [['primary', 'id', 'language_id'], 'integer'],
22 [['value'], 'safe'], 22 [['value'], 'safe'],
23 ]; 23 ];
24 } 24 }
@@ -58,7 +58,7 @@ class NewOptionsLangSearch extends NewOptionsLang @@ -58,7 +58,7 @@ class NewOptionsLangSearch extends NewOptionsLang
58 $query->andFilterWhere([ 58 $query->andFilterWhere([
59 'primary' => $this->primary, 59 'primary' => $this->primary,
60 'id' => $this->id, 60 'id' => $this->id,
61 - 'lang_id' => $this->lang_id, 61 + 'language_id' => $this->language_id,
62 ]); 62 ]);
63 63
64 $query->andFilterWhere(['like', 'value', $this->value]); 64 $query->andFilterWhere(['like', 'value', $this->value]);
backend/models/Termin.php
@@ -57,7 +57,7 @@ class Termin extends \yii\db\ActiveRecord @@ -57,7 +57,7 @@ class Termin extends \yii\db\ActiveRecord
57 57
58 /** 58 /**
59 * Выполняет поиск по параметрам 59 * Выполняет поиск по параметрам
60 - * @param array $param принимает [termin_id, lang_id, return_one, return_field, show_all] 60 + * @param array $param принимает [termin_id, language_id, return_one, return_field, show_all]
61 * @return array one | array all | string значение масива 61 * @return array one | array all | string значение масива
62 */ 62 */
63 public function finInfo (array $params = []) 63 public function finInfo (array $params = [])
@@ -65,7 +65,7 @@ class Termin extends \yii\db\ActiveRecord @@ -65,7 +65,7 @@ class Termin extends \yii\db\ActiveRecord
65 Tools::ifNotExist ($params, array ( 65 Tools::ifNotExist ($params, array (
66 'termin_id' => false, 66 'termin_id' => false,
67 'termin_pid' => false, 67 'termin_pid' => false,
68 - 'lang_id' => Yii::$app->params['lang_id'], 68 + 'language_id' => Yii::$app->params['language_id'],
69 'return_one' => false, 69 'return_one' => false,
70 'return_field' => false, 70 'return_field' => false,
71 'show_all' => false, 71 'show_all' => false,
@@ -92,9 +92,9 @@ class Termin extends \yii\db\ActiveRecord @@ -92,9 +92,9 @@ class Termin extends \yii\db\ActiveRecord
92 'termin.termin_id = termin_lang.termin_id' 92 'termin.termin_id = termin_lang.termin_id'
93 ); 93 );
94 94
95 - if ($params['lang_id']) 95 + if ($params['language_id'])
96 { 96 {
97 - $WHERE['termin_lang.lang_id'] = $params['lang_id']; 97 + $WHERE['termin_lang.language_id'] = $params['language_id'];
98 } 98 }
99 99
100 // структура 100 // структура
@@ -169,7 +169,7 @@ class Termin extends \yii\db\ActiveRecord @@ -169,7 +169,7 @@ class Termin extends \yii\db\ActiveRecord
169 */ 169 */
170 public function getLangs() 170 public function getLangs()
171 { 171 {
172 - return $this->hasMany(Language::className(), ['language_id' => 'lang_id']) 172 + return $this->hasMany(Language::className(), ['language_id' => 'language_id'])
173 ->viaTable('termin_lang', ['termin_id' => 'termin_id']); 173 ->viaTable('termin_lang', ['termin_id' => 'termin_id']);
174 } 174 }
175 175
backend/models/TerminLang.php
@@ -8,7 +8,7 @@ use Yii; @@ -8,7 +8,7 @@ use Yii;
8 * This is the model class for table "termin_lang". 8 * This is the model class for table "termin_lang".
9 * 9 *
10 * @property integer $termin_id 10 * @property integer $termin_id
11 - * @property integer $lang_id 11 + * @property integer $language_id
12 * @property string $termin_title 12 * @property string $termin_title
13 * @property string $termin_alias 13 * @property string $termin_alias
14 * 14 *
@@ -31,8 +31,8 @@ class TerminLang extends \yii\db\ActiveRecord @@ -31,8 +31,8 @@ class TerminLang extends \yii\db\ActiveRecord
31 public function rules() 31 public function rules()
32 { 32 {
33 return [ 33 return [
34 - [['lang_id'], 'required'],  
35 - [['lang_id'], 'integer'], 34 + [['language_id'], 'required'],
  35 + [['language_id'], 'integer'],
36 [['termin_title', 'termin_alias'], 'string', 'max' => 250] 36 [['termin_title', 'termin_alias'], 'string', 'max' => 250]
37 ]; 37 ];
38 } 38 }
@@ -44,7 +44,7 @@ class TerminLang extends \yii\db\ActiveRecord @@ -44,7 +44,7 @@ class TerminLang extends \yii\db\ActiveRecord
44 { 44 {
45 return [ 45 return [
46 'termin_id' => Yii::t('app', 'Termin ID'), 46 'termin_id' => Yii::t('app', 'Termin ID'),
47 - 'lang_id' => Yii::t('app', 'Lang ID'), 47 + 'language_id' => Yii::t('app', 'Lang ID'),
48 'termin_title' => Yii::t('app', 'Termin Title'), 48 'termin_title' => Yii::t('app', 'Termin Title'),
49 'termin_alias' => Yii::t('app', 'Termin Alias'), 49 'termin_alias' => Yii::t('app', 'Termin Alias'),
50 ]; 50 ];
@@ -55,7 +55,7 @@ class TerminLang extends \yii\db\ActiveRecord @@ -55,7 +55,7 @@ class TerminLang extends \yii\db\ActiveRecord
55 */ 55 */
56 public function getLang() 56 public function getLang()
57 { 57 {
58 - return $this->hasOne(Language::className(), ['language_id' => 'lang_id']); 58 + return $this->hasOne(Language::className(), ['language_id' => 'language_id']);
59 } 59 }
60 60
61 /** 61 /**
backend/models/TerminSearch.php
@@ -19,7 +19,7 @@ class TerminSearch extends Termin @@ -19,7 +19,7 @@ class TerminSearch extends Termin
19 { 19 {
20 return [ 20 return [
21 [['termin_id', 'is_book'], 'integer'], 21 [['termin_id', 'is_book'], 'integer'],
22 - [['termin_name'], 'safe'], 22 + [['termin_name', 'termin_title', 'termin_parent_title'], 'safe'],
23 ]; 23 ];
24 } 24 }
25 25
@@ -42,6 +42,7 @@ class TerminSearch extends Termin @@ -42,6 +42,7 @@ class TerminSearch extends Termin
42 public function search($params) 42 public function search($params)
43 { 43 {
44 $query = Termin::find(); 44 $query = Termin::find();
  45 + $query->select('*');
45 46
46 $dataProvider = new ActiveDataProvider([ 47 $dataProvider = new ActiveDataProvider([
47 'query' => $query, 48 'query' => $query,
@@ -53,7 +54,9 @@ class TerminSearch extends Termin @@ -53,7 +54,9 @@ class TerminSearch extends Termin
53 // uncomment the following line if you do not want to return any records when validation fails 54 // uncomment the following line if you do not want to return any records when validation fails
54 // $query->where('0=1'); 55 // $query->where('0=1');
55 return $dataProvider; 56 return $dataProvider;
56 - } 57 + }
  58 +
  59 + $query->joinWith(['terminLangs', 'terminStructures']);
57 60
58 $query->andFilterWhere([ 61 $query->andFilterWhere([
59 'termin_id' => $this->termin_id, 62 'termin_id' => $this->termin_id,
@@ -61,6 +64,8 @@ class TerminSearch extends Termin @@ -61,6 +64,8 @@ class TerminSearch extends Termin
61 ]); 64 ]);
62 65
63 $query->andFilterWhere(['like', 'termin_name', $this->termin_name]); 66 $query->andFilterWhere(['like', 'termin_name', $this->termin_name]);
  67 + $query->andFilterWhere(['like', TerminLang::tableName().'.termin_title', $this->termin_title]);
  68 + //$query->andFilterWhere(['like', 'termin_title', $this->termin_title]);
64 69
65 return $dataProvider; 70 return $dataProvider;
66 } 71 }
backend/models/TerminStructure.php
@@ -51,7 +51,7 @@ class TerminStructure extends \yii\db\ActiveRecord @@ -51,7 +51,7 @@ class TerminStructure extends \yii\db\ActiveRecord
51 { 51 {
52 return $this->hasOne(Termin::className(), ['termin_id' => 'termin_id']); 52 return $this->hasOne(Termin::className(), ['termin_id' => 'termin_id']);
53 } 53 }
54 - 54 +
55 /** 55 /**
56 * @return \yii\db\ActiveQuery 56 * @return \yii\db\ActiveQuery
57 */ 57 */
backend/views/admin-menu/_form.php 0 → 100644
  1 +<?php
  2 +
  3 +use backend\models\AdminMenu;
  4 +use common\models\Tools;
  5 +use yii\helpers\Html;
  6 +use yii\widgets\ActiveForm;
  7 +
  8 +/* @var $this yii\web\View */
  9 +/* @var $model backend\models\AdminMenu */
  10 +/* @var $form yii\widgets\ActiveForm */
  11 +?>
  12 +
  13 +<div class="admin-menu-form">
  14 +
  15 + <?php $form = ActiveForm::begin(); ?>
  16 +
  17 + <?= $form->field($model, 'name')->textInput() ?>
  18 +
  19 + <?= $form->field($model, 'status')->checkbox() ?>
  20 +
  21 + <?= $form->field($model, 'hide_min')->checkbox() ?>
  22 +
  23 + <?= $form->field($model, 'path')->textInput() ?>
  24 +
  25 + <?= $form->field($model, 'param')->textInput() ?>
  26 +
  27 + <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
  28 + <div class="panel panel-default">
  29 + <div class="panel-heading" role="tab" id="headingOne">
  30 + <h4 class="panel-title">
  31 + <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
  32 + <?= Yii::t('app', 'Parent menu item') ?>
  33 + </a>
  34 + </h4>
  35 + </div>
  36 + <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne">
  37 + <ul class="list-group checkboxer">
  38 + <?php
  39 + $roots = AdminMenu::buildMenuSelect();
  40 + echo $form->field($model, 'admin_menu_pid', ['options' => ['class' => 'form-group list-group-item level0 checkboxer_container', 'tag' => 'li']])->error(false)->radio(['value' => 0, 'uncheck' => null, 'label' => Yii::t('app', 'root'), 'labelOptions' => ['class' => 'checkboxer_label']]);
  41 + foreach($roots as $root) {
  42 + echo $form->field($model, 'admin_menu_pid', ['options' => ['class' => 'form-group list-group-item level1 checkboxer_container', 'tag' => 'li']])->error(false)->radio(['value' => $root['id'], 'uncheck' => null, 'label' => Yii::t('app', $root['label']), 'labelOptions' => ['class' => 'checkboxer_label']]);
  43 + if($root['items']) {
  44 + foreach($root['items'] as $submenu) {
  45 + echo $form->field($model, 'admin_menu_pid', ['options' => ['class' => 'form-group list-group-item level2 checkboxer_container', 'tag' => 'li']])->error(false)->radio(['value' => $submenu['id'], 'uncheck' => null, 'label' => Yii::t('app', $submenu['label']), 'labelOptions' => ['class' => 'checkboxer_label']]);
  46 + }
  47 + }
  48 + }
  49 + ?>
  50 + </ul>
  51 + </div>
  52 + </div>
  53 + </div>
  54 +
  55 + <div class="form-group">
  56 + <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => ($model->isNewRecord ? 'btn btn-success' : 'btn btn-primary') . ' btn-flat']) ?>
  57 + </div>
  58 +
  59 + <?php ActiveForm::end(); ?>
  60 +
  61 +</div>
backend/views/admin-menu/_search.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model backend\models\AdminMenuSearch */
  8 +/* @var $form yii\widgets\ActiveForm */
  9 +?>
  10 +
  11 +<div class="admin-menu-search">
  12 +
  13 + <?php $form = ActiveForm::begin([
  14 + 'action' => ['index'],
  15 + 'method' => 'get',
  16 + ]); ?>
  17 +
  18 + <?= $form->field($model, 'id') ?>
  19 +
  20 + <?= $form->field($model, 'parent_id') ?>
  21 +
  22 + <?= $form->field($model, 'active') ?>
  23 +
  24 + <?= $form->field($model, 'hide_min') ?>
  25 +
  26 + <?= $form->field($model, 'sort') ?>
  27 +
  28 + <?php // echo $form->field($model, 'name') ?>
  29 +
  30 + <?php // echo $form->field($model, 'path') ?>
  31 +
  32 + <?php // echo $form->field($model, 'params') ?>
  33 +
  34 + <div class="form-group">
  35 + <?= Html::submitButton(Yii::t('app', 'Search'), ['class' => 'btn btn-primary']) ?>
  36 + <?= Html::resetButton(Yii::t('app', 'Reset'), ['class' => 'btn btn-default']) ?>
  37 + </div>
  38 +
  39 + <?php ActiveForm::end(); ?>
  40 +
  41 +</div>
backend/views/admin-menu/create.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model backend\models\AdminMenu */
  8 +
  9 +$this->title = Yii::t('app', 'Create Admin Menu');
  10 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Admin Menus'), 'url' => ['index']];
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +<div class="admin-menu-create">
  14 + <div class="box box-primary">
  15 + <div class="box-body">
  16 + <?= $this->render('_form', [
  17 + 'model' => $model,
  18 + ]) ?>
  19 + </div>
  20 + </div>
  21 +
  22 +</div>
backend/views/admin-menu/index.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\grid\GridView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $searchModel backend\models\AdminMenuSearch */
  8 +/* @var $dataProvider yii\data\ActiveDataProvider */
  9 +
  10 +$this->title = Yii::t('app', 'Admin Menus');
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +<div class="admin-menu-index box box-primary">
  14 +
  15 + <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
  16 +
  17 + <?= GridView::widget([
  18 + 'dataProvider' => $dataProvider,
  19 + 'filterModel' => $searchModel,
  20 + 'showFooter' => true,
  21 + 'layout' => "<div class='box-header with-border admin_grid_action'>
  22 + <div class='action_link'>"
  23 + .Html::a(Yii::t('app', 'Create Admin Menu'), ['create'], ['class' => 'btn btn-success btn-flat']).
  24 + "</div>
  25 + <div class='pull-right'>
  26 + {pager}
  27 + </div>
  28 + </div>
  29 + <div class='box-body no-padding table-responsive'>
  30 + {items}
  31 + </div>
  32 + <div class='box-footer admin_grid_action'>
  33 + <div class='action_link'>"
  34 + .Html::a(Yii::t('app', 'Create Admin Menu'), ['create'], ['class' => 'btn btn-success btn-flat']).
  35 + "</div>
  36 + <div class='pull-right'>
  37 + {pager}
  38 + </div>
  39 + </div>",
  40 + 'columns' => [
  41 + ['class' => 'yii\grid\ActionColumn'],
  42 + 'admin_menu_id',
  43 + 'name',
  44 + 'path',
  45 + 'param',
  46 + [
  47 + 'format' => 'raw',
  48 + 'filter' => [
  49 + '1'=>'Отображаются',
  50 + '0'=>'Скрытые',
  51 + ],
  52 + 'value' => function($data){
  53 + if($data->status){
  54 + $status_img = '<i style="color: #008000" class="glyphicon glyphicon-ok"></i>';
  55 + } else {
  56 + $status_img = '<i style="color: red" class="glyphicon glyphicon-remove"></i>';
  57 + }
  58 + return $status_img;
  59 + },
  60 + 'attribute'=>'status',
  61 + ],
  62 + [
  63 + 'attribute' => 'parentt',
  64 + 'content' =>
  65 + function($model, $key, $index, $column) {
  66 + if($model->parent->admin_menu_id) {
  67 + return $model->parent->name;
  68 + } else {
  69 + return '<i class="small">'.Yii::t('app', 'Корневой элемент').'</i>';
  70 + }
  71 + }
  72 + ],
  73 + [
  74 + 'format' => 'raw',
  75 + 'filter' => [
  76 + '1'=>'Отображаются',
  77 + '0'=>'Скрытые',
  78 + ],
  79 + 'value' => function($data){
  80 + if($data->hide_min){
  81 + $status_img = '<i style="color: #008000" class="glyphicon glyphicon-ok"></i>';
  82 + } else {
  83 + $status_img = '<i style="color: red" class="glyphicon glyphicon-remove"></i>';
  84 + }
  85 + return $status_img;
  86 + },
  87 + 'attribute'=>'hide_min',
  88 + ],
  89 + ],
  90 + ]); ?>
  91 +
  92 +</div>
backend/views/admin-menu/update.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +
  5 +/* @var $this yii\web\View */
  6 +/* @var $model backend\models\AdminMenu */
  7 +
  8 +$this->title = Yii::t('app', 'Update') . ': ' . $model->name;
  9 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Admin Menus'), 'url' => ['index']];
  10 +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->admin_menu_id]];
  11 +$this->params['breadcrumbs'][] = Yii::t('app', 'Update');
  12 +?>
  13 +<div class="admin-menu-update">
  14 +
  15 + <?= $this->render('_form', [
  16 + 'model' => $model,
  17 + ]) ?>
  18 +
  19 +</div>
backend/views/admin-menu/view.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\DetailView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model backend\models\AdminMenu */
  8 +
  9 +$this->title = Yii::t('app', 'Admin Menus').': '.$model->name;
  10 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Admin Menus'), 'url' => ['index']];
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +
  14 +<div class="admin-menu-view box box-primary">
  15 +<?= DetailView::widget([
  16 + 'model' => $model,
  17 + 'attributes' => [
  18 + 'admin_menu_id',
  19 + 'admin_menu_pid',
  20 + 'status',
  21 + 'hide_min',
  22 + 'sort',
  23 + 'name',
  24 + 'path',
  25 + 'param',
  26 + ],
  27 + ]) ?>
  28 +
  29 + <div class="box-footer with-border">
  30 + <p>
  31 + <?= Html::a(Yii::t('app', 'Update'), ['update', 'id' => $model->admin_menu_id], ['class' => 'btn btn-primary btn-flat']) ?>
  32 + <?= Html::a(Yii::t('app', 'Delete'), ['delete', 'id' => $model->admin_menu_id], [
  33 + 'class' => 'btn btn-danger btn-flat',
  34 + 'data' => [
  35 + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'),
  36 + 'method' => 'post',
  37 + ],
  38 + ]) ?>
  39 + <?= Html::a(Yii::t('app', 'Back'), ['index'], ['class' => 'btn btn-default btn-flat']) ?>
  40 + </p>
  41 + </div>
  42 +
  43 +</div>
0 \ No newline at end of file 44 \ No newline at end of file
backend/views/blog/articles.php
@@ -21,7 +21,7 @@ echo GridView::widget([ @@ -21,7 +21,7 @@ echo GridView::widget([
21 'class' => Column::className(), 21 'class' => Column::className(),
22 'header' => Yii::t('app', 'Name'), 22 'header' => Yii::t('app', 'Name'),
23 'content' => function($model, $key, $index, $column) { 23 'content' => function($model, $key, $index, $column) {
24 - return $model->getArticleLangs()->where(['lang_id' => Language::getDefaultLang()->language_id])->one()->name; 24 + return $model->getArticleLangs()->where(['language_id' => Language::getDefaultLang()->language_id])->one()->name;
25 } 25 }
26 ], 26 ],
27 [ 27 [
backend/views/language/_form_adress_edit.php
@@ -21,7 +21,7 @@ use yii\widgets\ActiveForm; @@ -21,7 +21,7 @@ use yii\widgets\ActiveForm;
21 <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?> 21 <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?>
22 <?php 22 <?php
23 if($row->translate) { 23 if($row->translate) {
24 - foreach($row->getLangs() as $lang_id => $lang) { 24 + foreach($row->getLangs() as $language_id => $lang) {
25 ?> 25 ?>
26 <div class="form-group"> 26 <div class="form-group">
27 <div class="col-xs-1"><?=$lang['lang_code']?></div> 27 <div class="col-xs-1"><?=$lang['lang_code']?></div>
backend/views/language/index.php
@@ -28,7 +28,7 @@ echo $this-&gt;render(&#39;layout&#39;); @@ -28,7 +28,7 @@ echo $this-&gt;render(&#39;layout&#39;);
28 } 28 }
29 ], 29 ],
30 'language_name', 30 'language_name',
31 - 'lang_code', 31 + 'language_code',
32 'is_default:boolean', 32 'is_default:boolean',
33 [ 33 [
34 'class' => 'yii\grid\ActionColumn', 34 'class' => 'yii\grid\ActionColumn',
backend/views/language/view_adress.php
@@ -24,7 +24,7 @@ echo $this-&gt;render(&#39;layout&#39;); @@ -24,7 +24,7 @@ echo $this-&gt;render(&#39;layout&#39;);
24 [ 24 [
25 'class' => 'yii\grid\Column', 25 'class' => 'yii\grid\Column',
26 'content' => function($model, $key, $index, $column) { 26 'content' => function($model, $key, $index, $column) {
27 - return OptionLang::find()->select('value')->where(['lang_id' => 0, 'id' => $model->option_id])->scalar(); 27 + return OptionLang::find()->select('value')->where(['language_id' => 0, 'id' => $model->option_id])->scalar();
28 }, 28 },
29 'header' => Yii::t('app', 'adress_name') 29 'header' => Yii::t('app', 'adress_name')
30 ], 30 ],
backend/views/layouts/header.php
@@ -23,6 +23,19 @@ $username = Yii::$app-&gt;user-&gt;identity-&gt;firstname.&#39; &#39;.Yii::$app-&gt;user-&gt;identity-&gt; @@ -23,6 +23,19 @@ $username = Yii::$app-&gt;user-&gt;identity-&gt;firstname.&#39; &#39;.Yii::$app-&gt;user-&gt;identity-&gt;
23 23
24 <ul class="nav navbar-nav"> 24 <ul class="nav navbar-nav">
25 25
  26 + <!-- search form -->
  27 + <li class="header-search">
  28 + <form action="#" method="get" class="sidebar-form">
  29 + <div class="input-group">
  30 + <input type="text" name="q" class="form-control" placeholder="Search..."/>
  31 + <span class="input-group-btn">
  32 + <button type='submit' name='search' id='search-btn' class="btn btn-flat"><i class="fa fa-search"></i>
  33 + </button>
  34 + </span>
  35 + </div>
  36 + </form>
  37 + </li>
  38 + <!-- /.search form -->
26 <!-- Messages: style can be found in dropdown.less--> 39 <!-- Messages: style can be found in dropdown.less-->
27 <li class="dropdown messages-menu"> 40 <li class="dropdown messages-menu">
28 <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 41 <a href="#" class="dropdown-toggle" data-toggle="dropdown">
backend/views/layouts/left.php
@@ -14,79 +14,15 @@ @@ -14,79 +14,15 @@
14 </div> 14 </div>
15 </div> 15 </div>
16 16
17 - <!-- search form -->  
18 - <form action="#" method="get" class="sidebar-form">  
19 - <div class="input-group">  
20 - <input type="text" name="q" class="form-control" placeholder="Search..."/>  
21 - <span class="input-group-btn">  
22 - <button type='submit' name='search' id='search-btn' class="btn btn-flat"><i class="fa fa-search"></i>  
23 - </button>  
24 - </span>  
25 - </div>  
26 - </form>  
27 - <!-- /.search form -->  
28 -  
29 - <?= dmstr\widgets\Menu::widget(  
30 - [  
31 - 'options' => ['class' => 'sidebar-menu'],  
32 - 'items' => [  
33 - ['label' => 'Термины', 'icon' => 'fa fa-file-code-o', 'url' => ['/termin/']],  
34 - //['label' => Yii::t('app', 'Pages'), 'icon' => 'fa fa-file-code-o', 'url' => ['/page/']],  
35 - //['label' => 'Каталог', 'icon' => 'fa fa-file-code-o', 'url' => ['/catalog/']],  
36 - ['label' => 'Меню', 'icon' => 'fa fa-file-code-o', 'url' => ['/menu/']],  
37 - ['label' => 'Заявки', 'icon' => 'fa fa-file-code-o', 'url' => ['/site/requests/']],  
38 - ['label' => 'Gii', 'icon' => 'fa fa-file-code-o', 'url' => ['/gii']],  
39 - ['label' => 'Debug', 'icon' => 'fa fa-dashboard', 'url' => ['/debug']],  
40 - ['label' => 'Login', 'url' => ['site/login'], 'visible' => Yii::$app->user->isGuest],  
41 - ['label' => 'Пользователи', 'icon' => 'fa fa-file-code-o', 'url' => ['/user/']],  
42 - [  
43 - 'label' => Yii::t('app', 'Blog'),  
44 - 'icon' => 'fa fa-share',  
45 - 'url' => '#',  
46 - 'items' => [  
47 - ['label' => Yii::t('app', 'Static pages'), 'icon' => 'fa fa-file-code-o', 'url' => ['blog/articles', 'category_id' => '63'],],  
48 - ['label' => Yii::t('app', 'Categories'), 'icon' => 'fa fa-dashboard', 'url' => ['blog/categories'],],  
49 - ['label' => Yii::t('app', 'Articles'), 'icon' => 'fa fa-dashboard', 'url' => ['blog/articles'],],  
50 - ],  
51 - ],  
52 - [  
53 - 'label' => 'Роли',  
54 - 'icon' => 'fa fa-share',  
55 - 'url' => '#',  
56 - 'items' => [  
57 - ['label' => 'Управление ролями', 'icon' => 'fa fa-file-code-o', 'url' => ['/permit/access/role'],],  
58 - ['label' => 'Управление правами доступа', 'icon' => 'fa fa-dashboard', 'url' => ['/permit/access/permission'],],  
59 - ],  
60 - ],  
61 - [  
62 - 'label' => 'Same tools',  
63 - 'icon' => 'fa fa-share',  
64 - 'url' => '#',  
65 - 'items' => [  
66 - ['label' => 'Gii', 'icon' => 'fa fa-file-code-o', 'url' => ['/gii'],],  
67 - ['label' => 'Debug', 'icon' => 'fa fa-dashboard', 'url' => ['/debug'],],  
68 - [  
69 - 'label' => 'Level One',  
70 - 'icon' => 'fa fa-circle-o',  
71 - 'url' => '#',  
72 - 'items' => [  
73 - ['label' => 'Level Two', 'icon' => 'fa fa-circle-o', 'url' => '#',],  
74 - [  
75 - 'label' => 'Level Two',  
76 - 'icon' => 'fa fa-circle-o',  
77 - 'url' => '#',  
78 - 'items' => [  
79 - ['label' => 'Level Three', 'icon' => 'fa fa-circle-o', 'url' => '#',],  
80 - ['label' => 'Level Three', 'icon' => 'fa fa-circle-o', 'url' => '#',],  
81 - ],  
82 - ],  
83 - ],  
84 - ],  
85 - ],  
86 - ],  
87 - ],  
88 - ]  
89 - ) ?> 17 + <?= dmstr\widgets\Menu::widget([
  18 + 'options' => ['class' => 'sidebar-menu'],
  19 + 'items' => array_merge(
  20 + \backend\models\AdminMenu::buildMenu(),
  21 + [
  22 + ['label' => Yii::t('app', 'Settings'), 'url' => ['/settings/index'], 'icon' => 'fa fa-gear']
  23 + ]
  24 + ),
  25 + ]) ?>
90 26
91 </section> 27 </section>
92 28
backend/views/layouts/settings.php 0 → 100644
  1 +<?php
  2 +
  3 +use dmstr\widgets\Menu;
  4 +use yii\widgets\Breadcrumbs;
  5 +use yii\helpers\Html;
  6 +
  7 +/* @var $content string */
  8 +$this->beginContent('@app/views/layouts/main.php');
  9 +?>
  10 + <div class="row">
  11 + <div class="col-md-3">
  12 + <div class="box box-solid">
  13 + <div class="box-header with-border">
  14 + <h3 class="box-title"><?=Yii::t('app', 'Settings categories')?></h3>
  15 + <div class="box-tools">
  16 + <button type="button" class="btn btn-box-tool" data-widget="collapse">
  17 + <i class="fa fa-minus"></i>
  18 + </button>
  19 + </div>
  20 + </div>
  21 + <div class="box-body no-padding">
  22 + <?php
  23 + echo Menu::widget([
  24 + 'options' => [
  25 + 'class' => 'nav nav-pills nav-stacked'
  26 + ],
  27 + 'items' => [
  28 + ['label' => Yii::t('app', 'Admin Menus'), 'url' => ['/admin-menu/index'], 'icon' => 'fa fa-navicon'],
  29 + ['label' => Yii::t('app', 'Next menu item'), 'url' => ['#'], 'icon' => 'fa fa-arrow-circle-o-right'],
  30 + ],
  31 + ]);
  32 + ?>
  33 + </div>
  34 + </div>
  35 + </div>
  36 + <div class="col-md-9">
  37 + <?= $content ?>
  38 + </div>
  39 + </div>
  40 +<?php $this->endContent() ?>
0 \ No newline at end of file 41 \ No newline at end of file
backend/views/menu/index.php
@@ -25,13 +25,15 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -25,13 +25,15 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
25 'filterModel' => $searchModel, 25 'filterModel' => $searchModel,
26 'columns' => [ 26 'columns' => [
27 ['class' => 'yii\grid\SerialColumn'], 27 ['class' => 'yii\grid\SerialColumn'],
28 - 28 +/*
29 [ 29 [
30 'attribute' => Yii::t('app', 'termin'), 30 'attribute' => Yii::t('app', 'termin'),
31 - 'value' => function ($model) {  
32 - return empty($model->termin_id) ? '-' : $model->termin_lang->termin_title; 31 + 'value' => function ($model)
  32 + {
  33 + return empty ($model->termin_id) ? '-' : $model->terminLang->termin_title;
33 }, 34 },
34 - ], 35 + ],
  36 + */
35 'menu_pid', 37 'menu_pid',
36 'level', 38 'level',
37 // 'sortorder', 39 // 'sortorder',
backend/views/new-options-lang/_form.php
@@ -14,7 +14,7 @@ use yii\widgets\ActiveForm; @@ -14,7 +14,7 @@ use yii\widgets\ActiveForm;
14 14
15 <?= $form->field($model, 'id')->textInput() ?> 15 <?= $form->field($model, 'id')->textInput() ?>
16 16
17 - <?= $form->field($model, 'lang_id')->textInput() ?> 17 + <?= $form->field($model, 'language_id')->textInput() ?>
18 18
19 <?= $form->field($model, 'value')->textarea(['rows' => 6]) ?> 19 <?= $form->field($model, 'value')->textarea(['rows' => 6]) ?>
20 20
backend/views/new-options-lang/_search.php
@@ -19,7 +19,7 @@ use yii\widgets\ActiveForm; @@ -19,7 +19,7 @@ use yii\widgets\ActiveForm;
19 19
20 <?= $form->field($model, 'id') ?> 20 <?= $form->field($model, 'id') ?>
21 21
22 - <?= $form->field($model, 'lang_id') ?> 22 + <?= $form->field($model, 'language_id') ?>
23 23
24 <?= $form->field($model, 'value') ?> 24 <?= $form->field($model, 'value') ?>
25 25
backend/views/new-options-lang/index.php
@@ -27,7 +27,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -27,7 +27,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
27 27
28 'primary', 28 'primary',
29 'id', 29 'id',
30 - 'lang_id', 30 + 'language_id',
31 'value:ntext', 31 'value:ntext',
32 32
33 ['class' => 'yii\grid\ActionColumn'], 33 ['class' => 'yii\grid\ActionColumn'],
backend/views/new-options-lang/view.php
@@ -30,7 +30,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -30,7 +30,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
30 'attributes' => [ 30 'attributes' => [
31 'primary', 31 'primary',
32 'id', 32 'id',
33 - 'lang_id', 33 + 'language_id',
34 'value:ntext', 34 'value:ntext',
35 ], 35 ],
36 ]) ?> 36 ]) ?>
backend/views/option/_form_edit.php
@@ -21,7 +21,7 @@ use yii\widgets\ActiveForm; @@ -21,7 +21,7 @@ use yii\widgets\ActiveForm;
21 <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?> 21 <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?>
22 <?php 22 <?php
23 if($row->translate) { 23 if($row->translate) {
24 - foreach($row->getLangs() as $lang_id => $lang) { 24 + foreach($row->getLangs() as $language_id => $lang) {
25 ?> 25 ?>
26 <div class="form-group"> 26 <div class="form-group">
27 <div class="col-xs-1"><?=$lang['lang_code']?></div> 27 <div class="col-xs-1"><?=$lang['lang_code']?></div>
backend/views/settings/index.php 0 → 100644
  1 +<?php
  2 +
  3 +/* @var $this yii\web\View */
  4 +
  5 +use backend\models\AdminMenu;
  6 +use dmstr\widgets\Menu;
  7 +use yii\helpers\Url;
  8 +
  9 +$this->title = Yii::t('app', 'Settings');
  10 +$this->params['breadcrumbs'][] = $this->title;
  11 +?>
backend/views/site/index.php
@@ -2,6 +2,9 @@ @@ -2,6 +2,9 @@
2 2
3 /* @var $this yii\web\View */ 3 /* @var $this yii\web\View */
4 4
  5 +use backend\models\AdminMenu;
  6 +use yii\helpers\Url;
  7 +
5 $this->title = 'My Yii Application'; 8 $this->title = 'My Yii Application';
6 ?> 9 ?>
7 <div class="site-index"> 10 <div class="site-index">
backend/views/termin/_article_form.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\bootstrap\ActiveField;
  4 +use mihaildev\ckeditor\CKEditor;
  5 +
  6 +$form = \yii\bootstrap\ActiveForm::begin();
  7 +?>
  8 +<div role="" class="tab-pane active ajax-loaded" id="<?=$widget_id?>-<?=$model->language_id?>">
  9 +
  10 + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]lang_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?>
  11 +
  12 + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]termin_title"]))->textInput() ?>
  13 +
  14 + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]termin_alias"]))->textInput() ?>
  15 +
  16 +</div>
  17 +<?php
  18 +$form->end();
  19 +?>
backend/views/termin/_form.php
@@ -37,8 +37,8 @@ use yii\helpers\ArrayHelper; @@ -37,8 +37,8 @@ use yii\helpers\ArrayHelper;
37 37
38 <?= $form->field($model_lang, 'termin_alias')->textInput() ?> 38 <?= $form->field($model_lang, 'termin_alias')->textInput() ?>
39 39
40 - <?= Html::activeHiddenInput ($model_lang, 'lang_id', [  
41 - 'value' => ($model_lang->lang_id != 0 ? $model_lang->lang_id : Yii::$app->params['lang_id']), 40 + <?= Html::activeHiddenInput ($model_lang, 'language_id', [
  41 + 'value' => ($model_lang->language_id != 0 ? $model_lang->language_id : Yii::$app->params['language_id']),
42 ]) ?> 42 ]) ?>
43 43
44 <div class="form-group"> 44 <div class="form-group">
backend/views/termin/create.php
@@ -17,6 +17,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -17,6 +17,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
17 <?= $this->render('_form', [ 17 <?= $this->render('_form', [
18 'model' => $model, 18 'model' => $model,
19 'model_lang' => $model_lang, 19 'model_lang' => $model_lang,
  20 + 'model_pid' => $model_pid,
20 ]) ?> 21 ]) ?>
21 22
22 </div> 23 </div>
backend/views/termin/index.php
@@ -19,17 +19,20 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -19,17 +19,20 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
19 <?= Html::a(Yii::t('app', 'Create'), ['create'], ['class' => 'btn btn-success']) ?> 19 <?= Html::a(Yii::t('app', 'Create'), ['create'], ['class' => 'btn btn-success']) ?>
20 </p> 20 </p>
21 21
  22 +
22 <?= GridView::widget([ 23 <?= GridView::widget([
23 'dataProvider' => $dataProvider, 24 'dataProvider' => $dataProvider,
24 'filterModel' => $searchModel, 25 'filterModel' => $searchModel,
25 'columns' => [ 26 'columns' => [
26 ['class' => 'yii\grid\SerialColumn'], 27 ['class' => 'yii\grid\SerialColumn'],
27 [ 28 [
28 - 'attribute' => Yii::t('app', 'termin'),  
29 - 'value' => function ($model) {  
30 - return $model->terminLangs[0]->termin_title;  
31 - },  
32 - ], 29 + 'attribute' => 'termin_title',
  30 + 'value' => 'terminLangs.termin_title'
  31 + ],
  32 + [
  33 + 'attribute' => 'termin_parent_title',
  34 + 'value' => 'parent.terminLangs.termin_title'
  35 + ],
33 'termin_name', 36 'termin_name',
34 'is_book', 37 'is_book',
35 38
backend/web/css/site.css
@@ -89,3 +89,47 @@ a.desc:after { @@ -89,3 +89,47 @@ a.desc:after {
89 padding: 10px 20px; 89 padding: 10px 20px;
90 margin: 0 0 15px 0; 90 margin: 0 0 15px 0;
91 } 91 }
  92 +.header-search {
  93 + width: 200px;
  94 +}
  95 +.skin-blue .sidebar-form {
  96 + margin: 5px !important;
  97 +}
  98 +.checkboxer .list-group-item {
  99 + padding: 0;
  100 +}
  101 +.checkboxer .list-group-item:hover {
  102 + background: #ddd;
  103 +}
  104 +.checkboxer .list-group-item.active, .checkboxer .list-group-item.active:hover {
  105 + background: #00a65a;
  106 +}
  107 +.checkboxer .list-group-item.active label, .checkboxer .list-group-item.active:hover label {
  108 + color: white;
  109 +}
  110 +.checkboxer .list-group-item.level0 {
  111 + padding-left: 15px;
  112 +}
  113 +.checkboxer .list-group-item.level1 {
  114 + padding-left: 45px;
  115 +}
  116 +.checkboxer .list-group-item.level2 {
  117 + padding-left: 75px;
  118 +}
  119 +.checkboxer .checkboxer_label {
  120 + padding: 10px 0;
  121 + display: block;
  122 +}
  123 +.checkboxer .checkboxer_label input[type=radio] {
  124 + position: absolute;
  125 + clip: rect(0,0,0,0);
  126 +}
  127 +.action_link {
  128 + float: left;
  129 +}
  130 +.admin_grid_action {
  131 + padding: 0 20px;
  132 +}
  133 +.admin_grid_action .pagination {
  134 + margin: 0;
  135 +}
backend/web/js/option.js
@@ -12,6 +12,11 @@ function readURL(input) { @@ -12,6 +12,11 @@ function readURL(input) {
12 } 12 }
13 return urls; 13 return urls;
14 } 14 }
  15 +function checkboxerInit() {
  16 + $.each($('.checkboxer input[type=radio]:checked'), function(index, value) {
  17 + $(value).trigger('change');
  18 + });
  19 +}
15 $(function() { 20 $(function() {
16 var counter = 0; 21 var counter = 0;
17 $(document).on('click', '.add_row', function() { 22 $(document).on('click', '.add_row', function() {
@@ -36,57 +41,93 @@ $(function() { @@ -36,57 +41,93 @@ $(function() {
36 $(document).on('click', '.remove_lang', function() { 41 $(document).on('click', '.remove_lang', function() {
37 $(this).parents('.form-wrapper').remove(); 42 $(this).parents('.form-wrapper').remove();
38 }); 43 });
39 - if($('#lang-tabs li').length > 1) {  
40 - $('#lang-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>')  
41 - }  
42 - $(document).on('click', '#lang-dropdown li a[data-lang]', function() { 44 + $(document).on('change', '.image_inputs_field', function() {
  45 + readURL(this);
  46 + });
  47 + $('a.remove_image').on('click', function(e) {
  48 + var el = $(this);
  49 + e.preventDefault();
  50 + if(confirm(confirm_message)) {
  51 + $.ajax({
  52 + type: 'post',
  53 + url: $(this).attr('href'),
  54 + data: $(this).data('params')
  55 + }).done(function() {
  56 + $(el).parents('.additional_image_container').remove();
  57 + });
  58 + }
  59 + return false;
  60 + });
  61 + $.each($('.nav-tabs.f32'), function(key, value) {
  62 + if($(value).find('li').length > 1) {
  63 + $(value).find('li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>');
  64 + }
  65 + });
  66 + $(document).on('click', '.dropdown-menu.f32:not(.old) li a[data-lang]', function() {
  67 + var lang = $(this).data('lang');
  68 + var flag = $(this).find('span').first().clone();
  69 + var el = $(this);
  70 + var id = $(this).attr('href').substr(1);
  71 + var path = form[id].handler;
  72 + var view = form[id].view;
  73 + var model = form[id].model;
  74 + $.get(path, { language_id: lang, widget_id: id, ajaxView: view, model: model }, function(data) {
  75 + $('#'+id+'-tabs li').removeClass('active');
  76 + $('#'+id+'-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#'+id+'-'+lang+'" aria-controls="'+id+'-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>');
  77 + $('#tab-content-'+id+' .tab-pane.active').removeClass('active');
  78 + $('#tab-content-'+id).append($(data).find('.ajax-loaded').first());
  79 + $('body').append($(data).filter('script'));
  80 + $(el).parent().remove();
  81 + if(!$('#lang-'+id+' li').length) {
  82 + $('#'+id+'Lang').addClass('disabled');
  83 + }
  84 + if($('#'+id+'-tabs li').length > 1) {
  85 + $('#'+id+'-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>')
  86 + }
  87 + });
  88 + });
  89 + $(document).on('click', '.dropdown-menu.f32.old li a[data-lang]', function(e) {
  90 + e.preventDefault();
43 var lang = $(this).data('lang'); 91 var lang = $(this).data('lang');
44 var flag = $(this).find('span').first().clone(); 92 var flag = $(this).find('span').first().clone();
45 var el = $(this); 93 var el = $(this);
46 - $.get('/blog/ajax/category-form', { lang_id: lang }, function(data) {  
47 - $('#lang-tabs li').removeClass('active');  
48 - $('#lang-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#lang-'+lang+'" aria-controls="lang-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>');  
49 - $('.lang-tab-content .tab-pane.active').removeClass('active');  
50 - $('.lang-tab-content').append($(data).find('.ajax-loaded').first()); 94 + var id = $(this).attr('href').substr(1);
  95 + $.get(form[id], { language_id: lang, widget_id: id }, function(data) {
  96 + $('#'+id+'-tabs li').removeClass('active');
  97 + $('#'+id+'-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#'+id+'-'+lang+'" aria-controls="'+id+'-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>');
  98 + $('#tab-content-'+id+' .tab-pane.active').removeClass('active');
  99 + $('#tab-content-'+id).append($(data).find('.ajax-loaded').first());
51 $('body').append($(data).filter('script')); 100 $('body').append($(data).filter('script'));
52 $(el).parent().remove(); 101 $(el).parent().remove();
53 - if(!$('#lang-dropdown li').length) {  
54 - $('#dropdownLang').addClass('disabled'); 102 + if(!$('#lang-'+id+' li').length) {
  103 + $('#'+id+'Lang').addClass('disabled');
55 } 104 }
56 - if($('#lang-tabs li').length > 1) {  
57 - $('#lang-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>') 105 + if($('#'+id+'-tabs li').length > 1) {
  106 + $('#'+id+'-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>')
58 } 107 }
59 }); 108 });
60 }); 109 });
61 $(document).on('click', '.remove-lang', function() { 110 $(document).on('click', '.remove-lang', function() {
62 var lang = $(this).parent().data('lang'); 111 var lang = $(this).parent().data('lang');
63 var flag = $(this).parent().find('span.flag').first().clone(); 112 var flag = $(this).parent().find('span.flag').first().clone();
64 - $('#lang-'+lang).remove();  
65 - $('#lang-dropdown').append('<li><a href="#lang-tabs" data-lang="'+lang+'">'+$('<p>').append($(flag)).html()+'</a></li>');  
66 - $('#dropdownLang').removeClass('disabled'); 113 + var id = $(this).parent().find('a[aria-controls]').first().attr('aria-controls').substr(0,8);
  114 + $('#'+id+'-'+lang).remove();
  115 + $('#lang-'+id).append('<li><a href="#'+id+'" data-lang="'+lang+'">'+$('<p>').append($(flag)).html()+'</a></li>');
  116 + $('#'+id+'Lang').removeClass('disabled');
67 $(this).parent().remove(); 117 $(this).parent().remove();
68 - if($('#lang-tabs li').length <= 1) {  
69 - $('#lang-tabs li').find('.remove-lang').remove(); 118 + if($('#'+id+'-tabs li').length <= 1) {
  119 + $('#'+id+'-tabs li').find('.remove-lang').remove();
70 } 120 }
71 - if(!$('#lang-tabs>li.active').length) {  
72 - $('#lang-tabs>li').first().find('a').tab('show'); 121 + if(!$('#'+id+'-tabs>li.active').length) {
  122 + $('#'+id+'-tabs>li').first().find('a').tab('show');
73 } 123 }
74 }); 124 });
75 - $(document).on('change', '.image_inputs_field', function() {  
76 - readURL(this); 125 + $(document).on('change', '.checkboxer .checkboxer_label input[type=radio]', function() {
  126 + $(this).parents('.checkboxer').find('.checkboxer_container').removeClass('active');
  127 + $(this).parents('.checkboxer_container').addClass('active');
77 }); 128 });
78 - $('a.remove_image').on('click', function(e) {  
79 - var el = $(this);  
80 - e.preventDefault();  
81 - if(confirm(confirm_message)) {  
82 - $.ajax({  
83 - type: 'post',  
84 - url: $(this).attr('href'),  
85 - data: $(this).data('params')  
86 - }).done(function() {  
87 - $(el).parents('.additional_image_container').remove();  
88 - });  
89 - }  
90 - return false; 129 + $.each($('.f32'), function(i, val) {
  130 + $(val).find('a[role=tab]').first().trigger('click');
91 }); 131 });
  132 + checkboxerInit();
92 }); 133 });
93 \ No newline at end of file 134 \ No newline at end of file
common/components/LangRequest.php
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace common\components; 3 namespace common\components;
4 4
5 use Yii; 5 use Yii;
  6 +use yii\base\InvalidConfigException;
6 use yii\web\Request; 7 use yii\web\Request;
7 use common\models\Language; 8 use common\models\Language;
8 use common\models\Page; 9 use common\models\Page;
@@ -29,10 +30,10 @@ class LangRequest extends Request @@ -29,10 +30,10 @@ class LangRequest extends Request
29 30
30 Language::setCurrent($lang_url); 31 Language::setCurrent($lang_url);
31 32
32 - if ($lang_url !== null && $lang_url === Language::getCurrent()->lang_code  
33 - && strpos($this->_lang_url, Language::getCurrent()->lang_code) === 1) 33 + if ($lang_url !== null && $lang_url === Language::getCurrent()->language_code
  34 + && strpos($this->_lang_url, Language::getCurrent()->language_code) === 1)
34 { 35 {
35 - $this->_lang_url = substr ($this->_lang_url, strlen (Language::getCurrent()->lang_code) + 1); 36 + $this->_lang_url = substr ($this->_lang_url, strlen (Language::getCurrent()->language_code) + 1);
36 } 37 }
37 } 38 }
38 39
common/components/LangUrlManager.php
@@ -9,16 +9,16 @@ class LangUrlManager extends UrlManager @@ -9,16 +9,16 @@ class LangUrlManager extends UrlManager
9 { 9 {
10 public function createUrl ($params) 10 public function createUrl ($params)
11 { 11 {
12 - if (isset ($params['lang_id'])) 12 + if (isset ($params['language_id']))
13 { 13 {
14 //Если указан идентификатор языка, то делаем попытку найти язык в БД, 14 //Если указан идентификатор языка, то делаем попытку найти язык в БД,
15 //иначе работаем с языком по умолчанию 15 //иначе работаем с языком по умолчанию
16 - if (($lang_code = Language::findOne($params['lang_id'])) === null) 16 + if (($lang_code = Language::findOne($params['language_id'])) === null)
17 { 17 {
18 $lang_code = Language::getDefaultLang(); 18 $lang_code = Language::getDefaultLang();
19 } 19 }
20 20
21 - unset ($params['lang_id']); 21 + unset ($params['language_id']);
22 22
23 } 23 }
24 else 24 else
common/config/main.php
@@ -8,6 +8,9 @@ return [ @@ -8,6 +8,9 @@ return [
8 'userClass' => 'common\models\User' 8 'userClass' => 'common\models\User'
9 ] 9 ]
10 ], 10 ],
  11 + 'blog' => [
  12 + 'class' => 'common\modules\blog\Module',
  13 + ],
11 ], 14 ],
12 'components' => [ 15 'components' => [
13 'cache' => [ 16 'cache' => [
common/models/Catalog.php
@@ -23,21 +23,21 @@ class Catalog extends Model @@ -23,21 +23,21 @@ class Catalog extends Model
23 termin_lang.termin_title 23 termin_lang.termin_title
24 FROM termin_structure 24 FROM termin_structure
25 INNER JOIN termin_lang ON termin_lang.termin_id = termin_structure.termin_id 25 INNER JOIN termin_lang ON termin_lang.termin_id = termin_structure.termin_id
26 - AND termin_lang.lang_id = '.Yii::$app->params['lang_id'].' 26 + AND termin_lang.language_id = '.Yii::$app->params['language_id'].'
27 ORDER BY termin_structure.termin_id ASC, termin_structure.termin_pid ASC 27 ORDER BY termin_structure.termin_id ASC, termin_structure.termin_pid ASC
28 ')->queryAll(); 28 ')->queryAll();
29 } 29 }
30 30
31 /** 31 /**
32 * Выполняет поиск по параметрам 32 * Выполняет поиск по параметрам
33 - * @param array $param принимает [catalog_id, lang_id, return_one, return_field, show_all] 33 + * @param array $param принимает [catalog_id, language_id, return_one, return_field, show_all]
34 * @return array one | array all | string значение масива 34 * @return array one | array all | string значение масива
35 */ 35 */
36 public function finInfo (array $params = []) 36 public function finInfo (array $params = [])
37 { 37 {
38 Tools::ifNotExist ($params, array ( 38 Tools::ifNotExist ($params, array (
39 'catalog_id' => false, 39 'catalog_id' => false,
40 - 'lang_id' => false, 40 + 'language_id' => false,
41 'return_one' => false, 41 'return_one' => false,
42 'return_field' => false, 42 'return_field' => false,
43 'show_all' => false, 43 'show_all' => false,
@@ -57,9 +57,9 @@ class Catalog extends Model @@ -57,9 +57,9 @@ class Catalog extends Model
57 $WHERE['catalog.catalog_id'] = $params['catalog_id']; 57 $WHERE['catalog.catalog_id'] = $params['catalog_id'];
58 } 58 }
59 59
60 - if ($params['lang_id']) 60 + if ($params['language_id'])
61 { 61 {
62 - $WHERE['catalog_i18n.lang_id'] = $params['lang_id']; 62 + $WHERE['catalog_i18n.language_id'] = $params['language_id'];
63 } 63 }
64 64
65 if (! empty ($WHERE)) 65 if (! empty ($WHERE))
@@ -144,7 +144,7 @@ class Catalog extends Model @@ -144,7 +144,7 @@ class Catalog extends Model
144 */ 144 */
145 public function getRelationCatalogLangPlus() 145 public function getRelationCatalogLangPlus()
146 { 146 {
147 - return $this->getRelationCatalogLang()->where(['lang_id' => yii::$app->params['lang_id']]); 147 + return $this->getRelationCatalogLang()->where(['language_id' => yii::$app->params['language_id']]);
148 } 148 }
149 149
150 /** 150 /**
common/models/Language.php
@@ -8,7 +8,11 @@ use Yii; @@ -8,7 +8,11 @@ use Yii;
8 * This is the model class for table "language". 8 * This is the model class for table "language".
9 * 9 *
10 * @property integer $language_id 10 * @property integer $language_id
11 - * @property string $lang_code 11 + * @property string $language_code
  12 + * @property string $is_default
  13 + * @property string $language_name
  14 + * @property string $status
  15 + * @property string $country_code
12 */ 16 */
13 class Language extends \yii\db\ActiveRecord 17 class Language extends \yii\db\ActiveRecord
14 { 18 {
@@ -32,8 +36,8 @@ class Language extends \yii\db\ActiveRecord @@ -32,8 +36,8 @@ class Language extends \yii\db\ActiveRecord
32 $language = self::getLangByUrl($lang_code); 36 $language = self::getLangByUrl($lang_code);
33 self::$current = ($language === null) ? self::getDefaultLang() : $language; 37 self::$current = ($language === null) ? self::getDefaultLang() : $language;
34 // задаем 38 // задаем
35 - Yii::$app->language = self::$current->lang_code;  
36 - Yii::$app->params['lang_id'] = self::$current->language_id; 39 + Yii::$app->language = self::$current->language_code;
  40 + Yii::$app->params['language_id'] = self::$current->language_id;
37 } 41 }
38 42
39 //Получения объекта языка по умолчанию 43 //Получения объекта языка по умолчанию
@@ -48,7 +52,7 @@ class Language extends \yii\db\ActiveRecord @@ -48,7 +52,7 @@ class Language extends \yii\db\ActiveRecord
48 if ($lang_code === null) { 52 if ($lang_code === null) {
49 return null; 53 return null;
50 } else { 54 } else {
51 - $language = Language::find()->where('lang_code = :what', [':what' => $lang_code])->one(); 55 + $language = Language::find()->where('language_code = :what', [':what' => $lang_code])->one();
52 return $language === null ? null : $language; 56 return $language === null ? null : $language;
53 } 57 }
54 } 58 }
@@ -67,8 +71,8 @@ class Language extends \yii\db\ActiveRecord @@ -67,8 +71,8 @@ class Language extends \yii\db\ActiveRecord
67 public function rules() 71 public function rules()
68 { 72 {
69 return [ 73 return [
70 - [['lang_code'], 'required'],  
71 - [['lang_code'], 'string', 'max' => 4] 74 + [['language_code', 'language_name', 'country_code'], 'required'],
  75 + [['language_code', 'country_code'], 'string', 'max' => 4]
72 ]; 76 ];
73 } 77 }
74 78
@@ -79,13 +83,17 @@ class Language extends \yii\db\ActiveRecord @@ -79,13 +83,17 @@ class Language extends \yii\db\ActiveRecord
79 { 83 {
80 return [ 84 return [
81 'language_id' => Yii::t('app/Lang', 'Language ID'), 85 'language_id' => Yii::t('app/Lang', 'Language ID'),
82 - 'lang_code' => Yii::t('app/Lang', 'Lang Code'), 86 + 'language_code' => Yii::t('app/Lang', 'Lang Code'),
  87 + 'is_default' => Yii::t('app/Lang', 'Default lang'),
  88 + 'language_name' => Yii::t('app/Lang', 'Language Name'),
  89 + 'status' => Yii::t('app/Lang', 'Language Status'),
  90 + 'country_code' => Yii::t('app/Lang', 'Country Code'),
83 ]; 91 ];
84 } 92 }
85 93
86 public static function getActiveLanguages() 94 public static function getActiveLanguages()
87 { 95 {
88 - return Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1])->orderBy('is_default DESC')->indexBy('language_id')->all(); 96 + return Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1])->orderBy('is_default DESC')->indexBy('language_id')->all();
89 } 97 }
90 98
91 } 99 }
common/models/Media.php
@@ -12,8 +12,9 @@ use yii\web\UploadedFile; @@ -12,8 +12,9 @@ use yii\web\UploadedFile;
12 /** 12 /**
13 * This is the model class for table "media". 13 * This is the model class for table "media".
14 * 14 *
15 - * @property integer $id 15 + * @property integer $media_id
16 * @property string $hash 16 * @property string $hash
  17 + * @property string $extension
17 * 18 *
18 * @property ArticleCategoryMedia[] $articleCategoryMedia 19 * @property ArticleCategoryMedia[] $articleCategoryMedia
19 * @property ArticleMedia[] $articleMedia 20 * @property ArticleMedia[] $articleMedia
@@ -39,8 +40,8 @@ class Media extends ActiveRecord @@ -39,8 +40,8 @@ class Media extends ActiveRecord
39 public function rules() 40 public function rules()
40 { 41 {
41 return [ 42 return [
42 - [['id'], 'integer'],  
43 - [['hash'], 'string'], 43 + [['media_id'], 'integer'],
  44 + [['hash', 'extension'], 'string'],
44 [['imageFile'], 'file', 'extensions' => 'png, gif, jpeg, jpg', 'skipOnEmpty' => true], 45 [['imageFile'], 'file', 'extensions' => 'png, gif, jpeg, jpg', 'skipOnEmpty' => true],
45 ]; 46 ];
46 } 47 }
@@ -51,8 +52,9 @@ class Media extends ActiveRecord @@ -51,8 +52,9 @@ class Media extends ActiveRecord
51 public function attributeLabels() 52 public function attributeLabels()
52 { 53 {
53 return [ 54 return [
54 - 'id' => Yii::t('app', 'ID'), 55 + 'media_id' => Yii::t('app', 'ID'),
55 'hash' => Yii::t('app', 'Hash'), 56 'hash' => Yii::t('app', 'Hash'),
  57 + 'extension' => Yii::t('app', 'Extension'),
56 ]; 58 ];
57 } 59 }
58 60
@@ -61,7 +63,7 @@ class Media extends ActiveRecord @@ -61,7 +63,7 @@ class Media extends ActiveRecord
61 */ 63 */
62 public function getArticleCategoryMedia() 64 public function getArticleCategoryMedia()
63 { 65 {
64 - return $this->hasMany(ArticleCategoryMedia::className(), ['media_id' => 'id']); 66 + return $this->hasMany(ArticleCategoryMedia::className(), ['media_id' => 'media_id']);
65 } 67 }
66 68
67 /** 69 /**
@@ -69,12 +71,12 @@ class Media extends ActiveRecord @@ -69,12 +71,12 @@ class Media extends ActiveRecord
69 */ 71 */
70 public function getArticleMedia() 72 public function getArticleMedia()
71 { 73 {
72 - return $this->hasMany(ArticleMedia::className(), ['media_id' => 'id']); 74 + return $this->hasMany(ArticleMedia::className(), ['media_id' => 'media_id']);
73 } 75 }
74 76
75 public function getArticle() 77 public function getArticle()
76 { 78 {
77 - return $this->hasMany(Article::className(), ['id' => 'article_id'])->via('articleMedia'); 79 + return $this->hasMany(Article::className(), ['article_id' => 'article_id'])->via('articleMedia');
78 } 80 }
79 81
80 public function upload() 82 public function upload()
common/models/Tools.php
@@ -98,4 +98,19 @@ class Tools @@ -98,4 +98,19 @@ class Tools
98 98
99 return $url; 99 return $url;
100 } 100 }
  101 +
  102 + static function parseUrlParams($params)
  103 + {
  104 + $params = preg_split('/,\s*/', $params, -1, PREG_SPLIT_NO_EMPTY);
  105 + $result = [];
  106 + if($params) {
  107 + foreach($params as $param) {
  108 + $param = preg_split('/\s*=\s*/', $param);
  109 + if(!empty($param[0]) && !empty($param[1])) {
  110 + $result[$param[0]] = $param[1];
  111 + }
  112 + }
  113 + }
  114 + return $result;
  115 + }
101 } 116 }
102 \ No newline at end of file 117 \ No newline at end of file
common/modules/blog/controllers/AjaxController.php
@@ -7,6 +7,7 @@ use common\modules\blog\models\ArticleCategoryLang; @@ -7,6 +7,7 @@ use common\modules\blog\models\ArticleCategoryLang;
7 use common\modules\blog\models\ArticleCategoryMedia; 7 use common\modules\blog\models\ArticleCategoryMedia;
8 use common\modules\blog\models\ArticleLang; 8 use common\modules\blog\models\ArticleLang;
9 use common\modules\blog\models\ArticleMedia; 9 use common\modules\blog\models\ArticleMedia;
  10 +use yii\base\InvalidParamException;
10 use yii\web\Controller; 11 use yii\web\Controller;
11 use yii\web\ForbiddenHttpException; 12 use yii\web\ForbiddenHttpException;
12 use yii\web\NotFoundHttpException; 13 use yii\web\NotFoundHttpException;
@@ -26,24 +27,50 @@ class AjaxController extends Controller @@ -26,24 +27,50 @@ class AjaxController extends Controller
26 return true; 27 return true;
27 } 28 }
28 29
29 - public function actionCategoryForm($lang_id) 30 + public function actionCategoryForm($language_id, $widget_id)
30 { 31 {
31 - $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1, 'language_id' => $lang_id])->one(); 32 + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one();
32 if(!$model) { 33 if(!$model) {
33 throw new NotFoundHttpException('Language not found'); 34 throw new NotFoundHttpException('Language not found');
34 } 35 }
35 $category_lang = new ArticleCategoryLang(); 36 $category_lang = new ArticleCategoryLang();
36 - return $this->renderAjax('_category_form', ['model' => $model, 'category_lang' => $category_lang]); 37 + return $this->renderAjax('_category_form', ['model' => $model, 'category_lang' => $category_lang, 'widget_id' => $widget_id]);
37 } 38 }
38 39
39 - public function actionArticleForm($lang_id) 40 + public function actionArticleForm($language_id, $widget_id)
40 { 41 {
41 - $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1, 'language_id' => $lang_id])->one(); 42 + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one();
42 if(!$model) { 43 if(!$model) {
43 throw new NotFoundHttpException('Language not found'); 44 throw new NotFoundHttpException('Language not found');
44 } 45 }
45 $article_lang = new ArticleLang(); 46 $article_lang = new ArticleLang();
46 - return $this->renderAjax('_article_form', ['model' => $model, 'article_lang' => $article_lang]); 47 + return $this->renderAjax('_article_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id]);
  48 + }
  49 +
  50 + public function actionArticleMediaForm($language_id, $widget_id, $type)
  51 + {
  52 + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one();
  53 + if(!$model) {
  54 + throw new NotFoundHttpException('Language not found');
  55 + }
  56 + if(!in_array($type, ['full', 'preview'])) {
  57 + throw new InvalidParamException('Type must only be full/preview');
  58 + }
  59 + $article_lang = new ArticleMedia();
  60 + return $this->renderAjax('_article_media_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id, 'type' => $type]);
  61 + }
  62 +
  63 + public function actionArticleCategoryMediaForm($language_id, $widget_id, $type)
  64 + {
  65 + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one();
  66 + if(!$model) {
  67 + throw new NotFoundHttpException('Language not found');
  68 + }
  69 + if(!in_array($type, ['full', 'preview'])) {
  70 + throw new InvalidParamException('Type must only be full/preview');
  71 + }
  72 + $article_lang = new ArticleCategoryMedia();
  73 + return $this->renderAjax('_article_media_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id, 'type' => $type]);
47 } 74 }
48 75
49 public function actionRemoveImage() 76 public function actionRemoveImage()
@@ -63,6 +90,23 @@ class AjaxController extends Controller @@ -63,6 +90,23 @@ class AjaxController extends Controller
63 } 90 }
64 } 91 }
65 92
  93 + public function actionRemoveCategoryImage()
  94 + {
  95 + $post = \Yii::$app->request->post();
  96 + if(!empty($post['category_media_id'])) {
  97 + $category_media = ArticleCategoryMedia::findOne($post['category_media_id']);
  98 + if($post['remove_media']) {
  99 + $media = $category_media->media->delete();
  100 + }
  101 + if(!empty($category_media)) {
  102 + $category_media->delete();
  103 + }
  104 + return true;
  105 + } else {
  106 + return false;
  107 + }
  108 + }
  109 +
66 public function actionRemoveImageCategory() 110 public function actionRemoveImageCategory()
67 { 111 {
68 $post = \Yii::$app->request->post(); 112 $post = \Yii::$app->request->post();
@@ -79,4 +123,10 @@ class AjaxController extends Controller @@ -79,4 +123,10 @@ class AjaxController extends Controller
79 return false; 123 return false;
80 } 124 }
81 } 125 }
  126 +
  127 + public function actionMultilangForm($model, $ajaxView, $widget_id, $language_id = NULL)
  128 + {
  129 + $model = new $model(['language_id' => $language_id]);
  130 + return $this->renderAjax($ajaxView, ['model' => $model, 'widget_id' => $widget_id]);
  131 + }
82 } 132 }
common/modules/blog/controllers/ArticleController.php
@@ -28,28 +28,31 @@ class ArticleController extends Controller @@ -28,28 +28,31 @@ class ArticleController extends Controller
28 { 28 {
29 $article_langs = array(); 29 $article_langs = array();
30 $article = new Article(); 30 $article = new Article();
  31 + $default_lang = Language::getDefaultLang();
31 $images = array(); 32 $images = array();
32 - $images['full'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_FULL]);  
33 - $images['preview'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_PREVIEW]);  
34 - $images['additional'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); 33 + $images[$default_lang->language_id]['full'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_FULL]);
  34 + $images[$default_lang->language_id]['preview'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_PREVIEW]);
  35 + $images[0]['additional'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);
35 $article->loadDefaultValues(); 36 $article->loadDefaultValues();
36 $langs = Language::getActiveLanguages(); 37 $langs = Language::getActiveLanguages();
37 - $default_lang = Language::getDefaultLang();  
38 $isValid = false; 38 $isValid = false;
39 if(!empty(\Yii::$app->request->post())) { 39 if(!empty(\Yii::$app->request->post())) {
40 $isValid = true; 40 $isValid = true;
41 $article->load(\Yii::$app->request->post()); 41 $article->load(\Yii::$app->request->post());
42 - $article->author = \Yii::$app->user->getId(); 42 + $article->user_id = \Yii::$app->user->getId();
43 $isValid = $article->validate(); 43 $isValid = $article->validate();
44 - foreach($images as $index => $value) {  
45 - $images[$index]->type = $index;  
46 - if($index == 'additional') {  
47 - $images[$index]->imageFile = UploadedFile::getInstances($images[$index], "[{$index}]imageFile");  
48 - } else {  
49 - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile"); 44 + foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) {
  45 + foreach($value as $type => $fields) {
  46 + $images[$lang][$type] = new ArticleMedia(['scenario' => $type]);
  47 + $images[$lang][$type]->type = $type;
  48 + $images[$lang][$type]->language_id = $lang;
  49 + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");
  50 + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;
50 } 51 }
51 - $isValid = $images[$index]->validate(['imageFile']) && $isValid;  
52 } 52 }
  53 + $images[0]['additional']->language_id = 0;
  54 + $images[0]['additional']->type = 'additional';
  55 + $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile");
53 if(empty(\Yii::$app->request->post()['ArticleLang'])) { 56 if(empty(\Yii::$app->request->post()['ArticleLang'])) {
54 $article_langs[$default_lang->language_id] = new ArticleLang(); 57 $article_langs[$default_lang->language_id] = new ArticleLang();
55 $isValid = ArticleLang::validateMultiple($article_langs) && $isValid; 58 $isValid = ArticleLang::validateMultiple($article_langs) && $isValid;
@@ -69,18 +72,30 @@ class ArticleController extends Controller @@ -69,18 +72,30 @@ class ArticleController extends Controller
69 if(!empty($article_categories)) { 72 if(!empty($article_categories)) {
70 foreach($article_categories as $article_category) { 73 foreach($article_categories as $article_category) {
71 $articletocategory[$article_category] = new ArticleToCategory(); 74 $articletocategory[$article_category] = new ArticleToCategory();
72 - $articletocategory[$article_category]->category_id = $article_category; 75 + $articletocategory[$article_category]->article_category_id = $article_category;
73 $articletocategory[$article_category]->link('article', $article); 76 $articletocategory[$article_category]->link('article', $article);
74 } 77 }
75 } 78 }
76 $first = 1; 79 $first = 1;
77 - foreach($images as $index => $image) {  
78 - $images[$index]->upload($article->id); 80 + foreach($images as $lang => $value) {
  81 + foreach($value as $type => $fields) {
  82 + $images[$lang][$type]->upload($article->article_id);
  83 + if($first && $type != 'additional') {
  84 + $media_clone = clone $images[$lang][$type];
  85 + $media_clone->setIsNewRecord(true);
  86 + unset($media_clone->article_media_id);
  87 + $media_clone->language_id = 0;
  88 + $media_clone->upload($article->article_id);
  89 + unset($media_clone);
  90 + $first = 0;
  91 + }
  92 + }
79 } 93 }
  94 + $first = 1;
80 foreach($article_langs as $article_lang) { 95 foreach($article_langs as $article_lang) {
81 if($first) { 96 if($first) {
82 $article_lang_clone = clone $article_lang; 97 $article_lang_clone = clone $article_lang;
83 - $article_lang_clone->lang_id = 0; 98 + $article_lang_clone->language_id = 0;
84 $article_lang_clone->link('article', $article); 99 $article_lang_clone->link('article', $article);
85 unset($article_lang_clone); 100 unset($article_lang_clone);
86 } 101 }
@@ -102,49 +117,52 @@ class ArticleController extends Controller @@ -102,49 +117,52 @@ class ArticleController extends Controller
102 public function actionUpdate($id) 117 public function actionUpdate($id)
103 { 118 {
104 $article = Article::findOne($id); 119 $article = Article::findOne($id);
105 - $images = $article->getArticleMedia()->indexBy('type')->all();  
106 - if(!array_key_exists('full', $images)) {  
107 - $images['full'] = new ArticleMedia();  
108 - }  
109 - if(!array_key_exists('preview', $images)) {  
110 - $images['preview'] = new ArticleMedia();  
111 - }  
112 - foreach($images as $index => $image) {  
113 - $images[$index]->scenario = $index; 120 + $imagestack = $article->getArticleMedia()->all();
  121 + $images = [];
  122 + $images[0]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);
  123 + $images[0]['additional'][0]->type = 'additional';
  124 + $images[0]['additional'][0]->language_id = 0;
  125 + foreach($imagestack as $image) {
  126 + if(in_array($image->type, ['full', 'preview'])) {
  127 + $images[$image->language_id][$image->type] = $image;
  128 + $images[$image->language_id][$image->type]->scenario = $image->type;
  129 + } else {
  130 + $images[$image->language_id][$image->type][$image->article_media_id] = $image;
  131 + $images[$image->language_id][$image->type][$image->article_media_id]->scenario = $image->type;
  132 + }
114 } 133 }
115 - $images['additional'] = array(  
116 - 0 => new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL])  
117 - );  
118 - $images['additional'] = array_merge($images['additional'], $article->getArticleMedia()->andWhere(['type' => 'additional'])->indexBy('id')->all());  
119 - foreach($images['additional'] as $index => $image) {  
120 - $images['additional'][$index]->scenario = 'additional'; 134 + foreach($images as $lang => $value) {
  135 + $images[$lang]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);
121 } 136 }
122 - $article_langs = $article->getArticleLangs()->where(['>=', 'lang_id', '1'])->indexBy('lang_id')->all(); 137 + $article_langs = $article->getArticleLangs()->where(['>=', 'language_id', '1'])->indexBy('language_id')->all();
123 $langs = Language::getActiveLanguages(); 138 $langs = Language::getActiveLanguages();
124 $default_lang = Language::getDefaultLang(); 139 $default_lang = Language::getDefaultLang();
125 $isValid = false; 140 $isValid = false;
126 if(!empty(\Yii::$app->request->post())) { 141 if(!empty(\Yii::$app->request->post())) {
127 $isValid = true; 142 $isValid = true;
128 $article->load(\Yii::$app->request->post()); 143 $article->load(\Yii::$app->request->post());
129 - ArticleToCategory::deleteAll(['article_id' => $article->id]); 144 + ArticleToCategory::deleteAll(['article_id' => $article->article_id]);
130 $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray']; 145 $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray'];
131 if(!empty($article_categories)) { 146 if(!empty($article_categories)) {
132 foreach($article_categories as $article_category) { 147 foreach($article_categories as $article_category) {
133 $articletocategory[$article_category] = new ArticleToCategory(); 148 $articletocategory[$article_category] = new ArticleToCategory();
134 - $articletocategory[$article_category]->category_id = $article_category; 149 + $articletocategory[$article_category]->article_category_id = $article_category;
135 $articletocategory[$article_category]->link('article', $article); 150 $articletocategory[$article_category]->link('article', $article);
136 } 151 }
137 } 152 }
138 $isValid = $article->validate(); 153 $isValid = $article->validate();
139 - foreach($images as $index => $value) {  
140 - if($index == 'additional') {  
141 - $images[$index][0]->type = $index;  
142 - $images[$index][0]->imageFile = UploadedFile::getInstances($images[$index][0], "[{$index}]imageFile");  
143 - $isValid = $images[$index][0]->validate(['imageFile']) && $isValid;  
144 - } else {  
145 - $images[$index]->type = $index;  
146 - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile");  
147 - $isValid = $images[$index]->validate(['imageFile']) && $isValid; 154 + $images[0]['additional'][0]->type = 'additional';
  155 + $images[0]['additional'][0]->language_id = 0;
  156 + $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile");
  157 + $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid;
  158 + foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) {
  159 + foreach($value as $type => $fields) {
  160 + if(!in_array($type, ['full', 'preview'])) continue;
  161 + $images[$lang][$type] = new ArticleMedia(['scenario' => $type]);
  162 + $images[$lang][$type]->language_id = $lang;
  163 + $images[$lang][$type]->type = $type;
  164 + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");
  165 + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;
148 } 166 }
149 } 167 }
150 if(empty(\Yii::$app->request->post()['ArticleLang'])) { 168 if(empty(\Yii::$app->request->post()['ArticleLang'])) {
@@ -153,7 +171,7 @@ class ArticleController extends Controller @@ -153,7 +171,7 @@ class ArticleController extends Controller
153 foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) { 171 foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) {
154 if (!array_key_exists($index, $article_langs)) { 172 if (!array_key_exists($index, $article_langs)) {
155 $article_langs[$index] = new ArticleLang(); 173 $article_langs[$index] = new ArticleLang();
156 - $article_langs[$index]->article_id = $article->id; 174 + $article_langs[$index]->article_id = $article->article_id;
157 } 175 }
158 } 176 }
159 ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post()); 177 ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post());
@@ -162,12 +180,14 @@ class ArticleController extends Controller @@ -162,12 +180,14 @@ class ArticleController extends Controller
162 } 180 }
163 if($isValid) { 181 if($isValid) {
164 $article->save(false); 182 $article->save(false);
165 - foreach($images as $index => $image) {  
166 - if($index == 'additional') {  
167 - $images[$index][0]->upload($article->id);  
168 - } else {  
169 - if(!empty($images[$index]->imageFile)) {  
170 - $images[$index]->replace($article->id, true); 183 + foreach($images as $lang => $value) {
  184 + foreach($value as $type => $fields) {
  185 + if($type == 'additional') {
  186 + $images[$lang][$type][0]->upload($article->id);
  187 + } else {
  188 + if(!empty($images[$lang][$type]->imageFile)) {
  189 + $images[$lang][$type]->replace($article->article_id);
  190 + }
171 } 191 }
172 } 192 }
173 } 193 }
common/modules/blog/controllers/CategoryController.php
@@ -42,27 +42,30 @@ class CategoryController extends Controller @@ -42,27 +42,30 @@ class CategoryController extends Controller
42 { 42 {
43 $category_langs = array(); 43 $category_langs = array();
44 $category = new ArticleCategory(); 44 $category = new ArticleCategory();
  45 + $default_lang = Language::getDefaultLang();
45 $images = array(); 46 $images = array();
46 - $images['full'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_FULL]);  
47 - $images['preview'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_PREVIEW]);  
48 - $images['additional'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); 47 + $images[$default_lang->language_id]['full'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_FULL]);
  48 + $images[$default_lang->language_id]['preview'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_PREVIEW]);
  49 + $images[0]['additional'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]);
49 $category->loadDefaultValues(); 50 $category->loadDefaultValues();
50 $langs = Language::getActiveLanguages(); 51 $langs = Language::getActiveLanguages();
51 - $default_lang = Language::getDefaultLang();  
52 $isValid = false; 52 $isValid = false;
53 - foreach($images as $index => $value) {  
54 - $images[$index]->type = $index;  
55 - if($index == 'additional') {  
56 - $images[$index]->imageFile = UploadedFile::getInstances($images[$index], "[{$index}]imageFile");  
57 - } else {  
58 - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile");  
59 - }  
60 - $isValid = $images[$index]->validate(['imageFile']) && $isValid;  
61 - }  
62 if(!empty(\Yii::$app->request->post())) { 53 if(!empty(\Yii::$app->request->post())) {
63 $isValid = true; 54 $isValid = true;
64 $category->load(\Yii::$app->request->post()); 55 $category->load(\Yii::$app->request->post());
65 $isValid = $category->validate(); 56 $isValid = $category->validate();
  57 + foreach(\Yii::$app->request->post()['ArticleCategoryMedia'] as $lang => $value) {
  58 + foreach($value as $type => $fields) {
  59 + $images[$lang][$type] = new ArticleCategoryMedia(['scenario' => $type]);
  60 + $images[$lang][$type]->type = $type;
  61 + $images[$lang][$type]->language_id = $lang;
  62 + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");
  63 + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;
  64 + }
  65 + }
  66 + $images[0]['additional']->language_id = 0;
  67 + $images[0]['additional']->type = 'additional';
  68 + $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile");
66 if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) { 69 if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) {
67 $category_langs[$default_lang->language_id] = new ArticleCategoryLang(); 70 $category_langs[$default_lang->language_id] = new ArticleCategoryLang();
68 $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid; 71 $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid;
@@ -79,13 +82,25 @@ class CategoryController extends Controller @@ -79,13 +82,25 @@ class CategoryController extends Controller
79 if($isValid) { 82 if($isValid) {
80 $category->save(false); 83 $category->save(false);
81 $first = 1; 84 $first = 1;
82 - foreach($images as $index => $image) {  
83 - $images[$index]->upload($category->id); 85 + foreach($images as $lang => $value) {
  86 + foreach($value as $type => $fields) {
  87 + $images[$lang][$type]->upload($category->article_category_id);
  88 + if($first && $type != 'additional') {
  89 + $media_clone = clone $images[$lang][$type];
  90 + $media_clone->setIsNewRecord(true);
  91 + unset($media_clone->article_category_media_id);
  92 + $media_clone->language_id = 0;
  93 + $media_clone->upload($category->article_category_id);
  94 + unset($media_clone);
  95 + $first = 0;
  96 + }
  97 + }
84 } 98 }
  99 + $first = 1;
85 foreach($category_langs as $category_lang) { 100 foreach($category_langs as $category_lang) {
86 if($first) { 101 if($first) {
87 $category_lang_clone = clone $category_lang; 102 $category_lang_clone = clone $category_lang;
88 - $category_lang_clone->lang_id = 0; 103 + $category_lang_clone->language_id = 0;
89 $category_lang_clone->link('category', $category); 104 $category_lang_clone->link('category', $category);
90 unset($category_lang_clone); 105 unset($category_lang_clone);
91 } 106 }
@@ -107,24 +122,24 @@ class CategoryController extends Controller @@ -107,24 +122,24 @@ class CategoryController extends Controller
107 public function actionUpdate($id) 122 public function actionUpdate($id)
108 { 123 {
109 $category = ArticleCategory::findOne($id); 124 $category = ArticleCategory::findOne($id);
110 - $images = $category->getArticleCategoryMedia()->indexBy('type')->all();  
111 - if(!array_key_exists('full', $images)) {  
112 - $images['full'] = new ArticleCategoryMedia();  
113 - }  
114 - if(!array_key_exists('preview', $images)) {  
115 - $images['preview'] = new ArticleCategoryMedia();  
116 - }  
117 - foreach($images as $index => $image) {  
118 - $images[$index]->scenario = $index; 125 + $imagestack = $category->getArticleCategoryMedia()->all();
  126 + $images = [];
  127 + $images[0]['additional'][0] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]);
  128 + $images[0]['additional'][0]->type = 'additional';
  129 + $images[0]['additional'][0]->language_id = 0;
  130 + foreach($imagestack as $image) {
  131 + if(in_array($image->type, ['full', 'preview'])) {
  132 + $images[$image->language_id][$image->type] = $image;
  133 + $images[$image->language_id][$image->type]->scenario = $image->type;
  134 + } else {
  135 + $images[$image->language_id][$image->type][$image->article_category_media_id] = $image;
  136 + $images[$image->language_id][$image->type][$image->article_category_media_id]->scenario = $image->type;
  137 + }
119 } 138 }
120 - $images['additional'] = array(  
121 - 0 => new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL])  
122 - );  
123 - $images['additional'] = array_merge($images['additional'], $category->getArticleCategoryMedia()->andWhere(['type' => 'additional'])->indexBy('id')->all());  
124 - foreach($images['additional'] as $index => $image) {  
125 - $images['additional'][$index]->scenario = 'additional'; 139 + foreach($images as $lang => $value) {
  140 + $images[$lang]['additional'][0] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]);
126 } 141 }
127 - $category_langs = $category->getArticleCategoryLangs()->where(['>=', 'lang_id', '1'])->indexBy('lang_id')->all(); 142 + $category_langs = $category->getArticleCategoryLangs()->where(['>=', 'language_id', '1'])->indexBy('language_id')->all();
128 $langs = Language::getActiveLanguages(); 143 $langs = Language::getActiveLanguages();
129 $default_lang = Language::getDefaultLang(); 144 $default_lang = Language::getDefaultLang();
130 $isValid = false; 145 $isValid = false;
@@ -132,15 +147,18 @@ class CategoryController extends Controller @@ -132,15 +147,18 @@ class CategoryController extends Controller
132 $isValid = true; 147 $isValid = true;
133 $category->load(\Yii::$app->request->post()); 148 $category->load(\Yii::$app->request->post());
134 $isValid = $category->validate(); 149 $isValid = $category->validate();
135 - foreach($images as $index => $value) {  
136 - if($index == 'additional') {  
137 - $images[$index][0]->type = $index;  
138 - $images[$index][0]->imageFile = UploadedFile::getInstances($images[$index][0], "[{$index}]imageFile");  
139 - $isValid = $images[$index][0]->validate(['imageFile']) && $isValid;  
140 - } else {  
141 - $images[$index]->type = $index;  
142 - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile");  
143 - $isValid = $images[$index]->validate(['imageFile']) && $isValid; 150 + $images[0]['additional'][0]->type = 'additional';
  151 + $images[0]['additional'][0]->language_id = 0;
  152 + $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile");
  153 + $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid;
  154 + foreach(\Yii::$app->request->post()['ArticleCategoryMedia'] as $lang => $value) {
  155 + foreach($value as $type => $fields) {
  156 + if(!in_array($type, ['full', 'preview'])) continue;
  157 + $images[$lang][$type] = new ArticleCategoryMedia(['scenario' => $type]);
  158 + $images[$lang][$type]->language_id = $lang;
  159 + $images[$lang][$type]->type = $type;
  160 + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");
  161 + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;
144 } 162 }
145 } 163 }
146 if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) { 164 if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) {
@@ -149,7 +167,7 @@ class CategoryController extends Controller @@ -149,7 +167,7 @@ class CategoryController extends Controller
149 foreach(\Yii::$app->request->post()['ArticleCategoryLang'] as $index => $category_lang) { 167 foreach(\Yii::$app->request->post()['ArticleCategoryLang'] as $index => $category_lang) {
150 if(!array_key_exists($index, $category_langs)) { 168 if(!array_key_exists($index, $category_langs)) {
151 $category_langs[$index] = new ArticleCategoryLang(); 169 $category_langs[$index] = new ArticleCategoryLang();
152 - $category_langs[$index]->category_id = $category->id; 170 + $category_langs[$index]->article_category_id = $category->article_category_id;
153 } 171 }
154 } 172 }
155 ArticleCategoryLang::loadMultiple($category_langs, \Yii::$app->request->post()); 173 ArticleCategoryLang::loadMultiple($category_langs, \Yii::$app->request->post());
@@ -158,12 +176,14 @@ class CategoryController extends Controller @@ -158,12 +176,14 @@ class CategoryController extends Controller
158 } 176 }
159 if($isValid) { 177 if($isValid) {
160 $category->save(false); 178 $category->save(false);
161 - foreach($images as $index => $image) {  
162 - if($index == 'additional') {  
163 - $images[$index][0]->upload($category->id);  
164 - } else {  
165 - if(!empty($images[$index]->imageFile)) {  
166 - $images[$index]->replace($category->id, true); 179 + foreach($images as $lang => $value) {
  180 + foreach($value as $type => $fields) {
  181 + if($type == 'additional') {
  182 + $images[$lang][$type][0]->upload($category->article_category_id);
  183 + } else {
  184 + if(!empty($images[$lang][$type]->imageFile)) {
  185 + $images[$lang][$type]->replace($category->article_category_id);
  186 + }
167 } 187 }
168 } 188 }
169 } 189 }
common/modules/blog/models/Article.php
@@ -11,21 +11,21 @@ use yii\db\Query; @@ -11,21 +11,21 @@ use yii\db\Query;
11 /** 11 /**
12 * This is the model class for table "article". 12 * This is the model class for table "article".
13 * 13 *
14 - * @property integer $id 14 + * @property integer $article_id
15 * @property integer $sort 15 * @property integer $sort
16 - * @property string $create_at  
17 - * @property string $update_at 16 + * @property string $date_add
  17 + * @property string $date_update
18 * @property string $code 18 * @property string $code
19 - * @property integer $author  
20 - * @property string $tags  
21 - * @property integer $parent_id  
22 - * @property integer $active  
23 - * @property integer $comments  
24 - * @property integer $voting 19 + * @property integer $user_id
  20 + * @property string $tag
  21 + * @property integer $article_pid
  22 + * @property integer $status
  23 + * @property integer $comment
  24 + * @property integer $vote
25 * 25 *
26 * @property Article $parent 26 * @property Article $parent
27 * @property Article[] $articles 27 * @property Article[] $articles
28 - * @property User $author0 28 + * @property User $user
29 * @property ArticleLang[] $articleLangs 29 * @property ArticleLang[] $articleLangs
30 * @property ArticleMedia[] $articleMedia 30 * @property ArticleMedia[] $articleMedia
31 * @property ArticleToCategory[] $articleToCategories 31 * @property ArticleToCategory[] $articleToCategories
@@ -58,10 +58,10 @@ class Article extends \yii\db\ActiveRecord @@ -58,10 +58,10 @@ class Article extends \yii\db\ActiveRecord
58 public function rules() 58 public function rules()
59 { 59 {
60 return [ 60 return [
61 - [['sort', 'parent_id', 'active', 'comments', 'voting'], 'integer'],  
62 - [['create_at', 'update_at'], 'safe'], 61 + [['sort', 'article_pid', 'status', 'comment', 'vote'], 'integer'],
  62 + [['date_add', 'date_update'], 'safe'],
63 [['code'], 'required'], 63 [['code'], 'required'],
64 - [['code', 'tags'], 'string'] 64 + [['code', 'tag'], 'string']
65 ]; 65 ];
66 } 66 }
67 67
@@ -71,17 +71,17 @@ class Article extends \yii\db\ActiveRecord @@ -71,17 +71,17 @@ class Article extends \yii\db\ActiveRecord
71 public function attributeLabels() 71 public function attributeLabels()
72 { 72 {
73 return [ 73 return [
74 - 'id' => Yii::t('app', 'ID'), 74 + 'article_id' => Yii::t('app', 'ID'),
75 'sort' => Yii::t('app', 'Sort'), 75 'sort' => Yii::t('app', 'Sort'),
76 - 'create_at' => Yii::t('app', 'Create At'),  
77 - 'update_at' => Yii::t('app', 'Update At'), 76 + 'date_add' => Yii::t('app', 'Create At'),
  77 + 'date_update' => Yii::t('app', 'Update At'),
78 'code' => Yii::t('app', 'Code'), 78 'code' => Yii::t('app', 'Code'),
79 - 'author' => Yii::t('app', 'Author'),  
80 - 'tags' => Yii::t('app', 'Tags'),  
81 - 'parent_id' => Yii::t('app', 'Parent ID'),  
82 - 'active' => Yii::t('app', 'Active'),  
83 - 'comments' => Yii::t('app', 'Comments'),  
84 - 'voting' => Yii::t('app', 'Voting'), 79 + 'user_id' => Yii::t('app', 'Author'),
  80 + 'tag' => Yii::t('app', 'Tags'),
  81 + 'article_pid' => Yii::t('app', 'Parent ID'),
  82 + 'status' => Yii::t('app', 'Active'),
  83 + 'comment' => Yii::t('app', 'Comments'),
  84 + 'vote' => Yii::t('app', 'Voting'),
85 ]; 85 ];
86 } 86 }
87 87
@@ -90,7 +90,7 @@ class Article extends \yii\db\ActiveRecord @@ -90,7 +90,7 @@ class Article extends \yii\db\ActiveRecord
90 */ 90 */
91 public function getParent() 91 public function getParent()
92 { 92 {
93 - return $this->hasOne(Article::className(), ['id' => 'parent_id']); 93 + return $this->hasOne(Article::className(), ['article_id' => 'article_pid']);
94 } 94 }
95 95
96 /** 96 /**
@@ -98,15 +98,15 @@ class Article extends \yii\db\ActiveRecord @@ -98,15 +98,15 @@ class Article extends \yii\db\ActiveRecord
98 */ 98 */
99 public function getArticles() 99 public function getArticles()
100 { 100 {
101 - return $this->hasMany(Article::className(), ['parent_id' => 'id']); 101 + return $this->hasMany(Article::className(), ['article_pid' => 'article_id']);
102 } 102 }
103 103
104 /** 104 /**
105 * @return \yii\db\ActiveQuery 105 * @return \yii\db\ActiveQuery
106 */ 106 */
107 - public function getAuthor0() 107 + public function getUser()
108 { 108 {
109 - return $this->hasOne(User::className(), ['id' => 'author']); 109 + return $this->hasOne(User::className(), ['id' => 'user_id']);
110 } 110 }
111 111
112 /** 112 /**
@@ -114,7 +114,7 @@ class Article extends \yii\db\ActiveRecord @@ -114,7 +114,7 @@ class Article extends \yii\db\ActiveRecord
114 */ 114 */
115 public function getArticleLangs() 115 public function getArticleLangs()
116 { 116 {
117 - return $this->hasMany(ArticleLang::className(), ['article_id' => 'id']); 117 + return $this->hasMany(ArticleLang::className(), ['article_id' => 'article_id']);
118 } 118 }
119 119
120 /** 120 /**
@@ -122,40 +122,40 @@ class Article extends \yii\db\ActiveRecord @@ -122,40 +122,40 @@ class Article extends \yii\db\ActiveRecord
122 */ 122 */
123 public function getArticleMedia() 123 public function getArticleMedia()
124 { 124 {
125 - return $this->hasMany(ArticleMedia::className(), ['article_id' => 'id']); 125 + return $this->hasMany(ArticleMedia::className(), ['article_id' => 'article_id']);
126 } 126 }
127 127
128 public function getMedia() 128 public function getMedia()
129 { 129 {
130 - return $this->hasMany(Media::className(), ['id' => 'media_id'])->via('articleMedia'); 130 + return $this->hasMany(Media::className(), ['article_id' => 'media_id'])->via('articleMedia');
131 } 131 }
132 /** 132 /**
133 * @return \yii\db\ActiveQuery 133 * @return \yii\db\ActiveQuery
134 */ 134 */
135 public function getArticleToCategories() 135 public function getArticleToCategories()
136 { 136 {
137 - return $this->hasMany(ArticleToCategory::className(), ['article_id' => 'id']); 137 + return $this->hasMany(ArticleToCategory::className(), ['article_id' => 'article_id']);
138 } 138 }
139 139
140 public function getArticleCategories() 140 public function getArticleCategories()
141 { 141 {
142 - return $this->hasMany(ArticleCategory::className(), ['id' => 'category_id'])->viaTable('article_to_category', ['article_id' => 'id']); 142 + return $this->hasMany(ArticleCategory::className(), ['article_category_id' => 'article_category_id'])->viaTable('article_to_category', ['article_id' => 'article_category_id']);
143 } 143 }
144 144
145 public static function findArticleDropdown($id) 145 public static function findArticleDropdown($id)
146 { 146 {
147 $query = new Query(); 147 $query = new Query();
148 - return $query->select(['l.name', 'a.id']) 148 + return $query->select(['l.name', 'a.article_id'])
149 ->from(['article a']) 149 ->from(['article a'])
150 - ->leftJoin(['article_lang l'], 'a.id = l.article_id')  
151 - ->where(['l.lang_id' => 0, 'a.active' => 1])  
152 - ->andWhere(['not', ['a.id' => $id]])  
153 - ->indexBy('a.id') 150 + ->leftJoin(['article_lang l'], 'a.article_id = l.article_id')
  151 + ->where(['l.language_id' => 0, 'a.status' => 1])
  152 + ->andWhere(['not', ['a.article_id' => $id]])
  153 + ->indexBy('article_id')
154 ->column(); 154 ->column();
155 } 155 }
156 156
157 public function getArticleCategoriesArray() 157 public function getArticleCategoriesArray()
158 { 158 {
159 - return $this->getArticleToCategories()->select('category_id')->column(); 159 + return $this->getArticleToCategories()->select('article_category_id')->column();
160 } 160 }
161 } 161 }
common/modules/blog/models/ArticleCategory.php
@@ -11,14 +11,14 @@ use yii\db\Query; @@ -11,14 +11,14 @@ use yii\db\Query;
11 /** 11 /**
12 * This is the model class for table "article_category". 12 * This is the model class for table "article_category".
13 * 13 *
14 - * @property integer $id  
15 - * @property integer $active 14 + * @property integer $article_category_id
  15 + * @property integer $status
16 * @property integer $sort 16 * @property integer $sort
17 * @property string $code 17 * @property string $code
18 - * @property string $created_at  
19 - * @property string $updated_at  
20 - * @property string $tags  
21 - * @property integer $parent_id 18 + * @property string $date_add
  19 + * @property string $date_update
  20 + * @property string $tag
  21 + * @property integer $artucle_category_pid
22 * 22 *
23 * @property Article[] $articles 23 * @property Article[] $articles
24 * @property ArticleCategory $parent 24 * @property ArticleCategory $parent
@@ -53,11 +53,11 @@ class ArticleCategory extends ActiveRecord @@ -53,11 +53,11 @@ class ArticleCategory extends ActiveRecord
53 public function rules() 53 public function rules()
54 { 54 {
55 return [ 55 return [
56 - [['active', 'sort', 'parent_id'], 'integer'], 56 + [['status', 'sort', 'article_category_pid'], 'integer'],
57 [['code'], 'required'], 57 [['code'], 'required'],
58 - [['code', 'tags'], 'string'],  
59 - [['created_at', 'updated_at'], 'safe'],  
60 - [['active'], 'boolean'], 58 + [['code', 'tag'], 'string'],
  59 + [['date_add', 'date_update'], 'safe'],
  60 + [['status'], 'boolean'],
61 ]; 61 ];
62 } 62 }
63 63
@@ -67,14 +67,14 @@ class ArticleCategory extends ActiveRecord @@ -67,14 +67,14 @@ class ArticleCategory extends ActiveRecord
67 public function attributeLabels() 67 public function attributeLabels()
68 { 68 {
69 return [ 69 return [
70 - 'id' => Yii::t('app', 'ID'),  
71 - 'active' => Yii::t('app', 'Active'), 70 + 'article_category_id' => Yii::t('app', 'ID'),
  71 + 'status' => Yii::t('app', 'Active'),
72 'sort' => Yii::t('app', 'Sort'), 72 'sort' => Yii::t('app', 'Sort'),
73 'code' => Yii::t('app', 'Code'), 73 'code' => Yii::t('app', 'Code'),
74 - 'created_at' => Yii::t('app', 'Created At'),  
75 - 'updated_at' => Yii::t('app', 'Updated At'),  
76 - 'tags' => Yii::t('app', 'Tags'),  
77 - 'parent_id' => Yii::t('app', 'Parent ID'), 74 + 'date_add' => Yii::t('app', 'Created At'),
  75 + 'date_update' => Yii::t('app', 'Updated At'),
  76 + 'tag' => Yii::t('app', 'Tags'),
  77 + 'article_category_pid' => Yii::t('app', 'Parent ID'),
78 ]; 78 ];
79 } 79 }
80 80
@@ -83,7 +83,7 @@ class ArticleCategory extends ActiveRecord @@ -83,7 +83,7 @@ class ArticleCategory extends ActiveRecord
83 */ 83 */
84 public function getArticles() 84 public function getArticles()
85 { 85 {
86 - return $this->hasMany(Article::className(), ['category_id' => 'id']); 86 + return $this->hasMany(Article::className(), ['article_id' => 'article_id'])->viaTable('article_to_category', ['article_category_id' => 'article_category_id']) ;
87 } 87 }
88 88
89 /** 89 /**
@@ -91,7 +91,7 @@ class ArticleCategory extends ActiveRecord @@ -91,7 +91,7 @@ class ArticleCategory extends ActiveRecord
91 */ 91 */
92 public function getParent() 92 public function getParent()
93 { 93 {
94 - return $this->hasOne(ArticleCategory::className(), ['id' => 'parent_id']); 94 + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_pid']);
95 } 95 }
96 96
97 /** 97 /**
@@ -99,7 +99,7 @@ class ArticleCategory extends ActiveRecord @@ -99,7 +99,7 @@ class ArticleCategory extends ActiveRecord
99 */ 99 */
100 public function getArticleCategories() 100 public function getArticleCategories()
101 { 101 {
102 - return $this->hasMany(ArticleCategory::className(), ['parent_id' => 'id']); 102 + return $this->hasMany(ArticleCategory::className(), ['article_category_pid' => 'article_category_id']);
103 } 103 }
104 104
105 /** 105 /**
@@ -107,7 +107,7 @@ class ArticleCategory extends ActiveRecord @@ -107,7 +107,7 @@ class ArticleCategory extends ActiveRecord
107 */ 107 */
108 public function getArticleCategoryLangs() 108 public function getArticleCategoryLangs()
109 { 109 {
110 - return $this->hasMany(ArticleCategoryLang::className(), ['category_id' => 'id']); 110 + return $this->hasMany(ArticleCategoryLang::className(), ['article_category_id' => 'article_category_id']);
111 } 111 }
112 112
113 /** 113 /**
@@ -115,18 +115,18 @@ class ArticleCategory extends ActiveRecord @@ -115,18 +115,18 @@ class ArticleCategory extends ActiveRecord
115 */ 115 */
116 public function getArticleCategoryMedia() 116 public function getArticleCategoryMedia()
117 { 117 {
118 - return $this->hasMany(ArticleCategoryMedia::className(), ['category_id' => 'id']); 118 + return $this->hasMany(ArticleCategoryMedia::className(), ['article_category_id' => 'article_category_id']);
119 } 119 }
120 120
121 public static function findArticleCategoryDropdown($id) 121 public static function findArticleCategoryDropdown($id)
122 { 122 {
123 $query = new Query(); 123 $query = new Query();
124 - return $query->select(['l.name', 'c.id']) 124 + return $query->select(['l.name', 'c.article_category_id'])
125 ->from(['article_category c']) 125 ->from(['article_category c'])
126 - ->leftJoin(['article_category_lang l'], 'c.id = l.category_id')  
127 - ->where(['l.lang_id' => 0, 'c.active' => 1])  
128 - ->andWhere(['not', ['c.id' => $id]])  
129 - ->indexBy('id') 126 + ->leftJoin(['article_category_lang l'], 'c.article_category_id = l.article_category_id')
  127 + ->where(['l.language_id' => 0, 'c.status' => 1])
  128 + ->andWhere(['not', ['c.article_category_id' => $id]])
  129 + ->indexBy('article_category_id')
130 ->column(); 130 ->column();
131 } 131 }
132 132
common/modules/blog/models/ArticleCategoryLang.php
@@ -8,18 +8,18 @@ use Yii; @@ -8,18 +8,18 @@ use Yii;
8 /** 8 /**
9 * This is the model class for table "article_category_lang". 9 * This is the model class for table "article_category_lang".
10 * 10 *
11 - * @property integer $id  
12 - * @property integer $lang_id  
13 - * @property integer $category_id 11 + * @property integer $article_category_language_id
  12 + * @property integer $language_id
  13 + * @property integer $article_category_id
14 * @property string $text 14 * @property string $text
15 * @property string $preview 15 * @property string $preview
16 * @property string $seo_url 16 * @property string $seo_url
17 * @property string $name 17 * @property string $name
18 * @property string $meta_title 18 * @property string $meta_title
19 * @property string $meta_descr 19 * @property string $meta_descr
20 - * @property string $meta_keywords 20 + * @property string $meta_keyword
21 * @property string $h1_tag 21 * @property string $h1_tag
22 - * @property string $tags 22 + * @property string $tag
23 * 23 *
24 * @property ArticleCategory $category 24 * @property ArticleCategory $category
25 * @property Language $lang 25 * @property Language $lang
@@ -51,9 +51,9 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord @@ -51,9 +51,9 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord
51 public function rules() 51 public function rules()
52 { 52 {
53 return [ 53 return [
54 - [['lang_id', 'category_id'], 'integer'], 54 + [['language_id', 'article_category_id'], 'integer'],
55 [['text', 'name'], 'required'], 55 [['text', 'name'], 'required'],
56 - [['text', 'preview', 'seo_url', 'name', 'meta_title', 'meta_descr', 'meta_keywords', 'h1_tag', 'tags'], 'string'], 56 + [['text', 'preview', 'seo_url', 'name', 'meta_title', 'meta_descr', 'meta_keyword', 'h1_tag', 'tag'], 'string'],
57 ['seo_url', function($attribute, $params) { 57 ['seo_url', function($attribute, $params) {
58 $pattern = "/^[a-zA-Z\d_-]+$/"; 58 $pattern = "/^[a-zA-Z\d_-]+$/";
59 if(!preg_match($pattern, $this->$attribute)) { 59 if(!preg_match($pattern, $this->$attribute)) {
@@ -69,18 +69,18 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord @@ -69,18 +69,18 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord
69 public function attributeLabels() 69 public function attributeLabels()
70 { 70 {
71 return [ 71 return [
72 - 'id' => Yii::t('app', 'ID'),  
73 - 'lang_id' => Yii::t('app', 'Lang ID'),  
74 - 'category_id' => Yii::t('app', 'Category ID'), 72 + 'article_category_language_id' => Yii::t('app', 'ID'),
  73 + 'language_id' => Yii::t('app', 'Lang ID'),
  74 + 'article_category_id' => Yii::t('app', 'Category ID'),
75 'text' => Yii::t('app', 'Text'), 75 'text' => Yii::t('app', 'Text'),
76 'preview' => Yii::t('app', 'Preview'), 76 'preview' => Yii::t('app', 'Preview'),
77 'seo_url' => Yii::t('app', 'Seo Url'), 77 'seo_url' => Yii::t('app', 'Seo Url'),
78 'name' => Yii::t('app', 'Name'), 78 'name' => Yii::t('app', 'Name'),
79 'meta_title' => Yii::t('app', 'Meta Title'), 79 'meta_title' => Yii::t('app', 'Meta Title'),
80 'meta_descr' => Yii::t('app', 'Meta Descr'), 80 'meta_descr' => Yii::t('app', 'Meta Descr'),
81 - 'meta_keywords' => Yii::t('app', 'Meta Keywords'), 81 + 'meta_keyword' => Yii::t('app', 'Meta Keywords'),
82 'h1_tag' => Yii::t('app', 'H1 Tag'), 82 'h1_tag' => Yii::t('app', 'H1 Tag'),
83 - 'tags' => Yii::t('app', 'Tags'), 83 + 'tag' => Yii::t('app', 'Tags'),
84 ]; 84 ];
85 } 85 }
86 86
@@ -89,7 +89,7 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord @@ -89,7 +89,7 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord
89 */ 89 */
90 public function getCategory() 90 public function getCategory()
91 { 91 {
92 - return $this->hasOne(ArticleCategory::className(), ['id' => 'category_id']); 92 + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']);
93 } 93 }
94 94
95 /** 95 /**
@@ -97,6 +97,6 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord @@ -97,6 +97,6 @@ class ArticleCategoryLang extends \yii\db\ActiveRecord
97 */ 97 */
98 public function getLang() 98 public function getLang()
99 { 99 {
100 - return $this->hasOne(Language::className(), ['language_id' => 'lang_id']); 100 + return $this->hasOne(Language::className(), ['language_id' => 'language_id']);
101 } 101 }
102 } 102 }
common/modules/blog/models/ArticleCategoryMedia.php
@@ -8,16 +8,18 @@ use Yii; @@ -8,16 +8,18 @@ use Yii;
8 /** 8 /**
9 * This is the model class for table "article_category_media". 9 * This is the model class for table "article_category_media".
10 * 10 *
11 - * @property integer $id  
12 - * @property integer $category_id 11 + * @property integer $article_category_media_id
  12 + * @property integer $article_category_id
13 * @property integer $media_id 13 * @property integer $media_id
14 * @property string $media_alt 14 * @property string $media_alt
15 * @property string $media_title 15 * @property string $media_title
16 * @property string $media_caption 16 * @property string $media_caption
17 * @property string $type 17 * @property string $type
  18 + * @property string $language_id
18 * 19 *
19 * @property ArticleCategory $category 20 * @property ArticleCategory $category
20 * @property Media $media 21 * @property Media $media
  22 + * @property Language $lang
21 */ 23 */
22 class ArticleCategoryMedia extends \yii\db\ActiveRecord 24 class ArticleCategoryMedia extends \yii\db\ActiveRecord
23 { 25 {
@@ -36,9 +38,9 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -36,9 +38,9 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
36 public function scenarios() 38 public function scenarios()
37 { 39 {
38 $scenarios = parent::scenarios(); 40 $scenarios = parent::scenarios();
39 - $scenarios[self::SCENARIO_FULL] = ['id', 'category_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile'];  
40 - $scenarios[self::SCENARIO_PREVIEW] = ['id', 'category_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile'];  
41 - $scenarios[self::SCENARIO_ADDITIONAL] = ['id', 'category_id', 'media_id', 'type', 'imageFile']; 41 + $scenarios[self::SCENARIO_FULL] = ['article_category_media_id', 'article_category_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile'];
  42 + $scenarios[self::SCENARIO_PREVIEW] = ['article_category_media_id', 'article_category_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile'];
  43 + $scenarios[self::SCENARIO_ADDITIONAL] = ['article_category_media_id', 'article_category_id', 'media_id', 'type', 'imageFile'];
42 return $scenarios; 44 return $scenarios;
43 } 45 }
44 46
@@ -48,8 +50,8 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -48,8 +50,8 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
48 public function rules() 50 public function rules()
49 { 51 {
50 return [ 52 return [
51 - [['category_id', 'media_id'], 'required'],  
52 - [['category_id', 'media_id'], 'integer'], 53 + [['article_category_id', 'media_id'], 'required'],
  54 + [['article_category_id', 'media_id'], 'integer'],
53 [['media_alt', 'media_title', 'media_caption'], 'string'], 55 [['media_alt', 'media_title', 'media_caption'], 'string'],
54 [['type'], 'string', 'max' => 10], 56 [['type'], 'string', 'max' => 10],
55 [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL], 57 [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL],
@@ -64,14 +66,15 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -64,14 +66,15 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
64 public function attributeLabels() 66 public function attributeLabels()
65 { 67 {
66 return [ 68 return [
67 - 'id' => Yii::t('app', 'ID'),  
68 - 'category_id' => Yii::t('app', 'Category ID'), 69 + 'article_category_media_id' => Yii::t('app', 'ID'),
  70 + 'article_category_id' => Yii::t('app', 'Category ID'),
69 'media_id' => Yii::t('app', 'Media ID'), 71 'media_id' => Yii::t('app', 'Media ID'),
70 'media_alt' => Yii::t('app', 'Media Alt'), 72 'media_alt' => Yii::t('app', 'Media Alt'),
71 'media_title' => Yii::t('app', 'Media Title'), 73 'media_title' => Yii::t('app', 'Media Title'),
72 'media_caption' => Yii::t('app', 'Media Caption'), 74 'media_caption' => Yii::t('app', 'Media Caption'),
73 'type' => Yii::t('app', 'Type'), 75 'type' => Yii::t('app', 'Type'),
74 'imageFile' => Yii::t('app', 'Image File'), 76 'imageFile' => Yii::t('app', 'Image File'),
  77 + 'language_id' => Yii::t('app', 'Language ID'),
75 ]; 78 ];
76 } 79 }
77 80
@@ -80,7 +83,7 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -80,7 +83,7 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
80 */ 83 */
81 public function getCategory() 84 public function getCategory()
82 { 85 {
83 - return $this->hasOne(ArticleCategory::className(), ['id' => 'category_id']); 86 + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']);
84 } 87 }
85 88
86 /** 89 /**
@@ -88,12 +91,12 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -88,12 +91,12 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
88 */ 91 */
89 public function getMedia() 92 public function getMedia()
90 { 93 {
91 - return $this->hasOne(Media::className(), ['id' => 'media_id']); 94 + return $this->hasOne(Media::className(), ['media_id' => 'media_id']);
92 } 95 }
93 96
94 public function upload($category_id) 97 public function upload($category_id)
95 { 98 {
96 - $this->category_id = $category_id; 99 + $this->article_category_id = $category_id;
97 if(is_array($this->imageFile)) { 100 if(is_array($this->imageFile)) {
98 $ok = true; 101 $ok = true;
99 foreach($this->imageFile as $image) { 102 foreach($this->imageFile as $image) {
@@ -101,7 +104,7 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -101,7 +104,7 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
101 $media = new Media(); 104 $media = new Media();
102 $media->imageFile = $image; 105 $media->imageFile = $image;
103 $media->upload(); 106 $media->upload();
104 - $media_category->media_id = $media->id; 107 + $media_category->media_id = $media->media_id;
105 $ok = $media_category->save() && $ok; 108 $ok = $media_category->save() && $ok;
106 unset($media_category); 109 unset($media_category);
107 } 110 }
@@ -110,19 +113,19 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -110,19 +113,19 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
110 $media = new Media(); 113 $media = new Media();
111 $media->imageFile = $this->imageFile; 114 $media->imageFile = $this->imageFile;
112 $media->upload(); 115 $media->upload();
113 - $this->media_id = $media->id; 116 + $this->media_id = $media->media_id;
114 return $this->save(); 117 return $this->save();
115 } 118 }
116 } 119 }
117 120
118 public function replace($category_id, $removeMedia = false) 121 public function replace($category_id, $removeMedia = false)
119 { 122 {
120 - $this->category_id = $category_id; 123 + $this->article_category_id = $category_id;
121 if($removeMedia) { 124 if($removeMedia) {
122 - $category_media = ArticleCategoryMedia::find()->select('media_id')->where(['category_id' => $this->category_id, 'type' => $this->type])->column(); 125 + $category_media = ArticleCategoryMedia::find()->select('media_id')->where(['article_category_id' => $this->article_category_id, 'type' => $this->type])->column();
123 $media = array(); 126 $media = array();
124 foreach($category_media as $media_id) { 127 foreach($category_media as $media_id) {
125 - $media[] = Media::findOne(['id' => $media_id]); 128 + $media[] = Media::findOne(['media_id' => $media_id]);
126 } 129 }
127 $media = array_unique($media); 130 $media = array_unique($media);
128 foreach($media as $one_media) { 131 foreach($media as $one_media) {
@@ -140,17 +143,17 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord @@ -140,17 +143,17 @@ class ArticleCategoryMedia extends \yii\db\ActiveRecord
140 $media = new Media(); 143 $media = new Media();
141 $media->imageFile = $image; 144 $media->imageFile = $image;
142 $media->upload(); 145 $media->upload();
143 - $media_category->media_id = $media->id; 146 + $media_category->media_id = $media->media_id;
144 $ok = $media_category->save() && $ok; 147 $ok = $media_category->save() && $ok;
145 unset($media_category); 148 unset($media_category);
146 } 149 }
147 return $ok; 150 return $ok;
148 } elseif(!empty($this->imageFile)) { 151 } elseif(!empty($this->imageFile)) {
149 - ArticleCategoryMedia::deleteAll(['category_id' => $this->category_id, 'type' => $this->type]); 152 + ArticleCategoryMedia::deleteAll(['category_id' => $this->article_category_id, 'type' => $this->type]);
150 $media = new Media(); 153 $media = new Media();
151 $media->imageFile = $this->imageFile; 154 $media->imageFile = $this->imageFile;
152 $media->upload(); 155 $media->upload();
153 - $this->media_id = $media->id; 156 + $this->media_id = $media->media_id;
154 $this->setIsNewRecord(true); 157 $this->setIsNewRecord(true);
155 return $this->save(); 158 return $this->save();
156 } 159 }
common/modules/blog/models/ArticleLang.php
@@ -8,8 +8,8 @@ use common\models\Language; @@ -8,8 +8,8 @@ use common\models\Language;
8 /** 8 /**
9 * This is the model class for table "article_lang". 9 * This is the model class for table "article_lang".
10 * 10 *
11 - * @property integer $id  
12 - * @property integer $lang_id 11 + * @property integer $article_language_id
  12 + * @property integer $language_id
13 * @property integer $article_id 13 * @property integer $article_id
14 * @property string $text 14 * @property string $text
15 * @property string $seo_url 15 * @property string $seo_url
@@ -17,9 +17,9 @@ use common\models\Language; @@ -17,9 +17,9 @@ use common\models\Language;
17 * @property string $preview 17 * @property string $preview
18 * @property string $meta_title 18 * @property string $meta_title
19 * @property string $meta_descr 19 * @property string $meta_descr
20 - * @property string $meta_keywords 20 + * @property string $meta_keyword
21 * @property string $h1_tag 21 * @property string $h1_tag
22 - * @property string $tags 22 + * @property string $tag
23 * 23 *
24 * @property Article $article 24 * @property Article $article
25 * @property Language $lang 25 * @property Language $lang
@@ -40,9 +40,9 @@ class ArticleLang extends \yii\db\ActiveRecord @@ -40,9 +40,9 @@ class ArticleLang extends \yii\db\ActiveRecord
40 public function rules() 40 public function rules()
41 { 41 {
42 return [ 42 return [
43 - [['lang_id', 'text', 'name'], 'required'],  
44 - [['lang_id', 'article_id'], 'integer'],  
45 - [['text', 'seo_url', 'name', 'preview', 'meta_title', 'meta_descr', 'meta_keywords', 'h1_tag', 'tags'], 'string'] 43 + [['language_id', 'text', 'name'], 'required'],
  44 + [['language_id', 'article_id'], 'integer'],
  45 + [['text', 'seo_url', 'name', 'preview', 'meta_title', 'meta_descr', 'meta_keyword', 'h1_tag', 'tag'], 'string']
46 ]; 46 ];
47 } 47 }
48 48
@@ -52,8 +52,8 @@ class ArticleLang extends \yii\db\ActiveRecord @@ -52,8 +52,8 @@ class ArticleLang extends \yii\db\ActiveRecord
52 public function attributeLabels() 52 public function attributeLabels()
53 { 53 {
54 return [ 54 return [
55 - 'id' => Yii::t('app', 'ID'),  
56 - 'lang_id' => Yii::t('app', 'Lang ID'), 55 + 'article_language_id' => Yii::t('app', 'ID'),
  56 + 'language_id' => Yii::t('app', 'Lang ID'),
57 'article_id' => Yii::t('app', 'Article ID'), 57 'article_id' => Yii::t('app', 'Article ID'),
58 'text' => Yii::t('app', 'Text'), 58 'text' => Yii::t('app', 'Text'),
59 'seo_url' => Yii::t('app', 'Seo Url'), 59 'seo_url' => Yii::t('app', 'Seo Url'),
@@ -61,9 +61,9 @@ class ArticleLang extends \yii\db\ActiveRecord @@ -61,9 +61,9 @@ class ArticleLang extends \yii\db\ActiveRecord
61 'preview' => Yii::t('app', 'Preview'), 61 'preview' => Yii::t('app', 'Preview'),
62 'meta_title' => Yii::t('app', 'Meta Title'), 62 'meta_title' => Yii::t('app', 'Meta Title'),
63 'meta_descr' => Yii::t('app', 'Meta Descr'), 63 'meta_descr' => Yii::t('app', 'Meta Descr'),
64 - 'meta_keywords' => Yii::t('app', 'Meta Keywords'), 64 + 'meta_keyword' => Yii::t('app', 'Meta Keywords'),
65 'h1_tag' => Yii::t('app', 'H1 Tag'), 65 'h1_tag' => Yii::t('app', 'H1 Tag'),
66 - 'tags' => Yii::t('app', 'Tags'), 66 + 'tag' => Yii::t('app', 'Tags'),
67 ]; 67 ];
68 } 68 }
69 69
@@ -72,7 +72,7 @@ class ArticleLang extends \yii\db\ActiveRecord @@ -72,7 +72,7 @@ class ArticleLang extends \yii\db\ActiveRecord
72 */ 72 */
73 public function getArticle() 73 public function getArticle()
74 { 74 {
75 - return $this->hasOne(Article::className(), ['id' => 'article_id']); 75 + return $this->hasOne(Article::className(), ['article_id' => 'article_id']);
76 } 76 }
77 77
78 /** 78 /**
@@ -80,6 +80,6 @@ class ArticleLang extends \yii\db\ActiveRecord @@ -80,6 +80,6 @@ class ArticleLang extends \yii\db\ActiveRecord
80 */ 80 */
81 public function getLang() 81 public function getLang()
82 { 82 {
83 - return $this->hasOne(Language::className(), ['language_id' => 'lang_id']); 83 + return $this->hasOne(Language::className(), ['language_id' => 'language_id']);
84 } 84 }
85 } 85 }
common/modules/blog/models/ArticleMedia.php
@@ -9,13 +9,14 @@ use yii\web\UploadedFile; @@ -9,13 +9,14 @@ use yii\web\UploadedFile;
9 /** 9 /**
10 * This is the model class for table "article_media". 10 * This is the model class for table "article_media".
11 * 11 *
12 - * @property integer $id 12 + * @property integer $article_media_id
13 * @property integer $article_id 13 * @property integer $article_id
14 * @property integer $media_id 14 * @property integer $media_id
15 * @property string $type 15 * @property string $type
16 * @property string $media_alt 16 * @property string $media_alt
17 * @property string $media_title 17 * @property string $media_title
18 * @property string $media_caption 18 * @property string $media_caption
  19 + * @property integer $language_id
19 * 20 *
20 * @property Article $article 21 * @property Article $article
21 * @property Media $media 22 * @property Media $media
@@ -37,9 +38,9 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -37,9 +38,9 @@ class ArticleMedia extends \yii\db\ActiveRecord
37 public function scenarios() 38 public function scenarios()
38 { 39 {
39 $scenarios = parent::scenarios(); 40 $scenarios = parent::scenarios();
40 - $scenarios[self::SCENARIO_FULL] = ['id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile'];  
41 - $scenarios[self::SCENARIO_PREVIEW] = ['id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile'];  
42 - $scenarios[self::SCENARIO_ADDITIONAL] = ['id', 'article_id', 'media_id', 'type', 'imageFile']; 41 + $scenarios[self::SCENARIO_FULL] = ['article_media_id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile', 'language_id'];
  42 + $scenarios[self::SCENARIO_PREVIEW] = ['article_media_id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile', 'language_id'];
  43 + $scenarios[self::SCENARIO_ADDITIONAL] = ['article_media_id', 'article_id', 'media_id', 'type', 'imageFile', 'language_id'];
43 return $scenarios; 44 return $scenarios;
44 } 45 }
45 46
@@ -50,7 +51,7 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -50,7 +51,7 @@ class ArticleMedia extends \yii\db\ActiveRecord
50 { 51 {
51 return [ 52 return [
52 [['article_id', 'media_id'], 'required'], 53 [['article_id', 'media_id'], 'required'],
53 - [['article_id', 'media_id'], 'integer'], 54 + [['article_id', 'media_id', 'language_id'], 'integer'],
54 [['media_alt', 'media_title', 'media_caption'], 'string'], 55 [['media_alt', 'media_title', 'media_caption'], 'string'],
55 [['type'], 'string', 'max' => 10], 56 [['type'], 'string', 'max' => 10],
56 [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL], 57 [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL],
@@ -65,7 +66,7 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -65,7 +66,7 @@ class ArticleMedia extends \yii\db\ActiveRecord
65 public function attributeLabels() 66 public function attributeLabels()
66 { 67 {
67 return [ 68 return [
68 - 'id' => Yii::t('app', 'ID'), 69 + 'article_media_id' => Yii::t('app', 'ID'),
69 'article_id' => Yii::t('app', 'Article ID'), 70 'article_id' => Yii::t('app', 'Article ID'),
70 'media_id' => Yii::t('app', 'Media ID'), 71 'media_id' => Yii::t('app', 'Media ID'),
71 'type' => Yii::t('app', 'Type'), 72 'type' => Yii::t('app', 'Type'),
@@ -81,7 +82,7 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -81,7 +82,7 @@ class ArticleMedia extends \yii\db\ActiveRecord
81 */ 82 */
82 public function getArticle() 83 public function getArticle()
83 { 84 {
84 - return $this->hasOne(Article::className(), ['id' => 'article_id']); 85 + return $this->hasOne(Article::className(), ['article_id' => 'article_id']);
85 } 86 }
86 87
87 /** 88 /**
@@ -89,7 +90,7 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -89,7 +90,7 @@ class ArticleMedia extends \yii\db\ActiveRecord
89 */ 90 */
90 public function getMedia() 91 public function getMedia()
91 { 92 {
92 - return $this->hasOne(Media::className(), ['id' => 'media_id']); 93 + return $this->hasOne(Media::className(), ['media_id' => 'media_id']);
93 } 94 }
94 95
95 public function upload($article_id) 96 public function upload($article_id)
@@ -102,7 +103,7 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -102,7 +103,7 @@ class ArticleMedia extends \yii\db\ActiveRecord
102 $media = new Media(); 103 $media = new Media();
103 $media->imageFile = $image; 104 $media->imageFile = $image;
104 $media->upload(); 105 $media->upload();
105 - $media_article->media_id = $media->id; 106 + $media_article->media_id = $media->media_id;
106 $ok = $media_article->save() && $ok; 107 $ok = $media_article->save() && $ok;
107 unset($media_article); 108 unset($media_article);
108 } 109 }
@@ -111,7 +112,7 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -111,7 +112,7 @@ class ArticleMedia extends \yii\db\ActiveRecord
111 $media = new Media(); 112 $media = new Media();
112 $media->imageFile = $this->imageFile; 113 $media->imageFile = $this->imageFile;
113 $media->upload(); 114 $media->upload();
114 - $this->media_id = $media->id; 115 + $this->media_id = $media->media_id;
115 return $this->save(); 116 return $this->save();
116 } 117 }
117 } 118 }
@@ -119,11 +120,11 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -119,11 +120,11 @@ class ArticleMedia extends \yii\db\ActiveRecord
119 public function replace($article_id, $removeMedia = false) 120 public function replace($article_id, $removeMedia = false)
120 { 121 {
121 $this->article_id = $article_id; 122 $this->article_id = $article_id;
122 - if($removeMedia) {  
123 - $article_media = ArticleMedia::find()->select('media_id')->where(['article_id' => $this->article_id, 'type' => $this->type])->column(); 123 + if($removeMedia && !$this->getIsNewRecord()) {
  124 + $article_media = ArticleMedia::find()->select('media_id')->where(['article_id' => $this->article_id, 'type' => $this->type, 'language_id' => $this->language_id])->column();
124 $media = array(); 125 $media = array();
125 foreach($article_media as $media_id) { 126 foreach($article_media as $media_id) {
126 - $media[] = Media::findOne(['id' => $media_id]); 127 + $media[] = Media::findOne(['media_id' => $media_id]);
127 } 128 }
128 $media = array_unique($media); 129 $media = array_unique($media);
129 foreach($media as $one_media) { 130 foreach($media as $one_media) {
@@ -141,17 +142,17 @@ class ArticleMedia extends \yii\db\ActiveRecord @@ -141,17 +142,17 @@ class ArticleMedia extends \yii\db\ActiveRecord
141 $media = new Media(); 142 $media = new Media();
142 $media->imageFile = $image; 143 $media->imageFile = $image;
143 $media->upload(); 144 $media->upload();
144 - $media_article->media_id = $media->id; 145 + $media_article->media_id = $media->media_id;
145 $ok = $media_article->save() && $ok; 146 $ok = $media_article->save() && $ok;
146 unset($media_article); 147 unset($media_article);
147 } 148 }
148 return $ok; 149 return $ok;
149 } elseif(!empty($this->imageFile)) { 150 } elseif(!empty($this->imageFile)) {
150 - ArticleMedia::deleteAll(['article_id' => $this->article_id, 'type' => $this->type]); 151 + ArticleMedia::deleteAll(['article_id' => $this->article_id, 'type' => $this->type, 'language_id' => $this->language_id]);
151 $media = new Media(); 152 $media = new Media();
152 $media->imageFile = $this->imageFile; 153 $media->imageFile = $this->imageFile;
153 $media->upload(); 154 $media->upload();
154 - $this->media_id = $media->id; 155 + $this->media_id = $media->media_id;
155 $this->setIsNewRecord(true); 156 $this->setIsNewRecord(true);
156 return $this->save(); 157 return $this->save();
157 } 158 }
common/modules/blog/models/ArticleToCategory.php
@@ -8,7 +8,7 @@ use Yii; @@ -8,7 +8,7 @@ use Yii;
8 * This is the model class for table "article_to_category". 8 * This is the model class for table "article_to_category".
9 * 9 *
10 * @property integer $article_id 10 * @property integer $article_id
11 - * @property integer $category_id 11 + * @property integer $article_category_id
12 * 12 *
13 * @property Article $article 13 * @property Article $article
14 * @property ArticleCategory $category 14 * @property ArticleCategory $category
@@ -29,7 +29,7 @@ class ArticleToCategory extends \yii\db\ActiveRecord @@ -29,7 +29,7 @@ class ArticleToCategory extends \yii\db\ActiveRecord
29 public function rules() 29 public function rules()
30 { 30 {
31 return [ 31 return [
32 - [['article_id', 'category_id'], 'integer'] 32 + [['article_id', 'article_category_id'], 'integer']
33 ]; 33 ];
34 } 34 }
35 35
@@ -40,7 +40,7 @@ class ArticleToCategory extends \yii\db\ActiveRecord @@ -40,7 +40,7 @@ class ArticleToCategory extends \yii\db\ActiveRecord
40 { 40 {
41 return [ 41 return [
42 'article_id' => Yii::t('app', 'Article ID'), 42 'article_id' => Yii::t('app', 'Article ID'),
43 - 'category_id' => Yii::t('app', 'Category ID'), 43 + 'article_category_id' => Yii::t('app', 'Category ID'),
44 ]; 44 ];
45 } 45 }
46 46
@@ -49,7 +49,7 @@ class ArticleToCategory extends \yii\db\ActiveRecord @@ -49,7 +49,7 @@ class ArticleToCategory extends \yii\db\ActiveRecord
49 */ 49 */
50 public function getArticle() 50 public function getArticle()
51 { 51 {
52 - return $this->hasOne(Article::className(), ['id' => 'article_id']); 52 + return $this->hasOne(Article::className(), ['article_id' => 'article_id']);
53 } 53 }
54 54
55 /** 55 /**
@@ -57,6 +57,6 @@ class ArticleToCategory extends \yii\db\ActiveRecord @@ -57,6 +57,6 @@ class ArticleToCategory extends \yii\db\ActiveRecord
57 */ 57 */
58 public function getCategory() 58 public function getCategory()
59 { 59 {
60 - return $this->hasOne(ArticleCategory::className(), ['id' => 'category_id']); 60 + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']);
61 } 61 }
62 } 62 }
common/modules/blog/views/ajax/_article_form.php
@@ -3,31 +3,36 @@ @@ -3,31 +3,36 @@
3 use yii\bootstrap\ActiveField; 3 use yii\bootstrap\ActiveField;
4 use mihaildev\ckeditor\CKEditor; 4 use mihaildev\ckeditor\CKEditor;
5 5
6 -$form = \yii\bootstrap\ActiveForm::begin(); 6 +if(empty($form)) {
  7 + $new_form = true;
  8 + $form = \yii\bootstrap\ActiveForm::begin();
  9 +}
7 ?> 10 ?>
8 -<div role="" class="tab-pane active ajax-loaded" id="lang-<?=$model->language_id?>"> 11 +<div role="" class="tab-pane active ajax-loaded" id="<?=$widget_id?>-<?=$model->language_id?>">
9 12
10 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]lang_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> 13 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?>
11 14
12 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> 15 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>
13 16
14 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> 17 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>
15 18
16 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?> 19 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?>
17 20
18 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]name"]))->textInput() ?> 21 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]name"]))->textInput() ?>
19 22
20 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?> 23 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?>
21 24
22 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?> 25 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?>
23 26
24 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]meta_keywords"]))->textInput() ?> 27 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?>
25 28
26 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?> 29 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?>
27 30
28 - <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]tags"]))->textInput() ?> 31 + <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]tag"]))->textInput() ?>
29 32
30 </div> 33 </div>
31 <?php 34 <?php
32 -$form->end(); 35 + if($new_form) {
  36 + $form->end();
  37 + }
33 ?> 38 ?>
common/modules/blog/views/ajax/_article_media_form.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\bootstrap\ActiveField;
  4 +use mihaildev\ckeditor\CKEditor;
  5 +
  6 +$form = \yii\bootstrap\ActiveForm::begin();
  7 +?>
  8 +<div role="" class="tab-pane active ajax-loaded" id="<?=$widget_id?>-<?=$model->language_id?>">
  9 +
  10 + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id][$type]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?>
  11 +
  12 + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id][$type]imageFile"]))->fileInput(['class' => 'image_inputs_field']) ?>
  13 +
  14 +</div>
  15 +<?php
  16 +$form->end();
  17 +?>
common/modules/blog/views/ajax/_category_form.php
@@ -5,9 +5,9 @@ use mihaildev\ckeditor\CKEditor; @@ -5,9 +5,9 @@ use mihaildev\ckeditor\CKEditor;
5 5
6 $form = \yii\bootstrap\ActiveForm::begin(); 6 $form = \yii\bootstrap\ActiveForm::begin();
7 ?> 7 ?>
8 -<div role="" class="tab-pane active ajax-loaded" id="lang-<?=$model->language_id?>"> 8 +<div role="" class="tab-pane active ajax-loaded" id="<?=$widget_id?>-<?=$model->language_id?>">
9 9
10 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]lang_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> 10 + <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?>
11 11
12 <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> 12 <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>
13 13
@@ -21,11 +21,11 @@ $form = \yii\bootstrap\ActiveForm::begin(); @@ -21,11 +21,11 @@ $form = \yii\bootstrap\ActiveForm::begin();
21 21
22 <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?> 22 <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?>
23 23
24 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]meta_keywords"]))->textInput() ?> 24 + <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?>
25 25
26 <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?> 26 <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?>
27 27
28 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]tags"]))->textInput() ?> 28 + <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]tag"]))->textInput() ?>
29 29
30 </div> 30 </div>
31 <?php 31 <?php
common/modules/blog/views/article/_form.php
1 <?php 1 <?php
2 use common\modules\blog\models\ArticleCategory; 2 use common\modules\blog\models\ArticleCategory;
3 -use yii\bootstrap\ActiveForm; 3 +use common\modules\blog\models\ArticleMedia;
  4 +use common\widgets\Multilang;
  5 + use common\widgets\Multilanguage;
  6 + use yii\bootstrap\ActiveForm;
4 use common\modules\blog\models\Article; 7 use common\modules\blog\models\Article;
5 use yii\bootstrap\Html; 8 use yii\bootstrap\Html;
6 use mihaildev\ckeditor\CKEditor; 9 use mihaildev\ckeditor\CKEditor;
@@ -17,100 +20,117 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;); @@ -17,100 +20,117 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;);
17 20
18 <?= $form->field($article, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?> 21 <?= $form->field($article, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?>
19 22
20 - <?= $form->field($article, 'tags')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?> 23 + <?= $form->field($article, 'tag')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?>
21 24
22 <?= $form->field($article, 'sort')->input('number') ?> 25 <?= $form->field($article, 'sort')->input('number') ?>
23 26
24 - <?= $form->field($article, 'parent_id')  
25 - ->dropDownList(Article::findArticleDropdown($article->id), ['prompt' => Yii::t('app', 'Select parent')]) ?> 27 + <?= $form->field($article, 'article_pid')
  28 + ->dropDownList(Article::findArticleDropdown($article->article_id), ['prompt' => Yii::t('app', 'Select parent')]) ?>
26 29
27 <?= $form->field($article, 'articleCategoriesArray') 30 <?= $form->field($article, 'articleCategoriesArray')
28 ->dropDownList(ArticleCategory::findArticleCategoryDropdown(NULL), ['multiple' => 'multiple'])->label(\Yii::t('app', 'Article Categories Array')); ?> 31 ->dropDownList(ArticleCategory::findArticleCategoryDropdown(NULL), ['multiple' => 'multiple'])->label(\Yii::t('app', 'Article Categories Array')); ?>
29 32
30 - <?= $form->field($article, 'active')->checkbox() ?> 33 + <?= $form->field($article, 'status')->checkbox() ?>
31 34
32 <ul class="nav nav-tabs" id="image-tabs" role="tablist"> 35 <ul class="nav nav-tabs" id="image-tabs" role="tablist">
33 - <?php  
34 - $first = 1;  
35 - foreach($images as $index => $image) {  
36 - ?>  
37 - <li role="image_inputs" class="<?php if($first) { echo 'active'; }?>" data-type="<?=$index?>"><a href="#image-<?=$index?>" aria-controls="image-<?=$index?>" role="tab" data-toggle="tab"><span><?= \Yii::t('app', $index)?></span></a></li>  
38 - <?php  
39 - $first = 0;  
40 - }  
41 - ?> 36 + <li role="image_inputs" class="active" data-type="full"><a href="#image-full" aria-controls="image-full" role="tab" data-toggle="tab"><span><?= \Yii::t('app', 'full')?></span></a></li>
  37 + <li role="image_inputs" class="" data-type="preview"><a href="#image-preview" aria-controls="image-preview" role="tab" data-toggle="tab"><span><?= \Yii::t('app', 'preview')?></span></a></li>
  38 + <li role="image_inputs" class="" data-type="additional"><a href="#image-additional" aria-controls="image-additional" role="tab" data-toggle="tab"><span><?= \Yii::t('app', 'additional')?></span></a></li>
42 </ul> 39 </ul>
43 <div class="tab-content image-tab-content"> 40 <div class="tab-content image-tab-content">
44 - <?php  
45 - $first = 1;  
46 - foreach($images as $index => $image) { 41 + <div role="" class="tab-pane active main-tab" id="image-full">
  42 + <?php
  43 + $imagelang = Multilang::begin([
  44 + 'ajaxpath' => Url::to(['/blog/ajax/article-media-form?type=full']),
  45 + 'form' => $form,
  46 + 'data_langs' => $article->getIsNewRecord()?$images:ArticleMedia::find()->where(['article_id' => $article->article_id, 'type' => 'full'])->indexBy('language_id')->all()
  47 + ]);
  48 + $first = 1;
  49 + foreach($images as $lang => $value) {
  50 + if(!array_key_exists('full', $value)) continue;
  51 + ?>
  52 + <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="<?=$imagelang->id?>-<?=$lang?>">
  53 + <?php
  54 + echo $form->field($images[$lang]['full'], "[{$lang}][full]language_id")->label(false)->hiddenInput(['value' => $lang]);
  55 + echo $form->field($images[$lang]['full'], "[{$lang}][full]imageFile")->fileInput(['class' => 'image_inputs_field']);
  56 + if(!empty($images[$lang]['full']->article_media_id)) {
  57 + echo "<img src='/images/upload/{$images[$lang]['full']->media->hash}/original.{$images[$lang]['full']->media->extension}' width='100' class='image_inputs_prev'>";
  58 + }
  59 + ?>
  60 + </div>
  61 + <?php
  62 + $first = 0;
  63 + }
  64 + $imagelang->end();
47 ?> 65 ?>
48 - <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="image-<?=$index?>">  
49 - <?php if($index == 'additional') {  
50 - echo $form->field(is_array($image)?$images[$index][0]:$images[$index], "[{$index}]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']);  
51 - if(is_array($image) && count($image) > 1) {  
52 - foreach($image as $oneindex => $oneimage) {  
53 - if($oneindex) {  
54 - ?>  
55 - <div class="additional_image_container">  
56 - <img src='/images/upload/<?= $oneimage->media->hash ?>/original.<?= $oneimage->media->extension ?>' width='100'>  
57 - <a  
58 - href="<?= Url::to(['ajax/remove-image']) ?>"  
59 - class="remove_image glyphicon glyphicon-remove-circle"  
60 - data-params='<?= Json::encode(['article_media_id' => $oneimage->id, 'remove_media' => true]) ?>',  
61 - ></a>  
62 - </div>  
63 - <?php  
64 - }  
65 - } 66 + </div>
  67 + <div role="" class="tab-pane" id="image-preview">
  68 + <?php
  69 + $imagelang = Multilang::begin([
  70 + 'ajaxpath' => Url::to(['/blog/ajax/article-media-form?type=preview']),
  71 + 'form' => $form,
  72 + 'data_langs' => $article->getIsNewRecord()?$images:ArticleMedia::find()->where(['article_id' => $article->article_id, 'type' => 'preview'])->indexBy('language_id')->all()
  73 + ]);
  74 + $first = 1;
  75 + foreach($images as $lang => $value) {
  76 + if(!array_key_exists('preview', $value)) continue;
  77 + ?>
  78 + <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="<?=$imagelang->id?>-<?=$lang?>">
  79 + <?php
  80 + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]language_id")->label(false)->hiddenInput(['value' => $lang]);
  81 + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]imageFile")->fileInput(['class' => 'image_inputs_field']);
  82 + if(!empty($images[$lang]['preview']->article_media_id)) {
  83 + echo "<img src='/images/upload/{$images[$lang]['preview']->media->hash}/original.{$images[$lang]['preview']->media->extension}' width='100' class='image_inputs_prev'>";
66 } 84 }
67 - } else {  
68 - echo $form->field($images[$index], "[{$index}]imageFile")->fileInput(['class' => 'image_inputs_field']);  
69 - if(!empty($image->id)) {  
70 - echo "<img src='/images/upload/{$image->media->hash}/original.{$image->media->extension}' width='100' class='image_inputs_prev'>"; 85 + ?>
  86 + </div>
  87 + <?php
  88 + $first = 0;
  89 + }
  90 + $imagelang->end();
  91 + ?>
  92 + </div>
  93 + <div role="" class="tab-pane" id="image-additional">
  94 + <?php
  95 + echo $form->field(is_array($images[0]['additional'])?$images[0]['additional'][0]:$images[0]['additional'], "[0][additional]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']);
  96 + if(is_array($images[0]['additional']) && count($images[0]['additional']) > 1) {
  97 + foreach($images[0]['additional'] as $onefield => $oneimage) {
  98 + if($onefield) {
  99 + ?>
  100 + <div class="additional_image_container">
  101 + <img src='/images/upload/<?= $oneimage->media->hash ?>/original.<?= $oneimage->media->extension ?>' width='100'>
  102 + <a
  103 + href="<?= Url::to(['ajax/remove-image']) ?>"
  104 + class="remove_image glyphicon glyphicon-remove-circle"
  105 + data-params='<?= Json::encode(['article_media_id' => $oneimage->article_media_id, 'remove_media' => true]) ?>',
  106 + ></a>
  107 + </div>
  108 + <?php
71 } 109 }
72 } 110 }
73 - ?>  
74 - </div>  
75 - <?php  
76 - $first = 0;  
77 - }  
78 - ?> 111 + }
  112 + ?>
  113 + </div>
79 </div> 114 </div>
80 115
81 <hr> 116 <hr>
82 117
83 - <div class="dropdown pull-right">  
84 - <button class="btn btn-default dropdown-toggle" type="button" id="dropdownLang" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">  
85 - <?= Yii::t('app', 'Add language') ?>  
86 - <span class="caret"></span>  
87 - </button>  
88 - <ul class="dropdown-menu f32" id="lang-dropdown" aria-labelledby="dropdownMenu1">  
89 - <?php foreach($langs as $index => $lang) {  
90 - if(in_array($index, array_keys($article_langs))) continue;  
91 - ?>  
92 - <li><a href="#lang-tabs" data-lang="<?=$lang->language_id?>"><span class="flag <?=$lang->country_code?>"></span></a></li>  
93 - <?php } ?>  
94 - </ul>  
95 - </div>  
96 - <ul class="nav nav-tabs f32" id="lang-tabs" role="tablist">  
97 - <?php  
98 - $first = 1;  
99 - foreach($article_langs as $index => $article_lang) {  
100 - ?>  
101 - <li role="lang_inputs" class="<?php if($first) { echo 'active'; }?>" data-lang="<?=$index?>"><a href="#lang-<?=$index?>" aria-controls="lang-<?=$index?>" role="tab" data-toggle="tab"><span class="flag <?=$langs[$index]->country_code?>"></span></a></li>  
102 - <?php  
103 - $first = 0;  
104 - }  
105 - ?>  
106 - </ul>  
107 - <div class="tab-content lang-tab-content"> 118 + <?php
  119 + echo Multilanguage::widget([
  120 + 'data' => $article_langs,
  121 + 'form' => $form,
  122 + 'ajaxView' => '@common/modules/blog/views/ajax/_article_form',
  123 + ]);
  124 + /*
  125 + $multilang = Multilang::begin(['ajaxpath' => Url::to(['/blog/ajax/article-form']), 'form' => $form, 'data_langs' => $article_langs]);
  126 + ?>
108 <?php 127 <?php
109 $first = 1; 128 $first = 1;
110 foreach($article_langs as $index => $article_lang) { 129 foreach($article_langs as $index => $article_lang) {
111 ?> 130 ?>
112 - <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="lang-<?=$index?>">  
113 - <?= $form->field($article_langs[$index], "[$index]lang_id")->label(false)->hiddenInput(['value' => $index]) ?> 131 + <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="<?=$multilang->id?>-<?=$index?>">
  132 +
  133 + <?= $form->field($article_langs[$index], "[$index]language_id")->label(false)->hiddenInput(['value' => $index]) ?>
114 134
115 <?= $form->field($article_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?> 135 <?= $form->field($article_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?>
116 136
@@ -135,7 +155,10 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;); @@ -135,7 +155,10 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;);
135 $first = 0; 155 $first = 0;
136 } 156 }
137 ?> 157 ?>
138 - </div> 158 + <?php
  159 + $multilang->end();
  160 + */
  161 + ?>
139 162
140 <div class="form-group"> 163 <div class="form-group">
141 <?= Html::submitButton($article->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $article->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 164 <?= Html::submitButton($article->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $article->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
common/modules/blog/views/article/index.php
@@ -8,12 +8,12 @@ use common\models\Language; @@ -8,12 +8,12 @@ use common\models\Language;
8 echo GridView::widget([ 8 echo GridView::widget([
9 'dataProvider' => $dataProvider, 9 'dataProvider' => $dataProvider,
10 'columns' => [ 10 'columns' => [
11 - 'id', 11 + 'article_id',
12 'code', 12 'code',
13 - 'create_at', 13 + 'date_add',
14 [ 14 [
15 'value' => function($data) { 15 'value' => function($data) {
16 - return $data->author0->firstname.' '.$data->author0->lastname; 16 + return $data->user->firstname.' '.$data->user->lastname;
17 }, 17 },
18 'header' => Yii::t('app', 'Author') 18 'header' => Yii::t('app', 'Author')
19 ], 19 ],
@@ -21,7 +21,7 @@ echo GridView::widget([ @@ -21,7 +21,7 @@ echo GridView::widget([
21 'class' => Column::className(), 21 'class' => Column::className(),
22 'header' => Yii::t('app', 'Name'), 22 'header' => Yii::t('app', 'Name'),
23 'content' => function($model, $key, $index, $column) { 23 'content' => function($model, $key, $index, $column) {
24 - return $model->getArticleLangs()->where(['lang_id' => Language::getDefaultLang()->language_id])->one()->name; 24 + return $model->getArticleLangs()->where(['language_id' => Language::getDefaultLang()->language_id])->one()->name;
25 } 25 }
26 ], 26 ],
27 [ 27 [
common/modules/blog/views/category/_form.php
1 <?php 1 <?php
  2 +use common\modules\blog\models\ArticleCategoryMedia;
  3 +use common\widgets\Multilang;
2 use yii\bootstrap\ActiveForm; 4 use yii\bootstrap\ActiveForm;
3 use common\modules\blog\models\ArticleCategory; 5 use common\modules\blog\models\ArticleCategory;
4 use yii\bootstrap\Html; 6 use yii\bootstrap\Html;
@@ -15,97 +17,107 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;); @@ -15,97 +17,107 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;);
15 17
16 <?= $form->field($category, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?> 18 <?= $form->field($category, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?>
17 19
18 - <?= $form->field($category, 'tags')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?> 20 + <?= $form->field($category, 'tag')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?>
19 21
20 <?= $form->field($category, 'sort')->input('number') ?> 22 <?= $form->field($category, 'sort')->input('number') ?>
21 23
22 - <?= $form->field($category, 'parent_id')  
23 - ->dropDownList(ArticleCategory::findArticleCategoryDropdown($category->id), ['prompt' => Yii::t('app', 'Select parent')]) ?> 24 + <?= $form->field($category, 'article_category_pid')
  25 + ->dropDownList(ArticleCategory::findArticleCategoryDropdown($category->article_category_id), ['prompt' => Yii::t('app', 'Select parent')]) ?>
24 26
25 - <?= $form->field($category, 'active')->checkbox() ?> 27 + <?= $form->field($category, 'status')->checkbox() ?>
26 28
27 <ul class="nav nav-tabs" id="image-tabs" role="tablist"> 29 <ul class="nav nav-tabs" id="image-tabs" role="tablist">
28 - <?php  
29 - $first = 1;  
30 - foreach($images as $index => $image) {  
31 - ?>  
32 - <li role="image_inputs" class="<?php if($first) { echo 'active'; }?>" data-type="<?=$index?>"><a href="#image-<?=$index?>" aria-controls="image-<?=$index?>" role="tab" data-toggle="tab"><span><?= \Yii::t('app', $index)?></span></a></li>  
33 - <?php  
34 - $first = 0;  
35 - }  
36 - ?> 30 + <li role="image_inputs" class="active" data-type="full"><a href="#image-full" aria-controls="image-full" role="tab" data-toggle="tab"><span><?= \Yii::t('app', 'full')?></span></a></li>
  31 + <li role="image_inputs" class="" data-type="preview"><a href="#image-preview" aria-controls="image-preview" role="tab" data-toggle="tab"><span><?= \Yii::t('app', 'preview')?></span></a></li>
  32 + <li role="image_inputs" class="" data-type="additional"><a href="#image-additional" aria-controls="image-additional" role="tab" data-toggle="tab"><span><?= \Yii::t('app', 'additional')?></span></a></li>
37 </ul> 33 </ul>
38 <div class="tab-content image-tab-content"> 34 <div class="tab-content image-tab-content">
39 - <?php  
40 - $first = 1;  
41 - foreach($images as $index => $image) { 35 + <div role="" class="tab-pane active main-tab" id="image-full">
  36 + <?php
  37 + $imagelang = Multilang::begin([
  38 + 'ajaxpath' => Url::to(['/blog/ajax/article-category-media-form?type=full']),
  39 + 'form' => $form,
  40 + 'data_langs' => $category->getIsNewRecord()?$images:ArticleCategoryMedia::find()->where(['article_category_id' => $category->article_category_id, 'type' => 'full'])->indexBy('language_id')->all()
  41 + ]);
  42 + $first = 1;
  43 + foreach($images as $lang => $value) {
  44 + if(!array_key_exists('full', $value)) continue;
  45 + ?>
  46 + <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="<?=$imagelang->id?>-<?=$lang?>">
  47 + <?php
  48 + echo $form->field($images[$lang]['full'], "[{$lang}][full]language_id")->label(false)->hiddenInput(['value' => $lang]);
  49 + echo $form->field($images[$lang]['full'], "[{$lang}][full]imageFile")->fileInput(['class' => 'image_inputs_field']);
  50 + if(!empty($images[$lang]['full']->article_category_media_id)) {
  51 + echo "<img src='/images/upload/{$images[$lang]['full']->media->hash}/original.{$images[$lang]['full']->media->extension}' width='100' class='image_inputs_prev'>";
  52 + }
  53 + ?>
  54 + </div>
  55 + <?php
  56 + $first = 0;
  57 + }
  58 + $imagelang->end();
42 ?> 59 ?>
43 - <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="image-<?=$index?>">  
44 - <?php if($index == 'additional') {  
45 - echo $form->field(is_array($image)?$images[$index][0]:$images[$index], "[{$index}]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']);  
46 - if(is_array($image) && count($image) > 1) {  
47 - foreach($image as $oneindex => $oneimage) {  
48 - if($oneindex) {  
49 - ?>  
50 - <div class="additional_image_container">  
51 - <img src='/images/upload/<?= $oneimage->media->hash ?>/original.<?= $oneimage->media->extension ?>' width='100'>  
52 - <a  
53 - href="<?= Url::to(['ajax/remove-image-category']) ?>"  
54 - class="remove_image glyphicon glyphicon-remove-circle"  
55 - data-params='<?= Json::encode(['category_media_id' => $oneimage->id, 'remove_media' => true]) ?>',  
56 - ></a>  
57 - </div>  
58 - <?php  
59 - }  
60 - } 60 + </div>
  61 + <div role="" class="tab-pane" id="image-preview">
  62 + <?php
  63 + $imagelang = Multilang::begin([
  64 + 'ajaxpath' => Url::to(['/blog/ajax/article-category-media-form?type=preview']),
  65 + 'form' => $form,
  66 + 'data_langs' => $category->getIsNewRecord()?$images:ArticleCategoryMedia::find()->where(['article_category_id' => $category->article_category_id, 'type' => 'preview'])->indexBy('language_id')->all()
  67 + ]);
  68 + $first = 1;
  69 + foreach($images as $lang => $value) {
  70 + if(!array_key_exists('preview', $value)) continue;
  71 + ?>
  72 + <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="<?=$imagelang->id?>-<?=$lang?>">
  73 + <?php
  74 + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]language_id")->label(false)->hiddenInput(['value' => $lang]);
  75 + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]imageFile")->fileInput(['class' => 'image_inputs_field']);
  76 + if(!empty($images[$lang]['preview']->article_category_media_id)) {
  77 + echo "<img src='/images/upload/{$images[$lang]['preview']->media->hash}/original.{$images[$lang]['preview']->media->extension}' width='100' class='image_inputs_prev'>";
61 } 78 }
62 - } else {  
63 - echo $form->field($images[$index], "[{$index}]imageFile")->fileInput(['class' => 'image_inputs_field']);  
64 - if(!empty($image->id)) {  
65 - echo "<img src='/images/upload/{$image->media->hash}/original.{$image->media->extension}' width='100' class='image_inputs_prev'>"; 79 + ?>
  80 + </div>
  81 + <?php
  82 + $first = 0;
  83 + }
  84 + $imagelang->end();
  85 + ?>
  86 + </div>
  87 + <div role="" class="tab-pane" id="image-additional">
  88 + <?php
  89 + echo $form->field(is_array($images[0]['additional'])?$images[0]['additional'][0]:$images[0]['additional'], "[0][additional]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']);
  90 + if(is_array($images[0]['additional']) && count($images[0]['additional']) > 1) {
  91 + foreach($images[0]['additional'] as $onefield => $oneimage) {
  92 + if($onefield) {
  93 + ?>
  94 + <div class="additional_image_container">
  95 + <img src='/images/upload/<?= $oneimage->media->hash ?>/original.<?= $oneimage->media->extension ?>' width='100'>
  96 + <a
  97 + href="<?= Url::to(['ajax/remove-image']) ?>"
  98 + class="remove_image glyphicon glyphicon-remove-circle"
  99 + data-params='<?= Json::encode(['article_category_media_id' => $oneimage->article_category_media_id, 'remove_media' => true]) ?>',
  100 + ></a>
  101 + </div>
  102 + <?php
66 } 103 }
67 } 104 }
68 - ?>  
69 - </div>  
70 - <?php  
71 - $first = 0;  
72 - }  
73 - ?> 105 + }
  106 + ?>
  107 + </div>
74 </div> 108 </div>
75 109
76 <hr> 110 <hr>
77 111
78 - <div class="dropdown pull-right">  
79 - <button class="btn btn-default dropdown-toggle" type="button" id="dropdownLang" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">  
80 - <?= Yii::t('app', 'Add language') ?>  
81 - <span class="caret"></span>  
82 - </button>  
83 - <ul class="dropdown-menu f32" id="lang-dropdown" aria-labelledby="dropdownMenu1">  
84 - <?php foreach($langs as $index => $lang) {  
85 - if(in_array($index, array_keys($category_langs))) continue;  
86 - ?>  
87 - <li><a href="#lang-tabs" data-lang="<?=$lang->language_id?>"><span class="flag <?=$lang->country_code?>"></span></a></li>  
88 - <?php } ?>  
89 - </ul>  
90 - </div>  
91 - <ul class="nav nav-tabs f32" id="lang-tabs" role="tablist">  
92 - <?php  
93 - $first = 1;  
94 - foreach($category_langs as $index => $category_lang) {  
95 - ?>  
96 - <li role="lang_inputs" class="<?php if($first) { echo 'active'; }?>" data-lang="<?=$index?>"><a href="#lang-<?=$index?>" aria-controls="lang-<?=$index?>" role="tab" data-toggle="tab"><span class="flag <?=$langs[$index]->country_code?>"></span></a></li>  
97 - <?php  
98 - $first = 0;  
99 - }  
100 - ?>  
101 - </ul>  
102 - <div class="tab-content lang-tab-content"> 112 + <?php
  113 + $multilang = Multilang::begin(['ajaxpath' => Url::to(['/blog/ajax/category-form']), 'form' => $form, 'data_langs' => $category_langs])
  114 + ?>
103 <?php 115 <?php
104 $first = 1; 116 $first = 1;
105 foreach($category_langs as $index => $category_lang) { 117 foreach($category_langs as $index => $category_lang) {
106 ?> 118 ?>
107 <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="lang-<?=$index?>"> 119 <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="lang-<?=$index?>">
108 - <?= $form->field($category_langs[$index], "[$index]lang_id")->label(false)->hiddenInput(['value' => $index]) ?> 120 + <?= $form->field($category_langs[$index], "[$index]language_id")->label(false)->hiddenInput(['value' => $index]) ?>
109 121
110 <?= $form->field($category_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?> 122 <?= $form->field($category_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?>
111 123
@@ -119,18 +131,20 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;); @@ -119,18 +131,20 @@ $uploaddir = \Yii::getAlias(&#39;@saveImageDir&#39;);
119 131
120 <?= $form->field($category_langs[$index], "[$index]meta_descr")->textarea(); ?> 132 <?= $form->field($category_langs[$index], "[$index]meta_descr")->textarea(); ?>
121 133
122 - <?= $form->field($category_langs[$index], "[$index]meta_keywords")->textInput() ?> 134 + <?= $form->field($category_langs[$index], "[$index]meta_keyword")->textInput() ?>
123 135
124 <?= $form->field($category_langs[$index], "[$index]h1_tag")->textInput() ?> 136 <?= $form->field($category_langs[$index], "[$index]h1_tag")->textInput() ?>
125 137
126 - <?= $form->field($category_langs[$index], "[$index]tags")->textInput() ?> 138 + <?= $form->field($category_langs[$index], "[$index]tag")->textInput() ?>
127 139
128 </div> 140 </div>
129 <?php 141 <?php
130 $first = 0; 142 $first = 0;
131 } 143 }
132 ?> 144 ?>
133 - </div> 145 + <?php
  146 + $multilang->end();
  147 + ?>
134 148
135 <div class="form-group"> 149 <div class="form-group">
136 <?= Html::submitButton($category->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $category->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 150 <?= Html::submitButton($category->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $category->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
common/modules/blog/views/category/index.php
@@ -7,15 +7,15 @@ use common\models\Language; @@ -7,15 +7,15 @@ use common\models\Language;
7 echo GridView::widget([ 7 echo GridView::widget([
8 'dataProvider' => $dataProvider, 8 'dataProvider' => $dataProvider,
9 'columns' => [ 9 'columns' => [
10 - 'id', 10 + 'article_category_id',
11 'code', 11 'code',
12 - 'created_at',  
13 - 'updated_at', 12 + 'date_add',
  13 + 'date_update',
14 [ 14 [
15 'class' => Column::className(), 15 'class' => Column::className(),
16 'header' => Yii::t('app', 'Name'), 16 'header' => Yii::t('app', 'Name'),
17 'content' => function($model, $key, $index, $column) { 17 'content' => function($model, $key, $index, $column) {
18 - return $model->getArticleCategoryLangs()->where(['lang_id' => Language::getDefaultLang()->language_id])->one()->name; 18 + return $model->getArticleCategoryLangs()->where(['language_id' => Language::getDefaultLang()->language_id])->one()->name;
19 } 19 }
20 ], 20 ],
21 [ 21 [
common/modules/blog/views/default/index.php
1 <?php 1 <?php
  2 +
  3 +use yii\behaviors\BlameableBehavior;
  4 +use yii\web\Application;
  5 +
  6 +$behavior = new BlameableBehavior();
  7 +var_dump($behavior->value);
2 \ No newline at end of file 8 \ No newline at end of file
common/translation/ru/app.php
@@ -58,9 +58,23 @@ return [ @@ -58,9 +58,23 @@ return [
58 'Category update' => 'Редактирование категории', 58 'Category update' => 'Редактирование категории',
59 'Article create' => 'Создание статьи', 59 'Article create' => 'Создание статьи',
60 'Update category' => 'Редактирование категории', 60 'Update category' => 'Редактирование категории',
61 - 'Select parent' => 'Выберать родителя', 61 + 'Select parent' => 'Выбрать родителя',
62 'Blog' => 'Блог', 62 'Blog' => 'Блог',
63 'Static pages' => 'Статические страницы', 63 'Static pages' => 'Статические страницы',
  64 + 'Create Admin Menu' => 'Создать элемент меню',
  65 + 'Admin Menus' => 'Административное меню',
  66 + 'Hide Min' => 'Спрятать в свернутом',
  67 + 'Path' => 'Путь',
  68 + 'Params' => 'Параметры',
  69 + 'Parent item' => 'Родительский элемент',
  70 + 'Active Menu' => 'Активный',
  71 + 'Not Active Menu' => 'Неактивный',
  72 + 'Show Menu Min' => 'Отобразить',
  73 + 'Hide Menu Min' => 'Спрятать',
  74 + 'Update' => 'Редактировать',
  75 + 'Delete' => 'Удалить',
  76 + 'Settings categories' => 'Разделы настроек',
  77 + 'Back' => 'Назад',
64 78
65 // Вова 79 // Вова
66 'page' => 'Страница', 80 'page' => 'Страница',
@@ -72,7 +86,7 @@ return [ @@ -72,7 +86,7 @@ return [
72 'meta_description' => 'Meta Description', 86 'meta_description' => 'Meta Description',
73 'text' => 'Текст', 87 'text' => 'Текст',
74 'page_alias' => 'alias', 88 'page_alias' => 'alias',
75 - 'lang_id' => 'ID языка', 89 + 'language_id' => 'ID языка',
76 'common' => 'Общее', 90 'common' => 'Общее',
77 'lang' => 'Языковые переменные', 91 'lang' => 'Языковые переменные',
78 'termin' => 'Термин', 92 'termin' => 'Термин',
common/translation/uk/app.php
@@ -14,7 +14,7 @@ return [ @@ -14,7 +14,7 @@ return [
14 'meta_description' => 'Meta Description', 14 'meta_description' => 'Meta Description',
15 'text' => 'Текст', 15 'text' => 'Текст',
16 'page_alias' => 'alias', 16 'page_alias' => 'alias',
17 - 'lang_id' => 'ID мови', 17 + 'language_id' => 'ID мови',
18 'common' => 'Загальне', 18 'common' => 'Загальне',
19 'lang' => 'Мовні змінні', 19 'lang' => 'Мовні змінні',
20 'termin' => 'Термін', 20 'termin' => 'Термін',
common/widgets/Multilang.php 0 → 100644
  1 +<?php
  2 +namespace common\widgets;
  3 +use common\models\Language;
  4 +use yii\base\InvalidParamException;
  5 +use yii\base\Widget;
  6 +use yii\bootstrap\ActiveForm;
  7 +
  8 +class Multilang extends Widget
  9 +{
  10 + public $id;
  11 +
  12 + public $langs;
  13 +
  14 + public $data_langs = [];
  15 +
  16 + public $ajaxpath;
  17 +
  18 + public $form;
  19 +
  20 + public function init()
  21 + {
  22 + parent::init();
  23 + if(empty($this->id)) {
  24 + $this->id = \Yii::$app->security->generateRandomString(8);
  25 + }
  26 + if(empty($this->langs)) {
  27 + $this->langs = Language::getActiveLanguages();
  28 + }
  29 + if(empty($this->ajaxpath)) {
  30 + throw new InvalidParamException('ajaxpath must be set');
  31 + }
  32 + if(empty($this->form)) {
  33 + throw new InvalidParamException('form must be set');
  34 + }
  35 + ob_start();
  36 + echo $this->render('multilang-begin', ['id' => $this->id, 'langs' => $this->langs, 'data_langs' => $this->data_langs, 'ajaxpath' => $this->ajaxpath, 'form' => $this->form]);
  37 + }
  38 +
  39 + public function run()
  40 + {
  41 + echo $this->render('multilang-end', ['id' => $this->id, 'langs' => $this->langs, 'data_langs' => $this->data_langs, 'ajaxpath' => $this->ajaxpath, 'form' => $this->form]);
  42 + $content = ob_get_clean();
  43 + return $content;
  44 + }
  45 +}
0 \ No newline at end of file 46 \ No newline at end of file
common/widgets/Multilanguage.php 0 → 100644
  1 +<?php
  2 +namespace common\widgets;
  3 +use common\models\Language;
  4 +use common\modules\blog\controllers\AjaxController;
  5 +use yii\base\InvalidParamException;
  6 +use yii\base\Widget;
  7 +use yii\bootstrap\ActiveForm;
  8 +
  9 +class Multilanguage extends Widget
  10 +{
  11 + public $id;
  12 +
  13 + public $model_name;
  14 +
  15 + public $table_name;
  16 +
  17 + public $langs;
  18 +
  19 + public $default_lang;
  20 +
  21 + public $data;
  22 +
  23 + public $handler = '/blog/ajax/multilang-form';
  24 +
  25 + public $form;
  26 +
  27 + public $ajaxView;
  28 +
  29 + public function init()
  30 + {
  31 + parent::init();
  32 + $this->default_lang = Language::getDefaultLang();
  33 + if(empty($this->langs)) {
  34 + $this->langs = Language::getActiveLanguages();
  35 + }
  36 + if(empty($this->form)) {
  37 + throw new InvalidParamException('Form must be set');
  38 + }
  39 + if(empty($this->ajaxView)) {
  40 + throw new InvalidParamException('Ajaxview must be set');
  41 + }
  42 + if(empty($this->data) || !is_array($this->data)) {
  43 + throw new InvalidParamException('Data must be set and be array');
  44 + } else {
  45 + $first = 1;
  46 + foreach ($this->data as $lang => $item) {
  47 + if ($first) {
  48 + $this->model_name = $item->className();
  49 + $this->table_name = $item->tableName();
  50 + $first = 0;
  51 + } else {
  52 + if($item->className() !== $this->model_name || $item->tableName() !== $this->table_name) {
  53 + throw new InvalidParamException('Every data element must have the same class and table');
  54 + }
  55 + }
  56 + }
  57 + }
  58 + }
  59 +
  60 + public function run()
  61 + {
  62 + echo $this->render('multilanguage-begin', [
  63 + 'id' => $this->id,
  64 + 'model_name' => $this->model_name,
  65 + 'table_name' => $this->table_name,
  66 + 'data' => $this->data,
  67 + 'langs' => $this->langs,
  68 + 'handler' => $this->handler,
  69 + 'default_lang' => $this->default_lang,
  70 + 'ajaxView' => $this->ajaxView,
  71 + ]);
  72 + foreach($this->data as $lang => $item) {
  73 + $item->language_id = $lang;
  74 + echo $this->render($this->ajaxView, ['model' => $item, 'form' => $this->form, 'widget_id' => $this->id]);
  75 + }
  76 + echo $this->render('multilanguage-end', [
  77 + 'id' => $this->id,
  78 + 'model_name' => $this->model_name,
  79 + 'table_name' => $this->table_name,
  80 + 'data' => $this->data,
  81 + 'langs' => $this->langs,
  82 + 'handler' => $this->handler,
  83 + 'default_lang' => $this->default_lang,
  84 + 'ajaxView' => $this->ajaxView,
  85 + ]);
  86 + }
  87 +}
0 \ No newline at end of file 88 \ No newline at end of file
common/widgets/views/multilang-begin.php 0 → 100644
  1 +<?php
  2 +use yii\helpers\Url;
  3 +?>
  4 +<div class="dropdown pull-right">
  5 + <button class="btn btn-default dropdown-toggle" type="button" id="<?=$id?>Lang" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
  6 + <?= Yii::t('app', 'Add language') ?>
  7 + <span class="caret"></span>
  8 + </button>
  9 + <ul class="dropdown-menu f32 old" id="lang-<?=$id?>" aria-labelledby="<?=$id?>Menu">
  10 + <?php foreach($langs as $index => $lang) {
  11 + if(in_array($index, array_keys($data_langs))) continue;
  12 + ?>
  13 + <li><a href="#<?=$id?>" data-lang="<?=$lang->language_id?>"><span class="flag <?=$lang->country_code?>"></span></a></li>
  14 + <?php } ?>
  15 + </ul>
  16 +</div>
  17 +<ul class="nav nav-tabs f32" id="<?=$id?>-tabs" role="tablist">
  18 + <?php
  19 + $first = 1;
  20 + foreach($data_langs as $index => $data_lang) {
  21 + if(!$index) continue;
  22 + ?>
  23 + <li role="lang_inputs" class="<?php if($first) { echo 'active'; }?>" data-lang="<?=$index?>"><a href="#<?=$id?>-<?=$index?>" aria-controls="<?=$id?>-<?=$index?>" role="tab" data-toggle="tab"><span class="flag <?=$langs[$index]->country_code?>"></span></a></li>
  24 + <?php
  25 + $first = 0;
  26 + }
  27 + ?>
  28 +</ul>
  29 +<div class="tab-content lang-tab-content" id="tab-content-<?=$id?>">
  30 +
common/widgets/views/multilang-end.php 0 → 100644
  1 +<?php
  2 +use yii\helpers\Url;
  3 +?>
  4 +</div>
  5 +<script>
  6 + if(typeof form === 'undefined') {
  7 + var form = [];
  8 + }
  9 + form['<?=$id?>'] = '<?=$ajaxpath?>';
  10 +</script>
0 \ No newline at end of file 11 \ No newline at end of file
common/widgets/views/multilanguage-begin.php 0 → 100644
  1 +<?php
  2 +use yii\helpers\Url;
  3 +?>
  4 +<div class="dropdown pull-right">
  5 + <button class="btn btn-default dropdown-toggle" type="button" id="<?=$id?>Lang" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
  6 + <?= Yii::t('app', 'Add language') ?>
  7 + <span class="caret"></span>
  8 + </button>
  9 + <ul class="dropdown-menu f32" id="lang-<?=$id?>" aria-labelledby="<?=$id?>Menu">
  10 + <?php foreach($langs as $index => $lang) {
  11 + if(in_array($index, array_keys($data))) continue;
  12 + ?>
  13 + <li><a href="#<?=$id?>" data-lang="<?=$lang->language_id?>"><span class="flag <?=$lang->country_code?>"></span></a></li>
  14 + <?php } ?>
  15 + </ul>
  16 +</div>
  17 +<ul class="nav nav-tabs f32" id="<?=$id?>-tabs" role="tablist">
  18 + <?php
  19 + foreach($data as $index => $data_lang) {
  20 + if(!$index) continue;
  21 + ?>
  22 + <li role="lang_inputs" data-lang="<?=$index?>"><a href="#<?=$id?>-<?=$index?>" aria-controls="<?=$id?>-<?=$index?>" role="tab" data-toggle="tab"><span class="flag <?=$langs[$index]->country_code?>"></span></a></li>
  23 + <?php
  24 + }
  25 + ?>
  26 +</ul>
  27 +<div class="tab-content lang-tab-content" id="tab-content-<?=$id?>">
  28 +
common/widgets/views/multilanguage-end.php 0 → 100644
  1 +<?php
  2 +use yii\helpers\Url;
  3 +?>
  4 +</div>
  5 +<script>
  6 + if(typeof form === 'undefined') {
  7 + var form = [];
  8 + }
  9 + form['<?=$id?>'] = {handler:'<?=$handler?>', view:'<?=$ajaxView?>', model: '<?=str_replace("\\", "\\\\", $model_name)?>'};
  10 +</script>
0 \ No newline at end of file 11 \ No newline at end of file
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 "irc": "irc://irc.freenode.net/yii", 12 "irc": "irc://irc.freenode.net/yii",
13 "source": "https://github.com/yiisoft/yii2" 13 "source": "https://github.com/yiisoft/yii2"
14 }, 14 },
15 - "minimum-stability": "stable", 15 + "minimum-stability": "dev",
16 "require": { 16 "require": {
17 "php": ">=5.4.0", 17 "php": ">=5.4.0",
18 "yiisoft/yii2": ">=2.0.6", 18 "yiisoft/yii2": ">=2.0.6",
db-migration/artbox_db.backup deleted
No preview for this file type
db-migration/artbox_db3.backup deleted
No preview for this file type
db-migration/catalog.backup deleted
No preview for this file type
db-migration/yarik.sql deleted
1 --- --------------------------------------------------------  
2 --- Хост: 127.0.0.1  
3 --- Версия сервера: PostgreSQL 9.4.4, compiled by Visual C++ build 1800, 32-bit  
4 --- ОС Сервера:  
5 --- HeidiSQL Версия: 9.3.0.4984  
6 --- --------------------------------------------------------  
7 -  
8 -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;  
9 -/*!40101 SET NAMES */;  
10 -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;  
11 -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;  
12 -  
13 --- Дамп структуры для таблица public.article  
14 -CREATE TABLE IF NOT EXISTS "article" (  
15 - "id" INTEGER NOT NULL DEFAULT nextval('article_id_seq'::regclass) COMMENT E'',  
16 - "sort" INTEGER NOT NULL DEFAULT 100 COMMENT E'',  
17 - "create_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'',  
18 - "update_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'',  
19 - "code" CHARACTER VARYING NOT NULL COMMENT E'',  
20 - "category_id" INTEGER NOT NULL DEFAULT 1 COMMENT E'',  
21 - "author" INTEGER NOT NULL COMMENT E'',  
22 - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
23 - "parent_id" INTEGER NULL DEFAULT NULL COMMENT E'',  
24 - "active" SMALLINT NOT NULL DEFAULT 0 COMMENT E'',  
25 - "comments" SMALLINT NOT NULL DEFAULT 0::smallint COMMENT E'',  
26 - "voting" SMALLINT NOT NULL DEFAULT 0::smallint COMMENT E'',  
27 - KEY ("author"),  
28 - PRIMARY KEY ("id"),  
29 - KEY ("parent_id"),  
30 - KEY ("category_id"),  
31 - KEY ("id")  
32 -);  
33 -  
34 --- Дамп данных таблицы public.article: 3 rows  
35 -/*!40000 ALTER TABLE "article" DISABLE KEYS */;  
36 -INSERT INTO "article" ("id", "sort", "create_at", "update_at", "code", "category_id", "author", "tags", "parent_id", "active", "comments", "voting") VALUES  
37 - (5, 100, E'2015-12-04 14:52:39.54', E'2015-12-04 14:52:39.54', E'test_article', 1, 1, E'test, tag', NULL, 1, 0, 0),  
38 - (6, 100, E'2015-12-04 14:52:52.403', E'2015-12-04 14:52:52.403', E'test_article2', 1, 1, E'test, tag', NULL, 1, 0, 0),  
39 - (12, 100, E'2015-12-04 14:52:52.403', E'2015-12-04 14:52:52.403', E'test_article3', 1, 1, E'test, tag', 5, 1, 0, 0);  
40 -/*!40000 ALTER TABLE "article" ENABLE KEYS */;  
41 -  
42 -  
43 --- Дамп структуры для таблица public.article_category  
44 -CREATE TABLE IF NOT EXISTS "article_category" (  
45 - "id" INTEGER NOT NULL DEFAULT nextval('article_category_id_seq'::regclass) COMMENT E'',  
46 - "sort" INTEGER NOT NULL DEFAULT 100 COMMENT E'',  
47 - "code" CHARACTER VARYING NOT NULL COMMENT E'',  
48 - "created_at" TIME WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'',  
49 - "updated_at" TIME WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'',  
50 - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
51 - "parent_id" INTEGER NULL DEFAULT NULL COMMENT E'',  
52 - "active" SMALLINT NOT NULL DEFAULT 0 COMMENT E'',  
53 - PRIMARY KEY ("id"),  
54 - KEY ("parent_id"),  
55 - KEY ("id")  
56 -);  
57 -  
58 --- Дамп данных таблицы public.article_category: 2 rows  
59 -/*!40000 ALTER TABLE "article_category" DISABLE KEYS */;  
60 -INSERT INTO "article_category" ("id", "sort", "code", "created_at", "updated_at", "tags", "parent_id", "active") VALUES  
61 - (1, 100, E'static_pages', E'14:08:02.74', E'14:08:02.74', NULL, NULL, 1),  
62 - (2, 100, E'qwerty', E'11:00:35.954', E'11:00:35.954', E'qwerty', NULL, 0);  
63 -/*!40000 ALTER TABLE "article_category" ENABLE KEYS */;  
64 -  
65 -  
66 --- Дамп структуры для таблица public.article_category_lang  
67 -CREATE TABLE IF NOT EXISTS "article_category_lang" (  
68 - "id" INTEGER NOT NULL DEFAULT nextval('article_category_lang_id_seq'::regclass) COMMENT E'',  
69 - "lang_id" INTEGER NOT NULL DEFAULT 0 COMMENT E'',  
70 - "category_id" INTEGER NULL DEFAULT NULL COMMENT E'',  
71 - "text" TEXT NOT NULL COMMENT E'',  
72 - "preview" TEXT NULL DEFAULT NULL COMMENT E'',  
73 - "seo_url" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
74 - "name" CHARACTER VARYING NOT NULL COMMENT E'',  
75 - "meta_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
76 - "meta_descr" TEXT NULL DEFAULT NULL COMMENT E'',  
77 - "meta_keywords" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
78 - "h1_tag" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
79 - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
80 - PRIMARY KEY ("id"),  
81 - KEY ("category_id"),  
82 - KEY ("lang_id"),  
83 - KEY ("id")  
84 -);  
85 -  
86 --- Дамп данных таблицы public.article_category_lang: 3 rows  
87 -/*!40000 ALTER TABLE "article_category_lang" DISABLE KEYS */;  
88 -INSERT INTO "article_category_lang" ("id", "lang_id", "category_id", "text", "preview", "seo_url", "name", "meta_title", "meta_descr", "meta_keywords", "h1_tag", "tags") VALUES  
89 - (1, 0, 1, E'Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ', E'Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ', E'lorem', E'Lorem ipsum', E'Lorem title', E'Lorem description', E'lorem, keyword', E'Lorem h1 tag', E'lorem tag'),  
90 - (2, 2, 2, E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty'),  
91 - (3, 1, 2, E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен');  
92 -/*!40000 ALTER TABLE "article_category_lang" ENABLE KEYS */;  
93 -  
94 -  
95 --- Дамп структуры для таблица public.article_category_media  
96 -CREATE TABLE IF NOT EXISTS "article_category_media" (  
97 - "id" INTEGER NOT NULL DEFAULT nextval('article_category_media_id_seq'::regclass) COMMENT E'',  
98 - "category_id" INTEGER NOT NULL COMMENT E'',  
99 - "media_id" INTEGER NOT NULL COMMENT E'',  
100 - "media_alt" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
101 - "media_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
102 - "media_caption" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
103 - "type" CHARACTER VARYING(10) NOT NULL DEFAULT 'additional'::character varying COMMENT E'',  
104 - PRIMARY KEY ("id"),  
105 - KEY ("media_id"),  
106 - KEY ("category_id"),  
107 - KEY ("id")  
108 -);  
109 -  
110 --- Дамп данных таблицы public.article_category_media: 0 rows  
111 -/*!40000 ALTER TABLE "article_category_media" DISABLE KEYS */;  
112 -/*!40000 ALTER TABLE "article_category_media" ENABLE KEYS */;  
113 -  
114 -  
115 --- Дамп структуры для таблица public.article_lang  
116 -CREATE TABLE IF NOT EXISTS "article_lang" (  
117 - "id" INTEGER NOT NULL DEFAULT nextval('article_lang_id_seq'::regclass) COMMENT E'',  
118 - "lang_id" INTEGER NOT NULL COMMENT E'',  
119 - "article_id" INTEGER NOT NULL COMMENT E'',  
120 - "text" TEXT NOT NULL COMMENT E'',  
121 - "seo_url" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
122 - "name" CHARACTER VARYING NOT NULL COMMENT E'',  
123 - "preview" TEXT NULL DEFAULT NULL COMMENT E'',  
124 - "meta_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
125 - "meta_descr" TEXT NULL DEFAULT NULL COMMENT E'',  
126 - "meta_keywords" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
127 - "h1_tag" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
128 - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
129 - PRIMARY KEY ("id"),  
130 - KEY ("article_id"),  
131 - KEY ("lang_id"),  
132 - KEY ("id")  
133 -);  
134 -  
135 --- Дамп данных таблицы public.article_lang: 2 rows  
136 -/*!40000 ALTER TABLE "article_lang" DISABLE KEYS */;  
137 -INSERT INTO "article_lang" ("id", "lang_id", "article_id", "text", "seo_url", "name", "preview", "meta_title", "meta_descr", "meta_keywords", "h1_tag", "tags") VALUES  
138 - (1, 0, 5, E'Lorem Lorem Lorem', E'article1', E'artivle1', E'Lorem preview', E'Lorem title', E'Lorem description', E'lorem, keyword', E'lorem h1 tag', E'tag, lorem'),  
139 - (2, 0, 12, E'Lorem Lorem Lorem', E'article3', E'artivle3\r\n', E'Lorem preview', E'Lorem title', E'Lorem description', E'lorem, keyword', E'lorem h1 tag', E'tag, lorem');  
140 -/*!40000 ALTER TABLE "article_lang" ENABLE KEYS */;  
141 -  
142 -  
143 --- Дамп структуры для таблица public.article_media  
144 -CREATE TABLE IF NOT EXISTS "article_media" (  
145 - "id" INTEGER NOT NULL DEFAULT nextval('article_media_id_seq'::regclass) COMMENT E'',  
146 - "article_id" INTEGER NOT NULL COMMENT E'',  
147 - "media_id" INTEGER NOT NULL COMMENT E'',  
148 - "type" CHARACTER VARYING(10) NOT NULL DEFAULT 'additional'::character varying COMMENT E'',  
149 - "media_alt" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
150 - "media_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
151 - "media_caption" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'',  
152 - PRIMARY KEY ("id"),  
153 - KEY ("media_id"),  
154 - KEY ("article_id"),  
155 - KEY ("id")  
156 -);  
157 -  
158 --- Дамп данных таблицы public.article_media: 0 rows  
159 -/*!40000 ALTER TABLE "article_media" DISABLE KEYS */;  
160 -/*!40000 ALTER TABLE "article_media" ENABLE KEYS */;  
161 -  
162 -  
163 --- Дамп структуры для таблица public.media  
164 -CREATE TABLE IF NOT EXISTS "media" (  
165 - "id" INTEGER NOT NULL DEFAULT nextval('media_id_seq'::regclass) COMMENT E'',  
166 - "hash" CHARACTER VARYING NOT NULL COMMENT E'',  
167 - PRIMARY KEY ("id"),  
168 - KEY ("id")  
169 -);  
170 -  
171 --- Дамп данных таблицы public.media: 0 rows  
172 -/*!40000 ALTER TABLE "media" DISABLE KEYS */;  
173 -/*!40000 ALTER TABLE "media" ENABLE KEYS */;  
174 -  
175 -  
176 --- Дамп структуры для таблица public.option  
177 -CREATE TABLE IF NOT EXISTS "option" (  
178 - "model" CHARACTER VARYING(200) NULL DEFAULT NULL COMMENT E'',  
179 - "option_id" INTEGER NOT NULL DEFAULT nextval('option_option_id_seq'::regclass) COMMENT E'',  
180 - "model_id" INTEGER NULL DEFAULT NULL COMMENT E'',  
181 - "name" CHARACTER VARYING(200) NULL DEFAULT NULL COMMENT E'',  
182 - "template" CHARACTER VARYING(200) NULL DEFAULT NULL COMMENT E'',  
183 - "parent_id" INTEGER NULL DEFAULT NULL COMMENT E'',  
184 - "translate" BIT(1) NULL DEFAULT NULL COMMENT E'',  
185 - "created_at" TIMESTAMP WITHOUT TIME ZONE NULL DEFAULT now() COMMENT E'',  
186 - KEY ("option_id"),  
187 - KEY ("parent_id"),  
188 - PRIMARY KEY ("option_id")  
189 -);  
190 -  
191 --- Дамп данных таблицы public.option: 0 rows  
192 -/*!40000 ALTER TABLE "option" DISABLE KEYS */;  
193 -/*!40000 ALTER TABLE "option" ENABLE KEYS */;  
194 -  
195 -  
196 --- Дамп структуры для таблица public.option_lang  
197 -CREATE TABLE IF NOT EXISTS "option_lang" (  
198 - "primary" INTEGER NOT NULL DEFAULT nextval('option_lang_primary_seq'::regclass) COMMENT E'',  
199 - "id" INTEGER NULL DEFAULT NULL COMMENT E'',  
200 - "lang_id" INTEGER NULL DEFAULT NULL COMMENT E'',  
201 - "value" TEXT NULL DEFAULT NULL COMMENT E'',  
202 - KEY ("id"),  
203 - PRIMARY KEY ("primary")  
204 -);  
205 -  
206 --- Дамп данных таблицы public.option_lang: 0 rows  
207 -/*!40000 ALTER TABLE "option_lang" DISABLE KEYS */;  
208 -/*!40000 ALTER TABLE "option_lang" ENABLE KEYS */;  
209 -/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;  
210 -/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;  
211 -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;  
db-migration/yarik.zip deleted
No preview for this file type
db-migration/yarik/lang.backup 0 → 100644
No preview for this file type
db-migration/article_option_migration.backup renamed to db-migration/yarik/newnames.backup
No preview for this file type
db-migration/yarik/public.backup 0 → 100644
No preview for this file type
frontend/config/main.php
@@ -16,9 +16,7 @@ return [ @@ -16,9 +16,7 @@ return [
16 'bootstrap' => ['log'], 16 'bootstrap' => ['log'],
17 'controllerNamespace' => 'frontend\controllers', 17 'controllerNamespace' => 'frontend\controllers',
18 'modules' => [ 18 'modules' => [
19 - 'blog' => [  
20 - 'class' => 'common\modules\blog\Module',  
21 - ], 19 +
22 ], 20 ],
23 'components' => [ 21 'components' => [
24 //'PageController'=>[ 22 //'PageController'=>[
frontend/controllers/OptionValuesController.php
@@ -68,7 +68,7 @@ class OptionValuesController extends Controller @@ -68,7 +68,7 @@ class OptionValuesController extends Controller
68 foreach($post['OptionValues']['option_value_text'] as $lang => $value) { 68 foreach($post['OptionValues']['option_value_text'] as $lang => $value) {
69 $models[$lang] = new OptionValues(); 69 $models[$lang] = new OptionValues();
70 $models[$lang]->load(Yii::$app->request->post()); 70 $models[$lang]->load(Yii::$app->request->post());
71 - $models[$lang]->option_lang_id = $lang; 71 + $models[$lang]->option_language_id = $lang;
72 $models[$lang]->option_value_text = $value; 72 $models[$lang]->option_value_text = $value;
73 if($first && $id) { 73 if($first && $id) {
74 $models[$lang]->option_value_parent = $id; 74 $models[$lang]->option_value_parent = $id;
frontend/controllers/SiteController.php
@@ -36,7 +36,7 @@ class SiteController extends Controller @@ -36,7 +36,7 @@ class SiteController extends Controller
36 return [ 36 return [
37 'access' => [ 37 'access' => [
38 'class' => AccessControl::className(), 38 'class' => AccessControl::className(),
39 - 'only' => ['logout', 'signup'], 39 + 'only' => ['logout', 'signup', 'index'],
40 'rules' => [ 40 'rules' => [
41 [ 41 [
42 'actions' => ['signup'], 42 'actions' => ['signup'],
@@ -48,6 +48,11 @@ class SiteController extends Controller @@ -48,6 +48,11 @@ class SiteController extends Controller
48 'allow' => true, 48 'allow' => true,
49 'roles' => ['@'], 49 'roles' => ['@'],
50 ], 50 ],
  51 + [
  52 + 'actions' => ['index'],
  53 + 'allow' => true,
  54 + 'roles' => ['@'],
  55 + ]
51 ], 56 ],
52 ], 57 ],
53 'verbs' => [ 58 'verbs' => [
@@ -298,10 +303,10 @@ class SiteController extends Controller @@ -298,10 +303,10 @@ class SiteController extends Controller
298 $option_values[$key] = new OptionValues(); 303 $option_values[$key] = new OptionValues();
299 $option_values[$key]['option_value_id'] = $options_to_values[$key]->getAttribute('option_value_id'); 304 $option_values[$key]['option_value_id'] = $options_to_values[$key]->getAttribute('option_value_id');
300 $option_values[$key]['option_value_text'] = $val['option_value']; 305 $option_values[$key]['option_value_text'] = $val['option_value'];
301 - if($options_to_values[$key]->option->getAttribute('option_translatable') == 0 || empty($val['option_lang_id'])) {  
302 - $option_values[$key]['option_lang_id'] = 0; 306 + if($options_to_values[$key]->option->getAttribute('option_translatable') == 0 || empty($val['option_language_id'])) {
  307 + $option_values[$key]['option_language_id'] = 0;
303 } else { 308 } else {
304 - $option_values[$key]['option_lang_id'] = $val['option_lang_id']; 309 + $option_values[$key]['option_language_id'] = $val['option_language_id'];
305 } 310 }
306 if(!$option_values[$key]->save()) { 311 if(!$option_values[$key]->save()) {
307 $options_to_values[$key]->delete(); 312 $options_to_values[$key]->delete();
frontend/models/Language.php
@@ -61,6 +61,6 @@ class Language extends \yii\db\ActiveRecord @@ -61,6 +61,6 @@ class Language extends \yii\db\ActiveRecord
61 */ 61 */
62 public function getOptionValues() 62 public function getOptionValues()
63 { 63 {
64 - return $this->hasMany(OptionValues::className(), ['option_lang_id' => 'language_id']); 64 + return $this->hasMany(OptionValues::className(), ['option_language_id' => 'language_id']);
65 } 65 }
66 } 66 }
frontend/models/LanguageLang.php
@@ -9,7 +9,7 @@ use Yii; @@ -9,7 +9,7 @@ use Yii;
9 * 9 *
10 * @property integer $language_id 10 * @property integer $language_id
11 * @property string $lang_title 11 * @property string $lang_title
12 - * @property integer $lang_id 12 + * @property integer $language_id
13 * 13 *
14 * @property Language $language 14 * @property Language $language
15 */ 15 */
@@ -43,7 +43,7 @@ class LanguageLang extends \yii\db\ActiveRecord @@ -43,7 +43,7 @@ class LanguageLang extends \yii\db\ActiveRecord
43 return [ 43 return [
44 'language_id' => Yii::t('app', 'Language ID'), 44 'language_id' => Yii::t('app', 'Language ID'),
45 'lang_title' => Yii::t('app', 'Lang Title'), 45 'lang_title' => Yii::t('app', 'Lang Title'),
46 - 'lang_id' => Yii::t('app', 'Lang ID'), 46 + 'language_id' => Yii::t('app', 'Lang ID'),
47 ]; 47 ];
48 } 48 }
49 49
frontend/models/Option.php
@@ -31,7 +31,7 @@ class Option extends \yii\db\ActiveRecord @@ -31,7 +31,7 @@ class Option extends \yii\db\ActiveRecord
31 { 31 {
32 return [ 32 return [
33 [['model', 'model_id', 'name', 'template'], 'required'], 33 [['model', 'model_id', 'name', 'template'], 'required'],
34 - [['model_id', 'parent_id'], 'integer'], 34 + [['model_id', 'option_pid'], 'integer'],
35 [['model', 'name', 'template'], 'string', 'max' => 200] 35 [['model', 'name', 'template'], 'string', 'max' => 200]
36 ]; 36 ];
37 } 37 }
@@ -47,29 +47,30 @@ class Option extends \yii\db\ActiveRecord @@ -47,29 +47,30 @@ class Option extends \yii\db\ActiveRecord
47 'model_id' => Yii::t('app', 'Model ID'), 47 'model_id' => Yii::t('app', 'Model ID'),
48 'name' => Yii::t('app', 'Name'), 48 'name' => Yii::t('app', 'Name'),
49 'template' => Yii::t('app', 'Template'), 49 'template' => Yii::t('app', 'Template'),
50 - 'parent_id' => Yii::t('app', 'Parent ID'),  
51 - 'created_at' => Yii::t('app', 'Date created'), 50 + 'option_pid' => Yii::t('app', 'Parent ID'),
  51 + 'date_add' => Yii::t('app', 'Date created'),
  52 + 'translate' => Yii::t('app', 'Translatable'),
52 ]; 53 ];
53 } 54 }
54 55
55 public function getLangs() { 56 public function getLangs() {
56 - return (new Language())->find()->where(['>', 'language_id', 0])->andWhere(['active' => 1])->asArray()->all(); 57 + return (new Language())->find()->where(['>', 'language_id', 0])->andWhere(['status' => 1])->asArray()->all();
57 } 58 }
58 59
59 public static function change($id, $post, $modeldb, $model_id) { 60 public static function change($id, $post, $modeldb, $model_id) {
60 $models[$id] = Option::findOne($id); 61 $models[$id] = Option::findOne($id);
61 $modellang[$id] = array(); 62 $modellang[$id] = array();
62 - $langs = OptionLang::findAll(['id' => $id]); 63 + $langs = OptionLang::findAll(['option_language_id' => $id]);
63 foreach($langs as $lang) { 64 foreach($langs as $lang) {
64 - $modellang[$id][$lang->lang_id] = $lang; 65 + $modellang[$id][$lang->language_id] = $lang;
65 } 66 }
66 - $children = (new Option())->find()->where(['parent_id' => $id])->all(); 67 + $children = (new Option())->find()->where(['option_pid' => $id])->all();
67 foreach($children as $child) { 68 foreach($children as $child) {
68 $models[$child->option_id] = $child; 69 $models[$child->option_id] = $child;
69 $modellang[$child->option_id] = array(); 70 $modellang[$child->option_id] = array();
70 - $langs = OptionLang::findAll(['id' =>$child->option_id]); 71 + $langs = OptionLang::findAll(['option_id' =>$child->option_id]);
71 foreach($langs as $lang) { 72 foreach($langs as $lang) {
72 - $modellang[$child->option_id][$lang->lang_id] = $lang; 73 + $modellang[$child->option_id][$lang->language_id] = $lang;
73 } 74 }
74 } 75 }
75 $ok = 1; 76 $ok = 1;
@@ -77,7 +78,7 @@ class Option extends \yii\db\ActiveRecord @@ -77,7 +78,7 @@ class Option extends \yii\db\ActiveRecord
77 foreach($post['Option'] as $key => $option) { 78 foreach($post['Option'] as $key => $option) {
78 if(in_array($key, array('model', 'model_id'))) { continue; } 79 if(in_array($key, array('model', 'model_id'))) { continue; }
79 if(empty($option['value'][$models[$key]->name]) && !empty($option['lang'])) { 80 if(empty($option['value'][$models[$key]->name]) && !empty($option['lang'])) {
80 - foreach($option['lang'] as $lang_id => $lang) { 81 + foreach($option['lang'] as $language_id => $lang) {
81 if(!empty($lang)) { 82 if(!empty($lang)) {
82 $option['value'][$models[$key]->name] = $lang; 83 $option['value'][$models[$key]->name] = $lang;
83 break; 84 break;
@@ -91,16 +92,16 @@ class Option extends \yii\db\ActiveRecord @@ -91,16 +92,16 @@ class Option extends \yii\db\ActiveRecord
91 $modellang[$key][0]->addError('value', 'Value must be set'); 92 $modellang[$key][0]->addError('value', 'Value must be set');
92 } 93 }
93 if(!empty($option['lang'])) { 94 if(!empty($option['lang'])) {
94 - foreach($option['lang'] as $lang_id => $lang) {  
95 - if(empty($modellang[$key][$lang_id])) {  
96 - $modellang[$key][$lang_id] = new OptionLang();  
97 - $modellang[$key][$lang_id]->id = $models[$key]->option_id;  
98 - $modellang[$key][$lang_id]->lang_id = $lang_id;  
99 - $modellang[$key][$lang_id]->value = $lang; 95 + foreach($option['lang'] as $language_id => $lang) {
  96 + if(empty($modellang[$key][$language_id])) {
  97 + $modellang[$key][$language_id] = new OptionLang();
  98 + $modellang[$key][$language_id]->option_id = $models[$key]->option_id;
  99 + $modellang[$key][$language_id]->language_id = $language_id;
  100 + $modellang[$key][$language_id]->value = $lang;
100 } else { 101 } else {
101 - $modellang[$key][$lang_id]->value = $lang; 102 + $modellang[$key][$language_id]->value = $lang;
102 } 103 }
103 - if(!$modellang[$key][$lang_id]->save()) { 104 + if(!$modellang[$key][$language_id]->save()) {
104 $ok = 0; 105 $ok = 0;
105 } 106 }
106 } 107 }
@@ -146,7 +147,7 @@ class Option extends \yii\db\ActiveRecord @@ -146,7 +147,7 @@ class Option extends \yii\db\ActiveRecord
146 $models[$index][$key]->translate = $option[$key]['translate']?1:0; 147 $models[$index][$key]->translate = $option[$key]['translate']?1:0;
147 $models[$index][$key]->name = $key; 148 $models[$index][$key]->name = $key;
148 if(!$first) { 149 if(!$first) {
149 - $models[$index][$key]->parent_id = $parentid; 150 + $models[$index][$key]->option_pid = $parentid;
150 } 151 }
151 $modelslang[$index][$key][0] = new OptionLang(); 152 $modelslang[$index][$key][0] = new OptionLang();
152 if(!empty($option['lang'][$key])) { 153 if(!empty($option['lang'][$key])) {
@@ -161,16 +162,16 @@ class Option extends \yii\db\ActiveRecord @@ -161,16 +162,16 @@ class Option extends \yii\db\ActiveRecord
161 if($first) { 162 if($first) {
162 $parentid = $models[$index][$key]->option_id; 163 $parentid = $models[$index][$key]->option_id;
163 } 164 }
164 - $modelslang[$index][$key][0]->id = $models[$index][$key]->option_id;  
165 - $modelslang[$index][$key][0]->lang_id = 0; 165 + $modelslang[$index][$key][0]->option_id = $models[$index][$key]->option_id;
  166 + $modelslang[$index][$key][0]->language_id = 0;
166 $modelslang[$index][$key][0]->value = $value; 167 $modelslang[$index][$key][0]->value = $value;
167 if($modelslang[$index][$key][0]->save()) { 168 if($modelslang[$index][$key][0]->save()) {
168 if(!empty($option['lang'][$key])) { 169 if(!empty($option['lang'][$key])) {
169 foreach($option['lang'][$key] as $code => $lang) { 170 foreach($option['lang'][$key] as $code => $lang) {
170 if(!empty($lang)) { 171 if(!empty($lang)) {
171 $modelslang[$index][$key][$code] = new OptionLang(); 172 $modelslang[$index][$key][$code] = new OptionLang();
172 - $modelslang[$index][$key][$code]->id = $models[$index][$key]->option_id;  
173 - $modelslang[$index][$key][$code]->lang_id = $code; 173 + $modelslang[$index][$key][$code]->option_id = $models[$index][$key]->option_id;
  174 + $modelslang[$index][$key][$code]->language_id = $code;
174 $modelslang[$index][$key][$code]->value = $lang; 175 $modelslang[$index][$key][$code]->value = $lang;
175 if(!$modelslang[$index][$key][$code]->save()) { 176 if(!$modelslang[$index][$key][$code]->save()) {
176 $ok = 0; 177 $ok = 0;
@@ -187,8 +188,8 @@ class Option extends \yii\db\ActiveRecord @@ -187,8 +188,8 @@ class Option extends \yii\db\ActiveRecord
187 foreach($option['lang'][$key] as $code => $lang) { 188 foreach($option['lang'][$key] as $code => $lang) {
188 if(!empty($lang)) { 189 if(!empty($lang)) {
189 $modelslang[$index][$key][$code] = new OptionLang(); 190 $modelslang[$index][$key][$code] = new OptionLang();
190 - $modelslang[$index][$key][$code]->id = $models[$index][$key]->option_id;  
191 - $modelslang[$index][$key][$code]->lang_id = $code; 191 + $modelslang[$index][$key][$code]->option_id = $models[$index][$key]->option_id;
  192 + $modelslang[$index][$key][$code]->language_id = $code;
192 $modelslang[$index][$key][$code]->value = $lang; 193 $modelslang[$index][$key][$code]->value = $lang;
193 } 194 }
194 } 195 }
@@ -205,12 +206,12 @@ class Option extends \yii\db\ActiveRecord @@ -205,12 +206,12 @@ class Option extends \yii\db\ActiveRecord
205 $newflag->model_id = $model_id; 206 $newflag->model_id = $model_id;
206 $newflag->name = 'is_new'; 207 $newflag->name = 'is_new';
207 $newflag->template = 'checkbox'; 208 $newflag->template = 'checkbox';
208 - $newflag->parent_id = $parentid; 209 + $newflag->option_pid = $parentid;
209 $newflag->translate = 0; 210 $newflag->translate = 0;
210 if($newflag->save()) { 211 if($newflag->save()) {
211 $newflaglang = new OptionLang(); 212 $newflaglang = new OptionLang();
212 - $newflaglang->id = $newflag->option_id;  
213 - $newflaglang->lang_id = 0; 213 + $newflaglang->option_id = $newflag->option_id;
  214 + $newflaglang->language_id = 0;
214 $newflaglang->value = '1'; 215 $newflaglang->value = '1';
215 if(!$newflaglang->save()) { 216 if(!$newflaglang->save()) {
216 $newflag->delete(); 217 $newflag->delete();
@@ -242,19 +243,19 @@ class Option extends \yii\db\ActiveRecord @@ -242,19 +243,19 @@ class Option extends \yii\db\ActiveRecord
242 } 243 }
243 244
244 public function getOptions() { 245 public function getOptions() {
245 - return $this->hasMany(Option::className(), ['parent_id' => 'option_id'])->indexBy('name'); 246 + return $this->hasMany(Option::className(), ['option_pid' => 'option_id'])->indexBy('name');
246 } 247 }
247 248
248 public function getOption() { 249 public function getOption() {
249 - return $this->hasOne(Option::className(), ['option_id' => 'parent_id']); 250 + return $this->hasOne(Option::className(), ['option_id' => 'option_pid']);
250 } 251 }
251 252
252 public function getOptionLangs() { 253 public function getOptionLangs() {
253 - return $this->hasMany(OptionLang::className(), ['id' => 'option_id']); 254 + return $this->hasMany(OptionLang::className(), ['option_id' => 'option_id']);
254 } 255 }
255 256
256 public function getOptionDefaultLang($array = false) { 257 public function getOptionDefaultLang($array = false) {
257 - $query = $this->getOptionLangs()->where(['lang_id' => 0]); 258 + $query = $this->getOptionLangs()->where(['language_id' => 0]);
258 if($array) { 259 if($array) {
259 $query->asArray(); 260 $query->asArray();
260 } 261 }
frontend/models/OptionLang.php
@@ -8,7 +8,7 @@ use Yii; @@ -8,7 +8,7 @@ use Yii;
8 * This is the model class for table "option_lang". 8 * This is the model class for table "option_lang".
9 * 9 *
10 * @property integer $id 10 * @property integer $id
11 - * @property integer $lang_id 11 + * @property integer $language_id
12 * @property string $value 12 * @property string $value
13 */ 13 */
14 class OptionLang extends \yii\db\ActiveRecord 14 class OptionLang extends \yii\db\ActiveRecord
@@ -27,8 +27,8 @@ class OptionLang extends \yii\db\ActiveRecord @@ -27,8 +27,8 @@ class OptionLang extends \yii\db\ActiveRecord
27 public function rules() 27 public function rules()
28 { 28 {
29 return [ 29 return [
30 - [['id', 'lang_id'], 'required'],  
31 - [['id', 'lang_id'], 'integer'], 30 + [['option_id', 'language_id'], 'required'],
  31 + [['option_id', 'language_id'], 'integer'],
32 [['value'], 'string'] 32 [['value'], 'string']
33 ]; 33 ];
34 } 34 }
@@ -39,8 +39,8 @@ class OptionLang extends \yii\db\ActiveRecord @@ -39,8 +39,8 @@ class OptionLang extends \yii\db\ActiveRecord
39 public function attributeLabels() 39 public function attributeLabels()
40 { 40 {
41 return [ 41 return [
42 - 'id' => Yii::t('app', 'ID'),  
43 - 'lang_id' => Yii::t('app', 'Lang ID'), 42 + 'option_id' => Yii::t('app', 'ID'),
  43 + 'language_id' => Yii::t('app', 'Lang ID'),
44 'value' => Yii::t('app', 'Value'), 44 'value' => Yii::t('app', 'Value'),
45 ]; 45 ];
46 } 46 }
frontend/models/OptionLangSearch.php
@@ -18,7 +18,7 @@ class OptionLangSearch extends OptionLang @@ -18,7 +18,7 @@ class OptionLangSearch extends OptionLang
18 public function rules() 18 public function rules()
19 { 19 {
20 return [ 20 return [
21 - [['primary', 'id', 'lang_id'], 'integer'], 21 + [['option_language_id', 'option_id', 'language_id'], 'integer'],
22 [['value'], 'safe'], 22 [['value'], 'safe'],
23 ]; 23 ];
24 } 24 }
@@ -56,9 +56,9 @@ class OptionLangSearch extends OptionLang @@ -56,9 +56,9 @@ class OptionLangSearch extends OptionLang
56 } 56 }
57 57
58 $query->andFilterWhere([ 58 $query->andFilterWhere([
59 - 'primary' => $this->primary,  
60 - 'id' => $this->id,  
61 - 'lang_id' => $this->lang_id, 59 + 'option_language_id' => $this->option_language_id,
  60 + 'option_id' => $this->option_id,
  61 + 'language_id' => $this->language_id,
62 ]); 62 ]);
63 63
64 $query->andFilterWhere(['like', 'value', $this->value]); 64 $query->andFilterWhere(['like', 'value', $this->value]);
frontend/models/OptionSearch.php
@@ -18,7 +18,7 @@ class OptionSearch extends Option @@ -18,7 +18,7 @@ class OptionSearch extends Option
18 public function rules() 18 public function rules()
19 { 19 {
20 return [ 20 return [
21 - [['option_id', 'model_id', 'parent_id'], 'integer'], 21 + [['option_id', 'model_id', 'option_pid'], 'integer'],
22 [['model', 'name', 'template'], 'safe'], 22 [['model', 'name', 'template'], 'safe'],
23 ]; 23 ];
24 } 24 }
@@ -60,12 +60,12 @@ class OptionSearch extends Option @@ -60,12 +60,12 @@ class OptionSearch extends Option
60 return $dataProvider; 60 return $dataProvider;
61 } 61 }
62 62
63 - $query->andWhere(['parent_id' => null]); 63 + $query->andWhere(['option_pid' => null]);
64 64
65 $query->andFilterWhere([ 65 $query->andFilterWhere([
66 'option_id' => $this->option_id, 66 'option_id' => $this->option_id,
67 'model_id' => $this->model_id, 67 'model_id' => $this->model_id,
68 - 'parent_id' => $this->parent_id, 68 + 'option_pid' => $this->option_pid,
69 ]); 69 ]);
70 70
71 $query->andFilterWhere(['like', 'model', $this->model]) 71 $query->andFilterWhere(['like', 'model', $this->model])
frontend/models/OptionValues.php
@@ -10,7 +10,7 @@ use Yii; @@ -10,7 +10,7 @@ use Yii;
10 * @property integer $option_value_id 10 * @property integer $option_value_id
11 * @property string $option_key 11 * @property string $option_key
12 * @property string $option_value_text 12 * @property string $option_value_text
13 - * @property integer $option_lang_id 13 + * @property integer $option_language_id
14 * @property integer $option_value_parent 14 * @property integer $option_value_parent
15 * @property integer $option_user 15 * @property integer $option_user
16 * 16 *
@@ -33,7 +33,7 @@ class OptionValues extends \yii\db\ActiveRecord @@ -33,7 +33,7 @@ class OptionValues extends \yii\db\ActiveRecord
33 { 33 {
34 return [ 34 return [
35 [['option_key', 'option_value_text'], 'required'], 35 [['option_key', 'option_value_text'], 'required'],
36 - [['option_lang_id', 'option_value_parent', 'option_user'], 'integer'], 36 + [['option_language_id', 'option_value_parent', 'option_user'], 'integer'],
37 [['option_key'], 'string', 'max' => 200] 37 [['option_key'], 'string', 'max' => 200]
38 ]; 38 ];
39 } 39 }
@@ -47,7 +47,7 @@ class OptionValues extends \yii\db\ActiveRecord @@ -47,7 +47,7 @@ class OptionValues extends \yii\db\ActiveRecord
47 'option_value_id' => Yii::t('app', 'Option Value ID'), 47 'option_value_id' => Yii::t('app', 'Option Value ID'),
48 'option_key' => Yii::t('app', 'Option Key'), 48 'option_key' => Yii::t('app', 'Option Key'),
49 'option_value_text' => Yii::t('app', 'Option Value Text'), 49 'option_value_text' => Yii::t('app', 'Option Value Text'),
50 - 'option_lang_id' => Yii::t('app', 'Option Lang ID'), 50 + 'option_language_id' => Yii::t('app', 'Option Lang ID'),
51 'option_value_parent' => Yii::t('app', 'Option Value Parent'), 51 'option_value_parent' => Yii::t('app', 'Option Value Parent'),
52 'option_user' => Yii::t('app', 'Option User'), 52 'option_user' => Yii::t('app', 'Option User'),
53 ]; 53 ];
@@ -58,7 +58,7 @@ class OptionValues extends \yii\db\ActiveRecord @@ -58,7 +58,7 @@ class OptionValues extends \yii\db\ActiveRecord
58 */ 58 */
59 public function getOptionLang() 59 public function getOptionLang()
60 { 60 {
61 - return $this->hasOne(Language::className(), ['language_id' => 'option_lang_id']); 61 + return $this->hasOne(Language::className(), ['language_id' => 'option_language_id']);
62 } 62 }
63 public function getLanguages() { 63 public function getLanguages() {
64 return (new LanguageLang())->find()->orderBy('language_id ASC')->asArray()->all(); 64 return (new LanguageLang())->find()->orderBy('language_id ASC')->asArray()->all();
frontend/models/OptionValuesSearch.php
@@ -18,7 +18,7 @@ class OptionValuesSearch extends OptionValues @@ -18,7 +18,7 @@ class OptionValuesSearch extends OptionValues
18 public function rules() 18 public function rules()
19 { 19 {
20 return [ 20 return [
21 - [['option_value_id', 'option_lang_id', 'option_value_parent', 'option_user'], 'integer'], 21 + [['option_value_id', 'option_language_id', 'option_value_parent', 'option_user'], 'integer'],
22 [['option_key', 'option_value_text'], 'safe'], 22 [['option_key', 'option_value_text'], 'safe'],
23 ]; 23 ];
24 } 24 }
@@ -57,7 +57,7 @@ class OptionValuesSearch extends OptionValues @@ -57,7 +57,7 @@ class OptionValuesSearch extends OptionValues
57 57
58 $query->andFilterWhere([ 58 $query->andFilterWhere([
59 'option_value_id' => $this->option_value_id, 59 'option_value_id' => $this->option_value_id,
60 - 'option_lang_id' => $this->option_lang_id, 60 + 'option_language_id' => $this->option_language_id,
61 'option_value_parent' => $this->option_value_parent, 61 'option_value_parent' => $this->option_value_parent,
62 'option_user' => $this->option_user, 62 'option_user' => $this->option_user,
63 ]); 63 ]);
frontend/views/option-values/_form.php
@@ -17,7 +17,7 @@ use yii\widgets\ActiveForm; @@ -17,7 +17,7 @@ use yii\widgets\ActiveForm;
17 <div class="optionvalues-option_value_text-active"> 17 <div class="optionvalues-option_value_text-active">
18 <?= $form->field($model, 'option_value_text', ['enableClientValidation' => false])->label($model->getAttributeLabel('option_key').' | <span class="glyphicon glyphicon-globe add-langs"></span>')->textInput() ?> 18 <?= $form->field($model, 'option_value_text', ['enableClientValidation' => false])->label($model->getAttributeLabel('option_key').' | <span class="glyphicon glyphicon-globe add-langs"></span>')->textInput() ?>
19 19
20 - <?= $form->field($model, 'option_lang_id')->dropDownList($model->getDropDownArray()) ?> 20 + <?= $form->field($model, 'option_language_id')->dropDownList($model->getDropDownArray()) ?>
21 </div> 21 </div>
22 22
23 <?= $form->field($model, 'option_value_parent')->dropDownList($model->getUserOptionsArray()) ?> 23 <?= $form->field($model, 'option_value_parent')->dropDownList($model->getUserOptionsArray()) ?>
@@ -46,7 +46,7 @@ use yii\widgets\ActiveForm; @@ -46,7 +46,7 @@ use yii\widgets\ActiveForm;
46 $(document).on('click', '.add-langs', function() { 46 $(document).on('click', '.add-langs', function() {
47 var group = $(this).parent().attr('for'); 47 var group = $(this).parent().attr('for');
48 $(this).parent().parent().appendTo('.reserved_inputs'); 48 $(this).parent().parent().appendTo('.reserved_inputs');
49 - $('.field-optionvalues-option_lang_id').appendTo('.reserved_inputs'); 49 + $('.field-optionvalues-option_language_id').appendTo('.reserved_inputs');
50 $('.'+group+'-lang').appendTo('.'+group+'-active'); 50 $('.'+group+'-lang').appendTo('.'+group+'-active');
51 }); 51 });
52 $(document).on('click', '.remove-langs', function() { 52 $(document).on('click', '.remove-langs', function() {
@@ -54,7 +54,7 @@ use yii\widgets\ActiveForm; @@ -54,7 +54,7 @@ use yii\widgets\ActiveForm;
54 $(this).parent().parent().appendTo('.reserved_inputs'); 54 $(this).parent().parent().appendTo('.reserved_inputs');
55 console.log('field-'+group); 55 console.log('field-'+group);
56 $('.reserved_inputs .field-'+group).appendTo('.'+group+'-active'); 56 $('.reserved_inputs .field-'+group).appendTo('.'+group+'-active');
57 - $('.field-optionvalues-option_lang_id').appendTo('.'+group+'-active'); 57 + $('.field-optionvalues-option_language_id').appendTo('.'+group+'-active');
58 }); 58 });
59 }); 59 });
60 </script> 60 </script>
61 \ No newline at end of file 61 \ No newline at end of file
frontend/views/option-values/_search.php
@@ -21,7 +21,7 @@ use yii\widgets\ActiveForm; @@ -21,7 +21,7 @@ use yii\widgets\ActiveForm;
21 21
22 <?= $form->field($model, 'option_value_text') ?> 22 <?= $form->field($model, 'option_value_text') ?>
23 23
24 - <?= $form->field($model, 'option_lang_id') ?> 24 + <?= $form->field($model, 'option_language_id') ?>
25 25
26 <?= $form->field($model, 'option_value_parent') ?> 26 <?= $form->field($model, 'option_value_parent') ?>
27 27
frontend/views/option-values/index.php
@@ -28,7 +28,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -28,7 +28,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
28 'option_value_id', 28 'option_value_id',
29 'option_key', 29 'option_key',
30 'option_value_text:ntext', 30 'option_value_text:ntext',
31 - 'option_lang_id', 31 + 'option_language_id',
32 'option_value_parent', 32 'option_value_parent',
33 // 'option_user', 33 // 'option_user',
34 34
frontend/views/option-values/view.php
@@ -31,7 +31,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -31,7 +31,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
31 'option_value_id', 31 'option_value_id',
32 'option_key', 32 'option_key',
33 'option_value_text:ntext', 33 'option_value_text:ntext',
34 - 'option_lang_id', 34 + 'option_language_id',
35 'option_value_parent', 35 'option_value_parent',
36 'option_user', 36 'option_user',
37 ], 37 ],
frontend/views/option/_form_edit.php
@@ -21,7 +21,7 @@ use yii\widgets\ActiveForm; @@ -21,7 +21,7 @@ use yii\widgets\ActiveForm;
21 <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?> 21 <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?>
22 <?php 22 <?php
23 if($row->translate) { 23 if($row->translate) {
24 - foreach($row->getLangs() as $lang_id => $lang) { 24 + foreach($row->getLangs() as $language_id => $lang) {
25 ?> 25 ?>
26 <div class="form-group"> 26 <div class="form-group">
27 <div class="col-xs-1"><?=$lang['lang_code']?></div> 27 <div class="col-xs-1"><?=$lang['lang_code']?></div>
frontend/web/images/upload/0ba9d6a23ce996f8f6894545721a9417ZKA-O/original.jpg 0 → 100644

80.2 KB

frontend/web/images/upload/1882770d9bde9932666c75b63da8a55bA5OLs/original.jpg 0 → 100644

90 KB

frontend/web/images/upload/1882770d9bde9932666c75b63da8a55bAGkF2/original.jpg 0 → 100644

90 KB

frontend/web/images/upload/1882770d9bde9932666c75b63da8a55bNqFYc/original.jpg 0 → 100644

90 KB

frontend/web/images/upload/1882770d9bde9932666c75b63da8a55bcdvDU/original.jpg 0 → 100644

90 KB

frontend/web/images/upload/2d5d104fda828bd7122f1372ffe941cdM1XGy/original.jpg 0 → 100644

95.8 KB

frontend/web/images/upload/2d5d104fda828bd7122f1372ffe941cdMO2On/original.jpg 0 → 100644

95.8 KB

frontend/web/images/upload/416becfedaed921abc6ca696e2ff51dbIxY64/original.jpg 0 → 100644

122 KB

frontend/web/images/upload/416becfedaed921abc6ca696e2ff51dbNCozs/original.jpg 0 → 100644

122 KB

frontend/web/images/upload/5ee447f553cd4b615e0107772e72469ccmchQ/original.jpg 0 → 100644

45.3 KB

frontend/web/images/upload/68ea5e978068f52504ba9f2f10a3eca8Nj3zD/original.jpg 0 → 100644

46.1 KB

frontend/web/images/upload/7b3166bbb0497ab11649b502f98a9f71-NXzA/original.jpg 0 → 100644

77.3 KB

frontend/web/images/upload/7b3166bbb0497ab11649b502f98a9f717ntFu/original.jpg 0 → 100644

77.3 KB

frontend/web/images/upload/7b3166bbb0497ab11649b502f98a9f71O4IC7/original.jpg 0 → 100644

77.3 KB

frontend/web/images/upload/7b3166bbb0497ab11649b502f98a9f71Qkhxq/original.jpg 0 → 100644

77.3 KB

frontend/web/images/upload/7b3166bbb0497ab11649b502f98a9f71iN0HJ/original.jpg 0 → 100644

77.3 KB

frontend/web/images/upload/7b3166bbb0497ab11649b502f98a9f71r-uW4/original.jpg 0 → 100644

77.3 KB

frontend/web/images/upload/7b3166bbb0497ab11649b502f98a9f71v4k-p/original.jpg 0 → 100644

77.3 KB

frontend/web/images/upload/7c0beac302dbe743c2fec948bd232d7dFPPuQ/original.jpg 0 → 100644

14.9 KB

frontend/web/images/upload/7da01e1c36c2ddb3140557dc087012510LVuC/original.jpg 0 → 100644

55 KB

frontend/web/images/upload/954377695246c868d41932f4d4ad6bdc4H6Sa/original.jpg 0 → 100644

142 KB

frontend/web/images/upload/954377695246c868d41932f4d4ad6bdcYQ6Gt/original.jpg 0 → 100644

142 KB

frontend/web/images/upload/998f255851230d82d29c7a218cfdb104AsZKg/original.png 0 → 100644

214 KB

frontend/web/images/upload/998f255851230d82d29c7a218cfdb104oT-cN/original.png 0 → 100644

214 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e0853tHa/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e085W3TX/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e086mNnr/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e089XVmJ/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08HLPep/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08HlucN/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08K3ZX-/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08O4h7I/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08Ru9T4/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08Vr17d/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08aHlil/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08ajC__/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08eTlWW/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08f_eyp/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08kGamn/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08pgbJ2/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08twxWX/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/b8d32a4542d55ba60684bb1c2d486e08xitCT/original.jpg 0 → 100644

51.7 KB

frontend/web/images/upload/bcdc328db35813ea7b1a4b85a71def67HOooH/original.jpg 0 → 100644

21.4 KB

frontend/web/images/upload/bcdc328db35813ea7b1a4b85a71def67IJ5q7/original.jpg 0 → 100644

21.4 KB

frontend/web/images/upload/bcdc328db35813ea7b1a4b85a71def67JnlT_/original.jpg 0 → 100644

21.4 KB

frontend/web/images/upload/bcdc328db35813ea7b1a4b85a71def67VrxQl/original.jpg 0 → 100644

21.4 KB

frontend/web/images/upload/bcdc328db35813ea7b1a4b85a71def67dgBqI/original.jpg 0 → 100644

21.4 KB

frontend/web/images/upload/bcdc328db35813ea7b1a4b85a71def67qv-lM/original.jpg 0 → 100644

21.4 KB

frontend/web/js/option.js
@@ -12,6 +12,12 @@ function readURL(input) { @@ -12,6 +12,12 @@ function readURL(input) {
12 } 12 }
13 return urls; 13 return urls;
14 } 14 }
  15 +function checkboxerInit() {
  16 + $.each($('.checkboxer input[type=radio]:checked'), function(index, value) {
  17 + console.log(value);
  18 + $(value).trigger('change');
  19 + });
  20 +}
15 $(function() { 21 $(function() {
16 var counter = 0; 22 var counter = 0;
17 $(document).on('click', '.add_row', function() { 23 $(document).on('click', '.add_row', function() {
@@ -36,57 +42,93 @@ $(function() { @@ -36,57 +42,93 @@ $(function() {
36 $(document).on('click', '.remove_lang', function() { 42 $(document).on('click', '.remove_lang', function() {
37 $(this).parents('.form-wrapper').remove(); 43 $(this).parents('.form-wrapper').remove();
38 }); 44 });
39 - if($('#lang-tabs li').length > 1) {  
40 - $('#lang-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>')  
41 - }  
42 - $(document).on('click', '#lang-dropdown li a[data-lang]', function() { 45 + $(document).on('change', '.image_inputs_field', function() {
  46 + readURL(this);
  47 + });
  48 + $('a.remove_image').on('click', function(e) {
  49 + var el = $(this);
  50 + e.preventDefault();
  51 + if(confirm(confirm_message)) {
  52 + $.ajax({
  53 + type: 'post',
  54 + url: $(this).attr('href'),
  55 + data: $(this).data('params')
  56 + }).done(function() {
  57 + $(el).parents('.additional_image_container').remove();
  58 + });
  59 + }
  60 + return false;
  61 + });
  62 + $.each($('.nav-tabs.f32'), function(key, value) {
  63 + if($(value).find('li').length > 1) {
  64 + $(value).find('li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>');
  65 + }
  66 + });
  67 + $(document).on('click', '.dropdown-menu.f32:not(.old) li a[data-lang]', function() {
43 var lang = $(this).data('lang'); 68 var lang = $(this).data('lang');
44 var flag = $(this).find('span').first().clone(); 69 var flag = $(this).find('span').first().clone();
45 var el = $(this); 70 var el = $(this);
46 - $.get('/blog/ajax/category-form', { lang_id: lang }, function(data) {  
47 - $('#lang-tabs li').removeClass('active');  
48 - $('#lang-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#lang-'+lang+'" aria-controls="lang-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>');  
49 - $('.lang-tab-content .tab-pane.active').removeClass('active');  
50 - $('.lang-tab-content').append($(data).find('.ajax-loaded').first()); 71 + var id = $(this).attr('href').substr(1);
  72 + var path = form[id].handler;
  73 + var view = form[id].view;
  74 + var model = form[id].model;
  75 + $.get(path, { language_id: lang, widget_id: id, ajaxView: view, model: model }, function(data) {
  76 + $('#'+id+'-tabs li').removeClass('active');
  77 + $('#'+id+'-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#'+id+'-'+lang+'" aria-controls="'+id+'-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>');
  78 + $('#tab-content-'+id+' .tab-pane.active').removeClass('active');
  79 + $('#tab-content-'+id).append($(data).find('.ajax-loaded').first());
51 $('body').append($(data).filter('script')); 80 $('body').append($(data).filter('script'));
52 $(el).parent().remove(); 81 $(el).parent().remove();
53 - if(!$('#lang-dropdown li').length) {  
54 - $('#dropdownLang').addClass('disabled'); 82 + if(!$('#lang-'+id+' li').length) {
  83 + $('#'+id+'Lang').addClass('disabled');
55 } 84 }
56 - if($('#lang-tabs li').length > 1) {  
57 - $('#lang-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>') 85 + if($('#'+id+'-tabs li').length > 1) {
  86 + $('#'+id+'-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>')
  87 + }
  88 + });
  89 + });
  90 + $(document).on('click', '.dropdown-menu.f32.old li a[data-lang]', function() {
  91 + var lang = $(this).data('lang');
  92 + var flag = $(this).find('span').first().clone();
  93 + var el = $(this);
  94 + var id = $(this).attr('href').substr(1);
  95 + $.get(form[id], { language_id: lang, widget_id: id }, function(data) {
  96 + $('#'+id+'-tabs li').removeClass('active');
  97 + $('#'+id+'-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#'+id+'-'+lang+'" aria-controls="'+id+'-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>');
  98 + $('#tab-content-'+id+' .tab-pane.active').removeClass('active');
  99 + $('#tab-content-'+id).append($(data).find('.ajax-loaded').first());
  100 + $('body').append($(data).filter('script'));
  101 + $(el).parent().remove();
  102 + if(!$('#lang-'+id+' li').length) {
  103 + $('#'+id+'Lang').addClass('disabled');
  104 + }
  105 + if($('#'+id+'-tabs li').length > 1) {
  106 + $('#'+id+'-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>')
58 } 107 }
59 }); 108 });
60 }); 109 });
61 $(document).on('click', '.remove-lang', function() { 110 $(document).on('click', '.remove-lang', function() {
62 var lang = $(this).parent().data('lang'); 111 var lang = $(this).parent().data('lang');
63 var flag = $(this).parent().find('span.flag').first().clone(); 112 var flag = $(this).parent().find('span.flag').first().clone();
64 - $('#lang-'+lang).remove();  
65 - $('#lang-dropdown').append('<li><a href="#lang-tabs" data-lang="'+lang+'">'+$('<p>').append($(flag)).html()+'</a></li>');  
66 - $('#dropdownLang').removeClass('disabled'); 113 + var id = $(this).parent().find('a[aria-controls]').first().attr('aria-controls').substr(0,8);
  114 + $('#'+id+'-'+lang).remove();
  115 + $('#lang-'+id).append('<li><a href="#'+id+'" data-lang="'+lang+'">'+$('<p>').append($(flag)).html()+'</a></li>');
  116 + $('#'+id+'Lang').removeClass('disabled');
67 $(this).parent().remove(); 117 $(this).parent().remove();
68 - if($('#lang-tabs li').length <= 1) {  
69 - $('#lang-tabs li').find('.remove-lang').remove(); 118 + if($('#'+id+'-tabs li').length <= 1) {
  119 + $('#'+id+'-tabs li').find('.remove-lang').remove();
70 } 120 }
71 - if(!$('#lang-tabs>li.active').length) {  
72 - $('#lang-tabs>li').first().find('a').tab('show'); 121 + if(!$('#'+id+'-tabs>li.active').length) {
  122 + $('#'+id+'-tabs>li').first().find('a').tab('show');
73 } 123 }
74 }); 124 });
75 - $(document).on('change', '.image_inputs_field', function() {  
76 - readURL(this); 125 + $(document).on('change', '.checkboxer .checkboxer_label input[type=radio]', function() {
  126 + console.log($(this).val());
  127 + $(this).parents('.checkboxer').find('.checkboxer_container').removeClass('active');
  128 + $(this).parents('.checkboxer_container').addClass('active');
77 }); 129 });
78 - $('a.remove_image').on('click', function(e) {  
79 - var el = $(this);  
80 - e.preventDefault();  
81 - if(confirm(confirm_message)) {  
82 - $.ajax({  
83 - type: 'post',  
84 - url: $(this).attr('href'),  
85 - data: $(this).data('params')  
86 - }).done(function() {  
87 - $(el).parents('.additional_image_container').remove();  
88 - });  
89 - }  
90 - return false; 130 + $.each($('.f32'), function(i, val) {
  131 + $(val).find('a[role=tab]').first().trigger('click');
91 }); 132 });
  133 + checkboxerInit();
92 }); 134 });
93 \ No newline at end of file 135 \ No newline at end of file