Commit 36d1807a8199e58578355b0d3f3997bb696a9ad5

Authored by Yarik
1 parent efba3882

Big commit.

Showing 256 changed files with 5748 additions and 9843 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 256 files are displayed.

@@ -20,3 +20,7 @@ phpunit.phar @@ -20,3 +20,7 @@ phpunit.phar
20 /phpunit.xml 20 /phpunit.xml
21 /.vagrant 21 /.vagrant
22 /vendor/ 22 /vendor/
  23 +/fordelete.txt
  24 +/done.txt
  25 +/certificates.php
  26 +/backup
@@ -2,7 +2,7 @@ AddDefaultCharset utf-8 @@ -2,7 +2,7 @@ AddDefaultCharset utf-8
2 <IfModule mod_rewrite.c> 2 <IfModule mod_rewrite.c>
3 3
4 4
5 -# Options +FollowSymlinks 5 + Options +FollowSymlinks
6 6
7 RewriteEngine On 7 RewriteEngine On
8 8
collection.php renamed to _collection.php
@@ -42,10 +42,13 @@ @@ -42,10 +42,13 @@
42 <td>2,48</td> 42 <td>2,48</td>
43 </tr> 43 </tr>
44 </table> 44 </table>
  45 + <div class="style">
  46 + <a class="to_order" href="#">Заказать образец</a>
  47 + </div>
45 </div> 48 </div>
46 </div> 49 </div>
47 - <div class="col-xs-12 col-sm-5 col-md-5">  
48 - <ul class="style"> 50 + <div class="col-xs-12 col-sm-8 col-md-6 col-lg-5 collection-list">
  51 + <ul>
49 <li class="active"> 52 <li class="active">
50 <a href="#"> 53 <a href="#">
51 <div><img src="images/img_garbage/img-laminate-2.jpg" alt=""></div> 54 <div><img src="images/img_garbage/img-laminate-2.jpg" alt=""></div>
@@ -86,57 +89,82 @@ @@ -86,57 +89,82 @@
86 </div> 89 </div>
87 </div> 90 </div>
88 <div class="row"> 91 <div class="row">
89 - <div class="col-xs-12 col-sm-12 articles_data-title marginbottom-15">  
90 - <div class="articles-title">Продукты, используемые в данном проекте</div>  
91 - </div>  
92 - <div class="style project-brands_">  
93 - <ul class="style brands-list">  
94 - <li>  
95 - <a href="#">  
96 - <div><img src="images/img_garbage/img-laminate-2.jpg" alt=""></div>  
97 - <p>Дуб трилогия капучино</p>  
98 - </a>  
99 - </li>  
100 - <li>  
101 - <a href="#">  
102 - <div><img src="images/img_garbage/img-laminate-3.jpg" alt=""></div>  
103 - <p>Сосна сахара</p>  
104 - </a>  
105 - </li>  
106 - <li>  
107 - <a href="#">  
108 - <div><img src="images/img_garbage/img-laminate-4.jpg" alt=""></div>  
109 - <p>Дуб гаррисон натур</p>  
110 - </a>  
111 - </li>  
112 - <li>  
113 - <a href="#">  
114 - <div><img src="images/img_garbage/img-laminate-5.jpg" alt=""></div>  
115 - <p>Дуб кольмарский</p>  
116 - </a>  
117 - </li>  
118 - <li>  
119 - <a href="#">  
120 - <div><img src="images/img_garbage/img-laminate-6.jpg" alt=""></div>  
121 - <p>Дуб рустикальный</p>  
122 - </a>  
123 - </li>  
124 - <li>  
125 - <a href="#">  
126 - <div><img src="images/img_garbage/img-laminate-7.jpg" alt=""></div>  
127 - <p>Каштан белый жирона</p>  
128 - </a>  
129 - </li> 92 + <div class="col-xs-12 col-sm-12 collect-tabs">
  93 + <ul class="list-tabs">
  94 + <li><span>Технические характеристики</span></li>
  95 + <li><span>Сертификаты</span></li>
  96 + <li><span>Монтаж, уборка, уход</span></li>
  97 + <li><span>Галерея объектов</span></li>
130 </ul> 98 </ul>
  99 + <div class="style t_content_wr">
  100 + <div class="tabs-content">
  101 + <p><span style="font-weight: 700;">База данных</span></p>
  102 + <p>Форбо обладает большим разнообразием рекламной и технической документации для каждого из своих покрытий. Документ можно найти, пройдя по ссылке выбранного продукта, после этого можно будет
  103 + <a href="#" download>скачать необходимый файл</a>.</p>
  104 + <p>Вы также можете скачать таблицу с <a href="#" download>техническими характеристиками</a></p>
  105 + </div>
  106 + <div class="tabs-content">
  107 + <div class="row">
  108 + <div class="col-xs-12 col-sm-6 col-md-4 col-lg-4">
  109 + <iframe class="certificate" frameborder="0" src="http://docs.google.com/gview?url=http://witex.ua/files/witex_sohranenie_ykladka.pdf&embedded=true"></iframe>
  110 + </div>
  111 + <div class="col-xs-12 col-sm-6 col-md-4 col-lg-4">
  112 + <iframe class="certificate" frameborder="0" src="http://docs.google.com/gview?url=http://witex.ua/files/garant.pdf&embedded=true"></iframe>
  113 + </div>
  114 + <div class="col-xs-12 col-sm-6 col-md-4 col-lg-4">
  115 + <iframe class="certificate" frameborder="0" src="http://docs.google.com/gview?url=http://witex.ua/files/garant.pdf&embedded=true"></iframe>
  116 + </div>
  117 + <div class="col-xs-12 col-sm-6 col-md-4 col-lg-4">
  118 + <iframe class="certificate" frameborder="0" src="http://docs.google.com/gview?url=http://witex.ua/files/garant.pdf&embedded=true"></iframe>
  119 + </div>
  120 + </div>
  121 + </div>
  122 + <div class="tabs-content">
  123 + <p>Поверхность бесшовного пола или пола на основе минералов должна полностью покрываться влагозащитной полиэтиленовой пленкой толщиной 0,2 мм. При этом на стыках полосы пленки должны укладываться с нахлестом не менее 20 см.</p>
  124 + <p>Для всех поверхностей рекомендуется соответствующая подложка. Подложка укладывается встык, то есть без нахлеста. При укладке искусственного паркета, имеющего на оборотной стороне звукопоглощающую подкладку, дополнительная подложка не нужна (кашированная подкладка НЕ заменяет полиэтиленовую пленку на поверхностях на основе минералов!).Элементы паркета всегда укладываются как плавающие.</p>
  125 + <p>Неподвижное скрепление половиц с поверхностью для укладки (клей, шурупы, гвозди) не допускается. Минимальный сдвиг головных стыков половиц соседних рядов - 200 мм.</p>
  126 + <p>Компенсационный зазор у всех твердых строительных поверхностей – 8-10 мм.<br />
  127 + Во всех дверных проемах, переходах, помещениях со сложной конфигурацией, а также помещениях, имеющих более 10 м в длину или ширину, необходимо вставлять переходники/порожки. </p>
  128 + <p>
  129 + 1. Проверьте, не повреждены ли элементы напольных покрытий, нет ли на них дефектов.<br />
  130 + Рассмотрите шпунтование панелей, найдите на панели паз и гребень.<br />
  131 + Начните укладку первого ряда панелей с дальнего левого угла помещения. Укладывайте так, чтобы обе стороны панели с гребнем были обращены к стене. Начиная укладку, установите распорки для соблюдения расстояния от стены. Укладывайте покрытие следующим образом: к первому и каждому последующему уложенному элементу прикладывайте новую панель, под углом вводя ее гребнем в шпунт уже уложенного элемента. Затем опускайте укладываемую панель до тех пор, пока она полностью не ляжет на пол.
  132 + </p>
  133 + <p>2. Отметьте на последней панели первого ряда требуемую длину (укладывайте гребень к гребню) и отпилите панель по маркировке. Начните укладку второго ряда с остатка последней панели первого ряда, если ее длина не меньше 200 мм. Укладку всех последующих рядов следует начинать с остатка панели предыдущего ряда.<br />
  134 + Внимание! При укладке торцевые стыки панелей каждого последующего ряда должны быть смещены минимум на 200 мм относительно стыков панелей предыдущего ряда. Укладывая покрытия с фаской и/или особым декором (например, имитирующим плитку) необходимо следить, чтобы смещение было равномерным и соответствовало фаске и рисунку.</p>
  135 + <p>3. Закончив первый ряд, используйте остаток последней панели для начала укладки второго ряда. Вы можете также начать с отрезка панели, подогнанного по длине к рисунку декора или фаске покрытия.<br />
  136 + Введите гребень новой панели в паз первого элемента первого ряда, все последующие панели этого ряда соединяйте короткими сторонами, как описано выше, пока не уложите весь ряд. Теперь все короткие стороны панелей этого ряда подогнаны и соединены друг с другом. Слегка приподнимите первую панель (отрезок панели) ряда, соедините ее длинной стороной с соответствующей панелью первого ряда. Проделывайте то же самое с другими панелями второго ряда, пока не соедините весь второй ряд с первым. Следите за тем, чтобы при этом не сдвигались торцы коротких сторон панелей второго ряда.
  137 + </p>
  138 + <p>4. Продолжайте укладку покрытия, как описано выше - элемент за элементом, ряд за рядом.</p>
  139 + <p>5. Для того, чтобы уложить последний ряд, разместите подлежащий установке элемент точно на предпоследнем ряду. При помощи отрезка панели (ширина стыка + ширина зазора) можно перенести на укладываемый элемент контур стены с учетом планируемого зазора.</p>
  140 + </div>
  141 + <div class="tabs-content">
  142 + <ul class="gall-1">
  143 + <li class="col-xs-12 col-sm-4 col-md-4 col-lg-4" data-src="images/img_garbage/gallery/img-1.jpg">
  144 + <a href="">
  145 + <img class="img-responsive" src="images/img_garbage/gallery/collect-gal-min-1.jpg">
  146 + </a>
  147 + </li>
  148 + <li class="col-xs-12 col-sm-4 col-md-4 col-lg-4" data-src="images/img_garbage/gallery/img-2.jpg">
  149 + <a href="">
  150 + <img class="img-responsive" src="images/img_garbage/gallery/collect-gal-min-2.jpg">
  151 + </a>
  152 + </li>
  153 + <li class="col-xs-12 col-sm-4 col-md-4 col-lg-4" data-src="images/img_garbage/gallery/img-4.jpg">
  154 + <a href="">
  155 + <img class="img-responsive" src="images/img_garbage/gallery/collect-gal-min-3.jpg">
  156 + </a>
  157 + </li>
  158 + <li class="col-xs-12 col-sm-4 col-md-4 col-lg-4" data-src="images/img_garbage/gallery/img-3.jpg">
  159 + <a href="">
  160 + <img class="img-responsive" src="images/img_garbage/gallery/collect-gal-min-4.jpg">
  161 + </a>
  162 + </li>
  163 + </ul>
  164 + </div>
  165 + </div>
131 </div> 166 </div>
132 </div> 167 </div>
133 -  
134 -  
135 -  
136 -  
137 -  
138 -  
139 -  
140 </div> 168 </div>
141 </div> 169 </div>
142 170
backend/config/main.php
@@ -168,7 +168,7 @@ return [ @@ -168,7 +168,7 @@ return [
168 'product/manage/<action>' => 'product/manage/<action>', 168 'product/manage/<action>' => 'product/manage/<action>',
169 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'product/<controller>/<action>', 169 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'product/<controller>/<action>',
170 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/' => 'product/<controller>/<action>', 170 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/' => 'product/<controller>/<action>',
171 - 'product/<action>/<product_id:[A-Za-z0-9_-]+>' => 'product/<action>', 171 +// 'product/<action>/<product_id:[A-Za-z0-9_-]+>' => 'product/<action>',
172 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', 172 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>',
173 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', 173 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>',
174 ] 174 ]
backend/controllers/ArticlesController.php
@@ -113,6 +113,7 @@ class ArticlesController extends Controller @@ -113,6 +113,7 @@ class ArticlesController extends Controller
113 $model = $this->findModel($id); 113 $model = $this->findModel($id);
114 114
115 if ($model->load(Yii::$app->request->post())) { 115 if ($model->load(Yii::$app->request->post())) {
  116 +
116 if ( ($image = UploadedFile::getInstance($model, 'image')) ) { 117 if ( ($image = UploadedFile::getInstance($model, 'image')) ) {
117 $model->image = $image->name; 118 $model->image = $image->name;
118 } 119 }
backend/controllers/CommentController.php deleted
1 -<?php  
2 -  
3 -namespace backend\controllers;  
4 -  
5 -use developeruz\db_rbac\behaviors\AccessBehavior;  
6 -use Yii;  
7 -use common\modules\comment\models\Comment;  
8 -use backend\models\CommentSearch;  
9 -use yii\web\Controller;  
10 -use yii\web\NotFoundHttpException;  
11 -use yii\filters\VerbFilter;  
12 -  
13 -/**  
14 - * CommentController implements the CRUD actions for Comment model.  
15 - */  
16 -class CommentController extends Controller  
17 -{  
18 - /**  
19 - * @inheritdoc  
20 - */  
21 - public function behaviors()  
22 - {  
23 - return [  
24 - 'access'=>[  
25 - 'class' => AccessBehavior::className(),  
26 - 'rules' =>  
27 - ['site' =>  
28 - [  
29 - [  
30 - 'actions' => ['login', 'error'],  
31 - 'allow' => true,  
32 - ]  
33 - ]  
34 - ]  
35 - ],  
36 - 'verbs' => [  
37 - 'class' => VerbFilter::className(),  
38 - 'actions' => [  
39 - 'delete' => ['POST'],  
40 - ],  
41 - ],  
42 - ];  
43 - }  
44 -  
45 - /**  
46 - * Lists all Comment models.  
47 - * @return mixed  
48 - */  
49 - public function actionIndex()  
50 - {  
51 - $searchModel = new CommentSearch();  
52 - $dataProvider = $searchModel->search(Yii::$app->request->queryParams);  
53 - $query = $dataProvider->query;  
54 - $query->with(['rating', 'user']);  
55 - $sort = $dataProvider->sort;  
56 - $sort->defaultOrder = [  
57 - 'status' => SORT_ASC,  
58 - ];  
59 -  
60 - return $this->render('index', [  
61 - 'searchModel' => $searchModel,  
62 - 'dataProvider' => $dataProvider,  
63 - ]);  
64 - }  
65 -  
66 - /**  
67 - * Displays a single Comment model.  
68 - * @param integer $id  
69 - * @return mixed  
70 - */  
71 -// public function actionView($id)  
72 -// {  
73 -// return $this->render('view', [  
74 -// 'model' => $this->findModel($id),  
75 -// ]);  
76 -// }  
77 -  
78 - /**  
79 - * Creates a new Comment model.  
80 - * If creation is successful, the browser will be redirected to the 'view' page.  
81 - * @return mixed  
82 - */  
83 -// public function actionCreate()  
84 -// {  
85 -// $model = new Comment();  
86 -//  
87 -// if ($model->load(Yii::$app->request->post()) && $model->save()) {  
88 -// return $this->redirect(['view', 'id' => $model->comment_id]);  
89 -// } else {  
90 -// return $this->render('create', [  
91 -// 'model' => $model,  
92 -// ]);  
93 -// }  
94 -// }  
95 -  
96 - /**  
97 - * Updates an existing Comment model.  
98 - * If update is successful, the browser will be redirected to the 'view' page.  
99 - * @param integer $id  
100 - * @return mixed  
101 - */  
102 - public function actionUpdate($id)  
103 - {  
104 - $model = $this->findModel($id);  
105 -  
106 - if ($model->load(Yii::$app->request->post()) && $model->save()) {  
107 - return $this->redirect(['view', 'id' => $model->comment_id]);  
108 - } else {  
109 - return $this->render('update', [  
110 - 'model' => $model,  
111 - ]);  
112 - }  
113 - }  
114 -  
115 - public function actionApprove($id) {  
116 - $model = $this->findModel($id);  
117 - $model->status = Comment::STATUS_ACTIVE;  
118 - $model->save(false);  
119 -  
120 - return $this->redirect(['index']);  
121 - }  
122 -  
123 - public function actionDisapprove($id) {  
124 - $model = $this->findModel($id);  
125 - $model->status = Comment::STATUS_HIDDEN;  
126 - $model->save(false);  
127 -  
128 - return $this->redirect(['index']);  
129 - }  
130 -  
131 - /**  
132 - * Deletes an existing Comment model.  
133 - * If deletion is successful, the browser will be redirected to the 'index' page.  
134 - * @param integer $id  
135 - * @return mixed  
136 - */  
137 - public function actionDelete($id)  
138 - {  
139 - $this->findModel($id)->delete();  
140 -  
141 - return $this->redirect(['index']);  
142 - }  
143 -  
144 - /**  
145 - * Finds the Comment model based on its primary key value.  
146 - * If the model is not found, a 404 HTTP exception will be thrown.  
147 - * @param integer $id  
148 - * @return Comment the loaded model  
149 - * @throws NotFoundHttpException if the model cannot be found  
150 - */  
151 - protected function findModel($id)  
152 - {  
153 - if (($model = Comment::findOne($id)) !== null) {  
154 - return $model;  
155 - } else {  
156 - throw new NotFoundHttpException('The requested page does not exist.');  
157 - }  
158 - }  
159 -}  
backend/controllers/BlogController.php renamed to backend/controllers/ProjectController.php
1 -<?php  
2 -  
3 -namespace backend\controllers;  
4 -use developeruz\db_rbac\behaviors\AccessBehavior;  
5 -use common\models\Fields;  
6 -use Yii;  
7 -use common\models\Blog;  
8 -use common\models\BlogSearch;  
9 -use yii\web\Controller;  
10 -use yii\web\NotFoundHttpException;  
11 -use yii\filters\VerbFilter;  
12 -use yii\filters\AccessControl;  
13 -/**  
14 - * BlogController implements the CRUD actions for Blog model.  
15 - */  
16 -class BlogController extends Controller  
17 -{  
18 -  
19 - /**  
20 - * @inheritdoc  
21 - */  
22 - public function behaviors()  
23 - {  
24 - return [  
25 - 'access'=>[  
26 - 'class' => AccessBehavior::className(),  
27 - 'rules' =>  
28 - ['site' =>  
29 - [  
30 - [  
31 - 'actions' => ['login', 'error'],  
32 - 'allow' => true,  
33 - ]  
34 - ]  
35 - ]  
36 - ],  
37 - 'verbs' => [  
38 - 'class' => VerbFilter::className(),  
39 - 'actions' => [  
40 - 'logout' => ['post'],  
41 - ],  
42 - ],  
43 - ];  
44 - }  
45 -  
46 - /**  
47 - * Lists all Blog models.  
48 - * @return mixed  
49 - */  
50 - public function actionIndex()  
51 - {  
52 - $searchModel = new BlogSearch();  
53 - $dataProvider = $searchModel->search(Yii::$app->request->queryParams);  
54 -  
55 - return $this->render('index', [  
56 - 'searchModel' => $searchModel,  
57 - 'dataProvider' => $dataProvider,  
58 - ]);  
59 - }  
60 -  
61 - /**  
62 - * Displays a single Blog model.  
63 - * @param integer $id  
64 - * @return mixed  
65 - */  
66 - public function actionView($id)  
67 - {  
68 - return $this->render('view', [  
69 - 'model' => $this->findModel($id),  
70 - ]);  
71 - }  
72 -  
73 - /**  
74 - * Creates a new Blog model.  
75 - * If creation is successful, the browser will be redirected to the 'view' page.  
76 - * @return mixed  
77 - */  
78 - public function actionCreate()  
79 - {  
80 - $model = new Blog();  
81 -  
82 - if ($model->load(Yii::$app->request->post())) {  
83 -  
84 - Fields::saveFieldData(Yii::$app->request->post('Fields'), $model->blog_id, Blog::className(), 'ru');  
85 -  
86 - if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) {  
87 - $model->cover = $image->name;  
88 - }  
89 -  
90 - if ($model->save() && $image) {  
91 - $image->saveAs(Yii::getAlias('@imagesDir/articles/' . $image->name));  
92 - }  
93 -  
94 - return $this->redirect(['view', 'id' => $model->blog_id]);  
95 - } else {  
96 - return $this->render('create', [  
97 - 'model' => $model,  
98 - ]);  
99 - }  
100 - }  
101 -  
102 - /**  
103 - * Updates an existing Blog model.  
104 - * If update is successful, the browser will be redirected to the 'view' page.  
105 - * @param integer $id  
106 - * @return mixed  
107 - */  
108 - public function actionUpdate($id)  
109 - {  
110 - $model = $this->findModel($id);  
111 -  
112 - if ($model->load(Yii::$app->request->post())) {  
113 -  
114 - Fields::saveFieldData(Yii::$app->request->post('Fields'), $model->blog_id, Blog::className(), 'ru');  
115 -  
116 - if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) {  
117 - $model->cover = $image->name;  
118 - }  
119 -  
120 - if ($model->save() && $image) {  
121 - $image->saveAs(Yii::getAlias('@imagesDir/articles/' . $image->name));  
122 - }  
123 -  
124 - return $this->redirect(['view', 'id' => $model->blog_id]);  
125 - } else {  
126 - return $this->render('update', [  
127 - 'model' => $model,  
128 - ]);  
129 - }  
130 - }  
131 -  
132 - /**  
133 - * Deletes an existing Blog model.  
134 - * If deletion is successful, the browser will be redirected to the 'index' page.  
135 - * @param integer $id  
136 - * @return mixed  
137 - */  
138 - public function actionDelete($id)  
139 - {  
140 - $this->findModel($id)->delete();  
141 -  
142 - return $this->redirect(['index']);  
143 - }  
144 -  
145 - /**  
146 - * Finds the Blog model based on its primary key value.  
147 - * If the model is not found, a 404 HTTP exception will be thrown.  
148 - * @param integer $id  
149 - * @return Blog the loaded model  
150 - * @throws NotFoundHttpException if the model cannot be found  
151 - */  
152 - protected function findModel($id)  
153 - {  
154 - if (($model = Blog::findOne($id)) !== null) {  
155 - return $model;  
156 - } else {  
157 - throw new NotFoundHttpException('The requested page does not exist.');  
158 - }  
159 - }  
160 -} 1 +<?php
  2 +
  3 +namespace backend\controllers;
  4 +
  5 +use common\models\Project;
  6 +use common\models\ProjectImage;
  7 +use common\models\ProjectSearch;
  8 +use Yii;
  9 +use yii\web\Controller;
  10 +use yii\web\NotFoundHttpException;
  11 +use yii\filters\VerbFilter;
  12 +use developeruz\db_rbac\behaviors\AccessBehavior;
  13 +use yii\web\UploadedFile;
  14 +
  15 +/**
  16 + * ProjectController implements the CRUD actions for Project model.
  17 + */
  18 +class ProjectController extends Controller
  19 +{
  20 + /**
  21 + * @inheritdoc
  22 + */
  23 + public function behaviors()
  24 + {
  25 + return [
  26 + 'access'=>[
  27 + 'class' => AccessBehavior::className(),
  28 + 'rules' =>
  29 + ['site' =>
  30 + [
  31 + [
  32 + 'actions' => ['login', 'error'],
  33 + 'allow' => true,
  34 + ]
  35 + ]
  36 + ]
  37 + ],
  38 + 'verbs' => [
  39 + 'class' => VerbFilter::className(),
  40 + 'actions' => [
  41 + 'delete' => ['POST'],
  42 + ],
  43 + ],
  44 + ];
  45 + }
  46 +
  47 + /**
  48 + * Lists all Project models.
  49 + * @return mixed
  50 + */
  51 + public function actionIndex()
  52 + {
  53 + $searchModel = new ProjectSearch();
  54 + $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  55 +
  56 + return $this->render('index', [
  57 + 'searchModel' => $searchModel,
  58 + 'dataProvider' => $dataProvider,
  59 + ]);
  60 + }
  61 +
  62 + /**
  63 + * Displays a single Project model.
  64 + * @param integer $id
  65 + * @return mixed
  66 + */
  67 + public function actionView($id)
  68 + {
  69 + return $this->render('view', [
  70 + 'model' => $this->findModel($id),
  71 + ]);
  72 + }
  73 +
  74 + /**
  75 + * Creates a new Project model.
  76 + * If creation is successful, the browser will be redirected to the 'view' page.
  77 + * @return mixed
  78 + */
  79 + public function actionCreate()
  80 + {
  81 + $model = new Project();
  82 + if ($model->load(Yii::$app->request->post())) {
  83 + $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');
  84 + if ($model->save()) {
  85 + if ($model->imagesUpload && (($images = $model->imagesUpload()) !== FALSE)) {
  86 + foreach ($images as $image) {
  87 + $imageModel = new ProjectImage();
  88 + $imageModel->project_id = $model->project_id;
  89 + $imageModel->image = $image;
  90 + $imageModel->save();
  91 + }
  92 + }
  93 + return $this->redirect(['view', 'id' => $model->project_id]);
  94 + }
  95 + }
  96 + return $this->render('create', [
  97 + 'model' => $model,
  98 + ]);
  99 + }
  100 +
  101 + /**
  102 + * Updates an existing Project model.
  103 + * If update is successful, the browser will be redirected to the 'view' page.
  104 + * @param integer $id
  105 + * @return mixed
  106 + */
  107 + public function actionUpdate($id)
  108 + {
  109 + $model = $this->findModel($id);
  110 + if ($model->load(Yii::$app->request->post())) {
  111 + $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');
  112 + if ($model->save()) {
  113 + if ($model->imagesUpload && (($images = $model->imagesUpload()) !== FALSE)) {
  114 + foreach ($images as $image) {
  115 + $imageModel = new ProjectImage();
  116 + $imageModel->project_id = $model->project_id;
  117 + $imageModel->image = $image;
  118 + $imageModel->save();
  119 + }
  120 + }
  121 + return $this->redirect(['view', 'id' => $model->project_id]);
  122 + }
  123 + }
  124 + return $this->render('update', [
  125 + 'model' => $model,
  126 + ]);
  127 + }
  128 +
  129 + /**
  130 + * Deletes an existing Project model.
  131 + * If deletion is successful, the browser will be redirected to the 'index' page.
  132 + * @param integer $id
  133 + * @return mixed
  134 + */
  135 + public function actionDelete($id)
  136 + {
  137 + $this->findModel($id)->delete();
  138 +
  139 + return $this->redirect(['index']);
  140 + }
  141 +
  142 + public function actionDelimg($id) {
  143 + $model = ProjectImage::findOne($id);
  144 + if(empty($model)) {
  145 + throw new NotFoundHttpException();
  146 + }
  147 + $model->delete();
  148 + return '1';
  149 + }
  150 +
  151 + /**
  152 + * Finds the Project model based on its primary key value.
  153 + * If the model is not found, a 404 HTTP exception will be thrown.
  154 + * @param integer $id
  155 + * @return Project the loaded model
  156 + * @throws NotFoundHttpException if the model cannot be found
  157 + */
  158 + protected function findModel($id)
  159 + {
  160 + if (($model = Project::findOne($id)) !== null) {
  161 + return $model;
  162 + } else {
  163 + throw new NotFoundHttpException('The requested page does not exist.');
  164 + }
  165 + }
  166 +}
backend/controllers/SiteController.php
1 <?php 1 <?php
2 namespace backend\controllers; 2 namespace backend\controllers;
3 use common\modules\product\models\ProductImage; 3 use common\modules\product\models\ProductImage;
4 -use developeruz\db_rbac\behaviors\AccessBehavior;  
5 use common\modules\product\models\Brand; 4 use common\modules\product\models\Brand;
6 use common\modules\product\models\Category; 5 use common\modules\product\models\Category;
7 use common\modules\product\models\Product; 6 use common\modules\product\models\Product;
8 use common\modules\product\models\ProductVariant; 7 use common\modules\product\models\ProductVariant;
9 -use common\modules\product\models\ProductVariantType;  
10 use Yii; 8 use Yii;
11 -use yii\filters\AccessControl;  
12 use yii\helpers\Url; 9 use yii\helpers\Url;
13 use yii\web\Controller; 10 use yii\web\Controller;
14 use backend\models\LoginForm; 11 use backend\models\LoginForm;
15 use yii\filters\VerbFilter; 12 use yii\filters\VerbFilter;
16 -use common\models\Blog;  
17 /** 13 /**
18 * Site controller 14 * Site controller
19 */ 15 */
@@ -70,14 +66,7 @@ class SiteController extends Controller @@ -70,14 +66,7 @@ class SiteController extends Controller
70 66
71 public function actionIndex() 67 public function actionIndex()
72 { 68 {
73 - $blog = new Blog();  
74 - $post = \Yii::$app->request->post();  
75 - if($blog->load($post)) {  
76 - $blog->save();  
77 - }  
78 - return $this->render('index',[  
79 - 'blog' => $blog  
80 - ]); 69 + return $this->render('index');
81 } 70 }
82 71
83 public function actionLogin() 72 public function actionLogin()
@@ -307,25 +296,6 @@ class SiteController extends Controller @@ -307,25 +296,6 @@ class SiteController extends Controller
307 $resizeObj->resizeImage (370, 370, 'auto'); 296 $resizeObj->resizeImage (370, 370, 'auto');
308 $resizeObj->saveImage ($dir.'/big/' . $mod_image, 100); 297 $resizeObj->saveImage ($dir.'/big/' . $mod_image, 100);
309 } 298 }
310 -  
311 - $product_variant_type_name = '';  
312 - if (! empty ($mod_color))  
313 - $product_variant_type_name = 'Цвет';  
314 - elseif (! empty ($mod_size))  
315 - $product_variant_type_name = 'Размер';  
316 -  
317 - // ===== Set variant type ====  
318 - if ( $product_variant_type_name ) {  
319 - if ( ($product_variant_type = ProductVariantType::find()->filterWhere(['ilike', 'name', $product_variant_type_name])->one()) !== null ) {  
320 - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id;  
321 - } else {  
322 - // Create brand  
323 - $product_variant_type = new ProductVariantType();  
324 - $product_variant_type->name = $product_variant_type_name;  
325 - $product_variant_type->save();  
326 - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id;  
327 - }  
328 - }  
329 } 299 }
330 } 300 }
331 301
backend/models/CommentSearch.php deleted
1 -<?php  
2 -  
3 -namespace backend\models;  
4 -  
5 -use Yii;  
6 -use yii\base\Model;  
7 -use yii\data\ActiveDataProvider;  
8 -use common\modules\comment\models\Comment;  
9 -  
10 -/**  
11 - * CommentSearch represents the model behind the search form about `common\modules\comment\models\Comment`.  
12 - */  
13 -class CommentSearch extends Comment  
14 -{  
15 - /**  
16 - * @inheritdoc  
17 - */  
18 - public function rules()  
19 - {  
20 - return [  
21 - [['comment_id', 'user_id', 'comment_pid', 'status', 'model_id'], 'integer'],  
22 - [['text', 'user_name', 'user_email', 'date_add', 'date_update', 'date_delete', 'model'], 'safe'],  
23 - ];  
24 - }  
25 -  
26 - /**  
27 - * @inheritdoc  
28 - */  
29 - public function scenarios()  
30 - {  
31 - // bypass scenarios() implementation in the parent class  
32 - return Model::scenarios();  
33 - }  
34 -  
35 - /**  
36 - * Creates data provider instance with search query applied  
37 - *  
38 - * @param array $params  
39 - *  
40 - * @return ActiveDataProvider  
41 - */  
42 - public function search($params)  
43 - {  
44 - $query = Comment::find();  
45 -  
46 - // add conditions that should always apply here  
47 -  
48 - $dataProvider = new ActiveDataProvider([  
49 - 'query' => $query,  
50 - ]);  
51 -  
52 - $this->load($params);  
53 -  
54 - if (!$this->validate()) {  
55 - // uncomment the following line if you do not want to return any records when validation fails  
56 - // $query->where('0=1');  
57 - return $dataProvider;  
58 - }  
59 -  
60 - // grid filtering conditions  
61 - $query->andFilterWhere([  
62 - 'comment_id' => $this->comment_id,  
63 - 'user_id' => $this->user_id,  
64 - 'comment_pid' => $this->comment_pid,  
65 - 'status' => $this->status,  
66 - 'date_add' => $this->date_add,  
67 - 'date_update' => $this->date_update,  
68 - 'date_delete' => $this->date_delete,  
69 - 'model_id' => $this->model_id,  
70 - ]);  
71 -  
72 - $query->andFilterWhere(['like', 'text', $this->text])  
73 - ->andFilterWhere(['like', 'user_name', $this->user_name])  
74 - ->andFilterWhere(['like', 'user_email', $this->user_email])  
75 - ->andFilterWhere(['like', 'model', $this->model]);  
76 -  
77 - return $dataProvider;  
78 - }  
79 -}  
backend/models/Label.php
1 <?php 1 <?php
2 2
3 namespace backend\models; 3 namespace backend\models;
4 -use Yii;  
5 -  
6 4
7 class Label extends \yii\db\ActiveRecord 5 class Label extends \yii\db\ActiveRecord
8 { 6 {
@@ -11,15 +9,8 @@ class Label extends \yii\db\ActiveRecord @@ -11,15 +9,8 @@ class Label extends \yii\db\ActiveRecord
11 { 9 {
12 return 'orders_label'; 10 return 'orders_label';
13 } 11 }
14 -  
15 - 12 +
16 public function getNl(){ 13 public function getNl(){
17 return $this->name; 14 return $this->name;
18 - }  
19 -  
20 -  
21 -  
22 -  
23 -  
24 - 15 + }
25 } 16 }
backend/models/Orders.php
1 <?php 1 <?php
2 -  
3 -namespace backend\models;  
4 -use common\models\Customer;  
5 -use Yii;  
6 -  
7 -class Orders extends \yii\db\ActiveRecord  
8 -{  
9 - public $labels;  
10 - public static function tableName() 2 +
  3 + namespace backend\models;
  4 +
  5 + use common\models\Customer;
  6 +
  7 + class Orders extends \yii\db\ActiveRecord
11 { 8 {
12 - return 'orders';  
13 - }  
14 -  
15 - public function rules()  
16 - {  
17 - return [  
18 - [['name'], 'required'],  
19 - [['user_id','adress','body','total','status','email',  
20 - 'comment','labels','pay','date_dedline','phone','phone2','numbercard','delivery',  
21 - 'declaration','stock','consignment','payment', 'insurance',  
22 - 'amount_imposed','shipping_by','city','date_time', 'id' ], 'safe'],  
23 - //[['image'], 'file', 'extensions'=>'jpg, gif, png', 'skipOnEmpty'=>true],  
24 - ];  
25 - }  
26 -  
27 - public function attributeLabels()  
28 - {  
29 - return [  
30 - 'id'=>'№ заказа',  
31 - 'name'=>'ФИО',  
32 - 'phone'=>'Телефон',  
33 - 'phone2'=>'Телефон 2',  
34 - 'adress'=>'Адрес',  
35 - 'body'=>'Сообщение',  
36 - 'reserve'=>'Резерв',  
37 - 'status'=>'Статус',  
38 - 'email'=>'E-mail',  
39 - 'total'=>'Сумма',  
40 - 'labels'=>'Метки',  
41 - 'label'=>'Метка',  
42 - 'comment'=>'Комментарий менеджера',  
43 - 'date_dedline'=>'Дедлайн',  
44 - 'numbercard'=>'№ карточки',  
45 - 'delivery'=>'Доставка',  
46 - 'declaration'=>'Декларация №',  
47 - 'stock'=>'№ склада',  
48 - 'consignment'=>'№ накладной',  
49 - 'payment'=>'Способ оплаты',  
50 - 'insurance'=>'Страховка',  
51 - 'amount_imposed'=>'Сумма наложенного',  
52 - 'shipping_by'=>'Отправка за счет',  
53 - 'city'=>'Город'  
54 - ];  
55 - }  
56 9
57 - public function beforeSave($insert) {  
58 - return parent::beforeSave($insert);  
59 - } 10 + public $labels;
60 11
61 - public function beforeDelete() {  
62 - return parent::beforeDelete(); 12 + public static function tableName()
  13 + {
  14 + return 'orders';
63 } 15 }
64 16
65 - public function getUser()  
66 - {  
67 - return $this->hasOne(Customer::className(), ['id' => 'user_id']); 17 + public function rules()
  18 + {
  19 + return [
  20 + [
  21 + [ 'name' ],
  22 + 'required',
  23 + ],
  24 + [
  25 + [
  26 + 'user_id',
  27 + 'adress',
  28 + 'body',
  29 + 'total',
  30 + 'status',
  31 + 'email',
  32 + 'comment',
  33 + 'labels',
  34 + 'pay',
  35 + 'date_dedline',
  36 + 'phone',
  37 + 'phone2',
  38 + 'numbercard',
  39 + 'delivery',
  40 + 'declaration',
  41 + 'stock',
  42 + 'consignment',
  43 + 'payment',
  44 + 'insurance',
  45 + 'amount_imposed',
  46 + 'shipping_by',
  47 + 'city',
  48 + 'date_time',
  49 + 'id',
  50 + ],
  51 + 'safe',
  52 + ],
  53 + ];
  54 + }
  55 +
  56 + public function attributeLabels()
  57 + {
  58 + return [
  59 + 'id' => '№ заказа',
  60 + 'name' => 'ФИО',
  61 + 'phone' => 'Телефон',
  62 + 'phone2' => 'Телефон 2',
  63 + 'adress' => 'Адрес',
  64 + 'body' => 'Сообщение',
  65 + 'reserve' => 'Резерв',
  66 + 'status' => 'Статус',
  67 + 'email' => 'E-mail',
  68 + 'total' => 'Сумма',
  69 + 'labels' => 'Метки',
  70 + 'label' => 'Метка',
  71 + 'comment' => 'Комментарий менеджера',
  72 + 'date_dedline' => 'Дедлайн',
  73 + 'numbercard' => '№ карточки',
  74 + 'delivery' => 'Доставка',
  75 + 'declaration' => 'Декларация №',
  76 + 'stock' => '№ склада',
  77 + 'consignment' => '№ накладной',
  78 + 'payment' => 'Способ оплаты',
  79 + 'insurance' => 'Страховка',
  80 + 'amount_imposed' => 'Сумма наложенного',
  81 + 'shipping_by' => 'Отправка за счет',
  82 + 'city' => 'Город',
  83 + ];
68 } 84 }
69 85
70 - 86 + public function getUser()
  87 + {
  88 + return $this->hasOne(Customer::className(), [ 'id' => 'user_id' ]);
  89 + }
71 90
72 -}  
73 \ No newline at end of file 91 \ No newline at end of file
  92 + }
74 \ No newline at end of file 93 \ No newline at end of file
backend/models/OrdersProducts.php
1 <?php 1 <?php
2 -  
3 -namespace backend\models;  
4 -use common\modules\product\models\ProductVariant;  
5 -use Yii;  
6 -  
7 -class OrdersProducts extends \yii\db\ActiveRecord  
8 -{  
9 2
10 - public static function tableName()  
11 - {  
12 - return 'orders_products';  
13 - } 3 + namespace backend\models;
14 4
15 - public function rules()  
16 - {  
17 - return [  
18 - [['sku','count','order_id'], 'required'],  
19 - ];  
20 - } 5 + use common\modules\product\models\ProductVariant;
21 6
22 - public function attributeLabels()  
23 - {  
24 - return [  
25 - 'product_name'=>'Продукт',  
26 - 'name'=>'Вид',  
27 - 'art'=>'Артикул',  
28 - 'cost'=>'Цена за один',  
29 - 'count'=>'Кол.',  
30 - 'sum_cost'=>'Сумма',  
31 - ];  
32 - }  
33 -  
34 - public function getMod()  
35 - {  
36 - return $this->hasOne(ProductVariant::className(), ['product_variant_id' => 'mod_id']);  
37 - }  
38 -}  
39 \ No newline at end of file 7 \ No newline at end of file
  8 + class OrdersProducts extends \yii\db\ActiveRecord
  9 + {
  10 +
  11 + public static function tableName()
  12 + {
  13 + return 'orders_products';
  14 + }
  15 +
  16 + public function rules()
  17 + {
  18 + return [
  19 + [
  20 + [
  21 + 'sku',
  22 + 'count',
  23 + 'order_id',
  24 + ],
  25 + 'required',
  26 + ],
  27 + ];
  28 + }
  29 +
  30 + public function attributeLabels()
  31 + {
  32 + return [
  33 + 'product_name' => 'Продукт',
  34 + 'name' => 'Вид',
  35 + 'art' => 'Артикул',
  36 + 'cost' => 'Цена за один',
  37 + 'count' => 'Кол.',
  38 + 'sum_cost' => 'Сумма',
  39 + ];
  40 + }
  41 +
  42 + public function getMod()
  43 + {
  44 + return $this->hasOne(ProductVariant::className(), [ 'product_variant_id' => 'mod_id' ]);
  45 + }
  46 + }
40 \ No newline at end of file 47 \ No newline at end of file
backend/models/OrdersSearch.php
@@ -2,10 +2,8 @@ @@ -2,10 +2,8 @@
2 2
3 namespace backend\models; 3 namespace backend\models;
4 4
5 -use Yii;  
6 use yii\base\Model; 5 use yii\base\Model;
7 use yii\data\ActiveDataProvider; 6 use yii\data\ActiveDataProvider;
8 -use backend\models\Orders;  
9 7
10 /** 8 /**
11 * OrdersSearch represents the model behind the search form about `backend\models\Orders`. 9 * OrdersSearch represents the model behind the search form about `backend\models\Orders`.
backend/models/User.php
1 <?php 1 <?php
2 -  
3 -namespace backend\models;  
4 -  
5 -use developeruz\db_rbac\interfaces\UserRbacInterface;  
6 -use common\models\Share;  
7 -use common\modules\comment\models\Comment;  
8 -use common\modules\comment\models\Rating;  
9 -use yii\base\NotSupportedException;  
10 -use Yii;  
11 -use yii\behaviors\TimestampBehavior;  
12 -use yii\db\ActiveRecord;  
13 -use yii\web\IdentityInterface;  
14 -/**  
15 - * This is the model class for table "user".  
16 - *  
17 - * @property integer $id  
18 - * @property string $username  
19 - * @property string $auth_key  
20 - * @property string $password_hash  
21 - * @property string $password_reset_token  
22 - * @property string $email  
23 - * @property integer $status  
24 - * @property integer $created_at  
25 - * @property integer $updated_at  
26 - *  
27 - * @property Comment[] $comments  
28 - * @property Rating[] $ratings  
29 - * @property Share[] $shares  
30 - */  
31 -class User extends ActiveRecord implements UserRbacInterface, IdentityInterface  
32 -{  
33 -  
34 - const STATUS_DELETED = 0;  
35 - const STATUS_ACTIVE = 10;  
36 - public $password;  
37 - 2 +
  3 + namespace backend\models;
  4 +
  5 + use developeruz\db_rbac\interfaces\UserRbacInterface;
  6 + use common\models\Share;
  7 + use common\modules\comment\models\CommentModel;
  8 + use common\modules\comment\models\RatingModel;
  9 + use yii\base\NotSupportedException;
  10 + use Yii;
  11 + use yii\behaviors\TimestampBehavior;
  12 + use yii\db\ActiveRecord;
  13 + use yii\web\IdentityInterface;
  14 +
38 /** 15 /**
39 - * @inheritdoc 16 + * This is the model class for table "user".
  17 + * @property integer $id
  18 + * @property string $username
  19 + * @property string $auth_key
  20 + * @property string $password_hash
  21 + * @property string $password_reset_token
  22 + * @property string $email
  23 + * @property integer $status
  24 + * @property integer $created_at
  25 + * @property integer $updated_at
  26 + * @property CommentModel[] $comments
  27 + * @property RatingModel[] $ratings
  28 + * @property Share[] $shares
40 */ 29 */
41 - public static function tableName()  
42 - {  
43 - return 'user';  
44 - }  
45 -  
46 - /**  
47 - * @inheritdoc  
48 - */  
49 - public function rules()  
50 - {  
51 - return [  
52 - [['username', 'password', 'email'], 'required'],  
53 - [['status', 'created_at', 'updated_at'], 'integer'],  
54 - [['username', 'password_hash', 'password_reset_token', 'email'], 'string', 'max' => 255],  
55 - [['auth_key'], 'string', 'max' => 32],  
56 - [['password_reset_token'], 'unique'],  
57 - ['email', 'unique', 'targetClass' => '\backend\models\User', 'message' => Yii::t('app','message',[  
58 - 'field' => 'Email'  
59 - ])],  
60 - ];  
61 - }  
62 -  
63 -  
64 - /**  
65 - * @inheritdoc  
66 - */  
67 - public function behaviors()  
68 - {  
69 - return [  
70 - TimestampBehavior::className(),  
71 - [  
72 - 'class' => 'common\behaviors\ShowImage',  
73 - ],  
74 - ];  
75 - }  
76 -  
77 -  
78 - public function beforeSave($insert)  
79 - {  
80 - $this->setPassword($this->password);  
81 - $this->generateAuthKey();  
82 - return parent::beforeSave($insert);  
83 - }  
84 -  
85 -  
86 -  
87 - /**  
88 - * @inheritdoc  
89 - */  
90 - public function attributeLabels()  
91 - {  
92 - return [  
93 - 'id' => 'ID',  
94 - 'username' => 'Username',  
95 - 'auth_key' => 'Auth Key',  
96 - 'password_hash' => 'Password Hash',  
97 - 'password_reset_token' => 'Password Reset Token',  
98 - 'email' => 'Email',  
99 - 'status' => 'Status',  
100 - 'created_at' => 'Created At',  
101 - 'updated_at' => 'Updated At',  
102 - ];  
103 - }  
104 -  
105 -  
106 - /**  
107 - * Generates "remember me" authentication key  
108 - */  
109 - public function generateAuthKey()  
110 - {  
111 - $this->auth_key = Yii::$app->security->generateRandomString();  
112 - }  
113 -  
114 - /**  
115 - * Generates password hash from password and sets it to the model  
116 - *  
117 - * @param string $password  
118 - */  
119 - public function setPassword($password)  
120 - {  
121 - $this->password_hash = Yii::$app->security->generatePasswordHash($password);  
122 - }  
123 -  
124 -  
125 -  
126 -  
127 -  
128 - public function getRole(){  
129 - return !empty($this->id) ? \Yii::$app->authManager->getRolesByUser($this->id) : "";  
130 - }  
131 -  
132 - /**  
133 - * @inheritdoc  
134 - */  
135 - public function getId()  
136 - {  
137 - return $this->getPrimaryKey();  
138 - }  
139 -  
140 - /**  
141 - * @inheritdoc  
142 - */  
143 - public function getAuthKey()  
144 - {  
145 - return $this->auth_key;  
146 - }  
147 -  
148 - /**  
149 - * @inheritdoc  
150 - */  
151 - public function validateAuthKey($authKey)  
152 - {  
153 - return $this->getAuthKey() === $authKey;  
154 - }  
155 -  
156 -  
157 - /**  
158 - * @inheritdoc  
159 - */  
160 - public static function findIdentityByAccessToken($token, $type = null)  
161 - {  
162 - throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');  
163 - }  
164 -  
165 - /**  
166 - * @inheritdoc  
167 - */  
168 - public static function findIdentity($id)  
169 - {  
170 - return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);  
171 - }  
172 -  
173 - /**  
174 - * @return \yii\db\ActiveQuery  
175 - */  
176 - public function getComments()  
177 - {  
178 - return $this->hasMany(Comment::className(), ['user_id' => 'id']);  
179 - }  
180 -  
181 - /**  
182 - * @return \yii\db\ActiveQuery  
183 - */  
184 - public function getRatings()  
185 - {  
186 - return $this->hasMany(Rating::className(), ['user_id' => 'id']);  
187 - }  
188 -  
189 - /**  
190 - * @return \yii\db\ActiveQuery  
191 - */  
192 - public function getShares()  
193 - {  
194 - return $this->hasMany(Share::className(), ['user_id' => 'id']);  
195 - }  
196 -  
197 -  
198 - public function getUserName()  
199 - {  
200 - return $this->username; 30 + class User extends ActiveRecord implements UserRbacInterface, IdentityInterface
  31 + {
  32 +
  33 + const STATUS_DELETED = 0;
  34 + const STATUS_ACTIVE = 10;
  35 +
  36 + public $password;
  37 +
  38 + /**
  39 + * @inheritdoc
  40 + */
  41 + public static function tableName()
  42 + {
  43 + return 'user';
  44 + }
  45 +
  46 + /**
  47 + * @inheritdoc
  48 + */
  49 + public function rules()
  50 + {
  51 + return [
  52 + [
  53 + [
  54 + 'username',
  55 + 'password',
  56 + 'email',
  57 + ],
  58 + 'required',
  59 + ],
  60 + [
  61 + [
  62 + 'status',
  63 + 'created_at',
  64 + 'updated_at',
  65 + ],
  66 + 'integer',
  67 + ],
  68 + [
  69 + [
  70 + 'username',
  71 + 'password_hash',
  72 + 'password_reset_token',
  73 + 'email',
  74 + ],
  75 + 'string',
  76 + 'max' => 255,
  77 + ],
  78 + [
  79 + [ 'auth_key' ],
  80 + 'string',
  81 + 'max' => 32,
  82 + ],
  83 + [
  84 + [ 'password_reset_token' ],
  85 + 'unique',
  86 + ],
  87 + [
  88 + 'email',
  89 + 'unique',
  90 + 'targetClass' => '\backend\models\User',
  91 + 'message' => Yii::t('app', 'message', [
  92 + 'field' => 'Email',
  93 + ]),
  94 + ],
  95 + ];
  96 + }
  97 +
  98 + /**
  99 + * @inheritdoc
  100 + */
  101 + public function behaviors()
  102 + {
  103 + return [
  104 + TimestampBehavior::className(),
  105 + [
  106 + 'class' => 'common\behaviors\ShowImage',
  107 + ],
  108 + ];
  109 + }
  110 +
  111 + public function beforeSave($insert)
  112 + {
  113 + $this->setPassword($this->password);
  114 + $this->generateAuthKey();
  115 + return parent::beforeSave($insert);
  116 + }
  117 +
  118 + /**
  119 + * @inheritdoc
  120 + */
  121 + public function attributeLabels()
  122 + {
  123 + return [
  124 + 'id' => 'ID',
  125 + 'username' => 'Username',
  126 + 'auth_key' => 'Auth Key',
  127 + 'password_hash' => 'Password Hash',
  128 + 'password_reset_token' => 'Password Reset Token',
  129 + 'email' => 'Email',
  130 + 'status' => 'Status',
  131 + 'created_at' => 'Created At',
  132 + 'updated_at' => 'Updated At',
  133 + ];
  134 + }
  135 +
  136 + /**
  137 + * Generates "remember me" authentication key
  138 + */
  139 + public function generateAuthKey()
  140 + {
  141 + $this->auth_key = Yii::$app->security->generateRandomString();
  142 + }
  143 +
  144 + /**
  145 + * Generates password hash from password and sets it to the model
  146 + *
  147 + * @param string $password
  148 + */
  149 + public function setPassword($password)
  150 + {
  151 + $this->password_hash = Yii::$app->security->generatePasswordHash($password);
  152 + }
  153 +
  154 + public function getRole()
  155 + {
  156 + return !empty( $this->id ) ? \Yii::$app->authManager->getRolesByUser($this->id) : "";
  157 + }
  158 +
  159 + /**
  160 + * @inheritdoc
  161 + */
  162 + public function getId()
  163 + {
  164 + return $this->getPrimaryKey();
  165 + }
  166 +
  167 + /**
  168 + * @inheritdoc
  169 + */
  170 + public function getAuthKey()
  171 + {
  172 + return $this->auth_key;
  173 + }
  174 +
  175 + /**
  176 + * @inheritdoc
  177 + */
  178 + public function validateAuthKey($authKey)
  179 + {
  180 + return $this->getAuthKey() === $authKey;
  181 + }
  182 +
  183 + /**
  184 + * @inheritdoc
  185 + */
  186 + public static function findIdentityByAccessToken($token, $type = NULL)
  187 + {
  188 + throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
  189 + }
  190 +
  191 + /**
  192 + * @inheritdoc
  193 + */
  194 + public static function findIdentity($id)
  195 + {
  196 + return static::findOne([
  197 + 'id' => $id,
  198 + 'status' => self::STATUS_ACTIVE,
  199 + ]);
  200 + }
  201 +
  202 + /**
  203 + * @return \yii\db\ActiveQuery
  204 + */
  205 + public function getComments()
  206 + {
  207 + return $this->hasMany(CommentModel::className(), [ 'user_id' => 'id' ]);
  208 + }
  209 +
  210 + /**
  211 + * @return \yii\db\ActiveQuery
  212 + */
  213 + public function getRatings()
  214 + {
  215 + return $this->hasMany(RatingModel::className(), [ 'user_id' => 'id' ]);
  216 + }
  217 +
  218 + /**
  219 + * @return \yii\db\ActiveQuery
  220 + */
  221 + public function getShares()
  222 + {
  223 + return $this->hasMany(Share::className(), [ 'user_id' => 'id' ]);
  224 + }
  225 +
  226 + public function getUserName()
  227 + {
  228 + return $this->username;
  229 + }
  230 +
201 } 231 }
202 -  
203 -  
204 -}  
backend/models/UserSearch.php
1 <?php 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\User;  
9 -  
10 -/**  
11 - * UserSearch represents the model behind the search form about `backend\models\User`.  
12 - */  
13 -class UserSearch extends User  
14 -{ 2 +
  3 + namespace backend\models;
  4 +
  5 + use yii\base\Model;
  6 + use yii\data\ActiveDataProvider;
  7 +
15 /** 8 /**
16 - * @inheritdoc 9 + * UserSearch represents the model behind the search form about `backend\models\User`.
17 */ 10 */
18 - public function rules() 11 + class UserSearch extends User
19 { 12 {
20 - return [  
21 - [['id', 'status', 'created_at', 'updated_at'], 'integer'],  
22 - [['username', 'auth_key', 'password_hash', 'password_reset_token', 'email'], 'safe'],  
23 - ];  
24 - }  
25 -  
26 - /**  
27 - * @inheritdoc  
28 - */  
29 - public function scenarios()  
30 - {  
31 - // bypass scenarios() implementation in the parent class  
32 - return Model::scenarios();  
33 - }  
34 -  
35 - /**  
36 - * Creates data provider instance with search query applied  
37 - *  
38 - * @param array $params  
39 - *  
40 - * @return ActiveDataProvider  
41 - */  
42 - public function search($params)  
43 - {  
44 - $query = User::find();  
45 -  
46 - // add conditions that should always apply here  
47 -  
48 - $dataProvider = new ActiveDataProvider([  
49 - 'query' => $query,  
50 - ]);  
51 -  
52 - $this->load($params);  
53 -  
54 - if (!$this->validate()) {  
55 - // uncomment the following line if you do not want to return any records when validation fails  
56 - // $query->where('0=1'); 13 +
  14 + /**
  15 + * @inheritdoc
  16 + */
  17 + public function rules()
  18 + {
  19 + return [
  20 + [
  21 + [
  22 + 'id',
  23 + 'status',
  24 + 'created_at',
  25 + 'updated_at',
  26 + ],
  27 + 'integer',
  28 + ],
  29 + [
  30 + [
  31 + 'username',
  32 + 'auth_key',
  33 + 'password_hash',
  34 + 'password_reset_token',
  35 + 'email',
  36 + ],
  37 + 'safe',
  38 + ],
  39 + ];
  40 + }
  41 +
  42 + /**
  43 + * @inheritdoc
  44 + */
  45 + public function scenarios()
  46 + {
  47 + // bypass scenarios() implementation in the parent class
  48 + return Model::scenarios();
  49 + }
  50 +
  51 + /**
  52 + * Creates data provider instance with search query applied
  53 + *
  54 + * @param array $params
  55 + *
  56 + * @return ActiveDataProvider
  57 + */
  58 + public function search($params)
  59 + {
  60 + $query = User::find();
  61 +
  62 + // add conditions that should always apply here
  63 +
  64 + $dataProvider = new ActiveDataProvider([
  65 + 'query' => $query,
  66 + ]);
  67 +
  68 + $this->load($params);
  69 +
  70 + if(!$this->validate()) {
  71 + // uncomment the following line if you do not want to return any records when validation fails
  72 + // $query->where('0=1');
  73 + return $dataProvider;
  74 + }
  75 +
  76 + // grid filtering conditions
  77 + $query->andFilterWhere([
  78 + 'id' => $this->id,
  79 + 'status' => $this->status,
  80 + 'created_at' => $this->created_at,
  81 + 'updated_at' => $this->updated_at,
  82 + ]);
  83 +
  84 + $query->andFilterWhere([
  85 + 'like',
  86 + 'username',
  87 + $this->username,
  88 + ])
  89 + ->andFilterWhere([
  90 + 'like',
  91 + 'auth_key',
  92 + $this->auth_key,
  93 + ])
  94 + ->andFilterWhere([
  95 + 'like',
  96 + 'password_hash',
  97 + $this->password_hash,
  98 + ])
  99 + ->andFilterWhere([
  100 + 'like',
  101 + 'password_reset_token',
  102 + $this->password_reset_token,
  103 + ])
  104 + ->andFilterWhere([
  105 + 'like',
  106 + 'email',
  107 + $this->email,
  108 + ]);
  109 +
57 return $dataProvider; 110 return $dataProvider;
58 } 111 }
59 -  
60 - // grid filtering conditions  
61 - $query->andFilterWhere([  
62 - 'id' => $this->id,  
63 - 'status' => $this->status,  
64 - 'created_at' => $this->created_at,  
65 - 'updated_at' => $this->updated_at,  
66 - ]);  
67 -  
68 - $query->andFilterWhere(['like', 'username', $this->username])  
69 - ->andFilterWhere(['like', 'auth_key', $this->auth_key])  
70 - ->andFilterWhere(['like', 'password_hash', $this->password_hash])  
71 - ->andFilterWhere(['like', 'password_reset_token', $this->password_reset_token])  
72 - ->andFilterWhere(['like', 'email', $this->email]);  
73 -  
74 - return $dataProvider;  
75 } 112 }
76 -}  
backend/views/articles/_form.php
@@ -21,8 +21,7 @@ use yii\jui\DatePicker; @@ -21,8 +21,7 @@ use yii\jui\DatePicker;
21 21
22 <?= $form->field($model, 'date') 22 <?= $form->field($model, 'date')
23 ->widget(DatePicker::className(), [ 23 ->widget(DatePicker::className(), [
24 - 'dateFormat' => 'yyyy-MM-dd',  
25 - 'clientOptions' => [ 'minDate' => 1 ], 24 + 'dateFormat' => 'dd-MM-yyyy',
26 ]) ?> 25 ]) ?>
27 <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?> 26 <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
28 27
@@ -35,7 +34,16 @@ use yii\jui\DatePicker; @@ -35,7 +34,16 @@ use yii\jui\DatePicker;
35 ] 34 ]
36 ) 35 )
37 ]) ?> 36 ]) ?>
38 - 37 +
  38 + <?= $form->field($model, 'body_preview')->widget(CKEditor::className(),
  39 + [
  40 + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[
  41 + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать
  42 + 'inline' => false, //по умолчанию false]),
  43 + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload')
  44 + ]
  45 + )
  46 + ]) ?>
39 47
40 <?= $form->field($model, 'image')->widget(\kartik\file\FileInput::classname(), [ 48 <?= $form->field($model, 'image')->widget(\kartik\file\FileInput::classname(), [
41 'language' => 'ru', 49 'language' => 'ru',
backend/views/blog/index.php deleted
1 -<?php  
2 -  
3 -use yii\helpers\Html;  
4 -use yii\grid\GridView;  
5 -  
6 -/* @var $this yii\web\View */  
7 -/* @var $searchModel common\models\BlogSearch */  
8 -/* @var $dataProvider yii\data\ActiveDataProvider */  
9 -  
10 -$this->title = 'Blogs';  
11 -$this->params['breadcrumbs'][] = $this->title;  
12 -?>  
13 -<div class="blog-index">  
14 -  
15 - <h1><?= Html::encode($this->title) ?></h1>  
16 - <?php // echo $this->render('_search', ['model' => $searchModel]); ?>  
17 -  
18 - <p>  
19 - <?= Html::a('Create Blog', ['create'], ['class' => 'btn btn-success']) ?>  
20 - </p>  
21 - <?= GridView::widget([  
22 - 'dataProvider' => $dataProvider,  
23 - 'filterModel' => $searchModel,  
24 - 'columns' => [  
25 - ['class' => 'yii\grid\SerialColumn'],  
26 -  
27 - 'blog_id',  
28 - 'user_id',  
29 - 'name',  
30 - 'link',  
31 - 'date_add',  
32 - // 'user_add_id',  
33 - // 'view_count',  
34 - // 'description:ntext',  
35 - // 'cover',  
36 -  
37 - ['class' => 'yii\grid\ActionColumn'],  
38 - ],  
39 - ]); ?>  
40 -</div>  
backend/views/blog/view.php deleted
1 -<?php  
2 -  
3 -use yii\helpers\Html;  
4 -use yii\widgets\DetailView;  
5 -  
6 -/* @var $this yii\web\View */  
7 -/* @var $model common\models\Blog */  
8 -  
9 -$this->title = $model->name;  
10 -$this->params['breadcrumbs'][] = ['label' => 'Blogs', 'url' => ['index']];  
11 -$this->params['breadcrumbs'][] = $this->title;  
12 -?>  
13 -<div class="blog-view">  
14 -  
15 - <h1><?= Html::encode($this->title) ?></h1>  
16 -  
17 - <p>  
18 - <?= Html::a('Update', ['update', 'id' => $model->blog_id], ['class' => 'btn btn-primary']) ?>  
19 - <?= Html::a('Delete', ['delete', 'id' => $model->blog_id], [  
20 - 'class' => 'btn btn-danger',  
21 - 'data' => [  
22 - 'confirm' => 'Are you sure you want to delete this item?',  
23 - 'method' => 'post',  
24 - ],  
25 - ]) ?>  
26 - </p>  
27 -  
28 - <?= DetailView::widget([  
29 - 'model' => $model,  
30 - 'attributes' => [  
31 - 'blog_id',  
32 - 'user_id',  
33 - 'name',  
34 - 'link',  
35 - 'date_add',  
36 - 'user_add_id',  
37 - 'view_count',  
38 - 'description:ntext',  
39 - 'cover',  
40 - ],  
41 - ]) ?>  
42 -  
43 -</div>  
backend/views/brand/_search.php
1 <?php 1 <?php
2 -  
3 -use yii\helpers\Html;  
4 -use yii\widgets\ActiveForm;  
5 -  
6 -/* @var $this yii\web\View */  
7 -/* @var $model common\modules\product\models\BrandSearch */  
8 -/* @var $form yii\widgets\ActiveForm */ 2 +
  3 + use yii\helpers\Html;
  4 + use yii\widgets\ActiveForm;
  5 +
  6 + /**
  7 + * @var $this yii\web\View
  8 + * @var $model common\modules\product\models\BrandSearch
  9 + * @var $form yii\widgets\ActiveForm
  10 + */
9 ?> 11 ?>
10 12
11 <div class="brand-search"> 13 <div class="brand-search">
12 - 14 +
13 <?php $form = ActiveForm::begin([ 15 <?php $form = ActiveForm::begin([
14 - 'action' => ['index'], 16 + 'action' => [ 'index' ],
15 'method' => 'get', 17 'method' => 'get',
16 ]); ?> 18 ]); ?>
17 - 19 +
18 <?= $form->field($model, 'brand_id') ?> 20 <?= $form->field($model, 'brand_id') ?>
19 -  
20 - <?= $form->field($model, 'brand_name_id') ?>  
21 - 21 +
22 <?= $form->field($model, 'alias') ?> 22 <?= $form->field($model, 'alias') ?>
23 - 23 +
24 <?= $form->field($model, 'image') ?> 24 <?= $form->field($model, 'image') ?>
25 - 25 +
26 <?= $form->field($model, 'meta_title') ?> 26 <?= $form->field($model, 'meta_title') ?>
27 -  
28 - <?php // echo $form->field($model, 'meta_desc') ?>  
29 -  
30 - <?php // echo $form->field($model, 'meta_robots') ?>  
31 -  
32 - <?php // echo $form->field($model, 'seo_text') ?>  
33 - 27 +
34 <div class="form-group"> 28 <div class="form-group">
35 - <?= Html::submitButton(Yii::t('product', 'Search'), ['class' => 'btn btn-primary']) ?>  
36 - <?= Html::resetButton(Yii::t('product', 'Reset'), ['class' => 'btn btn-default']) ?> 29 + <?= Html::submitButton(Yii::t('product', 'Search'), [ 'class' => 'btn btn-primary' ]) ?>
  30 + <?= Html::resetButton(Yii::t('product', 'Reset'), [ 'class' => 'btn btn-default' ]) ?>
37 </div> 31 </div>
38 - 32 +
39 <?php ActiveForm::end(); ?> 33 <?php ActiveForm::end(); ?>
40 34
41 </div> 35 </div>
backend/views/brand/view.php
@@ -29,7 +29,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -29,7 +29,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
29 'model' => $model, 29 'model' => $model,
30 'attributes' => [ 30 'attributes' => [
31 'brand_id', 31 'brand_id',
32 - 'brand_name_id',  
33 'alias', 32 'alias',
34 'imageUrl:image', 33 'imageUrl:image',
35 'meta_title', 34 'meta_title',
backend/views/category/_form.php
@@ -30,6 +30,9 @@ use kartik\select2\Select2; @@ -30,6 +30,9 @@ use kartik\select2\Select2;
30 ] 30 ]
31 ])->label(Yii::t('product', 'Parent category')) ?> 31 ])->label(Yii::t('product', 'Parent category')) ?>
32 32
  33 + <?php
  34 + /* Tax group - add to controller
  35 + ?>
33 <?= $form->field($model, 'taxGroup')->widget(Select2::className(), [ 36 <?= $form->field($model, 'taxGroup')->widget(Select2::className(), [
34 'data' => \yii\helpers\ArrayHelper::map(\common\modules\rubrication\models\TaxGroup::find()->all(), 'tax_group_id', 'name'), 37 'data' => \yii\helpers\ArrayHelper::map(\common\modules\rubrication\models\TaxGroup::find()->all(), 'tax_group_id', 'name'),
35 'language' => 'ru', 38 'language' => 'ru',
@@ -42,6 +45,8 @@ use kartik\select2\Select2; @@ -42,6 +45,8 @@ use kartik\select2\Select2;
42 ], 45 ],
43 ] 46 ]
44 ) ?> 47 ) ?>
  48 + */
  49 + ?>
45 50
46 <?= $form->field($model, 'imageUpload')->widget(\kartik\file\FileInput::classname(), [ 51 <?= $form->field($model, 'imageUpload')->widget(\kartik\file\FileInput::classname(), [
47 'language' => 'ru', 52 'language' => 'ru',
@@ -77,10 +82,6 @@ use kartik\select2\Select2; @@ -77,10 +82,6 @@ use kartik\select2\Select2;
77 ) 82 )
78 ]) ?> 83 ]) ?>
79 84
80 - <?php if (!empty($model) && $model->depth == 2) :?>  
81 - <?= $form->field($model, 'populary')->checkbox() ?>  
82 - <?php endif?>  
83 -  
84 <div class="form-group"> 85 <div class="form-group">
85 <?= Html::submitButton($model->isNewRecord ? Yii::t('product', 'Create') : Yii::t('product', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 86 <?= Html::submitButton($model->isNewRecord ? Yii::t('product', 'Create') : Yii::t('product', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
86 <?php if ($model->isNewRecord) :?> 87 <?php if ($model->isNewRecord) :?>
backend/views/category/_search.php
@@ -25,20 +25,6 @@ use yii\widgets\ActiveForm; @@ -25,20 +25,6 @@ use yii\widgets\ActiveForm;
25 25
26 <?= $form->field($model, 'image') ?> 26 <?= $form->field($model, 'image') ?>
27 27
28 - <?php // echo $form->field($model, 'meta_title') ?>  
29 -  
30 - <?php // echo $form->field($model, 'meta_desc') ?>  
31 -  
32 - <?php // echo $form->field($model, 'meta_robots') ?>  
33 -  
34 - <?php // echo $form->field($model, 'seo_text') ?>  
35 -  
36 - <?php // echo $form->field($model, 'category_name_id') ?>  
37 -  
38 - <?php // echo $form->field($model, 'product_unit_id') ?>  
39 -  
40 - <?php // echo $form->field($model, 'alias') ?>  
41 -  
42 <div class="form-group"> 28 <div class="form-group">
43 <?= Html::submitButton(Yii::t('product', 'Search'), ['class' => 'btn btn-primary']) ?> 29 <?= Html::submitButton(Yii::t('product', 'Search'), ['class' => 'btn btn-primary']) ?>
44 <?= Html::resetButton(Yii::t('product', 'Reset'), ['class' => 'btn btn-default']) ?> 30 <?= Html::resetButton(Yii::t('product', 'Reset'), ['class' => 'btn btn-default']) ?>
backend/views/category/index.php
1 <?php 1 <?php
2 -  
3 -use yii\helpers\Html;  
4 -use kartik\grid\GridView;  
5 -  
6 -/* @var $this yii\web\View */  
7 -/* @var $searchModel common\modules\product\models\CategorySearch */  
8 -/* @var $dataProvider yii\data\ActiveDataProvider */  
9 -  
10 -$this->title = Yii::t('product', 'Categories');  
11 -$this->params['breadcrumbs'][] = $this->title; 2 +
  3 + use yii\helpers\Html;
  4 + use kartik\grid\GridView;
  5 +
  6 + /**
  7 + * @var $this yii\web\View
  8 + * @var $searchModel common\modules\product\models\CategorySearch
  9 + * @var $dataProvider yii\data\ActiveDataProvider
  10 + */
  11 + $this->title = Yii::t('product', 'Categories');
  12 + $this->params[ 'breadcrumbs' ][] = $this->title;
12 ?> 13 ?>
13 <div class="category-index"> 14 <div class="category-index">
14 - 15 +
15 <h1><?= Html::encode($this->title) ?></h1> 16 <h1><?= Html::encode($this->title) ?></h1>
16 - <?php // echo $this->render('_search', ['model' => $searchModel]); ?>  
17 - 17 +
18 <p> 18 <p>
19 - <?= Html::a(Yii::t('product', 'Create Category'), ['create'], ['class' => 'btn btn-success']) ?> 19 + <?= Html::a(Yii::t('product', 'Create Category'), [ 'create' ], [ 'class' => 'btn btn-success' ]) ?>
20 </p> 20 </p>
21 <?= GridView::widget([ 21 <?= GridView::widget([
22 'dataProvider' => $dataProvider, 22 'dataProvider' => $dataProvider,
23 -// 'filterModel' => $searchModel,  
24 - 'columns' => [  
25 - ['class' => 'yii\grid\SerialColumn'], 23 + 'columns' => [
  24 + [ 'class' => 'yii\grid\SerialColumn' ],
26 [ 25 [
27 - 'label'=> Yii::t('product', 'Name'),  
28 - 'content'=>function($data){ 26 + 'label' => Yii::t('product', 'Name'),
  27 + 'content' => function($data) {
29 $op = []; 28 $op = [];
30 - foreach($data->getParents()->all() as $parent) { 29 + foreach($data->getParents()
  30 + ->all() as $parent) {
31 $op[] = $parent->name; 31 $op[] = $parent->name;
32 } 32 }
33 $op[] = $data->name; 33 $op[] = $data->name;
34 return implode('&nbsp;&rarr;&nbsp;', $op); 34 return implode('&nbsp;&rarr;&nbsp;', $op);
35 -// return str_repeat('-', $data->depth) .'&nbsp;'. $data->name;  
36 - } 35 + },
37 ], 36 ],
38 [ 37 [
39 - 'class' => 'yii\grid\ActionColumn',  
40 - 'template' => '{view} {update} {delete} {populary}',  
41 - 'buttons' => [  
42 - 'populary' => function ($url, $model) {  
43 - if ($model->depth == 2) {  
44 - return Html::a('<span class="glyphicon glyphicon-star' . ($model->populary ? '' : '-empty') . '"></span>', $url, [  
45 - 'title' => Yii::t('product', ($model->populary ? 'Set not populary' : 'Set populary')),  
46 - ]);  
47 - }  
48 - },  
49 - ],  
50 - 'urlCreator' => function ($action, $model, $key, $index) {  
51 - switch ($action) {  
52 - case 'populary':  
53 - return \yii\helpers\Url::to(['category/populary', 'id' => $model->category_id]);  
54 - break; 38 + 'class' => 'yii\grid\ActionColumn',
  39 + 'template' => '{view} {update} {delete}',
  40 + 'urlCreator' => function($action, $model, $key, $index) {
  41 + switch($action) {
55 case 'view': 42 case 'view':
56 - return \yii\helpers\Url::to(['category/view', 'id' => $model->category_id]); 43 + return \yii\helpers\Url::to([
  44 + 'category/view',
  45 + 'id' => $model->category_id,
  46 + ]);
57 break; 47 break;
58 case 'update': 48 case 'update':
59 - return \yii\helpers\Url::to(['category/update', 'id' => $model->category_id]); 49 + return \yii\helpers\Url::to([
  50 + 'category/update',
  51 + 'id' => $model->category_id,
  52 + ]);
60 break; 53 break;
61 case 'delete': 54 case 'delete':
62 - return \yii\helpers\Url::to(['category/delete', 'id' => $model->category_id]); 55 + return \yii\helpers\Url::to([
  56 + 'category/delete',
  57 + 'id' => $model->category_id,
  58 + ]);
63 break; 59 break;
64 } 60 }
65 - } 61 + return '';
  62 + },
66 ], 63 ],
67 ], 64 ],
68 - 'panel' => [  
69 - 'type'=>'success', 65 + 'panel' => [
  66 + 'type' => 'success',
70 ], 67 ],
71 ]); ?> 68 ]); ?>
72 </div> 69 </div>
backend/views/category/view.php
@@ -42,10 +42,8 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -42,10 +42,8 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
42 'meta_robots', 42 'meta_robots',
43 'h1', 43 'h1',
44 'seo_text:ntext', 44 'seo_text:ntext',
45 - 'category_name_id',  
46 'product_unit_id', 45 'product_unit_id',
47 'alias', 46 'alias',
48 -  
49 ], 47 ],
50 ]) ?> 48 ]) ?>
51 49
backend/views/comment/_form.php deleted
1 -<?php  
2 -  
3 - use common\modules\comment\models\Comment;  
4 - use yii\helpers\Html;  
5 - use yii\widgets\ActiveForm;  
6 -  
7 - /* @var $this yii\web\View */  
8 - /* @var $model Comment */  
9 - /* @var $form yii\widgets\ActiveForm */  
10 - $status_list = [  
11 - Comment::STATUS_ACTIVE => 'Активный',  
12 - Comment::STATUS_HIDDEN => 'Новый',  
13 - Comment::STATUS_DELETED => 'Удаленный',  
14 - ]  
15 -?>  
16 -  
17 -<div class="comment-form">  
18 -  
19 - <?php $form = ActiveForm::begin(); ?>  
20 -  
21 - <?= $form->field($model, 'text')  
22 - ->textarea([ 'rows' => 6 ]) ?>  
23 -  
24 - <?= $form->field($model, 'status')  
25 - ->dropDownList($status_list) ?>  
26 -  
27 - <div class="form-group">  
28 - <?= Html::submitButton('Обновить', [ 'class' => 'btn btn-primary' ]) ?>  
29 - </div>  
30 -  
31 - <?php ActiveForm::end(); ?>  
32 -  
33 -</div>  
backend/views/comment/_search.php deleted
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\CommentSearch */  
8 -/* @var $form yii\widgets\ActiveForm */  
9 -?>  
10 -  
11 -<div class="comment-search">  
12 -  
13 - <?php $form = ActiveForm::begin([  
14 - 'action' => ['index'],  
15 - 'method' => 'get',  
16 - ]); ?>  
17 -  
18 - <?= $form->field($model, 'comment_id') ?>  
19 -  
20 - <?= $form->field($model, 'text') ?>  
21 -  
22 - <?= $form->field($model, 'user_id') ?>  
23 -  
24 - <?= $form->field($model, 'user_name') ?>  
25 -  
26 - <?= $form->field($model, 'user_email') ?>  
27 -  
28 - <?php // echo $form->field($model, 'comment_pid') ?>  
29 -  
30 - <?php // echo $form->field($model, 'status') ?>  
31 -  
32 - <?php // echo $form->field($model, 'date_add') ?>  
33 -  
34 - <?php // echo $form->field($model, 'date_update') ?>  
35 -  
36 - <?php // echo $form->field($model, 'date_delete') ?>  
37 -  
38 - <?php // echo $form->field($model, 'model') ?>  
39 -  
40 - <?php // echo $form->field($model, 'model_id') ?>  
41 -  
42 - <div class="form-group">  
43 - <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>  
44 - <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>  
45 - </div>  
46 -  
47 - <?php ActiveForm::end(); ?>  
48 -  
49 -</div>  
backend/views/comment/index.php deleted
1 -<?php  
2 -  
3 - use common\modules\comment\models\Comment;  
4 - use yii\helpers\Html;  
5 - use yii\grid\GridView;  
6 - use yii\helpers\Url;  
7 -  
8 - /* @var $this yii\web\View */  
9 - /* @var $dataProvider yii\data\ActiveDataProvider */  
10 -  
11 - $this->title = 'Комменты';  
12 - $this->params[ 'breadcrumbs' ][] = $this->title;  
13 -?>  
14 -<div class="comment-index">  
15 -  
16 - <h1><?= Html::encode($this->title) ?></h1>  
17 -  
18 - <?= GridView::widget([  
19 - 'dataProvider' => $dataProvider,  
20 - 'columns' => [  
21 - [  
22 - 'class' => 'yii\grid\ActionColumn',  
23 - 'template' => '{approve} {update} {delete}',  
24 - 'buttons' => [  
25 - 'approve' => function($url, $model, $key) {  
26 - /**  
27 - * @var Comment $model  
28 - */  
29 - $options = array_merge([  
30 - 'title' => "Подтвердить",  
31 - 'aria-label' => "Подтвердить",  
32 - 'data-confirm' => "Комментарий и оценка отобразится на публичной части сайта, подтвердить?",  
33 - 'data-method' => 'post',  
34 - 'data-pjax' => '0',  
35 - ]);  
36 - $glyphicon = 'glyphicon-ok';  
37 - if($model->status == $model::STATUS_ACTIVE) {  
38 - $url = Url::to(['comment/disapprove', 'id' => $model->comment_id]);  
39 - $glyphicon = 'glyphicon-remove';  
40 - }  
41 - return Html::a('<span class="glyphicon '.$glyphicon.'"></span>', $url, $options);  
42 - }  
43 - ]  
44 - ],  
45 - 'comment_id',  
46 - [  
47 - 'attribute' => 'rating.value',  
48 - 'label' => 'Оценка',  
49 - ],  
50 - 'text:ntext',  
51 - [  
52 - 'content' => function($model) {  
53 - /**  
54 - * @var Comment $model  
55 - */  
56 - if(!empty( $model->user )) {  
57 - return $model->user->username . " (ID: " . $model->user->id . ")";  
58 - } else {  
59 - return $model->user_name . " (Гость: " . $model->user_email . ")";  
60 - }  
61 - },  
62 - 'label' => 'Пользователь',  
63 - ],  
64 - [  
65 - 'attribute' => 'status',  
66 - 'value' => function($model) {  
67 - /**  
68 - * @var Comment $model  
69 - */  
70 - $status = '';  
71 - switch($model->status) {  
72 - case Comment::STATUS_ACTIVE:  
73 - $status = 'Активный';  
74 - break;  
75 - case Comment::STATUS_HIDDEN:  
76 - $status = 'Новый';  
77 - break;  
78 - case Comment::STATUS_DELETED:  
79 - $status = 'Удаленный';  
80 - break;  
81 - default:  
82 - $status = 'Неизвестно';  
83 - };  
84 - return $status;  
85 - },  
86 - ],  
87 - 'date_add',  
88 - [  
89 - 'attribute' => 'model',  
90 - 'value' => function($model) {  
91 - /**  
92 - * @var Comment $model  
93 - */  
94 - return $model->model . " (ID: " . $model->model_id . ")";  
95 - },  
96 - ],  
97 - ],  
98 - ]); ?>  
99 -</div>  
backend/views/comment/update.php deleted
1 -<?php  
2 -  
3 -use yii\helpers\Html;  
4 -  
5 -/* @var $this yii\web\View */  
6 -/* @var $model common\modules\comment\models\Comment */  
7 -  
8 -$this->title = 'Редактировать коммент: ' . $model->comment_id;  
9 -$this->params['breadcrumbs'][] = ['label' => 'Комментарии', 'url' => ['index']];  
10 -$this->params['breadcrumbs'][] = ['label' => $model->comment_id, 'url' => ['view', 'id' => $model->comment_id]];  
11 -$this->params['breadcrumbs'][] = 'Редактировать';  
12 -?>  
13 -<div class="comment-update">  
14 -  
15 - <h1><?= Html::encode($this->title) ?></h1>  
16 -  
17 - <?= $this->render('_form', [  
18 - 'model' => $model,  
19 - ]) ?>  
20 -  
21 -</div>  
backend/views/customer/_form.php
@@ -7,7 +7,6 @@ use yii\widgets\ActiveForm; @@ -7,7 +7,6 @@ use yii\widgets\ActiveForm;
7 /* @var $model common\models\Customer */ 7 /* @var $model common\models\Customer */
8 /* @var $form yii\widgets\ActiveForm */ 8 /* @var $form yii\widgets\ActiveForm */
9 ?> 9 ?>
10 -  
11 <div class="customer-form"> 10 <div class="customer-form">
12 11
13 <?php $form = ActiveForm::begin(); ?> 12 <?php $form = ActiveForm::begin(); ?>
@@ -23,10 +22,8 @@ use yii\widgets\ActiveForm; @@ -23,10 +22,8 @@ use yii\widgets\ActiveForm;
23 <?= $form->field($model, 'surname')->textInput(['maxlength' => true]) ?> 22 <?= $form->field($model, 'surname')->textInput(['maxlength' => true]) ?>
24 23
25 <?= $form->field($model, 'phone')->textInput(['maxlength' => true]) ?> 24 <?= $form->field($model, 'phone')->textInput(['maxlength' => true]) ?>
26 -  
27 - <?= $form->field($model, 'date_time')->textInput() ?>  
28 -  
29 - <?= $form->field($model, 'sex')->textInput(['maxlength' => true]) ?> 25 +
  26 + <?= $form->field($model, 'gender')->textInput(['maxlength' => true]) ?>
30 27
31 <?= $form->field($model, 'birth_day')->textInput() ?> 28 <?= $form->field($model, 'birth_day')->textInput() ?>
32 29
backend/views/customer/_search.php
@@ -25,22 +25,6 @@ use yii\widgets\ActiveForm; @@ -25,22 +25,6 @@ use yii\widgets\ActiveForm;
25 25
26 <?= $form->field($model, 'surname') ?> 26 <?= $form->field($model, 'surname') ?>
27 27
28 - <?php // echo $form->field($model, 'phone') ?>  
29 -  
30 - <?php // echo $form->field($model, 'date_time') ?>  
31 -  
32 - <?php // echo $form->field($model, 'sex') ?>  
33 -  
34 - <?php // echo $form->field($model, 'birth_day') ?>  
35 -  
36 - <?php // echo $form->field($model, 'birth_month') ?>  
37 -  
38 - <?php // echo $form->field($model, 'birth_year') ?>  
39 -  
40 - <?php // echo $form->field($model, 'body') ?>  
41 -  
42 - <?php // echo $form->field($model, 'group_id') ?>  
43 -  
44 <div class="form-group"> 28 <div class="form-group">
45 <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?> 29 <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
46 <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?> 30 <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
backend/views/customer/index.php
@@ -26,17 +26,9 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -26,17 +26,9 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
26 26
27 'id', 27 'id',
28 'username', 28 'username',
29 - 'password',  
30 'name', 29 'name',
31 'surname', 30 'surname',
32 - // 'phone',  
33 - // 'date_time',  
34 - // 'sex',  
35 - // 'birth_day',  
36 - // 'birth_month',  
37 - // 'birth_year',  
38 - // 'body:ntext',  
39 - // 'group_id', 31 + 'phone',
40 32
41 ['class' => 'yii\grid\ActionColumn'], 33 ['class' => 'yii\grid\ActionColumn'],
42 ], 34 ],
backend/views/customer/view.php
@@ -30,12 +30,10 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -30,12 +30,10 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
30 'attributes' => [ 30 'attributes' => [
31 'id', 31 'id',
32 'username', 32 'username',
33 - 'password',  
34 'name', 33 'name',
35 'surname', 34 'surname',
36 'phone', 35 'phone',
37 - 'date_time',  
38 - 'sex', 36 + 'gender',
39 'birth_day', 37 'birth_day',
40 'birth_month', 38 'birth_month',
41 'birth_year', 39 'birth_year',
backend/views/event/_form.php
@@ -35,7 +35,7 @@ use mihaildev\elfinder\ElFinder; @@ -35,7 +35,7 @@ use mihaildev\elfinder\ElFinder;
35 <?= $form->field($model, 'end_at') 35 <?= $form->field($model, 'end_at')
36 ->widget(DatePicker::className(), [ 36 ->widget(DatePicker::className(), [
37 'pluginOptions' => [ 37 'pluginOptions' => [
38 - 'format' => 'dd-M-yyyy', 38 + 'format' => 'dd-mm-yyyy',
39 'todayHighlight' => true 39 'todayHighlight' => true
40 ]]) ?> 40 ]]) ?>
41 41
backend/views/layouts/main-sidebar.php
@@ -102,6 +102,12 @@ use yii\widgets\Menu; @@ -102,6 +102,12 @@ use yii\widgets\Menu;
102 'options' => ['class'=>\Yii::$app->user->can('event') ? '' :'hide'], 102 'options' => ['class'=>\Yii::$app->user->can('event') ? '' :'hide'],
103 ], 103 ],
104 [ 104 [
  105 + 'label' => 'Проекты',
  106 + 'template'=>'<a href="{url}"> <i class="glyphicon glyphicon-pencil"></i> <span>{label}</span></a>',
  107 + 'url' => ['/project'],
  108 + 'options' => ['class'=>\Yii::$app->user->can('event') ? '' :'hide'],
  109 + ],
  110 + [
105 'label' => 'Статьи', 111 'label' => 'Статьи',
106 'template'=>'<a href="{url}"> <i class="glyphicon glyphicon-pencil"></i> <span>{label}</span></a>', 112 'template'=>'<a href="{url}"> <i class="glyphicon glyphicon-pencil"></i> <span>{label}</span></a>',
107 'url' => ['/articles/index'], 113 'url' => ['/articles/index'],
backend/views/orders/_form.php
@@ -30,7 +30,9 @@ use kartik\date\DatePicker; @@ -30,7 +30,9 @@ use kartik\date\DatePicker;
30 <?= $form->field($model, 'numbercard') ?> 30 <?= $form->field($model, 'numbercard') ?>
31 31
32 <?= $form->field($model, 'body')->textArea(['rows' => '3']) ?> 32 <?= $form->field($model, 'body')->textArea(['rows' => '3']) ?>
33 -<!-- --><?//= $form->field($model, 'delivery')->dropDownList(ArrayHelper::map(Delivery::find()->asArray()->all(), 'id', 'title')) ?> 33 +
  34 + <?php /* $form->field($model, 'delivery')->dropDownList(ArrayHelper::map(Delivery::find()->asArray()->all(), 'id', 'title')) */ ?>
  35 +
34 <?= $form->field($model, 'declaration') ?> 36 <?= $form->field($model, 'declaration') ?>
35 37
36 <?= $form->field($model, 'stock') ?> 38 <?= $form->field($model, 'stock') ?>
backend/views/orders/show.php
@@ -47,7 +47,7 @@ use kartik\date\DatePicker; @@ -47,7 +47,7 @@ use kartik\date\DatePicker;
47 <?= $form->field($model, 'date_dedline') 47 <?= $form->field($model, 'date_dedline')
48 ->widget(DatePicker::className(), [ 48 ->widget(DatePicker::className(), [
49 'pluginOptions' => [ 49 'pluginOptions' => [
50 - 'format' => 'dd-M-yyyy', 50 + 'format' => 'dd-mm-yyyy',
51 'todayHighlight' => true 51 'todayHighlight' => true
52 ]]) ?> 52 ]]) ?>
53 53
backend/views/page/_form.php
@@ -37,6 +37,8 @@ use mihaildev\elfinder\ElFinder; @@ -37,6 +37,8 @@ use mihaildev\elfinder\ElFinder;
37 <?= $form->field($model, 'seo_text')->textarea(['rows' => 6]) ?> 37 <?= $form->field($model, 'seo_text')->textarea(['rows' => 6]) ?>
38 38
39 <?= $form->field($model, 'h1')->textInput(['maxlength' => true]) ?> 39 <?= $form->field($model, 'h1')->textInput(['maxlength' => true]) ?>
  40 +
  41 + <?= $form->field($model, 'in_menu')->checkbox() ?>
40 42
41 <div class="form-group"> 43 <div class="form-group">
42 <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 44 <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
backend/views/blog/_form.php renamed to backend/views/project/_form.php
1 -<?php  
2 -  
3 -use common\widgets\FieldEditor;  
4 -use yii\helpers\Html;  
5 -use yii\widgets\ActiveForm;  
6 -use common\modules\file\widgets\ImageUploader;  
7 -use mihaildev\ckeditor\CKEditor;  
8 -use mihaildev\elfinder\ElFinder;  
9 -use common\components\Request;  
10 -  
11 -/* @var $this yii\web\View */  
12 -/* @var $model common\models\Blog */  
13 -/* @var $form yii\widgets\ActiveForm */  
14 -?>  
15 -  
16 -<div class="blog-form">  
17 -  
18 - <?php $form = ActiveForm::begin([  
19 - 'enableClientValidation' => false,  
20 - 'options' => ['enctype' => 'multipart/form-data']  
21 - ]); ?>  
22 -  
23 - <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>  
24 -  
25 - <?= $form->field($model, 'link')->textInput(['maxlength' => true]) ?>  
26 -  
27 - <?= $form->field($model, 'description')->widget(CKEditor::className(),  
28 - [  
29 - 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[  
30 - 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать  
31 - 'inline' => false, //по умолчанию false]),  
32 - 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload')  
33 - ]  
34 - )  
35 - ]) ?>  
36 -  
37 - <?= $form->field($model, 'imageUpload')->widget(\kartik\file\FileInput::classname(), [  
38 - 'language' => 'ru',  
39 - 'options' => [  
40 - 'accept' => 'image/*',  
41 - 'multiple' => false,  
42 - ],  
43 - 'pluginOptions' => [  
44 - 'allowedFileExtensions' => ['jpg', 'gif', 'png'],  
45 - 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '',  
46 - 'overwriteInitial' => true,  
47 - 'showRemove' => false,  
48 - 'showUpload' => false,  
49 - 'previewFileType' => 'image',  
50 - ],  
51 - ]); ?>  
52 -  
53 - <?= FieldEditor::widget([  
54 - 'template' => 'education',  
55 - 'item_id' => $model->blog_id,  
56 - 'model' => 'common\models\Blog',  
57 - 'language' => 'ru',  
58 - ]); ?>  
59 - <div class="form-group">  
60 - <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>  
61 - </div>  
62 -  
63 - <?php ActiveForm::end(); ?>  
64 -  
65 -</div> 1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +use mihaildev\ckeditor\CKEditor;
  6 +use mihaildev\elfinder\ElFinder;
  7 +use yii\jui\DatePicker;
  8 +/* @var $this yii\web\View */
  9 +/* @var $model common\models\Project */
  10 +/* @var $form yii\widgets\ActiveForm */
  11 +?>
  12 +
  13 +<div class="articles-form">
  14 +
  15 + <?php $form = ActiveForm::begin([
  16 + 'options' => ['enctype' => 'multipart/form-data']
  17 + ]); ?>
  18 +
  19 +
  20 + <?= $form->field($model, 'date_add')
  21 + ->widget(DatePicker::className(), [
  22 + 'dateFormat' => 'dd-MM-yyyy',
  23 + ]) ?>
  24 +
  25 + <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
  26 +
  27 + <?= $form->field($model, 'link')->textInput(['maxlength' => true]) ?>
  28 +
  29 + <?= $form->field($model, 'description')->widget(CKEditor::className(),
  30 + [
  31 + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[
  32 + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать
  33 + 'inline' => false, //по умолчанию false]),
  34 + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload')
  35 + ]
  36 + )
  37 + ]) ?>
  38 +
  39 + <?= $form->field($model, 'imagesUpload[]')->widget(\kartik\file\FileInput::className(), [
  40 + 'language' => 'ru',
  41 + 'options' => [
  42 + 'accept' => 'image/*',
  43 + 'multiple' => true,
  44 + ],
  45 + 'pluginOptions' => [
  46 + 'allowedFileExtensions' => ['jpg', 'gif', 'png'],
  47 + 'initialPreview' => !empty($model->imagesHTML) ? $model->imagesHTML : [],
  48 + 'initialPreviewConfig' => $model->imagesConfig,
  49 + 'overwriteInitial' => false,
  50 + 'showRemove' => false,
  51 + 'showUpload' => false,
  52 + 'uploadAsync' => !empty($model->project_id),
  53 + 'previewFileType' => 'image',
  54 + ],
  55 + ]); ?>
  56 +
  57 + <div class="form-group">
  58 + <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
  59 + </div>
  60 +
  61 + <?php ActiveForm::end(); ?>
  62 +
  63 +</div>
backend/views/blog/_search.php renamed to backend/views/project/_search.php
1 -<?php  
2 -  
3 -use yii\helpers\Html;  
4 -use yii\widgets\ActiveForm;  
5 -  
6 -/* @var $this yii\web\View */  
7 -/* @var $model common\models\BlogSearch */  
8 -/* @var $form yii\widgets\ActiveForm */  
9 -?>  
10 -  
11 -<div class="blog-search">  
12 -  
13 - <?php $form = ActiveForm::begin([  
14 - 'action' => ['index'],  
15 - 'method' => 'get',  
16 - ]); ?>  
17 -  
18 - <?= $form->field($model, 'blog_id') ?>  
19 -  
20 - <?= $form->field($model, 'user_id') ?>  
21 -  
22 - <?= $form->field($model, 'name') ?>  
23 -  
24 - <?= $form->field($model, 'link') ?>  
25 -  
26 - <?= $form->field($model, 'date_add') ?>  
27 -  
28 - <?php // echo $form->field($model, 'user_add_id') ?>  
29 -  
30 - <?php // echo $form->field($model, 'view_count') ?>  
31 -  
32 - <?php // echo $form->field($model, 'description') ?>  
33 -  
34 - <?php // echo $form->field($model, 'cover') ?>  
35 -  
36 - <div class="form-group">  
37 - <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>  
38 - <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>  
39 - </div>  
40 -  
41 - <?php ActiveForm::end(); ?>  
42 -  
43 -</div> 1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model common\models\ArticlesSearch */
  8 +/* @var $form yii\widgets\ActiveForm */
  9 +?>
  10 +
  11 +<div class="articles-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, 'date') ?>
  21 +
  22 + <?= $form->field($model, 'title') ?>
  23 +
  24 + <?= $form->field($model, 'body') ?>
  25 +
  26 + <?= $form->field($model, 'image') ?>
  27 +
  28 + <?php // echo $form->field($model, 'translit') ?>
  29 +
  30 + <?php // echo $form->field($model, 'meta_title') ?>
  31 +
  32 + <?php // echo $form->field($model, 'meta_keywords') ?>
  33 +
  34 + <?php // echo $form->field($model, 'meta_description') ?>
  35 +
  36 + <?php // echo $form->field($model, 'seo_text') ?>
  37 +
  38 + <?php // echo $form->field($model, 'h1') ?>
  39 +
  40 + <div class="form-group">
  41 + <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
  42 + <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
  43 + </div>
  44 +
  45 + <?php ActiveForm::end(); ?>
  46 +
  47 +</div>
backend/views/blog/create.php renamed to backend/views/project/create.php
1 -<?php  
2 -  
3 -use yii\helpers\Html;  
4 -  
5 -  
6 -/* @var $this yii\web\View */  
7 -/* @var $model common\models\Blog */  
8 -  
9 -$this->title = 'Create Blog';  
10 -$this->params['breadcrumbs'][] = ['label' => 'Blogs', 'url' => ['index']];  
11 -$this->params['breadcrumbs'][] = $this->title;  
12 -?>  
13 -<div class="blog-create">  
14 -  
15 - <h1><?= Html::encode($this->title) ?></h1>  
16 -  
17 - <?= $this->render('_form', [  
18 - 'model' => $model,  
19 - ]) ?>  
20 -  
21 -</div> 1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model common\models\Articles */
  8 +
  9 +$this->title = 'Create Project';
  10 +$this->params['breadcrumbs'][] = ['label' => 'Projects', 'url' => ['index']];
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +<div class="articles-create">
  14 +
  15 + <h1><?= Html::encode($this->title) ?></h1>
  16 +
  17 + <?= $this->render('_form', [
  18 + 'model' => $model,
  19 + ]) ?>
  20 +
  21 +</div>
common/modules/product/views/product-variant-type/index.php renamed to backend/views/project/index.php
@@ -4,27 +4,27 @@ use yii\helpers\Html; @@ -4,27 +4,27 @@ use yii\helpers\Html;
4 use yii\grid\GridView; 4 use yii\grid\GridView;
5 5
6 /* @var $this yii\web\View */ 6 /* @var $this yii\web\View */
7 -/* @var $searchModel common\modules\product\models\ProductVariantTypeSearch */ 7 +/* @var $searchModel common\models\ArticlesSearch */
8 /* @var $dataProvider yii\data\ActiveDataProvider */ 8 /* @var $dataProvider yii\data\ActiveDataProvider */
9 9
10 -$this->title = Yii::t('product', 'Product Variant Types'); 10 +$this->title = 'Project';
11 $this->params['breadcrumbs'][] = $this->title; 11 $this->params['breadcrumbs'][] = $this->title;
12 ?> 12 ?>
13 -<div class="product-variant-type-index"> 13 +<div class="articles-index" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
14 14
15 - <h1><?= Html::encode($this->title) ?></h1>  
16 - <?php // echo $this->render('_search', ['model' => $searchModel]); ?> 15 + <h1 itemprop="title"><?= Html::encode($this->title) ?></h1>
17 16
18 <p> 17 <p>
19 - <?= Html::a(Yii::t('product', 'Create Product Variant Type'), ['create'], ['class' => 'btn btn-success']) ?> 18 + <?= Html::a('Create Project', ['create'], ['class' => 'btn btn-success']) ?>
20 </p> 19 </p>
21 <?= GridView::widget([ 20 <?= GridView::widget([
22 'dataProvider' => $dataProvider, 21 'dataProvider' => $dataProvider,
23 'filterModel' => $searchModel, 22 'filterModel' => $searchModel,
24 'columns' => [ 23 'columns' => [
25 ['class' => 'yii\grid\SerialColumn'], 24 ['class' => 'yii\grid\SerialColumn'],
26 - 'name',  
27 - 'name2', 25 + 'project_id',
  26 + 'date_add:date',
  27 + 'title',
28 28
29 ['class' => 'yii\grid\ActionColumn'], 29 ['class' => 'yii\grid\ActionColumn'],
30 ], 30 ],
backend/views/blog/update.php renamed to backend/views/project/update.php
1 -<?php  
2 -  
3 -use yii\helpers\Html;  
4 -  
5 -/* @var $this yii\web\View */  
6 -/* @var $model common\models\Blog */  
7 -  
8 -$this->title = 'Update Blog: ' . ' ' . $model->name;  
9 -$this->params['breadcrumbs'][] = ['label' => 'Blogs', 'url' => ['index']];  
10 -$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->blog_id]];  
11 -$this->params['breadcrumbs'][] = 'Update';  
12 -?>  
13 -<div class="blog-update">  
14 -  
15 - <h1><?= Html::encode($this->title) ?></h1>  
16 -  
17 - <?= $this->render('_form', [  
18 - 'model' => $model,  
19 - ]) ?>  
20 -  
21 -</div> 1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +
  5 +/* @var $this yii\web\View */
  6 +/* @var $model common\models\Project */
  7 +
  8 +$this->title = 'Update Project: ' . $model->title;
  9 +$this->params['breadcrumbs'][] = ['label' => 'Project', 'url' => ['index']];
  10 +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => ['view', 'id' => $model->project_id]];
  11 +$this->params['breadcrumbs'][] = 'Update';
  12 +?>
  13 +<div class="articles-update">
  14 +
  15 + <h1><?= Html::encode($this->title) ?></h1>
  16 +
  17 + <?= $this->render('_form', [
  18 + 'model' => $model,
  19 + ]) ?>
  20 +
  21 +</div>
backend/views/comment/view.php renamed to backend/views/project/view.php
@@ -4,19 +4,19 @@ use yii\helpers\Html; @@ -4,19 +4,19 @@ use yii\helpers\Html;
4 use yii\widgets\DetailView; 4 use yii\widgets\DetailView;
5 5
6 /* @var $this yii\web\View */ 6 /* @var $this yii\web\View */
7 -/* @var $model common\modules\comment\models\Comment */ 7 +/* @var $model common\models\Project */
8 8
9 -$this->title = $model->comment_id;  
10 -$this->params['breadcrumbs'][] = ['label' => 'Comments', 'url' => ['index']]; 9 +$this->title = $model->title;
  10 +$this->params['breadcrumbs'][] = ['label' => 'Project', 'url' => ['index']];
11 $this->params['breadcrumbs'][] = $this->title; 11 $this->params['breadcrumbs'][] = $this->title;
12 ?> 12 ?>
13 -<div class="comment-view"> 13 +<div class="articles-view" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
14 14
15 - <h1><?= Html::encode($this->title) ?></h1> 15 + <h1 itemprop="title"><?= Html::encode($this->title) ?></h1>
16 16
17 <p> 17 <p>
18 - <?= Html::a('Update', ['update', 'id' => $model->comment_id], ['class' => 'btn btn-primary']) ?>  
19 - <?= Html::a('Delete', ['delete', 'id' => $model->comment_id], [ 18 + <?= Html::a('Update', ['update', 'id' => $model->project_id], ['class' => 'btn btn-primary']) ?>
  19 + <?= Html::a('Delete', ['delete', 'id' => $model->project_id], [
20 'class' => 'btn btn-danger', 20 'class' => 'btn btn-danger',
21 'data' => [ 21 'data' => [
22 'confirm' => 'Are you sure you want to delete this item?', 22 'confirm' => 'Are you sure you want to delete this item?',
@@ -28,18 +28,9 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -28,18 +28,9 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
28 <?= DetailView::widget([ 28 <?= DetailView::widget([
29 'model' => $model, 29 'model' => $model,
30 'attributes' => [ 30 'attributes' => [
31 - 'comment_id',  
32 - 'text:ntext',  
33 - 'user_id',  
34 - 'user_name',  
35 - 'user_email:email',  
36 - 'comment_pid',  
37 - 'status',  
38 - 'date_add',  
39 - 'date_update',  
40 - 'date_delete',  
41 - 'model',  
42 - 'model_id', 31 + 'project_id',
  32 + 'date_add:date',
  33 + 'title',
43 ], 34 ],
44 ]) ?> 35 ]) ?>
45 36
backend/web/js/fieldWidget.js deleted
1 -$(function(){  
2 - $.each($('.delete-field-item'), function(index, value) {  
3 - var container = $(value).parents('.field_list').first();  
4 - var count = $(container).find('.form-group').length;  
5 - if(count <= 1) {  
6 - $(container).find('.delete-field-item').addClass('hidden');  
7 - }  
8 - });  
9 - $(document).on('click', '.delete-field-item', function(){  
10 - var container = $(this).parents('.field_list').first();  
11 - $(this).parent('.form-group').remove();  
12 - var count = $(container).find('.form-group').length;  
13 - if(count <= 1) {  
14 - $(container).find('.delete-field-item').addClass('hidden');  
15 - }  
16 - });  
17 - $(document).on('click', '[class*=add_field_w]', function() {  
18 - var container = $(this).siblings('.field_list').first();  
19 - var count = $(container).find('.form-group').length;  
20 - if(count > 1) {  
21 - $(container).find('.delete-field-item').removeClass('hidden');  
22 - }  
23 - });  
24 -});  
25 \ No newline at end of file 0 \ No newline at end of file
common/behaviors/SaveImgBehavior.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\behaviors;
  4 +
  5 +use common\modules\comment\models\CommentModel;
  6 +use yii\base\Behavior;
  7 +use yii\db\ActiveRecord;
  8 +use yii\web\UploadedFile;
  9 +/**
  10 + * Class RatingBehavior
  11 + * @property CommentModel $owner
  12 + * @package common\behaviors
  13 + */
  14 +class SaveImgBehavior extends Behavior
  15 +{
  16 +
  17 +
  18 + public $directory;
  19 +
  20 + public function events()
  21 + {
  22 + return [
  23 + ActiveRecord::EVENT_BEFORE_UPDATE => 'beforeUpdate',
  24 + ActiveRecord::EVENT_BEFORE_INSERT => 'beforeInsert',
  25 + ];
  26 + }
  27 +
  28 + public function beforeUpdate($event)
  29 + {
  30 +
  31 +
  32 + if ( ($image = UploadedFile::getInstance($this->owner, 'image')) ) {
  33 + $this->owner->image = $image->name;
  34 + }
  35 +
  36 + if(!$this->owner->image){
  37 + $this->owner->image = $this->owner->getOldAttribute('image');
  38 + }
  39 +
  40 +
  41 + if ($image) {
  42 + $imgDir = \Yii::getAlias('@storage/'.$this->directory.'/');
  43 +
  44 + if(!is_dir($imgDir)) {
  45 + mkdir($imgDir, 0755, true);
  46 + }
  47 +
  48 + $image->saveAs(\Yii::getAlias('@storage/'.$this->directory.'/' . $image->name));
  49 + }
  50 + }
  51 +
  52 +
  53 + public function beforeInsert($event)
  54 + {
  55 +
  56 +
  57 + if ( ($image = UploadedFile::getInstance($this->owner, 'image')) ) {
  58 + $this->owner->image = $image->name;
  59 + }
  60 +
  61 +
  62 +
  63 + if ($image) {
  64 + $imgDir = \Yii::getAlias('@storage/'.$this->directory.'/');
  65 +
  66 + if(!is_dir($imgDir)) {
  67 + mkdir($imgDir, 0755, true);
  68 + }
  69 +
  70 + $image->saveAs(\Yii::getAlias('@storage/'.$this->directory.'/' . $image->name));
  71 + }
  72 + }
  73 +
  74 +
  75 +
  76 + public function getImageFile() {
  77 + return empty($this->owner->image) ? null : '/storage/'.$this->directory.'/'. $this->owner->image;
  78 + }
  79 +
  80 + public function getImageUrl() {
  81 + return empty($this->owner->image) ? null : '/storage/'.$this->directory.'/'. $this->owner->image;
  82 + }
  83 +}
0 \ No newline at end of file 84 \ No newline at end of file
common/components/artboximage/ArtboxImageHelper.php
@@ -6,7 +6,6 @@ use Yii; @@ -6,7 +6,6 @@ use Yii;
6 use yii\base\Object; 6 use yii\base\Object;
7 use yii\helpers\ArrayHelper; 7 use yii\helpers\ArrayHelper;
8 use yii\helpers\Html; 8 use yii\helpers\Html;
9 -use yii\web\HttpException;  
10 9
11 class ArtboxImageHelper extends Object { 10 class ArtboxImageHelper extends Object {
12 /** @var ArtboxImage $imageDriver */ 11 /** @var ArtboxImage $imageDriver */
common/components/artboxtree/ArtboxTreeBehavior.php
@@ -2,8 +2,6 @@ @@ -2,8 +2,6 @@
2 2
3 namespace common\components\artboxtree; 3 namespace common\components\artboxtree;
4 4
5 -use common\modules\rubrication\models\TaxOption;  
6 -use Yii;  
7 use yii\base\Behavior; 5 use yii\base\Behavior;
8 use yii\base\Exception; 6 use yii\base\Exception;
9 use yii\base\NotSupportedException; 7 use yii\base\NotSupportedException;
common/components/artboxtree/ArtboxTreeQueryTrait.php
@@ -2,8 +2,6 @@ @@ -2,8 +2,6 @@
2 2
3 namespace common\components\artboxtree; 3 namespace common\components\artboxtree;
4 4
5 -use common\components\artboxtree\ArtboxTreeHelper;  
6 -  
7 trait ArtboxTreeQueryTrait { 5 trait ArtboxTreeQueryTrait {
8 6
9 static public $cache_tree = []; 7 static public $cache_tree = [];
common/config/main.php
@@ -156,6 +156,18 @@ @@ -156,6 +156,18 @@
156 'height' => 110, 156 'height' => 110,
157 ], 157 ],
158 ], 158 ],
  159 + 'article_list' => [
  160 + 'resize' => [
  161 + 'width' => 555,
  162 + 'height' => 299,
  163 + ],
  164 + ],
  165 + 'project_list' => [
  166 + 'resize' => [
  167 + 'width' => 165,
  168 + 'height' => 100,
  169 + ],
  170 + ],
159 ] 171 ]
160 ], 172 ],
161 'basket' => [ 173 'basket' => [
common/models/Articles.php
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 2
3 namespace common\models; 3 namespace common\models;
4 4
5 -use common\behaviors\RatingBehavior; 5 +use common\behaviors\SaveImgBehavior;
6 use common\modules\comment\models\CommentModel; 6 use common\modules\comment\models\CommentModel;
7 use Yii; 7 use Yii;
8 8
@@ -10,7 +10,7 @@ use Yii; @@ -10,7 +10,7 @@ use Yii;
10 * This is the model class for table "articles". 10 * This is the model class for table "articles".
11 * 11 *
12 * @property integer $id 12 * @property integer $id
13 - * @property string $date 13 + * @property integer $date
14 * @property string $title 14 * @property string $title
15 * @property string $body 15 * @property string $body
16 * @property string $image 16 * @property string $image
@@ -20,6 +20,7 @@ use Yii; @@ -20,6 +20,7 @@ use Yii;
20 * @property string $meta_description 20 * @property string $meta_description
21 * @property string $seo_text 21 * @property string $seo_text
22 * @property string $h1 22 * @property string $h1
  23 + * @property string $body_preview
23 */ 24 */
24 class Articles extends \yii\db\ActiveRecord 25 class Articles extends \yii\db\ActiveRecord
25 { 26 {
@@ -45,6 +46,9 @@ class Articles extends \yii\db\ActiveRecord @@ -45,6 +46,9 @@ class Articles extends \yii\db\ActiveRecord
45 'out_attribute' => 'translit', 46 'out_attribute' => 'translit',
46 'translit' => true 47 'translit' => true
47 ], 48 ],
  49 + [
  50 + 'class' => SaveImgBehavior::className(),
  51 + ],
48 ]; 52 ];
49 } 53 }
50 54
@@ -54,12 +58,18 @@ class Articles extends \yii\db\ActiveRecord @@ -54,12 +58,18 @@ class Articles extends \yii\db\ActiveRecord
54 public function rules() 58 public function rules()
55 { 59 {
56 return [ 60 return [
  61 + [['date'], 'default', 'value' => function() {
  62 + return time();
  63 + }],
57 [['date'], 'safe'], 64 [['date'], 'safe'],
58 [['title', 'body'], 'required'], 65 [['title', 'body'], 'required'],
59 - [['body', 'seo_text'], 'string'], 66 + [['body', 'body_preview', 'seo_text'], 'string'],
60 [['title', 'image', 'translit', 'meta_title', 'meta_keywords', 'meta_description', 'h1'], 'string', 'max' => 255], 67 [['title', 'image', 'translit', 'meta_title', 'meta_keywords', 'meta_description', 'h1'], 'string', 'max' => 255],
61 [['imageUpload'], 'safe'], 68 [['imageUpload'], 'safe'],
62 [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], 69 [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'],
  70 + [['date'], 'filter', 'filter' => function($value) {
  71 + return strtotime($value)?:time();
  72 + }],
63 ]; 73 ];
64 } 74 }
65 75
@@ -73,6 +83,7 @@ class Articles extends \yii\db\ActiveRecord @@ -73,6 +83,7 @@ class Articles extends \yii\db\ActiveRecord
73 'date' => 'Date', 83 'date' => 'Date',
74 'title' => 'Title', 84 'title' => 'Title',
75 'body' => 'Body', 85 'body' => 'Body',
  86 + 'body_preview' => 'Body preview',
76 'image' => 'Image', 87 'image' => 'Image',
77 'imageUrl' => Yii::t('app', 'Image'), 88 'imageUrl' => Yii::t('app', 'Image'),
78 'translit' => 'Translit', 89 'translit' => 'Translit',
common/models/ArticlesSearch.php
@@ -19,7 +19,7 @@ class ArticlesSearch extends Articles @@ -19,7 +19,7 @@ class ArticlesSearch extends Articles
19 { 19 {
20 return [ 20 return [
21 [['id'], 'integer'], 21 [['id'], 'integer'],
22 - [['date', 'title', 'body', 'image', 'translit', 'meta_title', 'meta_keywords', 'meta_description', 'seo_text', 'h1'], 'safe'], 22 + [['title', 'body', 'translit', 'meta_title', 'meta_keywords', 'meta_description', 'seo_text', 'h1'], 'safe'],
23 ]; 23 ];
24 } 24 }
25 25
@@ -60,12 +60,10 @@ class ArticlesSearch extends Articles @@ -60,12 +60,10 @@ class ArticlesSearch extends Articles
60 // grid filtering conditions 60 // grid filtering conditions
61 $query->andFilterWhere([ 61 $query->andFilterWhere([
62 'id' => $this->id, 62 'id' => $this->id,
63 - 'date' => $this->date,  
64 ]); 63 ]);
65 64
66 $query->andFilterWhere(['like', 'title', $this->title]) 65 $query->andFilterWhere(['like', 'title', $this->title])
67 ->andFilterWhere(['like', 'body', $this->body]) 66 ->andFilterWhere(['like', 'body', $this->body])
68 - ->andFilterWhere(['like', 'image', $this->image])  
69 ->andFilterWhere(['like', 'translit', $this->translit]) 67 ->andFilterWhere(['like', 'translit', $this->translit])
70 ->andFilterWhere(['like', 'meta_title', $this->meta_title]) 68 ->andFilterWhere(['like', 'meta_title', $this->meta_title])
71 ->andFilterWhere(['like', 'meta_keywords', $this->meta_keywords]) 69 ->andFilterWhere(['like', 'meta_keywords', $this->meta_keywords])
common/models/Blog.php deleted
1 -<?php  
2 -  
3 - namespace common\models;  
4 -  
5 - use Yii;  
6 - use yii\behaviors\BlameableBehavior;  
7 - use yii\behaviors\TimestampBehavior;  
8 - use yii\db\Expression;  
9 -  
10 - /**  
11 - * This is the model class for table "blog".  
12 - * @property integer $blog_id  
13 - * @property integer $user_id  
14 - * @property string $name  
15 - * @property string $link  
16 - * @property string $date_add  
17 - * @property integer $user_add_id  
18 - * @property integer $view_count  
19 - * @property string $description  
20 - * @property string $cover  
21 - */  
22 - class Blog extends \yii\db\ActiveRecord  
23 - {  
24 - public $imageUpload;  
25 -  
26 - /**  
27 - * @inheritdoc  
28 - */  
29 - public static function tableName()  
30 - {  
31 - return 'blog';  
32 - }  
33 -  
34 -  
35 - /**  
36 - * @inheritdoc  
37 - */  
38 - public function behaviors()  
39 - {  
40 - return [  
41 - [  
42 - 'class' => BlameableBehavior::className(),  
43 - 'createdByAttribute' => 'user_id',  
44 - 'updatedByAttribute' => false,  
45 - ],  
46 - [  
47 - 'class' => TimestampBehavior::className(),  
48 - 'createdAtAttribute' => 'date_add',  
49 - 'updatedAtAttribute' => false,  
50 - 'value' => new Expression('NOW()'),  
51 - ],  
52 - 'slug' => [  
53 - 'class' => 'common\behaviors\Slug',  
54 - 'in_attribute' => 'name',  
55 - 'out_attribute' => 'link',  
56 - 'translit' => true  
57 - ]  
58 - ];  
59 - }  
60 -  
61 - /**  
62 - * @inheritdoc  
63 - */  
64 - public function rules()  
65 - {  
66 - return [  
67 - [  
68 - [ 'name', 'description' ],  
69 - 'required',  
70 - ],  
71 - [  
72 - [ 'description' ],  
73 - 'string',  
74 - ],  
75 - [  
76 - [  
77 - 'name',  
78 - 'link',  
79 - 'cover',  
80 - ],  
81 - 'string',  
82 - 'max' => 255,  
83 - ],  
84 - [['imageUpload'], 'safe'],  
85 - [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'],  
86 - ];  
87 - }  
88 -  
89 - public function getDateCreate(){  
90 - return date('Y-m-d',strtotime($this->date_add));  
91 - }  
92 -  
93 - /**  
94 - * @inheritdoc  
95 - */  
96 - public function attributeLabels()  
97 - {  
98 - return [  
99 - 'blog_id' => Yii::t('app', 'blog_id'),  
100 - 'user_id' => Yii::t('app', 'user_id'),  
101 - 'name' => Yii::t('app', 'name'),  
102 - 'link' => Yii::t('app', 'link'),  
103 - 'date_add' => Yii::t('app', 'date_add'),  
104 - 'user_add_id' => Yii::t('app', 'user_add_id'),  
105 - 'view_count' => Yii::t('app', 'view_count'),  
106 - 'description' => Yii::t('app', 'description'),  
107 - 'cover' => Yii::t('app', 'cover'),  
108 - 'image' => Yii::t('app', 'cover'),  
109 - 'imageUrl' => Yii::t('app', 'cover'),  
110 - ];  
111 - }  
112 -  
113 - public function getImageFile() {  
114 - return empty($this->image) ? null : Yii::getAlias('@imagesDir/brands/'. $this->image);  
115 - }  
116 -  
117 - public function getImageUrl()  
118 - {  
119 - return empty($this->image) ? null : Yii::getAlias('@imagesUrl/brands/' . $this->image);  
120 - }  
121 - }  
common/models/BlogSearch.php deleted
1 -<?php  
2 -  
3 - namespace common\models;  
4 -  
5 - use Yii;  
6 - use yii\base\Model;  
7 - use yii\bootstrap\ActiveForm;  
8 - use yii\data\ActiveDataProvider;  
9 - use common\models\Blog;  
10 - use yii\db\ActiveQuery;  
11 - use yii\db\ActiveRecord;  
12 -  
13 - /**  
14 - * BlogSearch represents the model behind the search form about `common\models\Blog`.  
15 - */  
16 - class BlogSearch extends Blog  
17 - {  
18 -  
19 - public $date_add_from;  
20 - public $date_add_to;  
21 - /**  
22 - * @inheritdoc  
23 - */  
24 - public function rules()  
25 - {  
26 - return [  
27 - [  
28 - [  
29 - 'blog_id',  
30 - 'user_id',  
31 - 'user_add_id',  
32 - 'view_count',  
33 - ],  
34 - 'integer',  
35 - ],  
36 - [  
37 - [  
38 - 'name',  
39 - 'link',  
40 - 'date_add',  
41 - 'description',  
42 - 'cover',  
43 - 'date_add_from',  
44 - 'date_add_to',  
45 - ],  
46 - 'safe',  
47 - ],  
48 - [  
49 - [  
50 - 'date_add_from',  
51 - ],  
52 - 'default',  
53 - 'value' => date('Y-m-d', 0),  
54 - ],  
55 - [  
56 - [  
57 - 'date_add_to',  
58 - ],  
59 - 'default',  
60 - 'value' => date('Y-m-d'),  
61 - ],  
62 - ];  
63 - }  
64 -  
65 - /**  
66 - * @inheritdoc  
67 - */  
68 - public function scenarios()  
69 - {  
70 - // bypass scenarios() implementation in the parent class  
71 - return Model::scenarios();  
72 - }  
73 -  
74 - /**  
75 - * Creates data provider instance with search query applied  
76 - *  
77 - * @param array $params  
78 - *  
79 - * @return ActiveDataProvider  
80 - */  
81 - public function search($params)  
82 - {  
83 - $query = Blog::find();  
84 -  
85 - // add conditions that should always apply here  
86 -  
87 - $dataProvider = new ActiveDataProvider([  
88 - 'query' => $query,  
89 - ]);  
90 -  
91 - $this->load($params);  
92 -  
93 - if(!$this->validate()) {  
94 - // uncomment the following line if you do not want to return any records when validation fails  
95 - // $query->where('0=1');  
96 - return $dataProvider;  
97 - }  
98 -  
99 - $query->andWhere([ 'user_id' => \Yii::$app->user->getId() ]);  
100 -  
101 - // grid filtering conditions  
102 - $query->andFilterWhere([  
103 - 'blog_id' => $this->blog_id,  
104 - 'date_add' => $this->date_add,  
105 - 'user_add_id' => $this->user_add_id,  
106 - 'view_count' => $this->view_count,  
107 - ]);  
108 -  
109 - $query->andFilterWhere([  
110 - 'between',  
111 - 'date_add',  
112 - $this->date_add_from,  
113 - (new \DateTime($this->date_add_to))->modify('+1 day')->format('Y-m-d')  
114 - ]);  
115 -  
116 - $query->andFilterWhere([  
117 - 'like',  
118 - 'name',  
119 - $this->name,  
120 - ])  
121 - ->andFilterWhere([  
122 - 'like',  
123 - 'description',  
124 - $this->description,  
125 - ])  
126 - ->andFilterWhere([  
127 - 'like',  
128 - 'cover',  
129 - $this->cover,  
130 - ]);  
131 -  
132 - return $dataProvider;  
133 - }  
134 -  
135 - }  
common/models/Customer.php
@@ -13,7 +13,6 @@ use Yii; @@ -13,7 +13,6 @@ use Yii;
13 * @property string $name 13 * @property string $name
14 * @property string $surname 14 * @property string $surname
15 * @property string $phone 15 * @property string $phone
16 - * @property string $date_time  
17 * @property string $gender 16 * @property string $gender
18 * @property integer $birth_day 17 * @property integer $birth_day
19 * @property integer $birth_month 18 * @property integer $birth_month
@@ -27,9 +26,6 @@ use Yii; @@ -27,9 +26,6 @@ use Yii;
27 * @property integer $created_at 26 * @property integer $created_at
28 * @property integer $updated_at 27 * @property integer $updated_at
29 * 28 *
30 - * @property ArtboxComment[] $artboxComments  
31 - * @property ArtboxCommentRating[] $artboxCommentRatings  
32 - * @property ArtboxLike[] $artboxLikes  
33 * @property Share[] $shares 29 * @property Share[] $shares
34 */ 30 */
35 class Customer extends User implements \yii\web\IdentityInterface 31 class Customer extends User implements \yii\web\IdentityInterface
@@ -49,7 +45,7 @@ class Customer extends User implements \yii\web\IdentityInterface @@ -49,7 +45,7 @@ class Customer extends User implements \yii\web\IdentityInterface
49 { 45 {
50 return [ 46 return [
51 [['username', 'password_hash'], 'required'], 47 [['username', 'password_hash'], 'required'],
52 - [['date_time'], 'safe'], 48 + [['password'], 'safe'],
53 [['birth_day', 'birth_month', 'birth_year', 'group_id', 'status', 'created_at', 'updated_at'], 'integer'], 49 [['birth_day', 'birth_month', 'birth_year', 'group_id', 'status', 'created_at', 'updated_at'], 'integer'],
54 [['body'], 'string'], 50 [['body'], 'string'],
55 [['status'],'default', 'value' => '10'], 51 [['status'],'default', 'value' => '10'],
@@ -69,7 +65,6 @@ class Customer extends User implements \yii\web\IdentityInterface @@ -69,7 +65,6 @@ class Customer extends User implements \yii\web\IdentityInterface
69 'name' => 'Name', 65 'name' => 'Name',
70 'surname' => 'Surname', 66 'surname' => 'Surname',
71 'phone' => 'Phone', 67 'phone' => 'Phone',
72 - 'date_time' => 'Date Time',  
73 'gender' => 'Gender', 68 'gender' => 'Gender',
74 'birth_day' => 'Birth Day', 69 'birth_day' => 'Birth Day',
75 'birth_month' => 'Birth Month', 70 'birth_month' => 'Birth Month',
@@ -88,30 +83,6 @@ class Customer extends User implements \yii\web\IdentityInterface @@ -88,30 +83,6 @@ class Customer extends User implements \yii\web\IdentityInterface
88 /** 83 /**
89 * @return \yii\db\ActiveQuery 84 * @return \yii\db\ActiveQuery
90 */ 85 */
91 - public function getArtboxComments()  
92 - {  
93 - return $this->hasMany(ArtboxComment::className(), ['user_id' => 'id']);  
94 - }  
95 -  
96 - /**  
97 - * @return \yii\db\ActiveQuery  
98 - */  
99 - public function getArtboxCommentRatings()  
100 - {  
101 - return $this->hasMany(ArtboxCommentRating::className(), ['user_id' => 'id']);  
102 - }  
103 -  
104 - /**  
105 - * @return \yii\db\ActiveQuery  
106 - */  
107 - public function getArtboxLikes()  
108 - {  
109 - return $this->hasMany(ArtboxLike::className(), ['user_id' => 'id']);  
110 - }  
111 -  
112 - /**  
113 - * @return \yii\db\ActiveQuery  
114 - */  
115 public function getShares() 86 public function getShares()
116 { 87 {
117 return $this->hasMany(Share::className(), ['user_id' => 'id']); 88 return $this->hasMany(Share::className(), ['user_id' => 'id']);
@@ -132,5 +103,8 @@ class Customer extends User implements \yii\web\IdentityInterface @@ -132,5 +103,8 @@ class Customer extends User implements \yii\web\IdentityInterface
132 return $this->username. ' '.$this->surname; 103 return $this->username. ' '.$this->surname;
133 } 104 }
134 105
  106 + public function getPassword() {
  107 + return false;
  108 + }
135 109
136 } 110 }
common/models/CustomerSearch.php
@@ -19,7 +19,7 @@ class CustomerSearch extends Customer @@ -19,7 +19,7 @@ class CustomerSearch extends Customer
19 { 19 {
20 return [ 20 return [
21 [['id', 'birth_day', 'birth_month', 'birth_year', 'group_id'], 'integer'], 21 [['id', 'birth_day', 'birth_month', 'birth_year', 'group_id'], 'integer'],
22 - [['username', 'name', 'surname', 'phone', 'date_time', 'body'], 'safe'], 22 + [['username', 'name', 'surname', 'phone', 'body'], 'safe'],
23 ]; 23 ];
24 } 24 }
25 25
@@ -60,7 +60,6 @@ class CustomerSearch extends Customer @@ -60,7 +60,6 @@ class CustomerSearch extends Customer
60 // grid filtering conditions 60 // grid filtering conditions
61 $query->andFilterWhere([ 61 $query->andFilterWhere([
62 'id' => $this->id, 62 'id' => $this->id,
63 - 'date_time' => $this->date_time,  
64 'birth_day' => $this->birth_day, 63 'birth_day' => $this->birth_day,
65 'birth_month' => $this->birth_month, 64 'birth_month' => $this->birth_month,
66 'birth_year' => $this->birth_year, 65 'birth_year' => $this->birth_year,
common/models/Event.php
@@ -46,7 +46,7 @@ class Event extends \yii\db\ActiveRecord @@ -46,7 +46,7 @@ class Event extends \yii\db\ActiveRecord
46 'translit' => true 46 'translit' => true
47 ], 47 ],
48 [ 48 [
49 - 'class' => 'common\behaviors\ShowImage', 49 + 'class' => 'common\behaviors\ShowImage',
50 ], 50 ],
51 ]; 51 ];
52 } 52 }
common/models/Fields.php deleted
1 -<?php  
2 -  
3 -namespace common\models;  
4 -  
5 -use Yii;  
6 -use yii\helpers\ArrayHelper;  
7 -  
8 -/**  
9 - * This is the model class for table "{{%fields}}".  
10 - *  
11 - * @property integer $id  
12 - * @property string $table_name  
13 - * @property integer $table_id  
14 - * @property string $value  
15 - * @property string $field_name  
16 - * @property string $field_type  
17 - * @property string $language  
18 - * @property string $parent_key  
19 - * @property string $key  
20 - */  
21 -class Fields extends \yii\db\ActiveRecord  
22 -{  
23 - /**  
24 - * @inheritdoc  
25 - */  
26 - public static function tableName()  
27 - {  
28 - return '{{%fields}}';  
29 - }  
30 -  
31 - /**  
32 - * @inheritdoc  
33 - */  
34 - public function rules()  
35 - {  
36 - return [  
37 - [['table_name', 'table_id',], 'required'],  
38 - [['table_id','parent_key','key'], 'integer'],  
39 - [['table_name', 'value', 'field_name','field_type','language'], 'string', 'max' => 255]  
40 - ];  
41 - }  
42 -  
43 - /**  
44 - * @inheritdoc  
45 - */  
46 - public function attributeLabels()  
47 - {  
48 - return [  
49 - 'id' => 'ID',  
50 - 'table_name' => 'Model Name',  
51 - 'table_id' => 'Model ID',  
52 - 'value' => 'Value',  
53 - 'field_name' => 'Field Name',  
54 - 'language' => 'Language',  
55 - ];  
56 - }  
57 -  
58 - public static function getData($id, $model, $type){  
59 - $data = ArrayHelper::toArray(self::find()->where(['table_id'=>$id, 'table_name'=>$model, 'field_type'=>$type])->all());  
60 - $result = [];  
61 - for($i=0; $i < count($data); $i ++){  
62 - $result[$data[$i]['parent_key']][$data[$i]['field_name']] = $data[$i]['value'];  
63 - }  
64 -  
65 - return $result;  
66 - }  
67 -  
68 -  
69 - /**  
70 - * @param $post - array with field data  
71 - * @param $table_id - row id in model table  
72 - * @param $table_name - madel table name  
73 - * @param $language - language id  
74 - */  
75 -  
76 - public static function saveFieldData($post,$table_id,$table_name, $language){  
77 -  
78 - self::deleteAll(['table_id'=>$table_id, 'table_name'=>$table_name, 'language' => $language, 'field_type' => array_keys($post)]);  
79 -  
80 - if($post){  
81 -  
82 -  
83 - foreach($post as $k => $field){  
84 -  
85 -  
86 -  
87 - foreach($field as $parent_key => $row){  
88 -  
89 - foreach($row as $key => $value){  
90 -  
91 - $field_model = new Fields();  
92 - $field_model->field_name = array_keys($value)[0];  
93 - $field_model->value = $value[array_keys($value)[0]];  
94 - $field_model->table_name = $table_name;  
95 - $field_model->table_id = $table_id;  
96 - $field_model->field_type = $k;  
97 - $field_model->language = 'ru';  
98 - $field_model->parent_key = $parent_key;  
99 - $field_model->key = $key;  
100 - $field_model->save();  
101 - }  
102 -  
103 - }  
104 - }  
105 - }  
106 - }  
107 -  
108 -  
109 - /**  
110 - * @param $post - array with field data  
111 - * @param $table_id - row id in model table  
112 - * @param $table_name - madel table name  
113 - * @param $language - language id  
114 - */  
115 -  
116 - public static function saveFieldVideoData($post,$table_id,$table_name, $language){  
117 -  
118 - self::deleteAll(['table_id'=>$table_id, 'table_name'=>$table_name, 'language' => $language, 'field_type' => array_keys($post)]);  
119 -  
120 - if($post){  
121 -  
122 -  
123 - foreach($post as $k => $field){  
124 -  
125 -  
126 -  
127 - foreach($field as $parent_key => $row){  
128 -  
129 - foreach($row as $key => $value){  
130 -  
131 - preg_match('/src=\"(.[^"]*)\"/', $value[array_keys($value)[0]], $video_url);  
132 -  
133 - if(isset($video_url[1]) && !empty($video_url[1])){  
134 -  
135 - $field_model = new Fields();  
136 - $field_model->field_name = array_keys($value)[0];  
137 - $field_model->value = $video_url[1].'?showinfo=0&autoplay=0';  
138 - $field_model->table_name = $table_name;  
139 - $field_model->table_id = $table_id;  
140 - $field_model->field_type = $k;  
141 - $field_model->language = 'ru';  
142 - $field_model->parent_key = $parent_key;  
143 - $field_model->key = $key;  
144 - $field_model->save();  
145 -  
146 - }  
147 -  
148 -  
149 - }  
150 -  
151 - }  
152 - }  
153 - }  
154 - }  
155 -}  
common/models/Orders.php
@@ -49,6 +49,26 @@ @@ -49,6 +49,26 @@
49 'pattern' => '/^\+38\(\d{3}\)\d{3}-\d{2}-\d{2}$/', 49 'pattern' => '/^\+38\(\d{3}\)\d{3}-\d{2}-\d{2}$/',
50 'on' => self::SCENARIO_QUICK, 50 'on' => self::SCENARIO_QUICK,
51 ], 51 ],
  52 + [
  53 + [
  54 + 'phone2',
  55 + 'numbercard',
  56 + 'body',
  57 + 'declaration',
  58 + 'stock',
  59 + 'consignment',
  60 + 'payment',
  61 + 'insurance',
  62 + 'amount_imposed',
  63 + 'shipping_by',
  64 + 'city',
  65 + 'adress',
  66 + 'total',
  67 + 'status',
  68 + ],
  69 + 'string',
  70 + 'max' => 255,
  71 + ],
52 ]; 72 ];
53 } 73 }
54 74
common/models/Page.php
1 <?php 1 <?php
2 -  
3 -namespace common\models;  
4 -  
5 -use Yii;  
6 -  
7 -/**  
8 - * This is the model class for table "page".  
9 - *  
10 - * @property integer $id  
11 - * @property string $translit  
12 - * @property string $title  
13 - * @property string $body  
14 - * @property string $meta_title  
15 - * @property string $meta_keywords  
16 - * @property string $meta_description  
17 - * @property string $seo_text  
18 - * @property string $h1  
19 - */  
20 -class Page extends \yii\db\ActiveRecord  
21 -{ 2 +
  3 + namespace common\models;
  4 +
22 /** 5 /**
23 - * @inheritdoc 6 + * This is the model class for table "page".
  7 + * @property integer $id
  8 + * @property string $translit
  9 + * @property string $title
  10 + * @property string $body
  11 + * @property string $meta_title
  12 + * @property string $meta_keywords
  13 + * @property string $meta_description
  14 + * @property string $seo_text
  15 + * @property string $h1
  16 + * @property bool $in_menu
24 */ 17 */
25 - public static function tableName() 18 + class Page extends \yii\db\ActiveRecord
26 { 19 {
27 - return 'page'; 20 +
  21 + /**
  22 + * @inheritdoc
  23 + */
  24 + public static function tableName()
  25 + {
  26 + return 'page';
  27 + }
  28 +
  29 + /**
  30 + * @inheritdoc
  31 + */
  32 + public function behaviors()
  33 + {
  34 + return [
  35 + 'slug' => [
  36 + 'class' => 'common\behaviors\Slug',
  37 + 'in_attribute' => 'title',
  38 + 'out_attribute' => 'translit',
  39 + 'translit' => true,
  40 + ],
  41 + ];
  42 + }
  43 +
  44 + /**
  45 + * @inheritdoc
  46 + */
  47 + public function rules()
  48 + {
  49 + return [
  50 + [
  51 + [
  52 + 'body',
  53 + 'seo_text',
  54 + ],
  55 + 'string',
  56 + ],
  57 + [
  58 + [
  59 + 'translit',
  60 + 'title',
  61 + 'meta_title',
  62 + 'meta_keywords',
  63 + 'meta_description',
  64 + 'h1',
  65 + ],
  66 + 'string',
  67 + 'max' => 255,
  68 + ],
  69 + [
  70 + [
  71 + 'in_menu',
  72 + ],
  73 + 'boolean',
  74 + ],
  75 + ];
  76 + }
  77 +
  78 + public function getPageTranslit($page)
  79 + {
  80 + return self::find()
  81 + ->where([ 'translit' => $page ])
  82 + ->one();
  83 +
  84 + }
  85 +
  86 + /**
  87 + * @inheritdoc
  88 + */
  89 + public function attributeLabels()
  90 + {
  91 + return [
  92 + 'id' => 'ID',
  93 + 'translit' => 'Translit',
  94 + 'title' => 'Title',
  95 + 'body' => 'Body',
  96 + 'meta_title' => 'Meta Title',
  97 + 'meta_keywords' => 'Meta Keywords',
  98 + 'meta_description' => 'Meta Description',
  99 + 'seo_text' => 'Seo Text',
  100 + 'h1' => 'H1',
  101 + 'in_menu' => 'Show in menu',
  102 + ];
  103 + }
28 } 104 }
29 - /**  
30 - * @inheritdoc  
31 - */  
32 - public function behaviors()  
33 - {  
34 - return [  
35 - 'slug' => [  
36 - 'class' => 'common\behaviors\Slug',  
37 - 'in_attribute' => 'title',  
38 - 'out_attribute' => 'translit',  
39 - 'translit' => true  
40 - ]  
41 - ];  
42 - }  
43 - /**  
44 - * @inheritdoc  
45 - */  
46 - public function rules()  
47 - {  
48 - return [  
49 - [['body', 'seo_text'], 'string'],  
50 - [['translit', 'title', 'meta_title', 'meta_keywords', 'meta_description', 'h1'], 'string', 'max' => 255],  
51 - ];  
52 - }  
53 - public function getPageTranslit($page){  
54 - return self::find()  
55 - ->where(['translit' => $page])  
56 - ->one();  
57 -  
58 - }  
59 - /**  
60 - * @inheritdoc  
61 - */  
62 - public function attributeLabels()  
63 - {  
64 - return [  
65 - 'id' => 'ID',  
66 - 'translit' => 'Translit',  
67 - 'title' => 'Title',  
68 - 'body' => 'Body',  
69 - 'meta_title' => 'Meta Title',  
70 - 'meta_keywords' => 'Meta Keywords',  
71 - 'meta_description' => 'Meta Description',  
72 - 'seo_text' => 'Seo Text',  
73 - 'h1' => 'H1',  
74 - ];  
75 - }  
76 -}  
common/models/PageSearch.php
@@ -2,10 +2,8 @@ @@ -2,10 +2,8 @@
2 2
3 namespace common\models; 3 namespace common\models;
4 4
5 -use Yii;  
6 use yii\base\Model; 5 use yii\base\Model;
7 use yii\data\ActiveDataProvider; 6 use yii\data\ActiveDataProvider;
8 -use common\models\Page;  
9 7
10 /** 8 /**
11 * PageSearch represents the model behind the search form about `common\models\Page`. 9 * PageSearch represents the model behind the search form about `common\models\Page`.
common/models/Project.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\models;
  4 +
  5 +/**
  6 + * This is the model class for table "project".
  7 + *
  8 + * @property integer $project_id
  9 + * @property string $title
  10 + * @property string $link
  11 + * @property string $description
  12 + * @property integer $date_add
  13 + * @property ProjectImage[] $images
  14 + * @property array $imagesConfig
  15 + */
  16 +class Project extends \yii\db\ActiveRecord
  17 +{
  18 +
  19 + public $imagesUpload = [];
  20 +
  21 + /**
  22 + * @inheritdoc
  23 + */
  24 + public static function tableName()
  25 + {
  26 + return 'project';
  27 + }
  28 +
  29 + /**
  30 + * @inheritdoc
  31 + */
  32 + public function behaviors()
  33 + {
  34 + return [
  35 + 'slug' => [
  36 + 'class' => 'common\behaviors\Slug',
  37 + 'in_attribute' => 'title',
  38 + 'out_attribute' => 'link',
  39 + 'translit' => true
  40 + ],
  41 + ];
  42 + }
  43 +
  44 + /**
  45 + * @inheritdoc
  46 + */
  47 + public function rules()
  48 + {
  49 + return [
  50 + [['date_add'], 'default', 'value' => function() {
  51 + return time();
  52 + }],
  53 + [['title'], 'required'],
  54 + [['description'], 'string'],
  55 + [['date_add', 'imagesUpload'], 'safe'],
  56 + [['title', 'link'], 'string', 'max' => 255],
  57 + [['date_add'], 'filter', 'filter' => function($value) {
  58 + return strtotime($value)?:time();
  59 + }],
  60 + ];
  61 + }
  62 +
  63 + /**
  64 + * @inheritdoc
  65 + */
  66 + public function attributeLabels()
  67 + {
  68 + return [
  69 + 'project_id' => 'Project ID',
  70 + 'title' => 'Title',
  71 + 'link' => 'Link',
  72 + 'description' => 'Description',
  73 + 'date_add' => 'Date Add',
  74 + 'images' => 'Images',
  75 + ];
  76 + }
  77 +
  78 + public function getImages()
  79 + {
  80 + return $this->hasMany(ProjectImage::className(), [ 'project_id' => 'project_id' ]);
  81 + }
  82 +
  83 + public function getImagesHTML()
  84 + {
  85 + $op = [];
  86 + if($this->images) {
  87 + foreach($this->images as $image) {
  88 + $op[] = \common\components\artboximage\ArtboxImageHelper::getImage($image->imageUrl, 'admin_thumb');
  89 + }
  90 + }
  91 + return $op;
  92 + }
  93 +
  94 + public function getImagesConfig()
  95 + {
  96 + $op = [];
  97 + if($this->images) {
  98 + foreach($this->images as $image) {
  99 + $op[] = [
  100 + 'caption' => $image->image,
  101 + 'width' => '120px',
  102 + 'url' => \yii\helpers\Url::to([
  103 + '/project/delimg',
  104 + 'id' => $image->project_image_id,
  105 + ]),
  106 + 'key' => $image->project_image_id,
  107 + 'extra' => [
  108 + 'id' => $image->project_image_id,
  109 + ],
  110 + ];
  111 + }
  112 + }
  113 + return $op;
  114 + }
  115 +
  116 + public function imagesUpload()
  117 + {
  118 + if($this->validate()) {
  119 + $images = [];
  120 + foreach($this->imagesUpload as $image) {
  121 + $imageName = $image->baseName . '.' . $image->extension;
  122 + $i = 0;
  123 + while(file_exists(\Yii::getAlias('@storage/projects/' . $imageName))) {
  124 + $i++;
  125 + $imageName = $image->baseName . '_' . $i . '.' . $image->extension;
  126 + }
  127 + $imgDir = \Yii::getAlias('@storage/projects/');
  128 + if(!is_dir($imgDir)) {
  129 + mkdir($imgDir, 0755, true);
  130 + }
  131 +
  132 + $image->saveAs($imgDir . $imageName);
  133 + $images[] = $imageName;
  134 + }
  135 + return $images;
  136 + } else {
  137 + return false;
  138 + }
  139 + }
  140 +}
common/models/ProjectImage.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\models;
  4 +
  5 +/**
  6 + * This is the model class for table "project_image".
  7 + *
  8 + * @property integer $project_image_id
  9 + * @property integer $project_id
  10 + * @property string $image
  11 + * @property string $alt
  12 + * @property string $title
  13 + *
  14 + * @property Project $project
  15 + */
  16 +class ProjectImage extends \yii\db\ActiveRecord
  17 +{
  18 + /**
  19 + * @inheritdoc
  20 + */
  21 + public static function tableName()
  22 + {
  23 + return 'project_image';
  24 + }
  25 +
  26 + /**
  27 + * @inheritdoc
  28 + */
  29 + public function rules()
  30 + {
  31 + return [
  32 + [['project_id'], 'required'],
  33 + [['project_id'], 'integer'],
  34 + [['image', 'alt', 'title'], 'string', 'max' => 255],
  35 + [['project_id'], 'exist', 'skipOnError' => true, 'targetClass' => Project::className(), 'targetAttribute' => ['project_id' => 'project_id']],
  36 + ];
  37 + }
  38 +
  39 + /**
  40 + * @inheritdoc
  41 + */
  42 + public function attributeLabels()
  43 + {
  44 + return [
  45 + 'project_image_id' => 'Project Image ID',
  46 + 'project_id' => 'Project ID',
  47 + 'image' => 'Image',
  48 + 'alt' => 'Alt',
  49 + 'title' => 'Title',
  50 + ];
  51 + }
  52 +
  53 + /**
  54 + * @return \yii\db\ActiveQuery
  55 + */
  56 + public function getProject()
  57 + {
  58 + return $this->hasOne(Project::className(), ['project_id' => 'project_id']);
  59 + }
  60 +
  61 + /**
  62 + * fetch stored image file name with complete path
  63 + * @return string
  64 + */
  65 + public function getImageFile()
  66 + {
  67 + return isset($this->image) ? '/storage/projects/' . $this->image : null;
  68 + }
  69 +
  70 + /**
  71 + * fetch stored image url
  72 + * @return string
  73 + */
  74 + public function getImageUrl()
  75 + {
  76 + // return a default image placeholder if your source image is not found
  77 + return isset($this->image) ? '/storage/projects/'. $this->image : '/storage/no-photo.png';
  78 + }
  79 +
  80 + public function deleteImage() {
  81 + $file = $this->getImageFile();
  82 +
  83 + // check if file exists on server
  84 + if (empty($file) || !file_exists($file)) {
  85 + return false;
  86 + }
  87 +
  88 + // check if uploaded file can be deleted on server
  89 + if (!unlink($file)) {
  90 + return false;
  91 + }
  92 +
  93 + // if deletion successful, reset your file attributes
  94 + $this->image = null;
  95 + $this->filename = null;
  96 +
  97 + return true;
  98 + }
  99 +
  100 + public function beforeDelete()
  101 + {
  102 + if (parent::beforeDelete()) {
  103 + $this->deleteImage();
  104 + return true;
  105 + } else {
  106 + return false;
  107 + }
  108 + }
  109 +}
common/modules/product/models/ProductVariantTypeSearch.php renamed to common/models/ProjectSearch.php
1 <?php 1 <?php
2 2
3 -namespace common\modules\product\models; 3 +namespace common\models;
4 4
5 use Yii; 5 use Yii;
6 use yii\base\Model; 6 use yii\base\Model;
7 use yii\data\ActiveDataProvider; 7 use yii\data\ActiveDataProvider;
8 -use common\modules\product\models\ProductVariantType; 8 +use common\models\Project;
9 9
10 /** 10 /**
11 - * ProductVariantTypeSearch represents the model behind the search form about `common\modules\product\models\ProductVariantType`. 11 + * ProjectSearch represents the model behind the search form about `common\models\Project`.
12 */ 12 */
13 -class ProductVariantTypeSearch extends ProductVariantType 13 +class ProjectSearch extends Project
14 { 14 {
15 /** 15 /**
16 * @inheritdoc 16 * @inheritdoc
@@ -18,8 +18,8 @@ class ProductVariantTypeSearch extends ProductVariantType @@ -18,8 +18,8 @@ class ProductVariantTypeSearch extends ProductVariantType
18 public function rules() 18 public function rules()
19 { 19 {
20 return [ 20 return [
21 - [['product_variant_type_id'], 'integer'],  
22 - [['name', 'name2'], 'safe'], 21 + [['project_id', 'date_add'], 'integer'],
  22 + [['title', 'link', 'description'], 'safe'],
23 ]; 23 ];
24 } 24 }
25 25
@@ -41,7 +41,7 @@ class ProductVariantTypeSearch extends ProductVariantType @@ -41,7 +41,7 @@ class ProductVariantTypeSearch extends ProductVariantType
41 */ 41 */
42 public function search($params) 42 public function search($params)
43 { 43 {
44 - $query = ProductVariantType::find(); 44 + $query = Project::find();
45 45
46 // add conditions that should always apply here 46 // add conditions that should always apply here
47 47
@@ -59,11 +59,13 @@ class ProductVariantTypeSearch extends ProductVariantType @@ -59,11 +59,13 @@ class ProductVariantTypeSearch extends ProductVariantType
59 59
60 // grid filtering conditions 60 // grid filtering conditions
61 $query->andFilterWhere([ 61 $query->andFilterWhere([
62 - 'product_variant_type_id' => $this->product_variant_type_id, 62 + 'project_id' => $this->project_id,
  63 + 'date_add' => $this->date_add,
63 ]); 64 ]);
64 65
65 - $query->andFilterWhere(['like', 'name', $this->name])  
66 - ->andFilterWhere(['like', 'name2', $this->name2]); 66 + $query->andFilterWhere(['like', 'title', $this->title])
  67 + ->andFilterWhere(['like', 'link', $this->link])
  68 + ->andFilterWhere(['like', 'description', $this->description]);
67 69
68 return $dataProvider; 70 return $dataProvider;
69 } 71 }
common/modules/blog/Module.php deleted
1 -<?php  
2 -namespace common\modules\blog;  
3 -  
4 -use yii\base\BootstrapInterface;  
5 -  
6 -class Module extends \yii\base\Module  
7 -{  
8 - public function init()  
9 - {  
10 - parent::init();  
11 -  
12 - \Yii::configure($this, require(__DIR__.'/config.php'));  
13 - }  
14 -  
15 -}  
common/modules/blog/behaviors/Autocomplete.php deleted
1 -<?php  
2 -namespace common\modules\blog\behaviors;  
3 -  
4 -use common\models\Tools;  
5 -use yii\db\ActiveRecord;  
6 -use yii\base\Behavior;  
7 -use yii\helpers\StringHelper;  
8 -  
9 -/**  
10 - * Класс для автозаполнения полей некими данными или их форматирования  
11 - *  
12 - * Клас предназначен для заполнения полей данными или форматирования данных  
13 - *  
14 - */  
15 -  
16 -class Autocomplete extends Behavior  
17 -{  
18 - /**  
19 - * Атрибуты для обработки  
20 - *  
21 - * Атрибуты считываются автоматически с настроек поведения в конкретном обьекте.  
22 - * Имеет вид ассоциативного массива, где ключ - метод автозаполнения, а значение - массив, каждій єлемент  
23 - * которого - свойство обьекта для обработки, может включать массив - первый єлемент которого свойство,  
24 - * а дальнейшие конфигурации.  
25 - *  
26 - * @var array Ассоциативны массив [key(метод заполнения) => [[0 => property(свойство обьекта), ... дополнительные  
27 - * настройки]], ...[]]  
28 - *  
29 - */  
30 - public $attributes;  
31 -  
32 - /**  
33 - * События  
34 - *  
35 - * События на которые должно срабатывать поведение. Задается ассоциативный массив, в котором ключ - событие  
36 - * связанного обьекта, а значение - метод, который вызывается при этом событии  
37 - *  
38 - * @return array [key(event) => val(method)]  
39 - *  
40 - */  
41 - public function events()  
42 - {  
43 - return [  
44 - ActiveRecord::EVENT_BEFORE_INSERT => 'autocomplete',  
45 - ActiveRecord::EVENT_BEFORE_UPDATE => 'autocomplete',  
46 - ];  
47 - }  
48 -  
49 - /**  
50 - * События  
51 - *  
52 - * События на которые должно срабатывать поведение. Задается ассоциативный массив, в котором ключ - событие  
53 - * связанного обьекта, а значение - метод, который вызывается при этом событии  
54 - * Доступные автозаполнения:  
55 - * ['translit' => ['prop1', ... 'prop2']],  
56 - * где prop - свойство подлежащее транслитерации  
57 - * ['repeat' => [[string 'prop1', string 'target1', boolean 'skipFilled', int 'count', boolean 'truncate', string 'suffix'], ...[]],  
58 - * где prop - свойство для преобразования,  
59 - * target - свойство с которого взять данные,  
60 - * count - число для преобразования,  
61 - * skipFilled - пропустить непустые,  
62 - * truncate - true - обрезать по словам, false - по символам,  
63 - * suffix - суффикс, который добавить после обрезки  
64 - *  
65 - * @param mixed $event Yii обьект свойста https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/concept-events.md  
66 - *  
67 - */  
68 - public function autocomplete($event)  
69 - {  
70 - if(!empty($this->attributes['translit'])) {  
71 - foreach($this->attributes['translit'] as $translit) {  
72 - if($this->owner->hasAttribute($translit)) {  
73 - $this->owner->$translit = Tools::translit($this->owner->$translit);  
74 - }  
75 - }  
76 - }  
77 - if(!empty($this->attributes['repeat'])) {  
78 - foreach($this->attributes['repeat'] as $repeat) {  
79 - if(is_array($repeat) && $this->owner->hasAttribute($repeat[0]) && $this->owner->hasAttribute($repeat[1]) && is_int($repeat[3]) && (empty($this->owner->$repeat[0]) || $repeat[2])) {  
80 - $suffix = $repeat[5]?:'';  
81 - $truncate = $repeat[4]?'truncateWords':'truncate';  
82 - $this->owner->$repeat[0] = StringHelper::$truncate($this->owner->$repeat[1], $repeat[3], $suffix);  
83 - }  
84 - }  
85 - }  
86 - }  
87 -}  
88 \ No newline at end of file 0 \ No newline at end of file
common/modules/blog/config.php deleted
1 -<?php  
2 -return [  
3 - 'components' => [  
4 -  
5 - ],  
6 - 'params' => [  
7 - 'test' => 'Hello',  
8 - ],  
9 -];  
common/modules/blog/controllers/AjaxController.php deleted
1 -<?php  
2 -namespace common\modules\blog\controllers;  
3 -  
4 -use common\models\Language;  
5 -use common\modules\blog\models\ArticleCategory;  
6 -use common\modules\blog\models\ArticleCategoryLang;  
7 -use common\modules\blog\models\ArticleCategoryMedia;  
8 -use common\modules\blog\models\ArticleLang;  
9 -use common\modules\blog\models\ArticleMedia;  
10 -use yii\base\InvalidParamException;  
11 -use yii\web\Controller;  
12 -use yii\web\ForbiddenHttpException;  
13 -use yii\web\NotFoundHttpException;  
14 -  
15 -class AjaxController extends Controller  
16 -{  
17 - public function beforeAction($action)  
18 - {  
19 - if(!\Yii::$app->request->getIsAjax()) {  
20 - //throw new ForbiddenHttpException('Permission denied');  
21 - }  
22 -  
23 - if(!parent::beforeAction($action)) {  
24 - return false;  
25 - }  
26 -  
27 - return true;  
28 - }  
29 -  
30 - public function actionCategoryForm($language_id, $widget_id)  
31 - {  
32 - $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one();  
33 - if(!$model) {  
34 - throw new NotFoundHttpException('Language not found');  
35 - }  
36 - $category_lang = new ArticleCategoryLang();  
37 - return $this->renderAjax('_category_form', ['model' => $model, 'category_lang' => $category_lang, 'widget_id' => $widget_id]);  
38 - }  
39 -  
40 - public function actionArticleForm($language_id, $widget_id)  
41 - {  
42 - $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one();  
43 - if(!$model) {  
44 - throw new NotFoundHttpException('Language not found');  
45 - }  
46 - $article_lang = new ArticleLang();  
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]);  
74 - }  
75 -  
76 - public function actionRemoveImage()  
77 - {  
78 - $post = \Yii::$app->request->post();  
79 - if(!empty($post['article_media_id'])) {  
80 - $article_media = ArticleMedia::findOne($post['article_media_id']);  
81 - if($post['remove_media']) {  
82 - $media = $article_media->media->delete();  
83 - }  
84 - if(!empty($article_media)) {  
85 - $article_media->delete();  
86 - }  
87 - return true;  
88 - } else {  
89 - return false;  
90 - }  
91 - }  
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 -  
110 - public function actionRemoveImageCategory()  
111 - {  
112 - $post = \Yii::$app->request->post();  
113 - if(!empty($post['category_media_id'])) {  
114 - $category_media = ArticleCategoryMedia::findOne($post['category_media_id']);  
115 - if($post['remove_media']) {  
116 - $media = $category_media->media->delete();  
117 - }  
118 - if(!empty($category_media)) {  
119 - $category_media->delete();  
120 - }  
121 - return true;  
122 - } else {  
123 - return false;  
124 - }  
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 - }  
132 -  
133 -}  
common/modules/blog/controllers/ArticleController.php deleted
1 -<?php  
2 -namespace common\modules\blog\controllers;  
3 -  
4 -use common\components\rules\CommentRule;  
5 -use common\components\rules\DeleteRule;  
6 -use common\components\rules\UpdateRule;  
7 -use common\components\rules\ViewRule;  
8 -use common\models\Language;  
9 -use common\modules\blog\models\Article;  
10 -use common\modules\blog\models\ArticleLang;  
11 -use common\modules\blog\models\ArticleMedia;  
12 -use common\modules\blog\models\ArticleToCategory;  
13 -use yii\data\ActiveDataProvider;  
14 -use yii\rbac\DbManager;  
15 -use yii\web\Controller;  
16 -use yii\web\UploadedFile;  
17 -  
18 -class ArticleController extends Controller  
19 -{  
20 -  
21 - public function actionIndex()  
22 - {  
23 - $dataProvider = new ActiveDataProvider([  
24 - 'query' => Article::find(),  
25 - 'pagination' => [  
26 - 'pageSize' => 1,  
27 - ],  
28 - ]);  
29 - return $this->render('index', ['dataProvider' => $dataProvider]);  
30 - }  
31 -  
32 - public function actionCreate()  
33 - {  
34 - $article_langs = array();  
35 - $article = new Article();  
36 - $default_lang = Language::getDefaultLang();  
37 - $images = array();  
38 - $images[$default_lang->language_id]['full'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_FULL]);  
39 - $images[$default_lang->language_id]['preview'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_PREVIEW]);  
40 - $images[0]['additional'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);  
41 - $article->loadDefaultValues();  
42 - $langs = Language::getActiveLanguages();  
43 - $isValid = false;  
44 - if(!empty(\Yii::$app->request->post())) {  
45 - $isValid = true;  
46 - $article->load(\Yii::$app->request->post());  
47 - $article->user_id = \Yii::$app->user->getId();  
48 - $isValid = $article->validate();  
49 - foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) {  
50 - foreach($value as $type => $fields) {  
51 - $images[$lang][$type] = new ArticleMedia(['scenario' => $type]);  
52 - $images[$lang][$type]->type = $type;  
53 - $images[$lang][$type]->language_id = $lang;  
54 - $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");  
55 - $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;  
56 - }  
57 - }  
58 - $images[0]['additional']->language_id = 0;  
59 - $images[0]['additional']->type = 'additional';  
60 - $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile");  
61 - if(empty(\Yii::$app->request->post()['ArticleLang'])) {  
62 - $article_langs[$default_lang->language_id] = new ArticleLang();  
63 - $isValid = ArticleLang::validateMultiple($article_langs) && $isValid;  
64 - } else {  
65 - foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) {  
66 - $article_langs[$index] = new ArticleLang();  
67 - }  
68 - ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post());  
69 - $isValid = ArticleLang::validateMultiple($article_langs) && $isValid;  
70 - }  
71 - } else {  
72 - $article_langs[$default_lang->language_id] = new ArticleLang();  
73 - }  
74 - if($isValid) {  
75 - $article->save(false);  
76 - $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray'];  
77 - if(!empty($article_categories)) {  
78 - foreach($article_categories as $article_category) {  
79 - $articletocategory[$article_category] = new ArticleToCategory();  
80 - $articletocategory[$article_category]->article_category_id = $article_category;  
81 - $articletocategory[$article_category]->link('article', $article);  
82 - }  
83 - }  
84 - $first = 1;  
85 - foreach($images as $lang => $value) {  
86 - foreach($value as $type => $fields) {  
87 - $images[$lang][$type]->upload($article->article_id);  
88 - if($first && $type != 'additional') {  
89 - $media_clone = clone $images[$lang][$type];  
90 - $media_clone->setIsNewRecord(true);  
91 - unset($media_clone->article_media_id);  
92 - $media_clone->language_id = 0;  
93 - $media_clone->upload($article->article_id);  
94 - unset($media_clone);  
95 - $first = 0;  
96 - }  
97 - }  
98 - }  
99 - $first = 1;  
100 - foreach($article_langs as $article_lang) {  
101 - if($first) {  
102 - $article_lang_clone = clone $article_lang;  
103 - $article_lang_clone->language_id = 0;  
104 - $article_lang_clone->link('article', $article);  
105 - unset($article_lang_clone);  
106 - }  
107 - $article_lang->link('article', $article);  
108 - $first = 0;  
109 - }  
110 - echo "ok";  
111 - //$this->redirect('index');  
112 - } else {  
113 - return $this->render('create', [  
114 - 'article_langs' => $article_langs,  
115 - 'article' => $article,  
116 - 'langs' => $langs,  
117 - 'images' => $images  
118 - ]);  
119 - }  
120 - }  
121 -  
122 - public function actionUpdate($id)  
123 - {  
124 - $article = Article::findOne($id);  
125 - $imagestack = $article->getArticleMedia()->all();  
126 - $images = [];  
127 - $images[0]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::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_media_id] = $image;  
136 - $images[$image->language_id][$image->type][$image->article_media_id]->scenario = $image->type;  
137 - }  
138 - }  
139 - foreach($images as $lang => $value) {  
140 - $images[$lang]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);  
141 - }  
142 - $article_langs = $article->getArticleLangs()->where(['>=', 'language_id', '1'])->indexBy('language_id')->all();  
143 - $langs = Language::getActiveLanguages();  
144 - $default_lang = Language::getDefaultLang();  
145 - $isValid = false;  
146 - if(!empty(\Yii::$app->request->post())) {  
147 - $isValid = true;  
148 - $article->load(\Yii::$app->request->post());  
149 - ArticleToCategory::deleteAll(['article_id' => $article->article_id]);  
150 - $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray'];  
151 - if(!empty($article_categories)) {  
152 - foreach($article_categories as $article_category) {  
153 - $articletocategory[$article_category] = new ArticleToCategory();  
154 - $articletocategory[$article_category]->article_category_id = $article_category;  
155 - $articletocategory[$article_category]->link('article', $article);  
156 - }  
157 - }  
158 - $isValid = $article->validate();  
159 - $images[0]['additional'][0]->type = 'additional';  
160 - $images[0]['additional'][0]->language_id = 0;  
161 - $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile");  
162 - $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid;  
163 - foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) {  
164 - foreach($value as $type => $fields) {  
165 - if(!in_array($type, ['full', 'preview'])) continue;  
166 - $images[$lang][$type] = new ArticleMedia(['scenario' => $type]);  
167 - $images[$lang][$type]->language_id = $lang;  
168 - $images[$lang][$type]->type = $type;  
169 - $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");  
170 - $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;  
171 - }  
172 - }  
173 - if(empty(\Yii::$app->request->post()['ArticleLang'])) {  
174 - $isValid = ArticleLang::validateMultiple($article_langs) && $isValid;  
175 - } else {  
176 - foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) {  
177 - if (!array_key_exists($index, $article_langs)) {  
178 - $article_langs[$index] = new ArticleLang();  
179 - $article_langs[$index]->article_id = $article->article_id;  
180 - }  
181 - }  
182 - ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post());  
183 - $isValid = ArticleLang::validateMultiple($article_langs) && $isValid;  
184 - }  
185 - }  
186 - if($isValid) {  
187 - $article->save(false);  
188 - foreach($images as $lang => $value) {  
189 - foreach($value as $type => $fields) {  
190 - if($type == 'additional') {  
191 - $images[$lang][$type][0]->upload($article->id);  
192 - } else {  
193 - if(!empty($images[$lang][$type]->imageFile)) {  
194 - $images[$lang][$type]->replace($article->article_id);  
195 - }  
196 - }  
197 - }  
198 - }  
199 - foreach($article_langs as $article_lang) {  
200 - $article_lang->save(false);  
201 - }  
202 - echo "ok";  
203 - //$this->redirect('index');  
204 - } else {  
205 - return $this->render('update', [  
206 - 'article_langs' => $article_langs,  
207 - 'article' => $article,  
208 - 'langs' => $langs,  
209 - 'images' => $images  
210 - ]);  
211 - }  
212 - }  
213 -  
214 - public function actionDelete($id)  
215 - {  
216 - $this->findModel($id)->delete();  
217 - return $this->redirect(['index']);  
218 - }  
219 -  
220 - protected function findModel($id)  
221 - {  
222 - if (($model = Article::findOne($id)) !== null) {  
223 - return $model;  
224 - } else {  
225 - throw new NotFoundHttpException('The requested page does not exist.');  
226 - }  
227 - }  
228 -}  
common/modules/blog/controllers/CategoryController.php deleted
1 -<?php  
2 -namespace common\modules\blog\controllers;  
3 -  
4 -use common\models\Language;  
5 -use common\modules\blog\models\Article;  
6 -use common\modules\blog\models\ArticleCategory;  
7 -use common\modules\blog\models\ArticleCategoryLang;  
8 -use common\modules\blog\models\ArticleCategoryMedia;  
9 -use common\modules\blog\models\ArticleLang;  
10 -use yii\data\ActiveDataProvider;  
11 -use yii\filters\VerbFilter;  
12 -use yii\web\Controller;  
13 -use yii\web\NotFoundHttpException;  
14 -use yii\web\UploadedFile;  
15 -  
16 -class CategoryController extends Controller  
17 -{  
18 - public function behaviors()  
19 - {  
20 - return [  
21 - 'verbs' => [  
22 - 'class' => VerbFilter::className(),  
23 - 'actions' => [  
24 - 'delete' => ['post']  
25 - ]  
26 - ]  
27 - ];  
28 - }  
29 -  
30 - public function actionIndex()  
31 - {  
32 - $dataProvider = new ActiveDataProvider([  
33 - 'query' => ArticleCategory::find(),  
34 - 'pagination' => [  
35 - 'pageSize' => 1,  
36 - ],  
37 - ]);  
38 - return $this->render('index', ['dataProvider' => $dataProvider]);  
39 - }  
40 -  
41 - public function actionCreate()  
42 - {  
43 - $category_langs = array();  
44 - $category = new ArticleCategory();  
45 - $default_lang = Language::getDefaultLang();  
46 - $images = array();  
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]);  
50 - $category->loadDefaultValues();  
51 - $langs = Language::getActiveLanguages();  
52 - $isValid = false;  
53 - if(!empty(\Yii::$app->request->post())) {  
54 - $isValid = true;  
55 - $category->load(\Yii::$app->request->post());  
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");  
69 - if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) {  
70 - $category_langs[$default_lang->language_id] = new ArticleCategoryLang();  
71 - $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid;  
72 - } else {  
73 - foreach(\Yii::$app->request->post()['ArticleCategoryLang'] as $index => $category_lang) {  
74 - $category_langs[$index] = new ArticleCategoryLang();  
75 - }  
76 - ArticleCategoryLang::loadMultiple($category_langs, \Yii::$app->request->post());  
77 - $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid;  
78 - }  
79 - } else {  
80 - $category_langs[$default_lang->language_id] = new ArticleCategoryLang();  
81 - }  
82 - if($isValid) {  
83 - $category->save(false);  
84 - $first = 1;  
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 - }  
98 - }  
99 - $first = 1;  
100 - foreach($category_langs as $category_lang) {  
101 - if($first) {  
102 - $category_lang_clone = clone $category_lang;  
103 - $category_lang_clone->language_id = 0;  
104 - $category_lang_clone->link('category', $category);  
105 - unset($category_lang_clone);  
106 - }  
107 - $category_lang->link('category', $category);  
108 - $first = 0;  
109 - }  
110 - echo "ok";  
111 - //$this->redirect('index');  
112 - } else {  
113 - return $this->render('create', [  
114 - 'category_langs' => $category_langs,  
115 - 'category' => $category,  
116 - 'langs' => $langs,  
117 - 'images' => $images  
118 - ]);  
119 - }  
120 - }  
121 -  
122 - public function actionUpdate($id)  
123 - {  
124 - $category = ArticleCategory::findOne($id);  
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 - }  
138 - }  
139 - foreach($images as $lang => $value) {  
140 - $images[$lang]['additional'][0] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]);  
141 - }  
142 - $category_langs = $category->getArticleCategoryLangs()->where(['>=', 'language_id', '1'])->indexBy('language_id')->all();  
143 - $langs = Language::getActiveLanguages();  
144 - $default_lang = Language::getDefaultLang();  
145 - $isValid = false;  
146 - if(!empty(\Yii::$app->request->post())) {  
147 - $isValid = true;  
148 - $category->load(\Yii::$app->request->post());  
149 - $isValid = $category->validate();  
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;  
162 - }  
163 - }  
164 - if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) {  
165 - $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid;  
166 - } else {  
167 - foreach(\Yii::$app->request->post()['ArticleCategoryLang'] as $index => $category_lang) {  
168 - if(!array_key_exists($index, $category_langs)) {  
169 - $category_langs[$index] = new ArticleCategoryLang();  
170 - $category_langs[$index]->article_category_id = $category->article_category_id;  
171 - }  
172 - }  
173 - ArticleCategoryLang::loadMultiple($category_langs, \Yii::$app->request->post());  
174 - $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid;  
175 - }  
176 - }  
177 - if($isValid) {  
178 - $category->save(false);  
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 - }  
187 - }  
188 - }  
189 - }  
190 - foreach($category_langs as $category_lang) {  
191 - $category_lang->save(false);  
192 - }  
193 - echo "ok";  
194 - //$this->redirect('index');  
195 - } else {  
196 - return $this->render('update', [  
197 - 'category_langs' => $category_langs,  
198 - 'category' => $category,  
199 - 'langs' => $langs,  
200 - 'images' => $images  
201 - ]);  
202 - }  
203 - }  
204 -  
205 - public function actionDelete($id)  
206 - {  
207 - $this->findModel($id)->delete();  
208 - return $this->redirect(['index']);  
209 - }  
210 -  
211 - protected function findModel($id)  
212 - {  
213 - if (($model = ArticleCategory::findOne($id)) !== null) {  
214 - return $model;  
215 - } else {  
216 - throw new NotFoundHttpException('The requested page does not exist.');  
217 - }  
218 - }  
219 -}  
common/modules/blog/controllers/DefaultController.php deleted
1 -<?php  
2 -namespace common\modules\blog\controllers;  
3 -  
4 -use yii\web\Controller;  
5 -  
6 -class DefaultController extends Controller  
7 -{  
8 - public function actionIndex()  
9 - {  
10 - return $this->render('index');  
11 - }  
12 -}  
common/modules/blog/controllers/MediaController.php deleted
1 -<?php  
2 -namespace common\modules\blog\controllers;  
3 -  
4 -use common\models\Media;  
5 -use common\modules\blog\models\Article;  
6 -use yii\web\Controller;  
7 -use yii\web\UploadedFile;  
8 -  
9 -class MediaController extends Controller  
10 -{  
11 - public function actionIndex()  
12 - {  
13 - $model = new Media();  
14 - if(\Yii::$app->request->isPost) {  
15 - $model->imageFile = UploadedFile::getInstance($model, 'imageFile');  
16 - if($model->upload()) {  
17 - return true;  
18 - } else {  
19 - return false;  
20 - }  
21 - }  
22 - return $this->render('index', ['model' => $model]);  
23 - }  
24 -  
25 - public function actionCreate()  
26 - {  
27 -  
28 - }  
29 -  
30 - public function actionUpdate($id)  
31 - {  
32 -  
33 - }  
34 -  
35 - public function actionDelete($id)  
36 - {  
37 - $model = Media::findOne($id);  
38 - return $model->delete();  
39 - }  
40 -  
41 - protected function findModel($id)  
42 - {  
43 -  
44 - }  
45 -}  
common/modules/blog/controllers/TestController.php deleted
1 -<?php  
2 -namespace common\modules\blog\controllers;  
3 -  
4 -use common\models\Language;  
5 -use common\modules\blog\models\ArticleLang;  
6 -use yii\console\Controller;  
7 -  
8 -class TestController extends Controller  
9 -{  
10 - public function actionIndex()  
11 - {  
12 - $default_lang = Language::getDefaultLang();  
13 - $model[$default_lang->language_id] = new ArticleLang();  
14 - $model[3] = new ArticleLang();  
15 - return $this->render('index', ['model' => $model]);  
16 - }  
17 -}  
18 \ No newline at end of file 0 \ No newline at end of file
common/modules/blog/models/Article.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\blog\models;  
4 -  
5 -use common\models\ActiveRecordRule;  
6 -use common\models\Media;  
7 -use common\models\User;  
8 -use common\modules\blog\behaviors\Autocomplete;  
9 -use Yii;  
10 -use yii\db\Query;  
11 -  
12 -/**  
13 - * This is the model class for table "article".  
14 - *  
15 - * @property integer $article_id  
16 - * @property integer $sort  
17 - * @property string $date_add  
18 - * @property string $date_update  
19 - * @property string $code  
20 - * @property integer $user_id  
21 - * @property string $tag  
22 - * @property integer $article_pid  
23 - * @property integer $status  
24 - * @property integer $comment  
25 - * @property integer $vote  
26 - *  
27 - * @property Article $parent  
28 - * @property Article[] $articles  
29 - * @property User $user  
30 - * @property ArticleLang[] $articleLangs  
31 - * @property ArticleMedia[] $articleMedia  
32 - * @property ArticleToCategory[] $articleToCategories  
33 - * @property Media[] $media  
34 - */  
35 -class Article extends ActiveRecordRule  
36 -{  
37 - /**  
38 - * @inheritdoc  
39 - */  
40 - public static function tableName()  
41 - {  
42 - return 'article';  
43 - }  
44 -  
45 - public function behaviors()  
46 - {  
47 - return [  
48 - [  
49 - 'class' => Autocomplete::className(),  
50 - 'attributes' => [  
51 - 'translit' => ['code'],  
52 - ]  
53 - ]  
54 - ];  
55 - }  
56 - /**  
57 - * @inheritdoc  
58 - */  
59 - public function rules()  
60 - {  
61 - return [  
62 - [['sort', 'article_pid', 'status', 'comment', 'vote'], 'integer'],  
63 - [['date_add', 'date_update'], 'safe'],  
64 - [['code'], 'required'],  
65 - [['code', 'tag'], 'string']  
66 - ];  
67 - }  
68 -  
69 - /**  
70 - * @inheritdoc  
71 - */  
72 - public function attributeLabels()  
73 - {  
74 - return [  
75 - 'article_id' => Yii::t('app', 'ID'),  
76 - 'sort' => Yii::t('app', 'Sort'),  
77 - 'date_add' => Yii::t('app', 'Create At'),  
78 - 'date_update' => Yii::t('app', 'Update At'),  
79 - 'code' => Yii::t('app', 'Code'),  
80 - 'user_id' => Yii::t('app', 'Author'),  
81 - 'tag' => Yii::t('app', 'Tags'),  
82 - 'article_pid' => Yii::t('app', 'Parent ID'),  
83 - 'status' => Yii::t('app', 'Active'),  
84 - 'comment' => Yii::t('app', 'Comments'),  
85 - 'vote' => Yii::t('app', 'Voting'),  
86 - ];  
87 - }  
88 -  
89 - /**  
90 - * @return \yii\db\ActiveQuery  
91 - */  
92 - public function getParent()  
93 - {  
94 - return $this->hasOne(Article::className(), ['article_id' => 'article_pid']);  
95 - }  
96 -  
97 - /**  
98 - * @return \yii\db\ActiveQuery  
99 - */  
100 - public function getArticles()  
101 - {  
102 - return $this->hasMany(Article::className(), ['article_pid' => 'article_id']);  
103 - }  
104 -  
105 - /**  
106 - * @return \yii\db\ActiveQuery  
107 - */  
108 - public function getUser()  
109 - {  
110 - return $this->hasOne(User::className(), ['id' => 'user_id']);  
111 - }  
112 -  
113 - /**  
114 - * @return \yii\db\ActiveQuery  
115 - */  
116 - public function getArticleLangs()  
117 - {  
118 - return $this->hasMany(ArticleLang::className(), ['article_id' => 'article_id']);  
119 - }  
120 -  
121 - /**  
122 - * @return \yii\db\ActiveQuery  
123 - */  
124 - public function getArticleMedia()  
125 - {  
126 - return $this->hasMany(ArticleMedia::className(), ['article_id' => 'article_id']);  
127 - }  
128 -  
129 - public function getMedia()  
130 - {  
131 - return $this->hasMany(Media::className(), ['article_id' => 'media_id'])->via('articleMedia');  
132 - }  
133 - /**  
134 - * @return \yii\db\ActiveQuery  
135 - */  
136 - public function getArticleToCategories()  
137 - {  
138 - return $this->hasMany(ArticleToCategory::className(), ['article_id' => 'article_id']);  
139 - }  
140 -  
141 - public function getArticleCategories()  
142 - {  
143 - return $this->hasMany(ArticleCategory::className(), ['article_category_id' => 'article_category_id'])->viaTable('article_to_category', ['article_id' => 'article_category_id']);  
144 - }  
145 -  
146 - public static function findArticleDropdown($id)  
147 - {  
148 - $query = new Query();  
149 - return $query->select(['l.name', 'a.article_id'])  
150 - ->from(['article a'])  
151 - ->leftJoin(['article_lang l'], 'a.article_id = l.article_id')  
152 - ->where(['l.language_id' => 0, 'a.status' => 1])  
153 - ->andWhere(['not', ['a.article_id' => $id]])  
154 - ->indexBy('article_id')  
155 - ->column();  
156 - }  
157 -  
158 - public function getArticleCategoriesArray()  
159 - {  
160 - return $this->getArticleToCategories()->select('article_category_id')->column();  
161 - }  
162 -  
163 -}  
common/modules/blog/models/ArticleCategory.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\blog\models;  
4 -  
5 -use common\modules\blog\behaviors\Autocomplete;  
6 -use Yii;  
7 -use yii\behaviors\TimestampBehavior;  
8 -use yii\db\ActiveRecord;  
9 -use yii\db\Query;  
10 -  
11 -/**  
12 - * This is the model class for table "article_category".  
13 - *  
14 - * @property integer $article_category_id  
15 - * @property integer $status  
16 - * @property integer $sort  
17 - * @property string $code  
18 - * @property string $date_add  
19 - * @property string $date_update  
20 - * @property string $tag  
21 - * @property integer $artucle_category_pid  
22 - *  
23 - * @property Article[] $articles  
24 - * @property ArticleCategory $parent  
25 - * @property ArticleCategory[] $articleCategories  
26 - * @property ArticleCategoryLang[] $articleCategoryLangs  
27 - * @property ArticleCategoryMedia[] $articleCategoryMedia  
28 - */  
29 -class ArticleCategory extends ActiveRecord  
30 -{  
31 - /**  
32 - * @inheritdoc  
33 - */  
34 - public static function tableName()  
35 - {  
36 - return 'article_category';  
37 - }  
38 -  
39 - public function behaviors()  
40 - {  
41 - return [  
42 - [  
43 - 'class' => Autocomplete::className(),  
44 - 'attributes' => [  
45 - 'translit' => ['code'],  
46 - ]  
47 - ]  
48 - ];  
49 - }  
50 - /**  
51 - * @inheritdoc  
52 - */  
53 - public function rules()  
54 - {  
55 - return [  
56 - [['status', 'sort', 'article_category_pid'], 'integer'],  
57 - [['code'], 'required'],  
58 - [['code', 'tag'], 'string'],  
59 - [['date_add', 'date_update'], 'safe'],  
60 - [['status'], 'boolean'],  
61 - ];  
62 - }  
63 -  
64 - /**  
65 - * @inheritdoc  
66 - */  
67 - public function attributeLabels()  
68 - {  
69 - return [  
70 - 'article_category_id' => Yii::t('app', 'ID'),  
71 - 'status' => Yii::t('app', 'Active'),  
72 - 'sort' => Yii::t('app', 'Sort'),  
73 - 'code' => Yii::t('app', 'Code'),  
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 - ];  
79 - }  
80 -  
81 - /**  
82 - * @return \yii\db\ActiveQuery  
83 - */  
84 - public function getArticles()  
85 - {  
86 - return $this->hasMany(Article::className(), ['article_id' => 'article_id'])->viaTable('article_to_category', ['article_category_id' => 'article_category_id']) ;  
87 - }  
88 -  
89 - /**  
90 - * @return \yii\db\ActiveQuery  
91 - */  
92 - public function getParent()  
93 - {  
94 - return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_pid']);  
95 - }  
96 -  
97 - /**  
98 - * @return \yii\db\ActiveQuery  
99 - */  
100 - public function getArticleCategories()  
101 - {  
102 - return $this->hasMany(ArticleCategory::className(), ['article_category_pid' => 'article_category_id']);  
103 - }  
104 -  
105 - /**  
106 - * @return \yii\db\ActiveQuery  
107 - */  
108 - public function getArticleCategoryLangs()  
109 - {  
110 - return $this->hasMany(ArticleCategoryLang::className(), ['article_category_id' => 'article_category_id']);  
111 - }  
112 -  
113 - /**  
114 - * @return \yii\db\ActiveQuery  
115 - */  
116 - public function getArticleCategoryMedia()  
117 - {  
118 - return $this->hasMany(ArticleCategoryMedia::className(), ['article_category_id' => 'article_category_id']);  
119 - }  
120 -  
121 - public static function findArticleCategoryDropdown($id)  
122 - {  
123 - $query = new Query();  
124 - return $query->select(['l.name', 'c.article_category_id'])  
125 - ->from(['article_category c'])  
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();  
131 - }  
132 -  
133 -}  
common/modules/blog/models/ArticleCategoryLang.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\blog\models;  
4 -  
5 -use common\modules\blog\behaviors\Autocomplete;  
6 -use Yii;  
7 -  
8 -/**  
9 - * This is the model class for table "article_category_lang".  
10 - *  
11 - * @property integer $article_category_language_id  
12 - * @property integer $language_id  
13 - * @property integer $article_category_id  
14 - * @property string $text  
15 - * @property string $preview  
16 - * @property string $seo_url  
17 - * @property string $name  
18 - * @property string $meta_title  
19 - * @property string $meta_descr  
20 - * @property string $meta_keyword  
21 - * @property string $h1_tag  
22 - * @property string $tag  
23 - *  
24 - * @property ArticleCategory $category  
25 - * @property Language $lang  
26 - */  
27 -class ArticleCategoryLang extends \yii\db\ActiveRecord  
28 -{  
29 - /**  
30 - * @inheritdoc  
31 - */  
32 - public static function tableName()  
33 - {  
34 - return 'article_category_lang';  
35 - }  
36 -  
37 - public function behaviors()  
38 - {  
39 - return [  
40 - [  
41 - 'class' => Autocomplete::className(),  
42 - 'attributes' => [  
43 - 'repeat' => [['preview', 'text', false, 5, true, '...']],  
44 - ]  
45 - ]  
46 - ];  
47 - }  
48 - /**  
49 - * @inheritdoc  
50 - */  
51 - public function rules()  
52 - {  
53 - return [  
54 - [['language_id', 'article_category_id'], 'integer'],  
55 - [['text', 'name'], 'required'],  
56 - [['text', 'preview', 'seo_url', 'name', 'meta_title', 'meta_descr', 'meta_keyword', 'h1_tag', 'tag'], 'string'],  
57 - ['seo_url', function($attribute, $params) {  
58 - $pattern = "/^[a-zA-Z\d_-]+$/";  
59 - if(!preg_match($pattern, $this->$attribute)) {  
60 - $this->addError($attribute, Yii::t('app', "Pattern doesn't match."));  
61 - }  
62 - }]  
63 - ];  
64 - }  
65 -  
66 - /**  
67 - * @inheritdoc  
68 - */  
69 - public function attributeLabels()  
70 - {  
71 - return [  
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'),  
76 - 'preview' => Yii::t('app', 'Preview'),  
77 - 'seo_url' => Yii::t('app', 'Seo Url'),  
78 - 'name' => Yii::t('app', 'Name'),  
79 - 'meta_title' => Yii::t('app', 'Meta Title'),  
80 - 'meta_descr' => Yii::t('app', 'Meta Descr'),  
81 - 'meta_keyword' => Yii::t('app', 'Meta Keywords'),  
82 - 'h1_tag' => Yii::t('app', 'H1 Tag'),  
83 - 'tag' => Yii::t('app', 'Tags'),  
84 - ];  
85 - }  
86 -  
87 - /**  
88 - * @return \yii\db\ActiveQuery  
89 - */  
90 - public function getCategory()  
91 - {  
92 - return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']);  
93 - }  
94 -  
95 - /**  
96 - * @return \yii\db\ActiveQuery  
97 - */  
98 - public function getLang()  
99 - {  
100 - return $this->hasOne(Language::className(), ['language_id' => 'language_id']);  
101 - }  
102 -}  
common/modules/blog/models/ArticleCategoryMedia.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\blog\models;  
4 -  
5 -use common\models\Media;  
6 -use Yii;  
7 -  
8 -/**  
9 - * This is the model class for table "article_category_media".  
10 - *  
11 - * @property integer $article_category_media_id  
12 - * @property integer $article_category_id  
13 - * @property integer $media_id  
14 - * @property string $media_alt  
15 - * @property string $media_title  
16 - * @property string $media_caption  
17 - * @property string $type  
18 - * @property string $language_id  
19 - *  
20 - * @property ArticleCategory $category  
21 - * @property Media $media  
22 - * @property Language $lang  
23 - */  
24 -class ArticleCategoryMedia extends \yii\db\ActiveRecord  
25 -{  
26 - const SCENARIO_FULL = 'full';  
27 - const SCENARIO_PREVIEW = 'preview';  
28 - const SCENARIO_ADDITIONAL = 'additional';  
29 - public $imageFile;  
30 - /**  
31 - * @inheritdoc  
32 - */  
33 - public static function tableName()  
34 - {  
35 - return 'article_category_media';  
36 - }  
37 -  
38 - public function scenarios()  
39 - {  
40 - $scenarios = parent::scenarios();  
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'];  
44 - return $scenarios;  
45 - }  
46 -  
47 - /**  
48 - * @inheritdoc  
49 - */  
50 - public function rules()  
51 - {  
52 - return [  
53 - [['article_category_id', 'media_id'], 'required'],  
54 - [['article_category_id', 'media_id'], 'integer'],  
55 - [['media_alt', 'media_title', 'media_caption'], 'string'],  
56 - [['type'], 'string', 'max' => 10],  
57 - [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL],  
58 - [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_PREVIEW],  
59 - [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'maxFiles' => 10, 'on' => self::SCENARIO_ADDITIONAL]  
60 - ];  
61 - }  
62 -  
63 - /**  
64 - * @inheritdoc  
65 - */  
66 - public function attributeLabels()  
67 - {  
68 - return [  
69 - 'article_category_media_id' => Yii::t('app', 'ID'),  
70 - 'article_category_id' => Yii::t('app', 'Category ID'),  
71 - 'media_id' => Yii::t('app', 'Media ID'),  
72 - 'media_alt' => Yii::t('app', 'Media Alt'),  
73 - 'media_title' => Yii::t('app', 'Media Title'),  
74 - 'media_caption' => Yii::t('app', 'Media Caption'),  
75 - 'type' => Yii::t('app', 'Type'),  
76 - 'imageFile' => Yii::t('app', 'Image File'),  
77 - 'language_id' => Yii::t('app', 'Language ID'),  
78 - ];  
79 - }  
80 -  
81 - /**  
82 - * @return \yii\db\ActiveQuery  
83 - */  
84 - public function getCategory()  
85 - {  
86 - return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']);  
87 - }  
88 -  
89 - /**  
90 - * @return \yii\db\ActiveQuery  
91 - */  
92 - public function getMedia()  
93 - {  
94 - return $this->hasOne(Media::className(), ['media_id' => 'media_id']);  
95 - }  
96 -  
97 - public function upload($category_id)  
98 - {  
99 - $this->article_category_id = $category_id;  
100 - if(is_array($this->imageFile)) {  
101 - $ok = true;  
102 - foreach($this->imageFile as $image) {  
103 - $media_category = clone $this;  
104 - $media = new Media();  
105 - $media->imageFile = $image;  
106 - $media->upload();  
107 - $media_category->media_id = $media->media_id;  
108 - $ok = $media_category->save() && $ok;  
109 - unset($media_category);  
110 - }  
111 - return $ok;  
112 - } elseif(!empty($this->imageFile)) {  
113 - $media = new Media();  
114 - $media->imageFile = $this->imageFile;  
115 - $media->upload();  
116 - $this->media_id = $media->media_id;  
117 - return $this->save();  
118 - }  
119 - }  
120 -  
121 - public function replace($category_id, $removeMedia = false)  
122 - {  
123 - $this->article_category_id = $category_id;  
124 - if($removeMedia) {  
125 - $category_media = ArticleCategoryMedia::find()->select('media_id')->where(['article_category_id' => $this->article_category_id, 'type' => $this->type])->column();  
126 - $media = array();  
127 - foreach($category_media as $media_id) {  
128 - $media[] = Media::findOne(['media_id' => $media_id]);  
129 - }  
130 - $media = array_unique($media);  
131 - foreach($media as $one_media) {  
132 - if($one_media instanceof Media) {  
133 - $one_media->delete();  
134 - }  
135 - }  
136 - unset($media);  
137 - unset($category_media);  
138 - }  
139 - if(is_array($this->imageFile)) {  
140 - $ok = true;  
141 - foreach($this->imageFile as $image) {  
142 - $media_category = clone $this;  
143 - $media = new Media();  
144 - $media->imageFile = $image;  
145 - $media->upload();  
146 - $media_category->media_id = $media->media_id;  
147 - $ok = $media_category->save() && $ok;  
148 - unset($media_category);  
149 - }  
150 - return $ok;  
151 - } elseif(!empty($this->imageFile)) {  
152 - ArticleCategoryMedia::deleteAll(['category_id' => $this->article_category_id, 'type' => $this->type]);  
153 - $media = new Media();  
154 - $media->imageFile = $this->imageFile;  
155 - $media->upload();  
156 - $this->media_id = $media->media_id;  
157 - $this->setIsNewRecord(true);  
158 - return $this->save();  
159 - }  
160 - }  
161 -  
162 -}  
common/modules/blog/models/ArticleLang.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\blog\models;  
4 -  
5 -use Yii;  
6 -use common\models\Language;  
7 -  
8 -/**  
9 - * This is the model class for table "article_lang".  
10 - *  
11 - * @property integer $article_language_id  
12 - * @property integer $language_id  
13 - * @property integer $article_id  
14 - * @property string $text  
15 - * @property string $seo_url  
16 - * @property string $name  
17 - * @property string $preview  
18 - * @property string $meta_title  
19 - * @property string $meta_descr  
20 - * @property string $meta_keyword  
21 - * @property string $h1_tag  
22 - * @property string $tag  
23 - *  
24 - * @property Article $article  
25 - * @property Language $lang  
26 - */  
27 -class ArticleLang extends \yii\db\ActiveRecord  
28 -{  
29 - /**  
30 - * @inheritdoc  
31 - */  
32 - public static function tableName()  
33 - {  
34 - return 'article_lang';  
35 - }  
36 -  
37 - /**  
38 - * @inheritdoc  
39 - */  
40 - public function rules()  
41 - {  
42 - return [  
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 - ];  
47 - }  
48 -  
49 - /**  
50 - * @inheritdoc  
51 - */  
52 - public function attributeLabels()  
53 - {  
54 - return [  
55 - 'article_language_id' => Yii::t('app', 'ID'),  
56 - 'language_id' => Yii::t('app', 'Lang ID'),  
57 - 'article_id' => Yii::t('app', 'Article ID'),  
58 - 'text' => Yii::t('app', 'Text'),  
59 - 'seo_url' => Yii::t('app', 'Seo Url'),  
60 - 'name' => Yii::t('app', 'Name'),  
61 - 'preview' => Yii::t('app', 'Preview'),  
62 - 'meta_title' => Yii::t('app', 'Meta Title'),  
63 - 'meta_descr' => Yii::t('app', 'Meta Descr'),  
64 - 'meta_keyword' => Yii::t('app', 'Meta Keywords'),  
65 - 'h1_tag' => Yii::t('app', 'H1 Tag'),  
66 - 'tag' => Yii::t('app', 'Tags'),  
67 - ];  
68 - }  
69 -  
70 - /**  
71 - * @return \yii\db\ActiveQuery  
72 - */  
73 - public function getArticle()  
74 - {  
75 - return $this->hasOne(Article::className(), ['article_id' => 'article_id']);  
76 - }  
77 -  
78 - /**  
79 - * @return \yii\db\ActiveQuery  
80 - */  
81 - public function getLang()  
82 - {  
83 - return $this->hasOne(Language::className(), ['language_id' => 'language_id']);  
84 - }  
85 -}  
common/modules/blog/models/ArticleMedia.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\blog\models;  
4 -  
5 -use common\models\Media;  
6 -use Yii;  
7 -use yii\web\UploadedFile;  
8 -  
9 -/**  
10 - * This is the model class for table "article_media".  
11 - *  
12 - * @property integer $article_media_id  
13 - * @property integer $article_id  
14 - * @property integer $media_id  
15 - * @property string $type  
16 - * @property string $media_alt  
17 - * @property string $media_title  
18 - * @property string $media_caption  
19 - * @property integer $language_id  
20 - *  
21 - * @property Article $article  
22 - * @property Media $media  
23 - */  
24 -class ArticleMedia extends \yii\db\ActiveRecord  
25 -{  
26 - const SCENARIO_FULL = 'full';  
27 - const SCENARIO_PREVIEW = 'preview';  
28 - const SCENARIO_ADDITIONAL = 'additional';  
29 - public $imageFile;  
30 - /**  
31 - * @inheritdoc  
32 - */  
33 - public static function tableName()  
34 - {  
35 - return 'article_media';  
36 - }  
37 -  
38 - public function scenarios()  
39 - {  
40 - $scenarios = parent::scenarios();  
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'];  
44 - return $scenarios;  
45 - }  
46 -  
47 - /**  
48 - * @inheritdoc  
49 - */  
50 - public function rules()  
51 - {  
52 - return [  
53 - [['article_id', 'media_id'], 'required'],  
54 - [['article_id', 'media_id', 'language_id'], 'integer'],  
55 - [['media_alt', 'media_title', 'media_caption'], 'string'],  
56 - [['type'], 'string', 'max' => 10],  
57 - [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL],  
58 - [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_PREVIEW],  
59 - [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'maxFiles' => 10, 'on' => self::SCENARIO_ADDITIONAL]  
60 - ];  
61 - }  
62 -  
63 - /**  
64 - * @inheritdoc  
65 - */  
66 - public function attributeLabels()  
67 - {  
68 - return [  
69 - 'article_media_id' => Yii::t('app', 'ID'),  
70 - 'article_id' => Yii::t('app', 'Article ID'),  
71 - 'media_id' => Yii::t('app', 'Media ID'),  
72 - 'type' => Yii::t('app', 'Type'),  
73 - 'media_alt' => Yii::t('app', 'Media Alt'),  
74 - 'media_title' => Yii::t('app', 'Media Title'),  
75 - 'media_caption' => Yii::t('app', 'Media Caption'),  
76 - 'imageFile' => Yii::t('app', 'Image File'),  
77 - ];  
78 - }  
79 -  
80 - /**  
81 - * @return \yii\db\ActiveQuery  
82 - */  
83 - public function getArticle()  
84 - {  
85 - return $this->hasOne(Article::className(), ['article_id' => 'article_id']);  
86 - }  
87 -  
88 - /**  
89 - * @return \yii\db\ActiveQuery  
90 - */  
91 - public function getMedia()  
92 - {  
93 - return $this->hasOne(Media::className(), ['media_id' => 'media_id']);  
94 - }  
95 -  
96 - public function upload($article_id)  
97 - {  
98 - $this->article_id = $article_id;  
99 - if(is_array($this->imageFile)) {  
100 - $ok = true;  
101 - foreach($this->imageFile as $image) {  
102 - $media_article = clone $this;  
103 - $media = new Media();  
104 - $media->imageFile = $image;  
105 - $media->upload();  
106 - $media_article->media_id = $media->media_id;  
107 - $ok = $media_article->save() && $ok;  
108 - unset($media_article);  
109 - }  
110 - return $ok;  
111 - } elseif(!empty($this->imageFile)) {  
112 - $media = new Media();  
113 - $media->imageFile = $this->imageFile;  
114 - $media->upload();  
115 - $this->media_id = $media->media_id;  
116 - return $this->save();  
117 - }  
118 - }  
119 -  
120 - public function replace($article_id, $removeMedia = false)  
121 - {  
122 - $this->article_id = $article_id;  
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();  
125 - $media = array();  
126 - foreach($article_media as $media_id) {  
127 - $media[] = Media::findOne(['media_id' => $media_id]);  
128 - }  
129 - $media = array_unique($media);  
130 - foreach($media as $one_media) {  
131 - if($one_media instanceof Media) {  
132 - $one_media->delete();  
133 - }  
134 - }  
135 - unset($media);  
136 - unset($article_media);  
137 - }  
138 - if(is_array($this->imageFile)) {  
139 - $ok = true;  
140 - foreach($this->imageFile as $image) {  
141 - $media_article = clone $this;  
142 - $media = new Media();  
143 - $media->imageFile = $image;  
144 - $media->upload();  
145 - $media_article->media_id = $media->media_id;  
146 - $ok = $media_article->save() && $ok;  
147 - unset($media_article);  
148 - }  
149 - return $ok;  
150 - } elseif(!empty($this->imageFile)) {  
151 - ArticleMedia::deleteAll(['article_id' => $this->article_id, 'type' => $this->type, 'language_id' => $this->language_id]);  
152 - $media = new Media();  
153 - $media->imageFile = $this->imageFile;  
154 - $media->upload();  
155 - $this->media_id = $media->media_id;  
156 - $this->setIsNewRecord(true);  
157 - return $this->save();  
158 - }  
159 - }  
160 -  
161 -}  
common/modules/blog/models/ArticleToCategory.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\blog\models;  
4 -  
5 -use Yii;  
6 -  
7 -/**  
8 - * This is the model class for table "article_to_category".  
9 - *  
10 - * @property integer $article_id  
11 - * @property integer $article_category_id  
12 - *  
13 - * @property Article $article  
14 - * @property ArticleCategory $category  
15 - */  
16 -class ArticleToCategory extends \yii\db\ActiveRecord  
17 -{  
18 - /**  
19 - * @inheritdoc  
20 - */  
21 - public static function tableName()  
22 - {  
23 - return 'article_to_category';  
24 - }  
25 -  
26 - /**  
27 - * @inheritdoc  
28 - */  
29 - public function rules()  
30 - {  
31 - return [  
32 - [['article_id', 'article_category_id'], 'integer']  
33 - ];  
34 - }  
35 -  
36 - /**  
37 - * @inheritdoc  
38 - */  
39 - public function attributeLabels()  
40 - {  
41 - return [  
42 - 'article_id' => Yii::t('app', 'Article ID'),  
43 - 'article_category_id' => Yii::t('app', 'Category ID'),  
44 - ];  
45 - }  
46 -  
47 - /**  
48 - * @return \yii\db\ActiveQuery  
49 - */  
50 - public function getArticle()  
51 - {  
52 - return $this->hasOne(Article::className(), ['article_id' => 'article_id']);  
53 - }  
54 -  
55 - /**  
56 - * @return \yii\db\ActiveQuery  
57 - */  
58 - public function getCategory()  
59 - {  
60 - return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']);  
61 - }  
62 -}  
common/modules/blog/views/ajax/_article_form.php deleted
1 -<?php  
2 -  
3 -use yii\bootstrap\ActiveField;  
4 -use mihaildev\ckeditor\CKEditor;  
5 -  
6 -if(empty($form)) {  
7 - $new_form = true;  
8 - $form = \yii\bootstrap\ActiveForm::begin();  
9 -}  
10 -?>  
11 -<div role="" class="tab-pane active ajax-loaded" id="<?=$widget_id?>-<?=$model->language_id?>">  
12 -  
13 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?>  
14 -  
15 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>  
16 -  
17 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>  
18 -  
19 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?>  
20 -  
21 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]name"]))->textInput() ?>  
22 -  
23 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?>  
24 -  
25 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?>  
26 -  
27 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?>  
28 -  
29 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?>  
30 -  
31 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]tag"]))->textInput() ?>  
32 -  
33 -</div>  
34 -<?php  
35 - if($new_form) {  
36 - $form->end();  
37 - }  
38 -?>  
common/modules/blog/views/ajax/_article_form_test.php deleted
1 -<?php  
2 -  
3 -use yii\bootstrap\ActiveField;  
4 -use mihaildev\ckeditor\CKEditor;  
5 - //Если это не AJAX запрос, то переменная $form будет определена и нам не придется генерировать форму.  
6 -if(empty($form)) {  
7 - $new_form = true;  
8 - $form = \yii\bootstrap\ActiveForm::begin();  
9 -}  
10 -?>  
11 -<div role="" class="tab-pane active ajax-loaded" id="<?=$widget_id?>-<?=$model->language_id?>">  
12 -  
13 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?>  
14 -  
15 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>  
16 -  
17 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>  
18 -  
19 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?>  
20 -  
21 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]name"]))->textInput() ?>  
22 -  
23 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?>  
24 -  
25 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?>  
26 -  
27 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?>  
28 -  
29 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?>  
30 -  
31 - <?= (new ActiveField(['model' => $model, 'attribute' => "[$model->language_id]tag"]))->textInput() ?>  
32 -  
33 -</div>  
34 -<?php  
35 - if($new_form) {  
36 - $form->end();  
37 - }  
38 -?>  
common/modules/blog/views/ajax/_article_media_form.php deleted
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 deleted
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' => $category_lang, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?>  
11 -  
12 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>  
13 -  
14 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?>  
15 -  
16 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?>  
17 -  
18 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]name"]))->textInput() ?>  
19 -  
20 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?>  
21 -  
22 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?>  
23 -  
24 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?>  
25 -  
26 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?>  
27 -  
28 - <?= (new ActiveField(['model' => $category_lang, 'attribute' => "[$model->language_id]tag"]))->textInput() ?>  
29 -  
30 -</div>  
31 -<?php  
32 -$form->end();  
33 -?>  
common/modules/blog/views/article/_form.php deleted
1 -<?php  
2 -use common\modules\blog\models\ArticleCategory;  
3 -use common\modules\blog\models\ArticleMedia;  
4 -use common\widgets\Multilang;  
5 - use common\widgets\Multilanguage;  
6 - use yii\bootstrap\ActiveForm;  
7 -use common\modules\blog\models\Article;  
8 -use yii\bootstrap\Html;  
9 -use mihaildev\ckeditor\CKEditor;  
10 -use yii\helpers\Json;  
11 -use yii\helpers\Url;  
12 -use yii\widgets\Pjax;  
13 -  
14 -$def_lang = array_keys($langs)[0];  
15 -$uploaddir = \Yii::getAlias('@saveImageDir');  
16 -?>  
17 -<div class="article-form">  
18 -  
19 - <?php $form = \yii\bootstrap\ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>  
20 -  
21 - <?= $form->field($article, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?>  
22 -  
23 - <?= $form->field($article, 'tag')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?>  
24 -  
25 - <?= $form->field($article, 'sort')->input('number') ?>  
26 -  
27 - <?= $form->field($article, 'article_pid')  
28 - ->dropDownList(Article::findArticleDropdown($article->article_id), ['prompt' => Yii::t('app', 'Select parent')]) ?>  
29 -  
30 - <?= $form->field($article, 'articleCategoriesArray')  
31 - ->dropDownList(ArticleCategory::findArticleCategoryDropdown(NULL), ['multiple' => 'multiple'])->label(\Yii::t('app', 'Article Categories Array')); ?>  
32 -  
33 - <?= $form->field($article, 'status')->checkbox() ?>  
34 -  
35 - <ul class="nav nav-tabs" id="image-tabs" role="tablist">  
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>  
39 - </ul>  
40 - <div class="tab-content image-tab-content">  
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();  
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'>";  
84 - }  
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  
109 - }  
110 - }  
111 - }  
112 - ?>  
113 - </div>  
114 - </div>  
115 -  
116 - <hr>  
117 -  
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 - ?>  
127 - <?php  
128 - $first = 1;  
129 - foreach($article_langs as $index => $article_lang) {  
130 - ?>  
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]) ?>  
134 -  
135 - <?= $form->field($article_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?>  
136 -  
137 - <?= $form->field($article_langs[$index], "[$index]preview")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?>  
138 -  
139 - <?= $form->field($article_langs[$index], "[$index]seo_url")->textInput() ?>  
140 -  
141 - <?= $form->field($article_langs[$index], "[$index]name")->textInput() ?>  
142 -  
143 - <?= $form->field($article_langs[$index], "[$index]meta_title")->textInput() ?>  
144 -  
145 - <?= $form->field($article_langs[$index], "[$index]meta_descr")->textarea(); ?>  
146 -  
147 - <?= $form->field($article_langs[$index], "[$index]meta_keywords")->textInput() ?>  
148 -  
149 - <?= $form->field($article_langs[$index], "[$index]h1_tag")->textInput() ?>  
150 -  
151 - <?= $form->field($article_langs[$index], "[$index]tags")->textInput() ?>  
152 -  
153 - </div>  
154 - <?php  
155 - $first = 0;  
156 - }  
157 - ?>  
158 - <?php  
159 - $multilang->end();  
160 - */  
161 - ?>  
162 -  
163 - <div class="form-group">  
164 - <?= Html::submitButton($article->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $article->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>  
165 - </div>  
166 -  
167 - <?php ActiveForm::end(); ?>  
168 -  
169 -</div>  
170 -<script>  
171 - var confirm_message = '<?= \Yii::t('app', 'Remove image?') ?>';  
172 -</script>  
173 \ No newline at end of file 0 \ No newline at end of file
common/modules/blog/views/article/create.php deleted
1 -<?php  
2 -use yii\helpers\Html;  
3 -  
4 -$this->title = Yii::t('app', 'Article create');  
5 -$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Articles'), 'url' => ['index']];  
6 -$this->params['breadcrumbs'][] = $this->title;  
7 -?>  
8 -<div class="article-create">  
9 -  
10 - <h1><?= Html::encode($this->title) ?></h1>  
11 -  
12 - <?= $this->render('_form', [  
13 - 'article_langs' => $article_langs,  
14 - 'article' => $article,  
15 - 'langs' => $langs,  
16 - 'images' => $images  
17 - ]) ?>  
18 -  
19 -</div>  
common/modules/blog/views/article/index.php deleted
1 -<?php  
2 -use yii\grid\ActionColumn;  
3 -use yii\grid\Column;  
4 -use yii\grid\GridView;  
5 -use common\modules\blog\models\Article;  
6 -use common\models\Language;  
7 -  
8 -echo GridView::widget([  
9 - 'dataProvider' => $dataProvider,  
10 - 'columns' => [  
11 - 'article_id',  
12 - 'code',  
13 - 'date_add',  
14 - [  
15 - 'value' => function($data) {  
16 - return $data->user->firstname.' '.$data->user->lastname;  
17 - },  
18 - 'header' => Yii::t('app', 'Author')  
19 - ],  
20 - [  
21 - 'class' => Column::className(),  
22 - 'header' => Yii::t('app', 'Name'),  
23 - 'content' => function($model, $key, $index, $column) {  
24 - return $model->getArticleLangs()->where(['language_id' => Language::getDefaultLang()->language_id])->one()->name;  
25 - }  
26 - ],  
27 - [  
28 - 'class' => ActionColumn::className(),  
29 - 'template' => '{update} {delete}'  
30 - ]  
31 - ]  
32 -]);  
33 \ No newline at end of file 0 \ No newline at end of file
common/modules/blog/views/article/update.php deleted
1 -<?php  
2 -use yii\helpers\Html;  
3 -  
4 -$this->title = Yii::t('app', 'Article update');  
5 -$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Articles'), 'url' => ['index']];  
6 -$this->params['breadcrumbs'][] = $this->title;  
7 -?>  
8 -<div class="article-create">  
9 -  
10 - <h1><?= Html::encode($this->title) ?></h1>  
11 - <?= $this->render('_form', [  
12 - 'article_langs' => $article_langs,  
13 - 'article' => $article,  
14 - 'langs' => $langs,  
15 - 'images' => $images  
16 - ]) ?>  
17 -  
18 -</div>  
common/modules/blog/views/category/_form.php deleted
1 -<?php  
2 -use common\modules\blog\models\ArticleCategoryMedia;  
3 -use common\widgets\Multilang;  
4 -use yii\bootstrap\ActiveForm;  
5 -use common\modules\blog\models\ArticleCategory;  
6 -use yii\bootstrap\Html;  
7 -use mihaildev\ckeditor\CKEditor;  
8 -use yii\helpers\Json;  
9 -use yii\helpers\Url;  
10 -  
11 -$def_lang = array_keys($langs)[0];  
12 -$uploaddir = \Yii::getAlias('@saveImageDir');  
13 -?>  
14 -<div class="category-form">  
15 -  
16 - <?php $form = \yii\bootstrap\ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>  
17 -  
18 - <?= $form->field($category, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?>  
19 -  
20 - <?= $form->field($category, 'tag')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?>  
21 -  
22 - <?= $form->field($category, 'sort')->input('number') ?>  
23 -  
24 - <?= $form->field($category, 'article_category_pid')  
25 - ->dropDownList(ArticleCategory::findArticleCategoryDropdown($category->article_category_id), ['prompt' => Yii::t('app', 'Select parent')]) ?>  
26 -  
27 - <?= $form->field($category, 'status')->checkbox() ?>  
28 -  
29 - <ul class="nav nav-tabs" id="image-tabs" role="tablist">  
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>  
33 - </ul>  
34 - <div class="tab-content image-tab-content">  
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();  
59 - ?>  
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'>";  
78 - }  
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  
103 - }  
104 - }  
105 - }  
106 - ?>  
107 - </div>  
108 - </div>  
109 -  
110 - <hr>  
111 -  
112 - <?php  
113 - $multilang = Multilang::begin(['ajaxpath' => Url::to(['/blog/ajax/category-form']), 'form' => $form, 'data_langs' => $category_langs])  
114 - ?>  
115 - <?php  
116 - $first = 1;  
117 - foreach($category_langs as $index => $category_lang) {  
118 - ?>  
119 - <div role="" class="tab-pane <?php if($first) { echo 'active main-tab'; } ?>" id="lang-<?=$index?>">  
120 - <?= $form->field($category_langs[$index], "[$index]language_id")->label(false)->hiddenInput(['value' => $index]) ?>  
121 -  
122 - <?= $form->field($category_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?>  
123 -  
124 - <?= $form->field($category_langs[$index], "[$index]preview")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?>  
125 -  
126 - <?= $form->field($category_langs[$index], "[$index]seo_url")->textInput() ?>  
127 -  
128 - <?= $form->field($category_langs[$index], "[$index]name")->textInput() ?>  
129 -  
130 - <?= $form->field($category_langs[$index], "[$index]meta_title")->textInput() ?>  
131 -  
132 - <?= $form->field($category_langs[$index], "[$index]meta_descr")->textarea(); ?>  
133 -  
134 - <?= $form->field($category_langs[$index], "[$index]meta_keyword")->textInput() ?>  
135 -  
136 - <?= $form->field($category_langs[$index], "[$index]h1_tag")->textInput() ?>  
137 -  
138 - <?= $form->field($category_langs[$index], "[$index]tag")->textInput() ?>  
139 -  
140 - </div>  
141 - <?php  
142 - $first = 0;  
143 - }  
144 - ?>  
145 - <?php  
146 - $multilang->end();  
147 - ?>  
148 -  
149 - <div class="form-group">  
150 - <?= Html::submitButton($category->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $category->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>  
151 - </div>  
152 -  
153 - <?php ActiveForm::end(); ?>  
154 -  
155 -</div>  
156 -<script>  
157 - var confirm_message = '<?= \Yii::t('app', 'Remove image?') ?>';  
158 -</script>  
159 \ No newline at end of file 0 \ No newline at end of file
common/modules/blog/views/category/create.php deleted
1 -<?php  
2 -use yii\helpers\Html;  
3 -  
4 -$this->title = Yii::t('app', 'Category create');  
5 -$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Categories'), 'url' => ['index']];  
6 -$this->params['breadcrumbs'][] = $this->title;  
7 -?>  
8 -<div class="category-create">  
9 -  
10 - <h1><?= Html::encode($this->title) ?></h1>  
11 -  
12 - <?= $this->render('_form', [  
13 - 'category_langs' => $category_langs,  
14 - 'category' => $category,  
15 - 'langs' => $langs,  
16 - 'images' => $images  
17 - ]) ?>  
18 -  
19 -</div>  
common/modules/blog/views/category/index.php deleted
1 -<?php  
2 -use yii\grid\ActionColumn;  
3 -use yii\grid\Column;  
4 -use yii\grid\GridView;  
5 -use common\modules\blog\models\Article;  
6 -use common\models\Language;  
7 -echo GridView::widget([  
8 - 'dataProvider' => $dataProvider,  
9 - 'columns' => [  
10 - 'article_category_id',  
11 - 'code',  
12 - 'date_add',  
13 - 'date_update',  
14 - [  
15 - 'class' => Column::className(),  
16 - 'header' => Yii::t('app', 'Name'),  
17 - 'content' => function($model, $key, $index, $column) {  
18 - return $model->getArticleCategoryLangs()->orderBy(['language_id' => 'ASC'])->one()->name;  
19 - }  
20 - ],  
21 - [  
22 - 'class' => ActionColumn::className(),  
23 - 'template' => '{update} {delete}'  
24 - ]  
25 - ]  
26 -]);  
27 \ No newline at end of file 0 \ No newline at end of file
common/modules/blog/views/category/update.php deleted
1 -<?php  
2 -use yii\helpers\Html;  
3 -  
4 -$this->title = Yii::t('app', 'Update category');  
5 -$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Categories'), 'url' => ['index']];  
6 -$this->params['breadcrumbs'][] = $this->title;  
7 -?>  
8 -<div class="category-create">  
9 -  
10 - <h1><?= Html::encode($this->title) ?></h1>  
11 - <?= $this->render('_form', [  
12 - 'category_langs' => $category_langs,  
13 - 'category' => $category,  
14 - 'langs' => $langs,  
15 - 'images' => $images  
16 - ]) ?>  
17 -  
18 -</div>  
common/modules/blog/views/default/index.php deleted
1 -<?php  
2 -  
3 -use yii\behaviors\BlameableBehavior;  
4 -use yii\web\Application;  
5 -  
6 -$behavior = new BlameableBehavior();  
7 -var_dump($behavior->value);  
8 \ No newline at end of file 0 \ No newline at end of file
common/modules/blog/views/media/index.php deleted
1 -<?php  
2 -  
3 -use yii\bootstrap\ActiveForm;  
4 -use yii\bootstrap\Html;  
5 -  
6 -$form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]);  
7 -  
8 -echo $form->field($model, 'imageFile')->fileInput(['multiple' => 'multiple']);  
9 -  
10 -?>  
11 - <img id="blah" src="#" alt="your image">  
12 -<div class="form-group">  
13 - <?= Html::submitButton(Yii::t('app', 'Create'), ['class' => 'btn btn-success']) ?>  
14 -</div>  
15 -<?php  
16 -ActiveForm::end();  
17 -?>  
18 -<script>  
19 - function readURL(input) {  
20 - if (input.files && input.files[1]) {  
21 - var reader = new FileReader();  
22 -  
23 - reader.onload = function (e) {  
24 - $('#blah')  
25 - .attr('src', e.target.result)  
26 - .width(150);  
27 - };  
28 -  
29 - reader.readAsDataURL(input.files[1]);  
30 - }  
31 - }  
32 - $(function() {  
33 - $(document).on('change', 'input[type=file]', function() {  
34 - readURL(this);  
35 - });  
36 - });  
37 -</script>  
common/modules/blog/views/test/index.php deleted
1 -<?php  
2 - use common\widgets\Multilanguage;  
3 - use yii\bootstrap\ActiveForm;  
4 -  
5 -$form = ActiveForm::begin();  
6 -echo Multilanguage::widget([  
7 - 'data' => $model,  
8 - 'form' => $form,  
9 - 'ajaxView' => '@common/modules/blog/views/ajax/_article_form_test',  
10 -]);  
11 -$form->end();  
12 \ No newline at end of file 0 \ No newline at end of file
common/modules/product/CatalogUrlManager.php
@@ -5,8 +5,6 @@ namespace common\modules\product; @@ -5,8 +5,6 @@ namespace common\modules\product;
5 5
6 use common\modules\product\models\CategorySearch; 6 use common\modules\product\models\CategorySearch;
7 use common\modules\product\models\ProductSearch; 7 use common\modules\product\models\ProductSearch;
8 -  
9 -use Yii;  
10 use yii\helpers\Url; 8 use yii\helpers\Url;
11 use yii\web\HttpException; 9 use yii\web\HttpException;
12 use yii\web\UrlRuleInterface; 10 use yii\web\UrlRuleInterface;
common/modules/product/behaviors/FilterBehavior.php
@@ -4,18 +4,20 @@ namespace common\modules\product\behaviors; @@ -4,18 +4,20 @@ namespace common\modules\product\behaviors;
4 4
5 5
6 use common\modules\product\models\ProductOption; 6 use common\modules\product\models\ProductOption;
7 -use common\modules\rubrication\models\TaxGroup;  
8 use common\modules\rubrication\models\TaxOption; 7 use common\modules\rubrication\models\TaxOption;
9 use yii\base\Behavior; 8 use yii\base\Behavior;
10 -  
11 -use Yii;  
12 - 9 +use yii\db\ActiveRecord;
13 10
14 class FilterBehavior extends Behavior { 11 class FilterBehavior extends Behavior {
15 12
16 public function getFilters(){ 13 public function getFilters(){
17 -  
18 - return $this->owner->hasMany(TaxOption::className(), ['tax_option_id' => 'option_id']) 14 +
  15 + /**
  16 + * @var ActiveRecord $owner
  17 + */
  18 + $owner = $this->owner;
  19 +
  20 + return $owner->hasMany(TaxOption::className(), ['tax_option_id' => 'option_id'])
19 ->viaTable(ProductOption::tableName(),[ 'product_id'=> $this->owner->tableSchema->primaryKey[0]]) 21 ->viaTable(ProductOption::tableName(),[ 'product_id'=> $this->owner->tableSchema->primaryKey[0]])
20 ->joinWith('taxGroup')->all(); 22 ->joinWith('taxGroup')->all();
21 } 23 }
common/modules/product/controllers/ManageController.php
1 <?php 1 <?php
2 -  
3 -namespace common\modules\product\controllers;  
4 -  
5 -use common\modules\product\helpers\ProductHelper;  
6 -use common\modules\product\models\Category;  
7 -use common\modules\product\models\Export;  
8 -use common\modules\product\models\Import;  
9 -use common\modules\product\models\ProductImage;  
10 -use common\modules\product\models\ProductVariant;  
11 -use Yii;  
12 -use common\modules\product\models\Product;  
13 -use common\modules\product\models\ProductSearch;  
14 -use yii\web\Controller;  
15 -use yii\web\NotFoundHttpException;  
16 -use yii\filters\VerbFilter;  
17 -use common\modules\product\models\Brand;  
18 -use yii\web\UploadedFile;  
19 -  
20 -/**  
21 - * ManageController implements the CRUD actions for Product model.  
22 - */  
23 -class ManageController extends Controller  
24 -{ 2 +
  3 + namespace common\modules\product\controllers;
  4 +
  5 + use common\modules\product\models\Export;
  6 + use common\modules\product\models\Import;
  7 + use common\modules\product\models\ProductImage;
  8 + use common\modules\product\models\ProductVariant;
  9 + use Yii;
  10 + use common\modules\product\models\Product;
  11 + use common\modules\product\models\ProductSearch;
  12 + use yii\web\Controller;
  13 + use yii\web\NotFoundHttpException;
  14 + use yii\filters\VerbFilter;
  15 + use yii\web\UploadedFile;
  16 +
25 /** 17 /**
26 - * @inheritdoc 18 + * ManageController implements the CRUD actions for Product model.
27 */ 19 */
28 - public function behaviors() 20 + class ManageController extends Controller
29 { 21 {
30 - return [  
31 - 'verbs' => [  
32 - 'class' => VerbFilter::className(),  
33 - 'actions' => [  
34 - 'delete' => ['POST'], 22 +
  23 + /**
  24 + * @inheritdoc
  25 + */
  26 + public function behaviors()
  27 + {
  28 + return [
  29 + 'verbs' => [
  30 + 'class' => VerbFilter::className(),
  31 + 'actions' => [
  32 + 'delete' => [ 'POST' ],
  33 + ],
35 ], 34 ],
36 - ],  
37 - ];  
38 - }  
39 -  
40 - public function actionDev() {  
41 - foreach (ProductVariant::find()->where(['>', 'price_old', 0])->all() as $item) {  
42 - if ($item->price >= $item->price_old || $item->price == 0)  
43 - print $item->price .' | '. $item->price_old ."<br>\n"; 35 + ];
  36 + }
  37 +
  38 + public function actionDev()
  39 + {
  40 + foreach(ProductVariant::find()
  41 + ->where([
  42 + '>',
  43 + 'price_old',
  44 + 0,
  45 + ])
  46 + ->all() as $item) {
  47 + if($item->price >= $item->price_old || $item->price == 0) {
  48 + print $item->price . ' | ' . $item->price_old . "<br>\n";
  49 + }
  50 + }
  51 + print '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~';
44 } 52 }
45 - print '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~';  
46 - }  
47 -  
48 - /**  
49 - * Lists all Product models.  
50 - * @return mixed  
51 - */  
52 - public function actionIndex()  
53 - {  
54 - $searchModel = new ProductSearch();  
55 - $dataProvider = $searchModel->search(Yii::$app->request->queryParams);  
56 -  
57 - return $this->render('index', [  
58 - 'searchModel' => $searchModel,  
59 - 'dataProvider' => $dataProvider,  
60 - ]);  
61 - }  
62 -  
63 - /**  
64 - * Displays a single Product model.  
65 - * @param integer $id  
66 - * @return mixed  
67 - */  
68 - public function actionView($id)  
69 - {  
70 - return $this->render('view', [  
71 - 'model' => $this->findModel($id),  
72 - ]);  
73 - }  
74 -  
75 - /**  
76 - * Creates a new Product model.  
77 - * If creation is successful, the browser will be redirected to the 'view' page.  
78 - * @return mixed  
79 - */  
80 - public function actionCreate()  
81 - {  
82 - $model = new Product();  
83 53
84 - if ($model->load(Yii::$app->request->post())) {  
85 - $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');  
86 -  
87 - if ($model->save() && $model->imagesUpload) {  
88 -  
89 - $imgDir = Yii::getAlias('@storage/articles/');  
90 -  
91 - if ( ($images = $model->imagesUpload()) !== FALSE) {  
92 - foreach ($images as $image) {  
93 - $imageModel = new ProductImage();  
94 - $imageModel->product_id = $model->product_id;  
95 - $imageModel->image = $image;  
96 - $imageModel->save(); 54 + /**
  55 + * Lists all Product models.
  56 + * @return mixed
  57 + */
  58 + public function actionIndex()
  59 + {
  60 + $searchModel = new ProductSearch();
  61 + $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  62 +
  63 + return $this->render('index', [
  64 + 'searchModel' => $searchModel,
  65 + 'dataProvider' => $dataProvider,
  66 + ]);
  67 + }
  68 +
  69 + /**
  70 + * Displays a single Product model.
  71 + *
  72 + * @param integer $id
  73 + *
  74 + * @return mixed
  75 + */
  76 + public function actionView($id)
  77 + {
  78 + return $this->render('view', [
  79 + 'model' => $this->findModel($id),
  80 + ]);
  81 + }
  82 +
  83 + /**
  84 + * Creates a new Product model.
  85 + * If creation is successful, the browser will be redirected to the 'view' page.
  86 + * @return mixed
  87 + */
  88 + public function actionCreate()
  89 + {
  90 + $model = new Product();
  91 +
  92 + if($model->load(Yii::$app->request->post())) {
  93 + $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');
  94 +
  95 + if($model->save()) {
  96 +
  97 + if(!empty( $model->imagesUpload ) && ( ( $images = $model->imagesUpload() ) !== false )) {
  98 + foreach($images as $image) {
  99 + $imageModel = new ProductImage();
  100 + $imageModel->product_id = $model->product_id;
  101 + $imageModel->image = $image;
  102 + $imageModel->save();
  103 + }
97 } 104 }
  105 +
  106 + return $this->redirect([
  107 + 'view',
  108 + 'id' => $model->product_id,
  109 + ]);
98 } 110 }
99 -  
100 - return $this->redirect(['view', 'id' => $model->product_id]);  
101 } 111 }
102 - } else {  
103 return $this->render('create', [ 112 return $this->render('create', [
104 'model' => $model, 113 'model' => $model,
105 ]); 114 ]);
106 } 115 }
107 - }  
108 -  
109 - /**  
110 - * Updates an existing Product model.  
111 - * If update is successful, the browser will be redirected to the 'view' page.  
112 - * @param integer $id  
113 - * @return mixed  
114 - */  
115 - public function actionUpdate($id)  
116 - {  
117 - $model = $this->findModel($id);  
118 - if ($model->load(Yii::$app->request->post())) {  
119 - $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');  
120 - if ($model->save()) {  
121 -// foreach ($model->images as $image) {  
122 -// $image->delete();  
123 -// }  
124 - if ( ($images = $model->imagesUpload()) !== FALSE) {  
125 - foreach ($images as $image) {  
126 - $imageModel = new ProductImage();  
127 - $imageModel->product_id = $model->product_id;  
128 - $imageModel->image = $image;  
129 - $imageModel->save(); 116 +
  117 + /**
  118 + * Updates an existing Product model.
  119 + * If update is successful, the browser will be redirected to the 'view' page.
  120 + *
  121 + * @param integer $id
  122 + *
  123 + * @return mixed
  124 + */
  125 + public function actionUpdate($id)
  126 + {
  127 + $model = $this->findModel($id);
  128 + if($model->load(Yii::$app->request->post())) {
  129 + $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');
  130 + if($model->save()) {
  131 + if(!empty( $model->imagesUpload ) && ( ( $images = $model->imagesUpload() ) !== false )) {
  132 + foreach($images as $image) {
  133 + $imageModel = new ProductImage();
  134 + $imageModel->product_id = $model->product_id;
  135 + $imageModel->image = $image;
  136 + $imageModel->save();
  137 + }
130 } 138 }
  139 +
  140 + return $this->redirect([
  141 + 'view',
  142 + 'id' => $model->product_id,
  143 + ]);
131 } 144 }
132 -  
133 - return $this->redirect(['view', 'id' => $model->product_id]);  
134 } 145 }
135 - } else {  
136 $groups = $model->getTaxGroupsByLevel(0); 146 $groups = $model->getTaxGroupsByLevel(0);
137 - 147 +
138 return $this->render('update', [ 148 return $this->render('update', [
139 - 'model' => $model, 149 + 'model' => $model,
140 'groups' => $groups, 150 'groups' => $groups,
141 ]); 151 ]);
142 } 152 }
143 - }  
144 -  
145 - /**  
146 - * Deletes an existing Product model.  
147 - * If deletion is successful, the browser will be redirected to the 'index' page.  
148 - * @param integer $id  
149 - * @return mixed  
150 - */  
151 - public function actionDelete($id)  
152 - {  
153 - $this->findModel($id)->delete();  
154 -  
155 - return $this->redirect(['index']);  
156 - }  
157 -  
158 - public function actionDelimg($id)  
159 - {  
160 - $image = ProductImage::findOne($id);  
161 -  
162 - if ($image) {  
163 - $image->delete(); 153 +
  154 + /**
  155 + * Deletes an existing Product model.
  156 + * If deletion is successful, the browser will be redirected to the 'index' page.
  157 + *
  158 + * @param integer $id
  159 + *
  160 + * @return mixed
  161 + */
  162 + public function actionDelete($id)
  163 + {
  164 + $this->findModel($id)
  165 + ->delete();
  166 +
  167 + return $this->redirect([ 'index' ]);
164 } 168 }
165 -  
166 - print '1';  
167 - exit;  
168 - }  
169 -  
170 - public function actionIs_top($id) {  
171 - $model = $this->findModel($id);  
172 -  
173 - $model->is_top = intval(empty($model->is_top));  
174 -  
175 - $model->save(false, ['is_top']);  
176 -  
177 - return $this->redirect(['index']);  
178 - }  
179 -  
180 - public function actionIs_new($id) {  
181 - $model = $this->findModel($id);  
182 -  
183 - $model->is_new = intval(empty($model->is_new));  
184 -  
185 - $model->save(false, ['is_new']);  
186 -  
187 - return $this->redirect(['index']);  
188 - }  
189 -  
190 - public function actionAkciya($id) {  
191 - $model = $this->findModel($id);  
192 -  
193 - $model->akciya = intval(empty($model->akciya));  
194 -  
195 - $model->save(false, ['akciya']);  
196 -  
197 - return $this->redirect(['index']);  
198 - }  
199 -  
200 - public function actionImport() {  
201 - $model = new Import();  
202 -  
203 - if ($model->load(Yii::$app->request->post())) {  
204 - $file = UploadedFile::getInstances($model, 'file');  
205 - $method = 'go'. ucfirst($model->type);  
206 - $target = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFile'. ucfirst($model->type));  
207 - if (empty($file)) {  
208 - $model->errors[] = 'File not upload';  
209 - } elseif ($method == 'goPrices' && $file[0]->name != 'file_1.csv') {  
210 - $model->errors[] = 'File need "file_1.csv"';  
211 - } elseif ($method == 'goProducts' && $file[0]->name == 'file_1.csv') {  
212 - $model->errors[] = 'File can not "file_1.csv"';  
213 - } elseif ($model->validate() && $file[0]->saveAs($target)) {  
214 - // PROCESS PAGE  
215 - return $this->render('import-process', [  
216 - 'model' => $model,  
217 - 'method' => $model->type,  
218 - 'target' => $target,  
219 - ]);  
220 -// $model->$method();  
221 - } else {  
222 - $model->errors[] = 'File can not be upload or other error'; 169 +
  170 + public function actionDelimg($id)
  171 + {
  172 + $image = ProductImage::findOne($id);
  173 +
  174 + if($image) {
  175 + $image->delete();
223 } 176 }
  177 +
  178 + print '1';
  179 + exit;
224 } 180 }
225 -  
226 - return $this->render('import', [  
227 - 'model' => $model,  
228 - ]);  
229 - }  
230 -  
231 - public function actionProducts() {  
232 - $from = Yii::$app->request->get('from', 0);  
233 -  
234 - $model = new Import();  
235 -  
236 - if (Yii::$app->request->isAjax) {  
237 - Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;  
238 - return $model->goProducts($from, 10); 181 +
  182 + public function actionIs_top($id)
  183 + {
  184 + $model = $this->findModel($id);
  185 +
  186 + $model->is_top = intval(empty( $model->is_top ));
  187 +
  188 + $model->save(false, [ 'is_top' ]);
  189 +
  190 + return $this->redirect([ 'index' ]);
239 } 191 }
240 - }  
241 -  
242 - public function actionPrices() {  
243 - $from = Yii::$app->request->get('from', 0);  
244 -  
245 - $model = new Import();  
246 -  
247 - if (Yii::$app->request->isAjax) {  
248 - Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;  
249 - return $model->goPrices($from, 10); 192 +
  193 + public function actionIs_new($id)
  194 + {
  195 + $model = $this->findModel($id);
  196 +
  197 + $model->is_new = intval(empty( $model->is_new ));
  198 +
  199 + $model->save(false, [ 'is_new' ]);
  200 +
  201 + return $this->redirect([ 'index' ]);
250 } 202 }
251 - }  
252 -  
253 - public function actionExport() {  
254 - $model = new Export();  
255 - if (($file = $model->process(Yii::getAlias('@uploadDir')))) {  
256 - return Yii::$app->response->sendFile($file)->send(); 203 +
  204 + public function actionAkciya($id)
  205 + {
  206 + $model = $this->findModel($id);
  207 +
  208 + $model->akciya = intval(empty( $model->akciya ));
  209 +
  210 + $model->save(false, [ 'akciya' ]);
  211 +
  212 + return $this->redirect([ 'index' ]);
257 } 213 }
258 - throw new NotFoundHttpException('Error');  
259 - }  
260 -  
261 - /**  
262 - * Finds the Product model based on its primary key value.  
263 - * If the model is not found, a 404 HTTP exception will be thrown.  
264 - * @param integer $id  
265 - * @return Product the loaded model  
266 - * @throws NotFoundHttpException if the model cannot be found  
267 - */  
268 - protected function findModel($id)  
269 - {  
270 - if (($model = Product::findOne($id)) !== null) {  
271 - return $model;  
272 - } else {  
273 - throw new NotFoundHttpException('The requested page does not exist.'); 214 +
  215 + public function actionImport()
  216 + {
  217 + $model = new Import();
  218 +
  219 + if($model->load(Yii::$app->request->post())) {
  220 + $file = UploadedFile::getInstances($model, 'file');
  221 + $method = 'go' . ucfirst($model->type);
  222 + $target = Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFile' . ucfirst($model->type));
  223 + if(empty( $file )) {
  224 + $model->errors[] = 'File not upload';
  225 + } elseif($method == 'goPrices' && $file[ 0 ]->name != 'file_1.csv') {
  226 + $model->errors[] = 'File need "file_1.csv"';
  227 + } elseif($method == 'goProducts' && $file[ 0 ]->name == 'file_1.csv') {
  228 + $model->errors[] = 'File can not "file_1.csv"';
  229 + } elseif($model->validate() && $file[ 0 ]->saveAs($target)) {
  230 + // PROCESS PAGE
  231 + return $this->render('import-process', [
  232 + 'model' => $model,
  233 + 'method' => $model->type,
  234 + 'target' => $target,
  235 + ]);
  236 + // $model->$method();
  237 + } else {
  238 + $model->errors[] = 'File can not be upload or other error';
  239 + }
  240 + }
  241 +
  242 + return $this->render('import', [
  243 + 'model' => $model,
  244 + ]);
  245 + }
  246 +
  247 + public function actionProducts()
  248 + {
  249 + $from = Yii::$app->request->get('from', 0);
  250 +
  251 + $model = new Import();
  252 +
  253 + if(Yii::$app->request->isAjax) {
  254 + Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
  255 + return $model->goProducts($from, 10);
  256 + }
  257 + }
  258 +
  259 + public function actionPrices()
  260 + {
  261 + $from = Yii::$app->request->get('from', 0);
  262 +
  263 + $model = new Import();
  264 +
  265 + if(Yii::$app->request->isAjax) {
  266 + Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
  267 + return $model->goPrices($from, 10);
  268 + }
  269 + }
  270 +
  271 + public function actionExport()
  272 + {
  273 + $model = new Export();
  274 + if(( $file = $model->process(Yii::getAlias('@uploadDir')) )) {
  275 + return Yii::$app->response->sendFile($file)
  276 + ->send();
  277 + }
  278 + throw new NotFoundHttpException('Error');
  279 + }
  280 +
  281 + /**
  282 + * Finds the Product model based on its primary key value.
  283 + * If the model is not found, a 404 HTTP exception will be thrown.
  284 + *
  285 + * @param integer $id
  286 + *
  287 + * @return Product the loaded model
  288 + * @throws NotFoundHttpException if the model cannot be found
  289 + */
  290 + protected function findModel($id)
  291 + {
  292 + if(( $model = Product::findOne($id) ) !== NULL) {
  293 + return $model;
  294 + } else {
  295 + throw new NotFoundHttpException('The requested page does not exist.');
  296 + }
274 } 297 }
275 } 298 }
276 -}  
common/modules/product/controllers/ProductVariantTypeController.php deleted
1 -<?php  
2 -  
3 -namespace common\modules\product\controllers;  
4 -  
5 -use Yii;  
6 -use common\modules\product\models\ProductVariantType;  
7 -use common\modules\product\models\ProductVariantTypeSearch;  
8 -use yii\web\Controller;  
9 -use yii\web\NotFoundHttpException;  
10 -use yii\filters\VerbFilter;  
11 -  
12 -/**  
13 - * ProductVariantTypeController implements the CRUD actions for ProductVariantType model.  
14 - */  
15 -class ProductVariantTypeController extends Controller  
16 -{  
17 - /**  
18 - * @inheritdoc  
19 - */  
20 - public function behaviors()  
21 - {  
22 - return [  
23 - 'verbs' => [  
24 - 'class' => VerbFilter::className(),  
25 - 'actions' => [  
26 - 'delete' => ['POST'],  
27 - ],  
28 - ],  
29 - ];  
30 - }  
31 -  
32 - /**  
33 - * Lists all ProductVariantType models.  
34 - * @return mixed  
35 - */  
36 - public function actionIndex()  
37 - {  
38 - $searchModel = new ProductVariantTypeSearch();  
39 - $dataProvider = $searchModel->search(Yii::$app->request->queryParams);  
40 -  
41 - return $this->render('index', [  
42 - 'searchModel' => $searchModel,  
43 - 'dataProvider' => $dataProvider,  
44 - ]);  
45 - }  
46 -  
47 - /**  
48 - * Displays a single ProductVariantType model.  
49 - * @param integer $id  
50 - * @return mixed  
51 - */  
52 - public function actionView($id)  
53 - {  
54 - return $this->render('view', [  
55 - 'model' => $this->findModel($id),  
56 - ]);  
57 - }  
58 -  
59 - /**  
60 - * Creates a new ProductVariantType model.  
61 - * If creation is successful, the browser will be redirected to the 'view' page.  
62 - * @return mixed  
63 - */  
64 - public function actionCreate()  
65 - {  
66 - $model = new ProductVariantType();  
67 -  
68 - if ($model->load(Yii::$app->request->post()) && $model->save()) {  
69 - return $this->redirect(['view', 'id' => $model->product_variant_type_id]);  
70 - } else {  
71 - return $this->render('create', [  
72 - 'model' => $model,  
73 - ]);  
74 - }  
75 - }  
76 -  
77 - /**  
78 - * Updates an existing ProductVariantType model.  
79 - * If update is successful, the browser will be redirected to the 'view' page.  
80 - * @param integer $id  
81 - * @return mixed  
82 - */  
83 - public function actionUpdate($id)  
84 - {  
85 - $model = $this->findModel($id);  
86 -  
87 - if ($model->load(Yii::$app->request->post()) && $model->save()) {  
88 - return $this->redirect(['view', 'id' => $model->product_variant_type_id]);  
89 - } else {  
90 - return $this->render('update', [  
91 - 'model' => $model,  
92 - ]);  
93 - }  
94 - }  
95 -  
96 - /**  
97 - * Deletes an existing ProductVariantType model.  
98 - * If deletion is successful, the browser will be redirected to the 'index' page.  
99 - * @param integer $id  
100 - * @return mixed  
101 - */  
102 - public function actionDelete($id)  
103 - {  
104 - $this->findModel($id)->delete();  
105 -  
106 - return $this->redirect(['index']);  
107 - }  
108 -  
109 - /**  
110 - * Finds the ProductVariantType model based on its primary key value.  
111 - * If the model is not found, a 404 HTTP exception will be thrown.  
112 - * @param integer $id  
113 - * @return ProductVariantType the loaded model  
114 - * @throws NotFoundHttpException if the model cannot be found  
115 - */  
116 - protected function findModel($id)  
117 - {  
118 - if (($model = ProductVariantType::findOne($id)) !== null) {  
119 - return $model;  
120 - } else {  
121 - throw new NotFoundHttpException('The requested page does not exist.');  
122 - }  
123 - }  
124 -}  
common/modules/product/controllers/VariantController.php
@@ -9,6 +9,7 @@ use common\modules\product\models\ProductVariant; @@ -9,6 +9,7 @@ use common\modules\product\models\ProductVariant;
9 use common\modules\product\models\ProductVariantListSearch; 9 use common\modules\product\models\ProductVariantListSearch;
10 use common\modules\product\models\Stock; 10 use common\modules\product\models\Stock;
11 use Yii; 11 use Yii;
  12 +use yii\helpers\ArrayHelper;
12 use yii\web\Controller; 13 use yii\web\Controller;
13 use yii\web\NotFoundHttpException; 14 use yii\web\NotFoundHttpException;
14 use yii\filters\VerbFilter; 15 use yii\filters\VerbFilter;
@@ -82,16 +83,80 @@ class VariantController extends Controller @@ -82,16 +83,80 @@ class VariantController extends Controller
82 $model->validate(); 83 $model->validate();
83 84
84 if ($model->save()) { 85 if ($model->save()) {
85 -  
86 - if ( ($images = $model->imagesUpload()) !== FALSE) {  
87 - foreach ($images as $image) { 86 +
  87 + if ( ($image = UploadedFile::getInstance($model, 'image')) ) {
  88 + $imageModel = ProductImage::find()->where(['product_variant_id' => $model->product_variant_id])->one();
  89 +
  90 + if($imageModel instanceof ProductImage) {
  91 + $imageModel->product_id = $model->product_id;
  92 + $imageModel->product_variant_id = $model->product_variant_id;
  93 + $imageModel->image = $image->name;
  94 + $imageModel->save();
  95 + } else {
88 $imageModel = new ProductImage(); 96 $imageModel = new ProductImage();
89 $imageModel->product_id = $model->product_id; 97 $imageModel->product_id = $model->product_id;
90 $imageModel->product_variant_id = $model->product_variant_id; 98 $imageModel->product_variant_id = $model->product_variant_id;
91 - $imageModel->image = $image; 99 + $imageModel->image = $image->name;
92 $imageModel->save(); 100 $imageModel->save();
93 } 101 }
  102 +
  103 +
  104 + $imgDir = Yii::getAlias('@storage/products/');
  105 +
  106 + if(!is_dir($imgDir)) {
  107 + mkdir($imgDir, 0755, true);
  108 + }
  109 +
  110 + $image->saveAs(Yii::getAlias('@storage/products/' . $image->name));
  111 + }
  112 +
  113 + $ProductStocks = Yii::$app->request->post('ProductStock');
  114 +
  115 + $total_quantity = 0;
  116 +
  117 + if(!empty($ProductStocks) && is_array($ProductStocks)) {
  118 + $model->unlinkAll('stocks', true);
  119 + $sorted_array = [];
  120 + foreach ($ProductStocks as $subArray) {
  121 + if(!empty($subArray['name']) && !empty($subArray['quantity'])) {
  122 + if(!empty($sorted_array[$subArray['name']])) {
  123 + $sorted_array[$subArray['name']] += $subArray['quantity'];
  124 + } else {
  125 + $sorted_array[$subArray['name']] = $subArray['quantity'];
  126 + }
  127 + }
  128 + }
  129 + $ProductStocks = $sorted_array;
  130 + $stock_names = array_keys($ProductStocks);
  131 + $stocks = Stock::find()->where(['name' => $stock_names])->indexBy('name')->one();
  132 + foreach($ProductStocks as $name => $quantity) {
  133 + $quantity = (int) $quantity;
  134 + if(!array_key_exists($name, $stocks)) {
  135 + $stock = new Stock([
  136 + 'name' => $name
  137 + ]);
  138 + if(!$stock->save()) {
  139 + continue;
  140 + }
  141 + } else {
  142 + $stock = $stocks[$name];
  143 + }
  144 + $psModel = new ProductStock([
  145 + 'product_id' => $model->product_id,
  146 + 'product_variant_id' => $model->product_variant_id,
  147 + 'stock_id' => $stock->stock_id,
  148 + 'quantity' => $quantity,
  149 + ]);
  150 + if($psModel->save()) {
  151 + $total_quantity += $quantity;
  152 + }
  153 + }
  154 + } else {
  155 + $model->unlinkAll('stocks', true);
94 } 156 }
  157 +
  158 + $model->stock = $total_quantity;
  159 + $model->save();
95 160
96 return $this->redirect(['index', 'product_id' => $product_id]); 161 return $this->redirect(['index', 'product_id' => $product_id]);
97 } 162 }
@@ -150,41 +215,50 @@ class VariantController extends Controller @@ -150,41 +215,50 @@ class VariantController extends Controller
150 215
151 $ProductStocks = Yii::$app->request->post('ProductStock'); 216 $ProductStocks = Yii::$app->request->post('ProductStock');
152 217
153 - $quantity = 0;  
154 -  
155 - if(is_array($ProductStocks)){  
156 -  
157 - foreach($ProductStocks as $index => $ProductStock){  
158 - $stock = Stock::find()->where(['name'=>$ProductStock['name']])->one();  
159 - if(!$stock instanceof Stock){  
160 - $stock = new Stock();  
161 - $stock->name = $ProductStock['name'];  
162 - $stock->save(); 218 + $total_quantity = 0;
  219 +
  220 + if(!empty($ProductStocks) && is_array($ProductStocks)) {
  221 + $model->unlinkAll('stocks', true);
  222 + $sorted_array = [];
  223 + foreach ($ProductStocks as $subArray) {
  224 + if(!empty($subArray['name']) && !empty($subArray['quantity'])) {
  225 + if(!empty($sorted_array[$subArray['name']])) {
  226 + $sorted_array[$subArray['name']] += $subArray['quantity'];
  227 + } else {
  228 + $sorted_array[$subArray['name']] = $subArray['quantity'];
  229 + }
163 } 230 }
164 -  
165 - $psModel = ProductStock::find()->where(['product_variant_id'=>$model->product_variant_id, 'stock_id' =>$stock->stock_id ])->one();  
166 - if(!$psModel instanceof ProductStock){  
167 - $psModel = new ProductStock;  
168 - $psModel->load(['ProductStock'=>$ProductStock]);  
169 - $psModel->stock_id = $stock->stock_id;  
170 - $psModel->product_variant_id = $model->product_variant_id;  
171 - $psModel->product_id = $model->product->product_id;  
172 - $quantity = $quantity + $psModel->quantity;  
173 - $psModel->validate();  
174 - $psModel->save(); 231 + }
  232 + $ProductStocks = $sorted_array;
  233 + $stock_names = array_keys($ProductStocks);
  234 + $stocks = Stock::find()->where(['name' => $stock_names])->indexBy('name')->one();
  235 + foreach($ProductStocks as $name => $quantity) {
  236 + $quantity = (int) $quantity;
  237 + if(!array_key_exists($name, $stocks)) {
  238 + $stock = new Stock([
  239 + 'name' => $name
  240 + ]);
  241 + if(!$stock->save()) {
  242 + continue;
  243 + }
175 } else { 244 } else {
176 - $psModel->load(['ProductStock'=>$ProductStock]);  
177 - $quantity = $quantity + $psModel->quantity;  
178 - $psModel->save(); 245 + $stock = $stocks[$name];
  246 + }
  247 + $psModel = new ProductStock([
  248 + 'product_id' => $model->product_id,
  249 + 'product_variant_id' => $model->product_variant_id,
  250 + 'stock_id' => $stock->stock_id,
  251 + 'quantity' => $quantity,
  252 + ]);
  253 + if($psModel->save()) {
  254 + $total_quantity += $quantity;
179 } 255 }
180 -  
181 } 256 }
182 } else { 257 } else {
183 - $model->unlinkAll('stocks',true); 258 + $model->unlinkAll('stocks', true);
184 } 259 }
185 260
186 -  
187 - $model->stock = $quantity; 261 + $model->stock = $total_quantity;
188 $model->save(); 262 $model->save();
189 } 263 }
190 return $this->redirect(['index', 'product_id'=>$product_id]); 264 return $this->redirect(['index', 'product_id'=>$product_id]);
common/modules/product/helpers/FilterHelper.php
@@ -5,8 +5,6 @@ namespace common\modules\product\helpers; @@ -5,8 +5,6 @@ namespace common\modules\product\helpers;
5 5
6 use common\modules\rubrication\models\TaxGroup; 6 use common\modules\rubrication\models\TaxGroup;
7 use yii\base\Object; 7 use yii\base\Object;
8 -use Yii;  
9 -use yii\db\QueryInterface;  
10 use yii\helpers\ArrayHelper; 8 use yii\helpers\ArrayHelper;
11 9
12 class FilterHelper extends Object { 10 class FilterHelper extends Object {