Commit ee5882818d99db6a96ce5c1711f0653cca715dc9

Authored by Alexey Boroda
1 parent ba196ec2

-Blog backend ready

controllers/ArticleController.php
1 <?php 1 <?php
2 2
3 namespace artbox\weblog\controllers; 3 namespace artbox\weblog\controllers;
4 -  
5 - use artbox\weblog\models\BlogCategory;  
6 - use artbox\weblog\models\BlogTag; 4 +
  5 + use artbox\weblog\models\Category;
  6 + use artbox\weblog\models\Tag;
7 use Yii; 7 use Yii;
8 use artbox\weblog\models\Article; 8 use artbox\weblog\models\Article;
9 use artbox\weblog\models\ArticleSearch; 9 use artbox\weblog\models\ArticleSearch;
@@ -88,75 +88,37 @@ @@ -88,75 +88,37 @@
88 $model = new Article(); 88 $model = new Article();
89 $model->generateLangs(); 89 $model->generateLangs();
90 90
91 - // $categories = ArrayHelper::map(  
92 - // BlogCategory::find()  
93 - // ->joinWith('lang')  
94 - // ->all(),  
95 - // 'id',  
96 - // 'lang.title'  
97 - // );  
98 - //  
99 - // $tags = ArrayHelper::map(  
100 - // BlogTag::find()  
101 - // ->joinWith('lang')  
102 - // ->all(),  
103 - // 'id',  
104 - // 'lang.label'  
105 - // );  
106 -  
107 - if ($model->load(Yii::$app->request->post())) {  
108 - $model->loadLangs(\Yii::$app->request);  
109 - if ($model->save() && $model->transactionStatus) {  
110 -  
111 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogCategories' ] )) {  
112 - foreach (\Yii::$app->request->post('BlogArticle')[ 'blogCategories' ] as $item) {  
113 - if ($category = BlogCategory::findOne($item)) {  
114 - $model->link('blogCategories', $category);  
115 - }  
116 - }  
117 - }  
118 -  
119 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogTags' ] )) {  
120 - foreach (\Yii::$app->request->post('BlogArticle')[ 'blogTags' ] as $item) {  
121 - if ($category = BlogTag::findOne($item)) {  
122 - $model->link('blogTags', $category);  
123 - }  
124 - }  
125 - }  
126 -  
127 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'products' ] )) {  
128 - foreach (\Yii::$app->request->post('BlogArticle')[ 'products' ] as $item) {  
129 - if ($product = Product::findOne($item)) {  
130 - $model->link('products', $product);  
131 - }  
132 - }  
133 - }  
134 -  
135 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] )) {  
136 - foreach (\Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] as $item) {  
137 - if ($article = Product::findOne($item)) {  
138 - $model->link('blogArticles', $article);  
139 - }  
140 - }  
141 - }  
142 -  
143 - return $this->redirect(  
144 - [  
145 - 'view',  
146 - 'id' => $model->id,  
147 - ]  
148 - );  
149 - } 91 + if ($model->loadWithLangs(\Yii::$app->request) && $model->saveWithLangs()) {
  92 +
  93 + $categories = Category::find()
  94 + ->where([ 'id' => \Yii::$app->request->post('categoryIds') ])
  95 + ->all();
  96 +
  97 + $model->linkMany('categories', $categories);
  98 +
  99 + $tags = Tag::find()
  100 + ->where(
  101 + [
  102 + 'id' => \Yii::$app->request->post('tagIds'),
  103 + ]
  104 + )
  105 + ->all();
  106 +
  107 + $model->linkMany('tags', $tags);
  108 +
  109 + return $this->redirect(
  110 + [
  111 + 'view',
  112 + 'id' => $model->id,
  113 + ]
  114 + );
150 } 115 }
  116 +
151 return $this->render( 117 return $this->render(
152 'create', 118 'create',
153 [ 119 [
154 'model' => $model, 120 'model' => $model,
155 'modelLangs' => $model->modelLangs, 121 'modelLangs' => $model->modelLangs,
156 - // 'categories' => $categories,  
157 - // 'tags' => $tags,  
158 - 'products' => [],  
159 - 'articles' => [],  
160 ] 122 ]
161 ); 123 );
162 124
@@ -174,98 +136,55 @@ @@ -174,98 +136,55 @@
174 { 136 {
175 $model = $this->findModel($id); 137 $model = $this->findModel($id);
176 $model->generateLangs(); 138 $model->generateLangs();
177 -  
178 - $categories = ArrayHelper::map(  
179 - BlogCategory::find()  
180 - ->joinWith('lang')  
181 - ->all(), 139 +
  140 + $model->categoryIds = ArrayHelper::map(
  141 + $model->categories,
182 'id', 142 'id',
183 'lang.title' 143 'lang.title'
184 ); 144 );
185 -  
186 - $tags = ArrayHelper::map(  
187 - BlogTag::find()  
188 - ->joinWith('lang')  
189 - ->all(), 145 +
  146 + $model->tagIds = ArrayHelper::map(
  147 + $model->tags,
190 'id', 148 'id',
191 'lang.label' 149 'lang.label'
192 ); 150 );
193 -  
194 - $products = ArrayHelper::map(  
195 - $model->getProducts()  
196 - ->joinWith('lang')  
197 - ->asArray()  
198 - ->all(),  
199 - 'id',  
200 - 'lang.title'  
201 - );  
202 -  
203 - $articles = ArrayHelper::map(  
204 - $model->getBlogArticles()  
205 - ->joinWith('lang')  
206 - ->asArray()  
207 - ->all(), 151 +
  152 + $model->articleIds = ArrayHelper::map(
  153 + $model->articles,
208 'id', 154 'id',
209 'lang.title' 155 'lang.title'
210 ); 156 );
211 -  
212 - if ($model->load(Yii::$app->request->post())) {  
213 - $model->loadLangs(\Yii::$app->request);  
214 - if ($model->save() && $model->transactionStatus) {  
215 -  
216 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogCategories' ] )) {  
217 - $model->unlinkAll('blogCategories', true);  
218 - foreach (\Yii::$app->request->post('BlogArticle')[ 'blogCategories' ] as $item) {  
219 - if ($category = BlogCategory::findOne($item)) {  
220 - $model->link('blogCategories', $category);  
221 - }  
222 - }  
223 - }  
224 -  
225 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogTags' ] )) {  
226 - $model->unlinkAll('blogTags', true);  
227 - foreach (\Yii::$app->request->post('BlogArticle')[ 'blogTags' ] as $item) {  
228 - if ($tag = BlogTag::findOne($item)) {  
229 - $model->link('blogTags', $tag);  
230 - }  
231 - }  
232 - }  
233 -  
234 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'products' ] )) {  
235 - $model->unlinkAll('products', true);  
236 - foreach (\Yii::$app->request->post('BlogArticle')[ 'products' ] as $item) {  
237 - if ($product = Product::findOne($item)) {  
238 - $model->link('products', $product);  
239 - }  
240 - }  
241 - }  
242 -  
243 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] )) {  
244 - $model->unlinkAll('blogArticles', true);  
245 - foreach (\Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] as $item) {  
246 - if ($article = BlogArticle::findOne($item)) {  
247 - $model->link('blogArticles', $article);  
248 - }  
249 - }  
250 - }  
251 -  
252 - return $this->redirect(  
253 - [  
254 - 'view',  
255 - 'id' => $model->id,  
256 - ]  
257 - );  
258 - } 157 +
  158 + if ($model->loadWithLangs(\Yii::$app->request) && $model->saveWithLangs()) {
  159 + $categories = Category::find()
  160 + ->where([ 'id' => \Yii::$app->request->post('categoryIds') ])
  161 + ->all();
  162 +
  163 + $model->linkMany('categories', $categories);
  164 +
  165 + $tags = Tag::find()
  166 + ->where(
  167 + [
  168 + 'id' => \Yii::$app->request->post('tagIds'),
  169 + ]
  170 + )
  171 + ->all();
  172 +
  173 + $model->linkMany('tags', $tags);
  174 +
  175 + return $this->redirect(
  176 + [
  177 + 'view',
  178 + 'id' => $model->id,
  179 + ]
  180 + );
  181 +
259 } 182 }
260 return $this->render( 183 return $this->render(
261 'update', 184 'update',
262 [ 185 [
263 'model' => $model, 186 'model' => $model,
264 'modelLangs' => $model->modelLangs, 187 'modelLangs' => $model->modelLangs,
265 - 'categories' => $categories,  
266 - 'tags' => $tags,  
267 - 'products' => $products,  
268 - 'articles' => $articles,  
269 ] 188 ]
270 ); 189 );
271 190
@@ -290,9 +209,8 @@ @@ -290,9 +209,8 @@
290 /** 209 /**
291 * Finds the BlogArticle model based on its primary key value. 210 * Finds the BlogArticle model based on its primary key value.
292 * If the model is not found, a 404 HTTP exception will be thrown. 211 * If the model is not found, a 404 HTTP exception will be thrown.
293 -  
294 -*  
295 -*@param integer $id 212 + *
  213 + * @param integer $id
296 * 214 *
297 *@return Article the loaded model 215 *@return Article the loaded model
298 * @throws NotFoundHttpException if the model cannot be found 216 * @throws NotFoundHttpException if the model cannot be found
@@ -305,59 +223,6 @@ @@ -305,59 +223,6 @@
305 throw new NotFoundHttpException('The requested page does not exist.'); 223 throw new NotFoundHttpException('The requested page does not exist.');
306 } 224 }
307 } 225 }
308 -  
309 - public function actionList($q = null, $id = null)  
310 - {  
311 - \Yii::$app->response->format = Response::FORMAT_JSON;  
312 - $out = [  
313 - 'results' => [  
314 - [  
315 - 'id' => '',  
316 - 'text' => '',  
317 - ],  
318 - ],  
319 - ];  
320 - if (!is_null($q)) {  
321 - $categories = Article::find()  
322 - ->joinWith('lang')  
323 - ->select(  
324 - [  
325 - 'id',  
326 - 'text' => 'category_lang.title',  
327 - ]  
328 - )  
329 - ->filterWhere(  
330 - [  
331 - '!=',  
332 - 'id',  
333 - $id,  
334 - ]  
335 - )  
336 - ->andFilterWhere(  
337 - [  
338 - 'like',  
339 - 'category_lang.title',  
340 - $q,  
341 - ]  
342 - )  
343 - ->andFilterWhere(  
344 - [  
345 - '!=',  
346 - 'parent_id',  
347 - $id,  
348 - ]  
349 - )  
350 - ->limit(20)  
351 - ->asArray()  
352 - ->all();  
353 -  
354 - if (!empty($categories)) {  
355 - $out[ 'results' ] = $categories;  
356 - }  
357 - }  
358 -  
359 - return $out;  
360 - }  
361 226
362 /** 227 /**
363 * @param string $q 228 * @param string $q
@@ -365,7 +230,7 @@ @@ -365,7 +230,7 @@
365 * 230 *
366 * @return array 231 * @return array
367 */ 232 */
368 - public function actionArticleList($q = NULL, $id = NULL) 233 + public function actionList(string $q = null, int $id = null)
369 { 234 {
370 \Yii::$app->response->format = Response::FORMAT_JSON; 235 \Yii::$app->response->format = Response::FORMAT_JSON;
371 $out = [ 236 $out = [
@@ -375,31 +240,31 @@ @@ -375,31 +240,31 @@
375 ], 240 ],
376 ]; 241 ];
377 if (!is_null($q)) { 242 if (!is_null($q)) {
378 - $out[ 'results' ] = BlogArticle::find()  
379 - ->joinWith('lang')  
380 - ->select(  
381 - [  
382 - 'blog_article.id as id',  
383 - 'blog_article_lang.title as text',  
384 - ]  
385 - )  
386 - ->where(  
387 - [  
388 - 'like',  
389 - 'blog_article_lang.title',  
390 - $q,  
391 - ]  
392 - )  
393 - ->andWhere(  
394 - [  
395 - '!=',  
396 - 'blog_article.id',  
397 - $id,  
398 - ]  
399 - )  
400 - ->limit(20)  
401 - ->asArray()  
402 - ->all(); 243 + $out[ 'results' ] = Article::find()
  244 + ->joinWith('lang')
  245 + ->select(
  246 + [
  247 + 'blog_article.id as id',
  248 + 'blog_article_lang.title as text',
  249 + ]
  250 + )
  251 + ->where(
  252 + [
  253 + 'like',
  254 + 'blog_article_lang.title',
  255 + $q,
  256 + ]
  257 + )
  258 + ->andFilterWhere(
  259 + [
  260 + '!=',
  261 + 'blog_article.id',
  262 + $id,
  263 + ]
  264 + )
  265 + ->limit(20)
  266 + ->asArray()
  267 + ->all();
403 } 268 }
404 return $out; 269 return $out;
405 } 270 }
controllers/CategoryController.php
@@ -2,12 +2,14 @@ @@ -2,12 +2,14 @@
2 2
3 namespace artbox\weblog\controllers; 3 namespace artbox\weblog\controllers;
4 4
  5 + use artbox\weblog\models\Category;
5 use artbox\weblog\models\CategorySearch; 6 use artbox\weblog\models\CategorySearch;
6 use Yii; 7 use Yii;
7 use yii\helpers\ArrayHelper; 8 use yii\helpers\ArrayHelper;
8 use yii\web\Controller; 9 use yii\web\Controller;
9 use yii\web\NotFoundHttpException; 10 use yii\web\NotFoundHttpException;
10 use yii\filters\VerbFilter; 11 use yii\filters\VerbFilter;
  12 + use yii\web\Response;
11 13
12 /** 14 /**
13 * BlogCategoryController implements the CRUD actions for BlogCategory model. 15 * BlogCategoryController implements the CRUD actions for BlogCategory model.
@@ -81,31 +83,28 @@ @@ -81,31 +83,28 @@
81 */ 83 */
82 public function actionCreate() 84 public function actionCreate()
83 { 85 {
84 - $model = new BlogCategory(); 86 + $model = new Category();
85 $model->generateLangs(); 87 $model->generateLangs();
86 $parentCategories = ArrayHelper::map( 88 $parentCategories = ArrayHelper::map(
87 - BlogCategory::find()  
88 - ->joinWith('lang')  
89 - ->where(  
90 - [  
91 - 'parent_id' => 0,  
92 - ]  
93 - )  
94 - ->all(), 89 + Category::find()
  90 + ->joinWith('lang')
  91 + ->where(
  92 + [
  93 + 'parent_id' => 0,
  94 + ]
  95 + )
  96 + ->all(),
95 'id', 97 'id',
96 'lang.title' 98 'lang.title'
97 ); 99 );
98 100
99 - if ($model->load(Yii::$app->request->post())) {  
100 - $model->loadLangs(\Yii::$app->request);  
101 - if ($model->save() && $model->transactionStatus) {  
102 - return $this->redirect(  
103 - [  
104 - 'view',  
105 - 'id' => $model->id,  
106 - ]  
107 - );  
108 - } 101 + if ($model->loadWithLangs(\Yii::$app->request) && $model->saveWithLangs()) {
  102 + return $this->redirect(
  103 + [
  104 + 'view',
  105 + 'id' => $model->id,
  106 + ]
  107 + );
109 } 108 }
110 return $this->render( 109 return $this->render(
111 'create', 110 'create',
@@ -131,35 +130,32 @@ @@ -131,35 +130,32 @@
131 $model = $this->findModel($id); 130 $model = $this->findModel($id);
132 $model->generateLangs(); 131 $model->generateLangs();
133 $parentCategories = ArrayHelper::map( 132 $parentCategories = ArrayHelper::map(
134 - BlogCategory::find()  
135 - ->joinWith('lang')  
136 - ->where(  
137 - [  
138 - 'parent_id' => 0,  
139 - ]  
140 - )  
141 - ->andWhere(  
142 - [  
143 - '!=',  
144 - BlogCategory::tableName() . '_id',  
145 - $model->id,  
146 - ]  
147 - )  
148 - ->all(), 133 + Category::find()
  134 + ->joinWith('lang')
  135 + ->where(
  136 + [
  137 + 'parent_id' => 0,
  138 + ]
  139 + )
  140 + ->andWhere(
  141 + [
  142 + '!=',
  143 + Category::tableName() . '_id',
  144 + $model->id,
  145 + ]
  146 + )
  147 + ->all(),
149 'id', 148 'id',
150 'lang.title' 149 'lang.title'
151 ); 150 );
152 -  
153 - if ($model->load(Yii::$app->request->post())) {  
154 - $model->loadLangs(\Yii::$app->request);  
155 - if ($model->save() && $model->transactionStatus) {  
156 - return $this->redirect(  
157 - [  
158 - 'view',  
159 - 'id' => $model->id,  
160 - ]  
161 - );  
162 - } 151 + if ($model->loadWithLangs(\Yii::$app->request) && $model->saveWithLangs()) {
  152 + return $this->redirect(
  153 + [
  154 + 'view',
  155 + 'id' => $model->id,
  156 + ]
  157 + );
  158 +
163 } 159 }
164 return $this->render( 160 return $this->render(
165 'update', 161 'update',
@@ -184,30 +180,62 @@ @@ -184,30 +180,62 @@
184 { 180 {
185 $this->findModel($id) 181 $this->findModel($id)
186 ->delete(); 182 ->delete();
187 - 183 +
188 return $this->redirect([ 'index' ]); 184 return $this->redirect([ 'index' ]);
189 } 185 }
190 186
191 - public function actionDeleteImage($id) 187 + public function actionList(string $q = null)
192 { 188 {
193 - $model = $this->findModel($id);  
194 - $model->image = null;  
195 - $model->updateAttributes(['image']);  
196 - return true; 189 + \Yii::$app->response->format = Response::FORMAT_JSON;
  190 + $out = [
  191 + 'results' => [
  192 + [
  193 + 'id' => '',
  194 + 'text' => '',
  195 + ],
  196 + ],
  197 + ];
  198 + if (!is_null($q)) {
  199 + $categories = Category::find()
  200 + ->joinWith('lang')
  201 + ->select(
  202 + [
  203 + 'id' => 'blog_category.id',
  204 + 'text' => 'blog_category_lang.title',
  205 + ]
  206 + )
  207 + ->andFilterWhere(
  208 + [
  209 + 'like',
  210 + 'blog_category_lang.title',
  211 + $q,
  212 + ]
  213 + )
  214 + ->limit(20)
  215 + ->asArray()
  216 + ->all();
  217 +
  218 + if (!empty($categories)) {
  219 + $out[ 'results' ] = $categories;
  220 + }
  221 + }
  222 +
  223 + return $out;
197 } 224 }
198 225
199 /** 226 /**
200 * Finds the BlogCategory model based on its primary key value. 227 * Finds the BlogCategory model based on its primary key value.
201 * If the model is not found, a 404 HTTP exception will be thrown. 228 * If the model is not found, a 404 HTTP exception will be thrown.
  229 +
202 * 230 *
203 - * @param integer $id 231 +*@param integer $id
204 * 232 *
205 - * @return BlogCategory the loaded model 233 + * @return Category the loaded model
206 * @throws NotFoundHttpException if the model cannot be found 234 * @throws NotFoundHttpException if the model cannot be found
207 */ 235 */
208 protected function findModel($id) 236 protected function findModel($id)
209 { 237 {
210 - if (( $model = BlogCategory::findOne($id) ) !== NULL) { 238 + if (( $model = Category::findOne($id) ) !== null) {
211 return $model; 239 return $model;
212 } else { 240 } else {
213 throw new NotFoundHttpException('The requested page does not exist.'); 241 throw new NotFoundHttpException('The requested page does not exist.');
controllers/TagController.php
1 <?php 1 <?php
2 2
3 namespace artbox\weblog\controllers; 3 namespace artbox\weblog\controllers;
4 - 4 +
  5 + use artbox\weblog\models\Tag;
5 use artbox\weblog\models\TagSearch; 6 use artbox\weblog\models\TagSearch;
6 use Yii; 7 use Yii;
7 use yii\web\Controller; 8 use yii\web\Controller;
8 use yii\web\NotFoundHttpException; 9 use yii\web\NotFoundHttpException;
9 use yii\filters\VerbFilter; 10 use yii\filters\VerbFilter;
10 - 11 + use yii\web\Response;
  12 +
11 /** 13 /**
12 * BlogTagController implements the CRUD actions for BlogTag model. 14 * BlogTagController implements the CRUD actions for BlogTag model.
13 */ 15 */
@@ -17,7 +19,7 @@ @@ -17,7 +19,7 @@
17 { 19 {
18 return '@artbox/weblog/views/blog-tag'; 20 return '@artbox/weblog/views/blog-tag';
19 } 21 }
20 - 22 +
21 /** 23 /**
22 * @inheritdoc 24 * @inheritdoc
23 */ 25 */
@@ -32,7 +34,7 @@ @@ -32,7 +34,7 @@
32 ], 34 ],
33 ]; 35 ];
34 } 36 }
35 - 37 +
36 /** 38 /**
37 * Lists all BlogTag models. 39 * Lists all BlogTag models.
38 * 40 *
@@ -42,7 +44,7 @@ @@ -42,7 +44,7 @@
42 { 44 {
43 $searchModel = new TagSearch(); 45 $searchModel = new TagSearch();
44 $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 46 $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
45 - 47 +
46 return $this->render( 48 return $this->render(
47 'index', 49 'index',
48 [ 50 [
@@ -51,7 +53,7 @@ @@ -51,7 +53,7 @@
51 ] 53 ]
52 ); 54 );
53 } 55 }
54 - 56 +
55 /** 57 /**
56 * Displays a single BlogTag model. 58 * Displays a single BlogTag model.
57 * 59 *
@@ -68,7 +70,7 @@ @@ -68,7 +70,7 @@
68 ] 70 ]
69 ); 71 );
70 } 72 }
71 - 73 +
72 /** 74 /**
73 * Creates a new BlogTag model. 75 * Creates a new BlogTag model.
74 * If creation is successful, the browser will be redirected to the 'view' page. 76 * If creation is successful, the browser will be redirected to the 'view' page.
@@ -77,13 +79,12 @@ @@ -77,13 +79,12 @@
77 */ 79 */
78 public function actionCreate() 80 public function actionCreate()
79 { 81 {
80 - $model = new BlogTag(); 82 + $model = new Tag();
81 $model->generateLangs(); 83 $model->generateLangs();
82 - 84 +
83 if (\Yii::$app->request->isPost) { 85 if (\Yii::$app->request->isPost) {
84 $model->loadLangs(\Yii::$app->request); 86 $model->loadLangs(\Yii::$app->request);
85 - $model->markAttributeDirty('id');  
86 - if ($model->save() && $model->transactionStatus) { 87 + if ($model->saveWithLangs()) {
87 return $this->redirect( 88 return $this->redirect(
88 [ 89 [
89 'view', 90 'view',
@@ -99,9 +100,9 @@ @@ -99,9 +100,9 @@
99 'modelLangs' => $model->modelLangs, 100 'modelLangs' => $model->modelLangs,
100 ] 101 ]
101 ); 102 );
102 -  
103 - }  
104 103
  104 + }
  105 +
105 /** 106 /**
106 * Updates an existing BlogTag model. 107 * Updates an existing BlogTag model.
107 * If update is successful, the browser will be redirected to the 'view' page. 108 * If update is successful, the browser will be redirected to the 'view' page.
@@ -114,11 +115,10 @@ @@ -114,11 +115,10 @@
114 { 115 {
115 $model = $this->findModel($id); 116 $model = $this->findModel($id);
116 $model->generateLangs(); 117 $model->generateLangs();
117 - 118 +
118 if (Yii::$app->request->isPost) { 119 if (Yii::$app->request->isPost) {
119 $model->loadLangs(\Yii::$app->request); 120 $model->loadLangs(\Yii::$app->request);
120 - $model->markAttributeDirty('id');  
121 - if ($model->save() && $model->transactionStatus) { 121 + if ($model->saveWithLangs()) {
122 return $this->redirect( 122 return $this->redirect(
123 [ 123 [
124 'view', 124 'view',
@@ -134,9 +134,9 @@ @@ -134,9 +134,9 @@
134 'modelLangs' => $model->modelLangs, 134 'modelLangs' => $model->modelLangs,
135 ] 135 ]
136 ); 136 );
137 -  
138 - }  
139 137
  138 + }
  139 +
140 /** 140 /**
141 * Deletes an existing BlogTag model. 141 * Deletes an existing BlogTag model.
142 * If deletion is successful, the browser will be redirected to the 'index' page. 142 * If deletion is successful, the browser will be redirected to the 'index' page.
@@ -149,22 +149,61 @@ @@ -149,22 +149,61 @@
149 { 149 {
150 $this->findModel($id) 150 $this->findModel($id)
151 ->delete(); 151 ->delete();
152 - 152 +
153 return $this->redirect([ 'index' ]); 153 return $this->redirect([ 'index' ]);
154 } 154 }
  155 +
  156 + public function actionList(string $q = null)
  157 + {
  158 + \Yii::$app->response->format = Response::FORMAT_JSON;
  159 + $out = [
  160 + 'results' => [
  161 + [
  162 + 'id' => '',
  163 + 'text' => '',
  164 + ],
  165 + ],
  166 + ];
  167 + if (!is_null($q)) {
  168 + $categories = Tag::find()
  169 + ->joinWith('lang')
  170 + ->select(
  171 + [
  172 + 'id' => 'blog_tag.id',
  173 + 'text' => 'blog_tag_lang.label',
  174 + ]
  175 + )
  176 + ->andFilterWhere(
  177 + [
  178 + 'like',
  179 + 'blog_tag_lang.label',
  180 + $q,
  181 + ]
  182 + )
  183 + ->limit(20)
  184 + ->asArray()
  185 + ->all();
  186 +
  187 + if (!empty($categories)) {
  188 + $out[ 'results' ] = $categories;
  189 + }
  190 + }
155 191
  192 + return $out;
  193 + }
  194 +
156 /** 195 /**
157 * Finds the BlogTag model based on its primary key value. 196 * Finds the BlogTag model based on its primary key value.
158 * If the model is not found, a 404 HTTP exception will be thrown. 197 * If the model is not found, a 404 HTTP exception will be thrown.
159 * 198 *
160 - * @param integer $id 199 +*@param integer $id
161 * 200 *
162 - * @return BlogTag the loaded model 201 + * @return Tag the loaded model
163 * @throws NotFoundHttpException if the model cannot be found 202 * @throws NotFoundHttpException if the model cannot be found
164 */ 203 */
165 protected function findModel($id) 204 protected function findModel($id)
166 { 205 {
167 - if (( $model = BlogTag::findOne($id) ) !== NULL) { 206 + if (( $model = Tag::findOne($id) ) !== null) {
168 return $model; 207 return $model;
169 } else { 208 } else {
170 throw new NotFoundHttpException('The requested page does not exist.'); 209 throw new NotFoundHttpException('The requested page does not exist.');
models/Article.php
@@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
2 2
3 namespace artbox\weblog\models; 3 namespace artbox\weblog\models;
4 4
  5 + use artbox\catalog\behaviors\ManyToManyBehavior;
5 use artbox\catalog\models\Product; 6 use artbox\catalog\models\Product;
  7 + use artbox\core\models\Image;
6 use yii\behaviors\TimestampBehavior; 8 use yii\behaviors\TimestampBehavior;
7 use yii\db\ActiveRecord; 9 use yii\db\ActiveRecord;
8 use artbox\core\behaviors\LanguageBehavior; 10 use artbox\core\behaviors\LanguageBehavior;
@@ -12,31 +14,33 @@ @@ -12,31 +14,33 @@
12 14
13 /** 15 /**
14 * This is the model class for table "blog_article". 16 * This is the model class for table "blog_article".
15 - *  
16 -*@property integer $id  
17 - * @property string $image  
18 - * @property integer $created_at  
19 - * @property integer $updated_at  
20 - * @property integer $deleted_at  
21 - * @property integer $sort  
22 - * @property boolean $status  
23 - * @property integer $author_id  
24 - * @property ArticleLang[] $blogArticleLangs  
25 - * @property Language[] $languages  
26 - * @property Article[] $relatedBlogArticles  
27 - * @property Article[] $blogArticles  
28 - * @property BlogCategory[] $blogCategories  
29 - * @property BlogCategory $blogCategory  
30 - * @property Product[] $products  
31 - * @property BlogTag[] $blogTags 17 +
  18 +*
  19 +*@property integer $id
  20 + * @property Image $image
  21 + * @property integer $created_at
  22 + * @property integer $updated_at
  23 + * @property integer $deleted_at
  24 + * @property integer $sort
  25 + * @property boolean $status
  26 + * @property integer $author_id
  27 + * @property integer $image_id
  28 + * @property ArticleLang[] $blogArticleLangs
  29 + * @property Language[] $languages
  30 + * @property Article[] $relatedBlogArticles
  31 + * @property Article[] $articles
  32 + * @property Category[] $categories
  33 + * @property Category $category
  34 + * @property Product[] $products
  35 + * @property Tag[] $tags
32 * * * From language behavior * 36 * * * From language behavior *
33 - * @property ArticleLang $lang  
34 - * @property ArticleLang[] $langs  
35 - * @property ArticleLang $objectLang  
36 - * @property string $ownerKey  
37 - * @property string $langKey  
38 - * @property ArticleLang[] $modelLangs  
39 - * @property bool $transactionStatus 37 + * @property ArticleLang $lang
  38 + * @property ArticleLang[] $langs
  39 + * @property ArticleLang $objectLang
  40 + * @property string $ownerKey
  41 + * @property string $langKey
  42 + * @property ArticleLang[] $modelLangs
  43 + * @property bool $transactionStatus
40 * @method string getOwnerKey() 44 * @method string getOwnerKey()
41 * @method void setOwnerKey( string $value ) 45 * @method void setOwnerKey( string $value )
42 * @method string getLangKey() 46 * @method string getLangKey()
@@ -48,16 +52,19 @@ @@ -48,16 +52,19 @@
48 * @method bool linkLangs() 52 * @method bool linkLangs()
49 * @method bool saveLangs() 53 * @method bool saveLangs()
50 * @method bool getTransactionStatus() 54 * @method bool getTransactionStatus()
  55 + * @method bool loadWithLangs( Request $request )
  56 + * @method bool saveWithLangs()
51 * * End language behavior * 57 * * End language behavior *
52 - * * From SaveImgBehavior  
53 - * @property string|null $imageFile  
54 - * @property string|null $imageUrl  
55 - * @method string|null getImageFile( int $field )  
56 - * @method string|null getImageUrl( int $field )  
57 - * * End SaveImgBehavior 58 + * @method void linkMany( string $link, array $models )
58 */ 59 */
59 class Article extends ActiveRecord 60 class Article extends ActiveRecord
60 { 61 {
  62 + public $categoryIds = [];
  63 +
  64 + public $tagIds = [];
  65 +
  66 + public $articleIds = [];
  67 +
61 /** 68 /**
62 * @inheritdoc 69 * @inheritdoc
63 */ 70 */
@@ -75,6 +82,9 @@ @@ -75,6 +82,9 @@
75 'language' => [ 82 'language' => [
76 'class' => LanguageBehavior::className(), 83 'class' => LanguageBehavior::className(),
77 ], 84 ],
  85 + [
  86 + 'class' => ManyToManyBehavior::className(),
  87 + ],
78 ]; 88 ];
79 } 89 }
80 /** 90 /**
@@ -130,6 +140,14 @@ @@ -130,6 +140,14 @@
130 /** 140 /**
131 * @return \yii\db\ActiveQuery 141 * @return \yii\db\ActiveQuery
132 */ 142 */
  143 + public function getImage()
  144 + {
  145 + return $this->hasOne(Image::className(), [ 'id' => 'image_id' ]);
  146 + }
  147 +
  148 + /**
  149 + * @return \yii\db\ActiveQuery
  150 + */
133 public function getArticles() 151 public function getArticles()
134 { 152 {
135 return $this->hasMany(Article::className(), [ 'id' => 'blog_article_id' ]) 153 return $this->hasMany(Article::className(), [ 'id' => 'blog_article_id' ])
@@ -139,19 +157,19 @@ @@ -139,19 +157,19 @@
139 /** 157 /**
140 * @return \yii\db\ActiveQuery 158 * @return \yii\db\ActiveQuery
141 */ 159 */
142 - public function getBlogCategories() 160 + public function getCategories()
143 { 161 {
144 - return $this->hasMany(BlogCategory::className(), [ 'id' => 'blog_category_id' ]) 162 + return $this->hasMany(Category::className(), [ 'id' => 'blog_category_id' ])
145 ->viaTable('blog_article_to_category', [ 'blog_article_id' => 'id' ]); 163 ->viaTable('blog_article_to_category', [ 'blog_article_id' => 'id' ]);
146 } 164 }
147 165
148 /** 166 /**
149 * @return \yii\db\ActiveQuery 167 * @return \yii\db\ActiveQuery
150 */ 168 */
151 - public function getBlogCategory() 169 + public function getCategory()
152 { 170 {
153 - return $this->hasOne(BlogCategory::className(), [ 'id' => 'blog_category_id' ])  
154 - ->viaTable('blog_article_to_category', [ 'blog_article_id' => 'id' ]); 171 + return $this->hasOne(Category::className(), [ 'id' => 'blog_category_id' ])
  172 + ->viaTable('blog_article_to_category', [ 'blog_article_id' => 'id' ]);
155 } 173 }
156 174
157 /** 175 /**
@@ -160,15 +178,15 @@ @@ -160,15 +178,15 @@
160 public function getProducts() 178 public function getProducts()
161 { 179 {
162 return $this->hasMany(Product::className(), [ 'id' => 'product_id' ]) 180 return $this->hasMany(Product::className(), [ 'id' => 'product_id' ])
163 - ->viaTable('blog_article_to_product', [ 'blog_article_id' => 'id' ]); 181 + ->viaTable('blog_article_to_product', [ 'blog_article_id' => 'id' ]);
164 } 182 }
165 183
166 /** 184 /**
167 * @return \yii\db\ActiveQuery 185 * @return \yii\db\ActiveQuery
168 */ 186 */
169 - public function getBlogTags() 187 + public function getTags()
170 { 188 {
171 - return $this->hasMany(BlogTag::className(), [ 'id' => 'blog_tag_id' ])  
172 - ->viaTable('blog_article_to_tag', [ 'blog_article_id' => 'id' ]); 189 + return $this->hasMany(Tag::className(), [ 'id' => 'blog_tag_id' ])
  190 + ->viaTable('blog_article_to_tag', [ 'blog_article_id' => 'id' ]);
173 } 191 }
174 } 192 }
models/Category.php
1 <?php 1 <?php
2 2
3 namespace artbox\weblog\models; 3 namespace artbox\weblog\models;
4 - 4 +
  5 + use artbox\core\models\Image;
5 use yii\db\ActiveRecord; 6 use yii\db\ActiveRecord;
6 use artbox\core\behaviors\LanguageBehavior; 7 use artbox\core\behaviors\LanguageBehavior;
7 use artbox\core\models\Language; 8 use artbox\core\models\Language;
8 use yii\db\ActiveQuery; 9 use yii\db\ActiveQuery;
9 use yii\web\Request; 10 use yii\web\Request;
10 - 11 +
11 /** 12 /**
12 * This is the model class for table "blog_category". 13 * This is the model class for table "blog_category".
13 -  
14 -*  
15 -*@property integer $id  
16 - * @property integer $sort  
17 - * @property string $image  
18 - * @property integer $parent_id  
19 - * @property boolean $status  
20 - * @property Article[] $blogArticles  
21 - * @property BlogCategoryLang[] $blogCategoryLangs  
22 - * @property Language[] $languages  
23 - * @property BlogCategory $parent 14 + *
  15 + * @property integer $id
  16 + * @property integer $sort
  17 + * @property integer $parent_id
  18 + * @property boolean $status
  19 + * @property Article[] $articles
  20 + * @property CategoryLang[] $blogCategoryLangs
  21 + * @property Language[] $languages
  22 + * @property Category $parent
  23 + * @property Image $image
  24 + * @property integer $image_id
24 * * From language behavior * 25 * * From language behavior *
25 - * @property BlogCategoryLang $lang  
26 - * @property BlogCategoryLang[] $langs  
27 - * @property BlogCategoryLang $objectLang  
28 - * @property string $ownerKey  
29 - * @property string $langKey  
30 - * @property BlogCategoryLang[] $modelLangs  
31 - * @property bool $transactionStatus 26 + * @property CategoryLang $lang
  27 + * @property CategoryLang[] $langs
  28 + * @property CategoryLang $objectLang
  29 + * @property string $ownerKey
  30 + * @property string $langKey
  31 + * @property CategoryLang[] $modelLangs
  32 + * @property bool $transactionStatus
32 * @method string getOwnerKey() 33 * @method string getOwnerKey()
33 * @method void setOwnerKey( string $value ) 34 * @method void setOwnerKey( string $value )
34 * @method string getLangKey() 35 * @method string getLangKey()
35 * @method void setLangKey( string $value ) 36 * @method void setLangKey( string $value )
36 * @method ActiveQuery getLangs() 37 * @method ActiveQuery getLangs()
37 * @method ActiveQuery getLang( integer $language_id ) 38 * @method ActiveQuery getLang( integer $language_id )
38 - * @method BlogCategoryLang[] generateLangs() 39 + * @method CategoryLang[] generateLangs()
39 * @method void loadLangs( Request $request ) 40 * @method void loadLangs( Request $request )
40 * @method bool linkLangs() 41 * @method bool linkLangs()
41 * @method bool saveLangs() 42 * @method bool saveLangs()
42 * @method bool getTransactionStatus() 43 * @method bool getTransactionStatus()
  44 + * @method bool loadWithLangs( Request $request )
  45 + * @method bool saveWithLangs()
43 * * End language behavior * 46 * * End language behavior *
44 * * From SaveImgBehavior * 47 * * From SaveImgBehavior *
45 - * @property string|null $imageFile  
46 - * @property string|null $imageUrl 48 + * @property string|null $imageFile
  49 + * @property string|null $imageUrl
47 * @method string|null getImageFile( int $field ) 50 * @method string|null getImageFile( int $field )
48 * @method string|null getImageUrl( int $field ) 51 * @method string|null getImageUrl( int $field )
49 * * End SaveImgBehavior 52 * * End SaveImgBehavior
@@ -57,7 +60,7 @@ @@ -57,7 +60,7 @@
57 { 60 {
58 return 'blog_category'; 61 return 'blog_category';
59 } 62 }
60 - 63 +
61 /** 64 /**
62 * @inheritdoc 65 * @inheritdoc
63 */ 66 */
@@ -69,7 +72,7 @@ @@ -69,7 +72,7 @@
69 ], 72 ],
70 ]; 73 ];
71 } 74 }
72 - 75 +
73 /** 76 /**
74 * @inheritdoc 77 * @inheritdoc
75 */ 78 */
@@ -80,6 +83,7 @@ @@ -80,6 +83,7 @@
80 [ 83 [
81 'sort', 84 'sort',
82 'parent_id', 85 'parent_id',
  86 + 'image_id',
83 ], 87 ],
84 'integer', 88 'integer',
85 ], 89 ],
@@ -88,18 +92,13 @@ @@ -88,18 +92,13 @@
88 'boolean', 92 'boolean',
89 ], 93 ],
90 [ 94 [
91 - [ 'image' ],  
92 - 'string',  
93 - 'max' => 255,  
94 - ],  
95 - [  
96 [ 'parent_id' ], 95 [ 'parent_id' ],
97 'default', 96 'default',
98 'value' => 0, 97 'value' => 0,
99 ], 98 ],
100 ]; 99 ];
101 } 100 }
102 - 101 +
103 /** 102 /**
104 * @inheritdoc 103 * @inheritdoc
105 */ 104 */
@@ -113,18 +112,29 @@ @@ -113,18 +112,29 @@
113 'status' => 'Status', 112 'status' => 'Status',
114 ]; 113 ];
115 } 114 }
116 - 115 +
117 /** 116 /**
118 * @return \yii\db\ActiveQuery 117 * @return \yii\db\ActiveQuery
119 */ 118 */
120 - public function getBlogArticles() 119 + public function getArticles()
121 { 120 {
122 - return $this->hasMany(BlogArticle::className(), [ 'id' => 'blog_article_id' ]) 121 + return $this->hasMany(Article::className(), [ 'id' => 'blog_article_id' ])
123 ->viaTable('blog_article_to_category', [ 'blog_category_id' => 'id' ]); 122 ->viaTable('blog_article_to_category', [ 'blog_category_id' => 'id' ]);
124 } 123 }
125 - 124 +
  125 + /**
  126 + * @return \yii\db\ActiveQuery
  127 + */
126 public function getParent() 128 public function getParent()
127 { 129 {
128 - return $this->hasOne(BlogCategory::className(), [ 'id' => 'parent_id' ]); 130 + return $this->hasOne(Category::className(), [ 'id' => 'parent_id' ]);
  131 + }
  132 +
  133 + /**
  134 + * @return \yii\db\ActiveQuery
  135 + */
  136 + public function getImage()
  137 + {
  138 + return $this->hasOne(Image::className(), [ 'id' => 'image_id' ]);
129 } 139 }
130 } 140 }
models/CategoryLang.php
@@ -8,19 +8,13 @@ @@ -8,19 +8,13 @@
8 8
9 /** 9 /**
10 * This is the model class for table "blog_category_lang". 10 * This is the model class for table "blog_category_lang".
11 -  
12 -* 11 + *
13 * @property integer $id 12 * @property integer $id
14 * @property integer $blog_category_id 13 * @property integer $blog_category_id
15 * @property integer $language_id 14 * @property integer $language_id
16 * @property string $title 15 * @property string $title
17 - * @property string $alias  
18 * @property string $description 16 * @property string $description
19 - * @property string $meta_title  
20 - * @property string $meta_description  
21 - * @property string $h1  
22 - * @property string $seo_text  
23 - * @property Category $blogCategory 17 + * @property Category $category
24 * @property Language $language 18 * @property Language $language
25 */ 19 */
26 class CategoryLang extends ActiveRecord 20 class CategoryLang extends ActiveRecord
@@ -59,6 +53,7 @@ @@ -59,6 +53,7 @@
59 [ 53 [
60 'blog_category_id', 54 'blog_category_id',
61 'language_id', 55 'language_id',
  56 + 'title',
62 ], 57 ],
63 'required', 58 'required',
64 ], 59 ],
@@ -76,20 +71,11 @@ @@ -76,20 +71,11 @@
76 [ 71 [
77 [ 72 [
78 'title', 73 'title',
79 - 'alias',  
80 - 'meta_title',  
81 - 'meta_description',  
82 - 'h1',  
83 - 'seo_text',  
84 ], 74 ],
85 'string', 75 'string',
86 'max' => 255, 76 'max' => 255,
87 ], 77 ],
88 [ 78 [
89 - [ 'alias' ],  
90 - 'unique',  
91 - ],  
92 - [  
93 [ 79 [
94 'blog_category_id', 80 'blog_category_id',
95 'language_id', 81 'language_id',
@@ -105,7 +91,7 @@ @@ -105,7 +91,7 @@
105 [ 'blog_category_id' ], 91 [ 'blog_category_id' ],
106 'exist', 92 'exist',
107 'skipOnError' => true, 93 'skipOnError' => true,
108 - 'targetClass' => BlogCategory::className(), 94 + 'targetClass' => Category::className(),
109 'targetAttribute' => [ 'blog_category_id' => 'id' ], 95 'targetAttribute' => [ 'blog_category_id' => 'id' ],
110 ], 96 ],
111 [ 97 [
@@ -140,9 +126,9 @@ @@ -140,9 +126,9 @@
140 /** 126 /**
141 * @return \yii\db\ActiveQuery 127 * @return \yii\db\ActiveQuery
142 */ 128 */
143 - public function getBlogCategory() 129 + public function getCategory()
144 { 130 {
145 - return $this->hasOne(BlogCategory::className(), [ 'id' => 'blog_category_id' ]); 131 + return $this->hasOne(Category::className(), [ 'id' => 'blog_category_id' ]);
146 } 132 }
147 133
148 /** 134 /**
@@ -10,31 +10,32 @@ @@ -10,31 +10,32 @@
10 10
11 /** 11 /**
12 * This is the model class for table "blog_tag". 12 * This is the model class for table "blog_tag".
13 -  
14 -*  
15 -*@property integer $id  
16 - * @property Article[] $blogArticles  
17 - * @property BlogTagLang[] $blogTagLangs  
18 - * @property Language[] $languages 13 + *
  14 + * @property integer $id
  15 + * @property Article[] $articles
  16 + * @property TagLang[] $blogTagLangs
  17 + * @property Language[] $languages
19 * * From language behavior * 18 * * From language behavior *
20 - * @property BlogTagLang $lang  
21 - * @property BlogTagLang[] $langs  
22 - * @property BlogTagLang $objectLang  
23 - * @property string $ownerKey  
24 - * @property string $langKey  
25 - * @property BlogTagLang[] $modelLangs  
26 - * @property bool $transactionStatus 19 + * @property TagLang $lang
  20 + * @property TagLang[] $langs
  21 + * @property TagLang $objectLang
  22 + * @property string $ownerKey
  23 + * @property string $langKey
  24 + * @property TagLang[] $modelLangs
  25 + * @property bool $transactionStatus
27 * @method string getOwnerKey() 26 * @method string getOwnerKey()
28 * @method void setOwnerKey( string $value ) 27 * @method void setOwnerKey( string $value )
29 * @method string getLangKey() 28 * @method string getLangKey()
30 * @method void setLangKey( string $value ) 29 * @method void setLangKey( string $value )
31 * @method ActiveQuery getLangs() 30 * @method ActiveQuery getLangs()
32 * @method ActiveQuery getLang( integer $language_id ) 31 * @method ActiveQuery getLang( integer $language_id )
33 - * @method BlogTagLang[] generateLangs() 32 + * @method TagLang[] generateLangs()
34 * @method void loadLangs( Request $request ) 33 * @method void loadLangs( Request $request )
35 * @method bool linkLangs() 34 * @method bool linkLangs()
36 * @method bool saveLangs() 35 * @method bool saveLangs()
37 * @method bool getTransactionStatus() 36 * @method bool getTransactionStatus()
  37 + * @method bool saveWithLangs()
  38 + * @method bool loadWithLangs( Request $request )
38 * * End language behavior * 39 * * End language behavior *
39 */ 40 */
40 class Tag extends ActiveRecord 41 class Tag extends ActiveRecord
@@ -85,7 +86,7 @@ @@ -85,7 +86,7 @@
85 /** 86 /**
86 * @return \yii\db\ActiveQuery 87 * @return \yii\db\ActiveQuery
87 */ 88 */
88 - public function getBlogArticles() 89 + public function getArticles()
89 { 90 {
90 return $this->hasMany(Article::className(), [ 'id' => 'blog_article_id' ]) 91 return $this->hasMany(Article::className(), [ 'id' => 'blog_article_id' ])
91 ->viaTable('blog_article_to_tag', [ 'blog_tag_id' => 'id' ]); 92 ->viaTable('blog_article_to_tag', [ 'blog_tag_id' => 'id' ]);
models/TagLang.php
1 <?php 1 <?php
2 2
3 namespace artbox\weblog\models; 3 namespace artbox\weblog\models;
4 - 4 +
  5 + use artbox\core\behaviors\SlugBehavior;
5 use artbox\core\models\Language; 6 use artbox\core\models\Language;
6 use yii\db\ActiveRecord; 7 use yii\db\ActiveRecord;
7 - 8 +
8 /** 9 /**
9 * This is the model class for table "blog_tag_lang". 10 * This is the model class for table "blog_tag_lang".
10 -  
11 -*  
12 -*@property integer $id 11 + *
  12 + * @property integer $id
13 * @property integer $blog_tag_id 13 * @property integer $blog_tag_id
14 * @property integer $language_id 14 * @property integer $language_id
15 * @property string $label 15 * @property string $label
@@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
18 */ 18 */
19 class TagLang extends ActiveRecord 19 class TagLang extends ActiveRecord
20 { 20 {
  21 +
21 /** 22 /**
22 * @inheritdoc 23 * @inheritdoc
23 */ 24 */
@@ -25,7 +26,27 @@ @@ -25,7 +26,27 @@
25 { 26 {
26 return 'blog_tag_lang'; 27 return 'blog_tag_lang';
27 } 28 }
28 - 29 +
  30 + /**
  31 + * @inheritdoc
  32 + */
  33 + public function behaviors()
  34 + {
  35 + return [
  36 + 'slug' => [
  37 + 'class' => SlugBehavior::className(),
  38 + 'action' => 'tag/view',
  39 + 'params' => [
  40 + 'id' => 'blog_tag_id',
  41 + ],
  42 + 'fields' => [
  43 + 'label' => \Yii::t('blog', 'Tag label'),
  44 + ],
  45 + 'inAttribute' => 'label',
  46 + ],
  47 + ];
  48 + }
  49 +
29 /** 50 /**
30 * @inheritdoc 51 * @inheritdoc
31 */ 52 */
@@ -79,7 +100,7 @@ @@ -79,7 +100,7 @@
79 ], 100 ],
80 ]; 101 ];
81 } 102 }
82 - 103 +
83 /** 104 /**
84 * @inheritdoc 105 * @inheritdoc
85 */ 106 */
@@ -92,15 +113,15 @@ @@ -92,15 +113,15 @@
92 'label' => 'Label', 113 'label' => 'Label',
93 ]; 114 ];
94 } 115 }
95 - 116 +
96 /** 117 /**
97 * @return \yii\db\ActiveQuery 118 * @return \yii\db\ActiveQuery
98 */ 119 */
99 - public function getBlogTag() 120 + public function getTag()
100 { 121 {
101 return $this->hasOne(Tag::className(), [ 'id' => 'blog_tag_id' ]); 122 return $this->hasOne(Tag::className(), [ 'id' => 'blog_tag_id' ]);
102 } 123 }
103 - 124 +
104 /** 125 /**
105 * @return \yii\db\ActiveQuery 126 * @return \yii\db\ActiveQuery
106 */ 127 */
views/blog-article/_form.php
@@ -2,9 +2,8 @@ @@ -2,9 +2,8 @@
2 2
3 use artbox\weblog\models\Article; 3 use artbox\weblog\models\Article;
4 use artbox\weblog\models\ArticleLang; 4 use artbox\weblog\models\ArticleLang;
5 -  
6 - // use artweb\artbox\blog\models\BlogCategory;  
7 - // use artweb\artbox\blog\models\BlogTag; 5 + use artbox\weblog\models\Category;
  6 + use artbox\weblog\models\Tag;
8 use kartik\select2\Select2; 7 use kartik\select2\Select2;
9 use noam148\imagemanager\components\ImageManagerInputWidget; 8 use noam148\imagemanager\components\ImageManagerInputWidget;
10 use yii\helpers\Html; 9 use yii\helpers\Html;
@@ -15,14 +14,14 @@ @@ -15,14 +14,14 @@
15 use yii\web\JsExpression; 14 use yii\web\JsExpression;
16 15
17 /** 16 /**
18 - * @var View $this  
19 - * @var Article $model  
20 - * @var ActiveForm $form  
21 - * @var ArticleLang[] $modelLangs  
22 - * @var BlogCategory[] $categories  
23 - * @var BlogTag[] $tags  
24 - * @var array $products  
25 - * @var array $articles 17 + * @var View $this
  18 + * @var Article $model
  19 + * @var ActiveForm $form
  20 + * @var ArticleLang[] $modelLangs
  21 + * @var Category[] $categories
  22 + * @var Tag[] $tags
  23 + * @var array $products
  24 + * @var array $articles
26 */ 25 */
27 ?> 26 ?>
28 27
@@ -43,42 +42,110 @@ @@ -43,42 +42,110 @@
43 ] 42 ]
44 ); 43 );
45 ?> 44 ?>
46 -  
47 - <?php  
48 - // echo $form->field($model, 'blogCategories')  
49 - // ->widget(  
50 - // Select2::className(),  
51 - // [  
52 - // 'data' => $categories,  
53 - // 'theme' => Select2::THEME_BOOTSTRAP,  
54 - // 'options' => [  
55 - // 'placeholder' => \Yii::t('blog', 'Select category'),  
56 - // 'multiple' => true,  
57 - // ],  
58 - // 'pluginOptions' => [  
59 - // 'allowClear' => true,  
60 - // ],  
61 - // ]  
62 - // );  
63 - ?>  
64 -  
65 - <?php  
66 - // echo $form->field($model, 'blogTags')  
67 - // ->widget(  
68 - // Select2::className(),  
69 - // [  
70 - // 'data' => $tags,  
71 - // 'theme' => Select2::THEME_BOOTSTRAP,  
72 - // 'options' => [  
73 - // 'placeholder' => \Yii::t('blog', 'Select tag'),  
74 - // 'multiple' => true,  
75 - // ],  
76 - // 'pluginOptions' => [  
77 - // 'allowClear' => true,  
78 - // ],  
79 - // ]  
80 - // );  
81 - ?> 45 +
  46 + <div class="form-group">
  47 + <label class="control-label"><?= \Yii::t('blog', 'Categories'); ?></label>
  48 + <?php
  49 + echo Select2::widget(
  50 + [
  51 + 'name' => 'categoryIds',
  52 + 'options' => [
  53 + 'placeholder' => \Yii::t('blog', 'Search for a categories ...'),
  54 + 'multiple' => true,
  55 + ],
  56 + 'value' => array_keys($model->categoryIds),
  57 + 'data' => $model->categoryIds,
  58 + 'pluginOptions' => [
  59 + 'allowClear' => true,
  60 + 'minimumInputLength' => 3,
  61 + 'language' => [
  62 + 'errorLoading' => new JsExpression(
  63 + "function () { return 'Waiting for results...'; }"
  64 + ),
  65 + ],
  66 + 'ajax' => [
  67 + 'url' => Url::to([ '/blog-category/list' ]),
  68 + 'dataType' => 'json',
  69 + 'data' => new JsExpression(
  70 + 'function(params) {
  71 + return {
  72 + q:params.term
  73 + };
  74 + }'
  75 + ),
  76 + ],
  77 + 'escapeMarkup' => new JsExpression(
  78 + 'function (markup) {
  79 + return markup;
  80 + }'
  81 + ),
  82 + 'templateResult' => new JsExpression(
  83 + 'function (brand) {
  84 + return brand.text;
  85 + }'
  86 + ),
  87 + 'templateSelection' => new JsExpression(
  88 + 'function (brand) {
  89 + return brand.text;
  90 + }'
  91 + ),
  92 + ],
  93 + ]
  94 + );
  95 + ?>
  96 + </div>
  97 +
  98 + <div class="form-group">
  99 + <label class="control-label"><?= \Yii::t('blog', 'Tags'); ?></label>
  100 + <?php
  101 + echo Select2::widget(
  102 + [
  103 + 'name' => 'tagIds',
  104 + 'options' => [
  105 + 'placeholder' => \Yii::t('blog', 'Search for a tags ...'),
  106 + 'multiple' => true,
  107 + ],
  108 + 'value' => array_keys($model->tagIds),
  109 + 'data' => $model->tagIds,
  110 + 'pluginOptions' => [
  111 + 'allowClear' => true,
  112 + 'minimumInputLength' => 3,
  113 + 'language' => [
  114 + 'errorLoading' => new JsExpression(
  115 + "function () { return 'Waiting for results...'; }"
  116 + ),
  117 + ],
  118 + 'ajax' => [
  119 + 'url' => Url::to([ '/blog-tag/list' ]),
  120 + 'dataType' => 'json',
  121 + 'data' => new JsExpression(
  122 + 'function(params) {
  123 + return {
  124 + q:params.term
  125 + };
  126 + }'
  127 + ),
  128 + ],
  129 + 'escapeMarkup' => new JsExpression(
  130 + 'function (markup) {
  131 + return markup;
  132 + }'
  133 + ),
  134 + 'templateResult' => new JsExpression(
  135 + 'function (brand) {
  136 + return brand.text;
  137 + }'
  138 + ),
  139 + 'templateSelection' => new JsExpression(
  140 + 'function (brand) {
  141 + return brand.text;
  142 + }'
  143 + ),
  144 + ],
  145 + ]
  146 + );
  147 + ?>
  148 + </div>
82 149
83 <?= $form->field($model, 'image_id') 150 <?= $form->field($model, 'image_id')
84 ->widget( 151 ->widget(
@@ -92,73 +159,63 @@ @@ -92,73 +159,63 @@
92 //on true show warning before detach image 159 //on true show warning before detach image
93 ] 160 ]
94 ); ?> 161 ); ?>
95 -  
96 - <?php  
97 - // echo $form->field($model, 'products')  
98 - // ->widget(  
99 - // Select2::className(),  
100 - // [  
101 - // 'data' => $products,  
102 - // 'options' => [  
103 - // 'placeholder' => \Yii::t('blog', 'Select related products'),  
104 - // 'multiple' => true,  
105 - // ],  
106 - // 'pluginOptions' => [  
107 - // 'allowClear' => true,  
108 - // 'minimumInputLength' => 3,  
109 - // 'language' => [  
110 - // 'errorLoading' => new JsExpression(  
111 - // "function () { return '" . \Yii::t('blog', 'Waiting for results') . "'; }"  
112 - // ),  
113 - // ],  
114 - // 'ajax' => [  
115 - // 'url' => yii\helpers\Url::to([ '/blog/blog-article/product-list' ]),  
116 - // 'dataType' => 'json',  
117 - // 'data' => new JsExpression('function(params) { return {q:params.term}; }'),  
118 - // ],  
119 - // 'templateResult' => new JsExpression('function(product) { return product.text; }'),  
120 - // 'templateSelection' => new JsExpression('function (product) { return product.text; }'),  
121 - // ],  
122 - // ]  
123 - // );  
124 - ?>  
125 -  
126 - <?php  
127 - // if (empty( $model->id )) {  
128 - // $data = 'function(params) { return {q:params.term}; }';  
129 - // } else {  
130 - // $data = 'function(params) { return {q:params.term, id:' . $model->id . '}; }';  
131 - // }  
132 - // echo $form->field($model, 'blogArticles')  
133 - // ->widget(  
134 - // Select2::className(),  
135 - // [  
136 - // 'data' => $articles,  
137 - // 'options' => [  
138 - // 'placeholder' => \Yii::t('blog', 'Select related articles'),  
139 - // 'multiple' => true,  
140 - // ],  
141 - // 'pluginOptions' => [  
142 - // 'allowClear' => true,  
143 - // 'minimumInputLength' => 3,  
144 - // 'language' => [  
145 - // 'errorLoading' => new JsExpression(  
146 - // "function () { return '" . \Yii::t('blog', 'Waiting for results') . "'; }"  
147 - // ),  
148 - // ],  
149 - // 'ajax' => [  
150 - // 'url' => yii\helpers\Url::to([ '/blog/blog-article/article-list' ]),  
151 - // 'dataType' => 'json',  
152 - // 'data' => new JsExpression(  
153 - // $data  
154 - // ),  
155 - // ],  
156 - // 'templateResult' => new JsExpression('function(article) { return article.text; }'),  
157 - // 'templateSelection' => new JsExpression('function (article) { return article.text; }'),  
158 - // ],  
159 - // ]  
160 - // );  
161 - ?> 162 +
  163 + <div class="form-group">
  164 + <label class="control-label"><?= \Yii::t('blog', 'Articles'); ?></label>
  165 + <?php
  166 + if ($model->isNewRecord) {
  167 + $condition = '';
  168 + } else {
  169 + $condition = ', id: ' . $model->id;
  170 + }
  171 + echo Select2::widget(
  172 + [
  173 + 'name' => 'articleIds',
  174 + 'options' => [
  175 + 'placeholder' => \Yii::t('blog', 'Search for an articles ...'),
  176 + 'multiple' => true,
  177 + ],
  178 + 'value' => array_keys($model->articleIds),
  179 + 'data' => $model->articleIds,
  180 + 'pluginOptions' => [
  181 + 'allowClear' => true,
  182 + 'minimumInputLength' => 3,
  183 + 'language' => [
  184 + 'errorLoading' => new JsExpression(
  185 + "function () { return 'Waiting for results...'; }"
  186 + ),
  187 + ],
  188 + 'ajax' => [
  189 + 'url' => Url::to([ '/blog-article/list' ]),
  190 + 'dataType' => 'json',
  191 + 'data' => new JsExpression(
  192 + 'function(params) {
  193 + return {
  194 + q:params.term' . $condition . '
  195 + };
  196 + }'
  197 + ),
  198 + ],
  199 + 'escapeMarkup' => new JsExpression(
  200 + 'function (markup) {
  201 + return markup;
  202 + }'
  203 + ),
  204 + 'templateResult' => new JsExpression(
  205 + 'function (brand) {
  206 + return brand.text;
  207 + }'
  208 + ),
  209 + 'templateSelection' => new JsExpression(
  210 + 'function (brand) {
  211 + return brand.text;
  212 + }'
  213 + ),
  214 + ],
  215 + ]
  216 + );
  217 + ?>
  218 + </div>
162 219
163 <?= $form->field($model, 'sort') 220 <?= $form->field($model, 'sort')
164 ->textInput() ?> 221 ->textInput() ?>
@@ -172,13 +229,13 @@ @@ -172,13 +229,13 @@
172 229
173 <?= $form->field($model, 'author_id') 230 <?= $form->field($model, 'author_id')
174 ->textInput() ?> 231 ->textInput() ?>
175 -  
176 - <div class="form-group">  
177 - <?= Html::submitButton(  
178 - $model->isNewRecord ? 'Create' : 'Update',  
179 - [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]  
180 - ) ?>  
181 - </div> 232 +
  233 + <div class="form-group">
  234 + <?= Html::submitButton(
  235 + $model->isNewRecord ? 'Create' : 'Update',
  236 + [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]
  237 + ) ?>
  238 + </div>
182 239
183 <?php ActiveForm::end(); ?> 240 <?php ActiveForm::end(); ?>
184 241
views/blog-article/create.php
@@ -33,10 +33,6 @@ @@ -33,10 +33,6 @@
33 [ 33 [
34 'model' => $model, 34 'model' => $model,
35 'modelLangs' => $modelLangs, 35 'modelLangs' => $modelLangs,
36 - // 'categories' => $categories,  
37 - // 'tags' => $tags,  
38 - 'products' => $products,  
39 - 'articles' => $articles,  
40 ] 36 ]
41 ) ?> 37 ) ?>
42 38
views/blog-article/index.php
@@ -41,13 +41,24 @@ @@ -41,13 +41,24 @@
41 'attribute' => 'title', 41 'attribute' => 'title',
42 'value' => 'lang.title', 42 'value' => 'lang.title',
43 ], 43 ],
44 - 'imageUrl:image', 44 + [
  45 + 'attribute' => 'image_id',
  46 + 'value' => function (Article $model) {
  47 + if (empty($model->image_id)) {
  48 + return '';
  49 + } else {
  50 + return $model->image->getImg(
  51 + [
  52 + 'width' => '300px',
  53 + ]
  54 + );
  55 + }
  56 + },
  57 + 'format' => 'html',
  58 + ],
45 [ 59 [
46 'attribute' => 'status', 60 'attribute' => 'status',
47 - 'value' => function ($model) {  
48 - /**  
49 - * @var Article $model  
50 - */ 61 + 'value' => function (Article $model) {
51 return ( !$model->status ) ? \Yii::t('blog', 'Not active') : \Yii::t('blog', 'Active'); 62 return ( !$model->status ) ? \Yii::t('blog', 'Not active') : \Yii::t('blog', 'Active');
52 }, 63 },
53 'filter' => [ 64 'filter' => [
@@ -63,5 +74,5 @@ @@ -63,5 +74,5 @@
63 ); ?> 74 ); ?>
64 75
65 <?php $panel::end(); ?> 76 <?php $panel::end(); ?>
66 - 77 +
67 </div> 78 </div>
views/blog-article/update.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogArticle;  
4 - use artweb\artbox\blog\models\BlogArticleLang;  
5 - use artweb\artbox\blog\models\BlogCategory;  
6 - use artweb\artbox\blog\models\BlogTag;  
7 - use yii\helpers\Html; 3 + use artbox\weblog\models\Article;
  4 + use artbox\weblog\models\ArticleLang;
8 use yii\web\View; 5 use yii\web\View;
  6 + use yiister\gentelella\widgets\Panel;
9 7
10 /** 8 /**
11 - * @var View $this  
12 - * @var BlogArticle $model  
13 - * @var BlogArticleLang[] $modelLangs  
14 - * @var BlogCategory[] $categories  
15 - * @var BlogTag[] $tags  
16 - * @var array $products  
17 - * @var array $articles 9 + * @var View $this
  10 + * @var Article $model
  11 + * @var ArticleLang[] $modelLangs
18 */ 12 */
19 13
20 $this->title = \Yii::t('blog', 'Update Blog Article: ') . $model->lang->title; 14 $this->title = \Yii::t('blog', 'Update Blog Article: ') . $model->lang->title;
@@ -33,18 +27,20 @@ @@ -33,18 +27,20 @@
33 ?> 27 ?>
34 <div class="blog-article-update"> 28 <div class="blog-article-update">
35 29
36 - <h1><?= Html::encode($this->title) ?></h1> 30 + <?php $panel = Panel::begin(
  31 + [
  32 + 'header' => $this->title,
  33 + ]
  34 + ); ?>
37 35
38 <?= $this->render( 36 <?= $this->render(
39 '_form', 37 '_form',
40 [ 38 [
41 'model' => $model, 39 'model' => $model,
42 'modelLangs' => $modelLangs, 40 'modelLangs' => $modelLangs,
43 - 'categories' => $categories,  
44 - 'tags' => $tags,  
45 - 'products' => $products,  
46 - 'articles' => $articles,  
47 ] 41 ]
48 ) ?> 42 ) ?>
  43 +
  44 + <?php $panel::end(); ?>
49 45
50 </div> 46 </div>
views/blog-article/view.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogArticle; 3 + use artbox\weblog\models\Article;
4 use yii\helpers\Html; 4 use yii\helpers\Html;
5 use yii\web\View; 5 use yii\web\View;
6 use yii\widgets\DetailView; 6 use yii\widgets\DetailView;
  7 + use yiister\gentelella\widgets\Panel;
7 8
8 /** 9 /**
9 - * @var View $this  
10 - * @var BlogArticle $model 10 + * @var View $this
  11 + * @var Article $model
11 */ 12 */
12 13
13 $this->title = $model->lang->title; 14 $this->title = $model->lang->title;
@@ -19,49 +20,68 @@ @@ -19,49 +20,68 @@
19 ?> 20 ?>
20 <div class="blog-article-view"> 21 <div class="blog-article-view">
21 22
22 - <h1><?= Html::encode($this->title) ?></h1>  
23 -  
24 - <p>  
25 - <?= Html::a(  
26 - 'Update',  
27 - [  
28 - 'update',  
29 - 'id' => $model->id,  
30 - ],  
31 - [ 'class' => 'btn btn-primary' ]  
32 - ) ?>  
33 - <?= Html::a(  
34 - 'Delete',  
35 - [  
36 - 'delete',  
37 - 'id' => $model->id,  
38 - ],  
39 - [  
40 - 'class' => 'btn btn-danger',  
41 - 'data' => [  
42 - 'confirm' => 'Are you sure you want to delete this item?',  
43 - 'method' => 'post',  
44 - ],  
45 - ]  
46 - ) ?>  
47 - </p> 23 + <?php $panel = Panel::begin(
  24 + [
  25 + 'header' => $this->title,
  26 + ]
  27 + ); ?>
  28 +
  29 + <p>
  30 + <?= Html::a(
  31 + 'Update',
  32 + [
  33 + 'update',
  34 + 'id' => $model->id,
  35 + ],
  36 + [ 'class' => 'btn btn-primary' ]
  37 + ) ?>
  38 + <?= Html::a(
  39 + 'Delete',
  40 + [
  41 + 'delete',
  42 + 'id' => $model->id,
  43 + ],
  44 + [
  45 + 'class' => 'btn btn-danger',
  46 + 'data' => [
  47 + 'confirm' => 'Are you sure you want to delete this item?',
  48 + 'method' => 'post',
  49 + ],
  50 + ]
  51 + ) ?>
  52 + </p>
48 53
49 <?= DetailView::widget( 54 <?= DetailView::widget(
50 [ 55 [
51 'model' => $model, 56 'model' => $model,
52 'attributes' => [ 57 'attributes' => [
53 'id', 58 'id',
54 - 'imageUrl:image', 59 + [
  60 + 'attribute' => 'image_id',
  61 + 'value' => function (Article $model) {
  62 + if (empty($model->image_id)) {
  63 + return '';
  64 + } else {
  65 + return $model->image->getImg(
  66 + [
  67 + 'width' => '500px',
  68 + ]
  69 + );
  70 + }
  71 + },
  72 + 'format' => 'html',
  73 + ],
55 'created_at:date', 74 'created_at:date',
56 'updated_at:date', 75 'updated_at:date',
57 [ 76 [
58 'attribute' => 'status', 77 'attribute' => 'status',
59 'value' => ( !$model->status ) ? \Yii::t('blog', 'Not active') : \Yii::t('blog', 'Active'), 78 'value' => ( !$model->status ) ? \Yii::t('blog', 'Not active') : \Yii::t('blog', 'Active'),
60 ], 79 ],
61 - 'lang.alias',  
62 'lang.body:html', 80 'lang.body:html',
63 ], 81 ],
64 ] 82 ]
65 ) ?> 83 ) ?>
  84 +
  85 + <?php $panel::end(); ?>
66 86
67 </div> 87 </div>
views/blog-category/_form.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogCategory;  
4 - use artweb\artbox\blog\models\BlogCategoryLang; 3 + use artbox\core\widgets\LanguageForm;
  4 + use artbox\weblog\models\Category;
  5 + use artbox\weblog\models\CategoryLang;
5 use kartik\select2\Select2; 6 use kartik\select2\Select2;
  7 + use noam148\imagemanager\components\ImageManagerInputWidget;
6 use yii\helpers\Html; 8 use yii\helpers\Html;
7 - use yii\helpers\Url;  
8 use yii\web\View; 9 use yii\web\View;
9 use yii\widgets\ActiveForm; 10 use yii\widgets\ActiveForm;
10 - use artweb\artbox\language\widgets\LanguageForm;  
11 11
12 /** 12 /**
13 - * @var View $this  
14 - * @var BlogCategory $model  
15 - * @var ActiveForm $form  
16 - * @var BlogCategoryLang[] $modelLangs  
17 - * @var array $parentCategories 13 + * @var View $this
  14 + * @var Category $model
  15 + * @var ActiveForm $form
  16 + * @var CategoryLang[] $modelLangs
  17 + * @var array $parentCategories
18 */ 18 */
19 ?> 19 ?>
20 20
@@ -31,40 +31,22 @@ @@ -31,40 +31,22 @@
31 echo LanguageForm::widget( 31 echo LanguageForm::widget(
32 [ 32 [
33 'modelLangs' => $modelLangs, 33 'modelLangs' => $modelLangs,
34 - 'formView' => '@artweb/artbox/blog/views/blog-category/_form_language', 34 + 'formView' => '@artbox/weblog/views/blog-category/_form_language',
35 'form' => $form, 35 'form' => $form,
36 ] 36 ]
37 ); 37 );
38 ?> 38 ?>
39 39
40 - <?= $form->field($model, 'image') 40 + <?= $form->field($model, 'image_id')
41 ->widget( 41 ->widget(
42 - \kartik\file\FileInput::className(), 42 + ImageManagerInputWidget::className(),
43 [ 43 [
44 - 'language' => 'ru',  
45 - 'options' => [  
46 - 'accept' => 'image/*',  
47 - 'multiple' => false,  
48 - 'deleteurl' => $model->isNewRecord?false:Url::to(['/blog/blog-category/delete-image', 'id' => $model->id]),  
49 - 'class' => $model->isNewRecord?'':'artbox-delete-file',  
50 - ],  
51 - 'pluginOptions' => [  
52 - 'allowedFileExtensions' => [  
53 - 'jpg',  
54 - 'gif',  
55 - 'png',  
56 - ],  
57 - 'initialPreview' => !empty( $model->getImageUrl(0, false) ) ? \artweb\artbox\components\artboximage\ArtboxImageHelper::getImage(  
58 - $model->imageUrl,  
59 - 'list'  
60 - ) : '',  
61 - 'initialPreviewShowDelete' => false,  
62 - 'overwriteInitial' => true,  
63 - 'showRemove' => true,  
64 - 'showUpload' => false,  
65 - 'showClose' => false,  
66 - 'previewFileType' => 'image',  
67 - ], 44 + 'aspectRatio' => ( 16 / 9 ),
  45 + //set the aspect ratio
  46 + 'showPreview' => true,
  47 + //false to hide the preview
  48 + 'showDeletePickedImageConfirm' => false,
  49 + //on true show warning before detach image
68 ] 50 ]
69 ); ?> 51 ); ?>
70 52
@@ -85,14 +67,18 @@ @@ -85,14 +67,18 @@
85 ?> 67 ?>
86 68
87 <?= $form->field($model, 'status') 69 <?= $form->field($model, 'status')
88 - ->checkbox() ?>  
89 -  
90 - <div class="form-group">  
91 - <?= Html::submitButton(  
92 - $model->isNewRecord ? 'Create' : 'Update',  
93 - [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]  
94 - ) ?>  
95 - </div> 70 + ->checkbox(
  71 + [
  72 + 'class' => 'flat',
  73 + ]
  74 + ) ?>
  75 +
  76 + <div class="form-group">
  77 + <?= Html::submitButton(
  78 + $model->isNewRecord ? 'Create' : 'Update',
  79 + [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]
  80 + ) ?>
  81 + </div>
96 82
97 <?php ActiveForm::end(); ?> 83 <?php ActiveForm::end(); ?>
98 84
views/blog-category/_form_language.php
1 <?php 1 <?php
2 - use artweb\artbox\blog\models\BlogArticleLang;  
3 - use artweb\artbox\language\models\Language; 2 +
  3 + use artbox\core\helpers\SlugifyDecorator;
  4 + use artbox\weblog\models\CategoryLang;
  5 + use artbox\core\models\Language;
4 use yii\web\View; 6 use yii\web\View;
5 use yii\widgets\ActiveForm; 7 use yii\widgets\ActiveForm;
6 8
7 /** 9 /**
8 - * @var BlogArticleLang $model_lang  
9 - * @var Language $language  
10 - * @var ActiveForm $form  
11 - * @var View $this 10 + * @var CategoryLang $model_lang
  11 + * @var Language $language
  12 + * @var ActiveForm $form
  13 + * @var View $this
12 */ 14 */
13 ?> 15 ?>
14 -<?= $form->field($model_lang, '[' . $language->id . ']title')  
15 - ->textInput([ 'maxlength' => true ]); ?> 16 +<?= $attributeField = $form->field($model_lang, '[' . $language->id . ']title')
  17 + ->textInput([ 'maxlength' => true ]); ?>
16 18
17 -<?= $form->field($model_lang, '[' . $language->id . ']alias')  
18 - ->textInput([ 'maxlength' => true ]); ?> 19 +<?= SlugifyDecorator::decorate(
  20 + $form->field($model_lang, '[' . $language->id . ']aliasValue'),
  21 + [ '/alias/slugify' ],
  22 + $attributeField
  23 +)
  24 + ->textInput([ 'maxlength' => true ]); ?>
19 25
20 <?= $form->field($model_lang, '[' . $language->id . ']description') 26 <?= $form->field($model_lang, '[' . $language->id . ']description')
21 ->textarea( 27 ->textarea(
@@ -23,15 +29,3 @@ @@ -23,15 +29,3 @@
23 'rows' => '10', 29 'rows' => '10',
24 ] 30 ]
25 ) ?> 31 ) ?>
26 -  
27 -<?= $form->field($model_lang, '[' . $language->id . ']meta_title')  
28 - ->textInput([ 'maxlength' => true ]); ?>  
29 -  
30 -<?= $form->field($model_lang, '[' . $language->id . ']meta_description')  
31 - ->textInput([ 'maxlength' => true ]); ?>  
32 -  
33 -<?= $form->field($model_lang, '[' . $language->id . ']seo_text')  
34 - ->textInput([ 'maxlength' => true ]); ?>  
35 -  
36 -<?= $form->field($model_lang, '[' . $language->id . ']h1')  
37 - ->textInput([ 'maxlength' => true ]); ?>  
views/blog-category/create.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogArticleLang;  
4 - use artweb\artbox\blog\models\BlogCategory;  
5 - use yii\helpers\Html; 3 + use artbox\weblog\models\Category;
  4 + use artbox\weblog\models\CategoryLang;
6 use yii\web\View; 5 use yii\web\View;
  6 + use yiister\gentelella\widgets\Panel;
7 7
8 /** 8 /**
9 - * @var View $this  
10 - * @var BlogCategory $model  
11 - * @var BlogArticleLang[] $modelLangs  
12 - * @var array $parentCategories 9 + * @var View $this
  10 + * @var Category $model
  11 + * @var CategoryLang[] $modelLangs
  12 + * @var array $parentCategories
13 */ 13 */
14 14
15 $this->title = \Yii::t('blog', 'Create Blog Category'); 15 $this->title = \Yii::t('blog', 'Create Blog Category');
@@ -21,7 +21,11 @@ @@ -21,7 +21,11 @@
21 ?> 21 ?>
22 <div class="blog-category-create"> 22 <div class="blog-category-create">
23 23
24 - <h1><?= Html::encode($this->title) ?></h1> 24 + <?php $panel = Panel::begin(
  25 + [
  26 + 'header' => $this->title,
  27 + ]
  28 + ) ?>
25 29
26 <?= $this->render( 30 <?= $this->render(
27 '_form', 31 '_form',
@@ -31,5 +35,7 @@ @@ -31,5 +35,7 @@
31 'parentCategories' => $parentCategories, 35 'parentCategories' => $parentCategories,
32 ] 36 ]
33 ) ?> 37 ) ?>
  38 +
  39 + <?php $panel::end(); ?>
34 40
35 </div> 41 </div>
views/blog-category/index.php
1 <?php 1 <?php
2 2
  3 + use artbox\weblog\models\Category;
  4 + use artbox\weblog\models\CategorySearch;
3 use yii\data\ActiveDataProvider; 5 use yii\data\ActiveDataProvider;
4 use yii\helpers\Html; 6 use yii\helpers\Html;
5 use yii\grid\GridView; 7 use yii\grid\GridView;
@@ -8,7 +10,7 @@ @@ -8,7 +10,7 @@
8 10
9 /** 11 /**
10 * @var View $this 12 * @var View $this
11 - * @var BlogCategorySearch $searchModel 13 + * @var CategorySearch $searchModel
12 * @var ActiveDataProvider $dataProvider 14 * @var ActiveDataProvider $dataProvider
13 */ 15 */
14 16
@@ -36,26 +38,34 @@ @@ -36,26 +38,34 @@
36 'attribute' => 'title', 38 'attribute' => 'title',
37 'value' => 'lang.title', 39 'value' => 'lang.title',
38 ], 40 ],
39 - 'imageUrl:image', 41 + [
  42 + 'attribute' => 'image_id',
  43 + 'value' => function (Category $model) {
  44 + if (empty($model->image_id)) {
  45 + return '';
  46 + } else {
  47 + }
  48 + return $model->image->getImg(
  49 + [
  50 + 'width' => '300px',
  51 + ]
  52 + );
  53 + },
  54 + 'format' => 'html',
  55 + ],
40 [ 56 [
41 'label' => \Yii::t('blog', 'Parent category'), 57 'label' => \Yii::t('blog', 'Parent category'),
42 - 'value' => function ($model) {  
43 - /**  
44 - * @var BlogCategory $model  
45 - */ 58 + 'value' => function (Category $model) {
46 if (!empty($model->parent)) { 59 if (!empty($model->parent)) {
47 return $model->parent->lang->title; 60 return $model->parent->lang->title;
48 } else { 61 } else {
49 return false; 62 return false;
50 - }; 63 + }
51 }, 64 },
52 ], 65 ],
53 [ 66 [
54 'attribute' => 'status', 67 'attribute' => 'status',
55 - 'value' => function ($model) {  
56 - /**  
57 - * @var BlogCategory $model  
58 - */ 68 + 'value' => function (Category $model) {
59 return ( !$model->status ) ? \Yii::t('blog', 'Not active') : \Yii::t('blog', 'Active'); 69 return ( !$model->status ) ? \Yii::t('blog', 'Not active') : \Yii::t('blog', 'Active');
60 }, 70 },
61 'filter' => [ 71 'filter' => [
views/blog-category/update.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogCategory;  
4 - use artweb\artbox\blog\models\BlogCategoryLang;  
5 - use yii\helpers\Html; 3 + use artbox\weblog\models\Category;
  4 + use artbox\weblog\models\CategoryLang;
6 use yii\web\View; 5 use yii\web\View;
  6 + use yiister\gentelella\widgets\Panel;
7 7
8 /** 8 /**
9 - * @var View $this  
10 - * @var BlogCategory $model  
11 - * @var BlogCategoryLang $modelLangs  
12 - * @var array $parentCategories 9 + * @var View $this
  10 + * @var Category $model
  11 + * @var CategoryLang $modelLangs
  12 + * @var array $parentCategories
13 */ 13 */
14 14
15 $this->title = \Yii::t('blog', 'Update Blog Category: ') . $model->lang->title; 15 $this->title = \Yii::t('blog', 'Update Blog Category: ') . $model->lang->title;
@@ -28,7 +28,11 @@ @@ -28,7 +28,11 @@
28 ?> 28 ?>
29 <div class="blog-category-update"> 29 <div class="blog-category-update">
30 30
31 - <h1><?= Html::encode($this->title) ?></h1> 31 + <?php $panel = Panel::begin(
  32 + [
  33 + 'header' => $this->title,
  34 + ]
  35 + ); ?>
32 36
33 <?= $this->render( 37 <?= $this->render(
34 '_form', 38 '_form',
@@ -38,5 +42,7 @@ @@ -38,5 +42,7 @@
38 'parentCategories' => $parentCategories, 42 'parentCategories' => $parentCategories,
39 ] 43 ]
40 ) ?> 44 ) ?>
  45 +
  46 + <?php $panel::end(); ?>
41 47
42 </div> 48 </div>
views/blog-category/view.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogCategory; 3 + use artbox\weblog\models\Category;
4 use yii\helpers\Html; 4 use yii\helpers\Html;
5 use yii\web\View; 5 use yii\web\View;
6 use yii\widgets\DetailView; 6 use yii\widgets\DetailView;
  7 + use yiister\gentelella\widgets\Panel;
7 8
8 /** 9 /**
9 - * @var View $this  
10 - * @var BlogCategory $model 10 + * @var View $this
  11 + * @var Category $model
11 */ 12 */
12 13
13 $this->title = $model->lang->title; 14 $this->title = $model->lang->title;
@@ -19,45 +20,48 @@ @@ -19,45 +20,48 @@
19 ?> 20 ?>
20 <div class="blog-category-view"> 21 <div class="blog-category-view">
21 22
22 - <h1><?= Html::encode($this->title) ?></h1>  
23 -  
24 - <p>  
25 - <?= Html::a(  
26 - 'Update',  
27 - [  
28 - 'update',  
29 - 'id' => $model->id,  
30 - ],  
31 - [ 'class' => 'btn btn-primary' ]  
32 - ) ?>  
33 - <?= Html::a(  
34 - 'Delete',  
35 - [  
36 - 'delete',  
37 - 'id' => $model->id,  
38 - ],  
39 - [  
40 - 'class' => 'btn btn-danger',  
41 - 'data' => [  
42 - 'confirm' => 'Are you sure you want to delete this item?',  
43 - 'method' => 'post',  
44 - ],  
45 - ]  
46 - ) ?>  
47 - </p> 23 + <?php $panel = Panel::begin(
  24 + [
  25 + 'header' => $this->title,
  26 + ]
  27 + ); ?>
  28 +
  29 + <p>
  30 + <?= Html::a(
  31 + 'Update',
  32 + [
  33 + 'update',
  34 + 'id' => $model->id,
  35 + ],
  36 + [ 'class' => 'btn btn-primary' ]
  37 + ) ?>
  38 + <?= Html::a(
  39 + 'Delete',
  40 + [
  41 + 'delete',
  42 + 'id' => $model->id,
  43 + ],
  44 + [
  45 + 'class' => 'btn btn-danger',
  46 + 'data' => [
  47 + 'confirm' => 'Are you sure you want to delete this item?',
  48 + 'method' => 'post',
  49 + ],
  50 + ]
  51 + ) ?>
  52 + </p>
48 53
49 <?= DetailView::widget( 54 <?= DetailView::widget(
50 [ 55 [
51 'model' => $model, 56 'model' => $model,
52 'attributes' => [ 57 'attributes' => [
53 'id', 58 'id',
  59 + 'lang.title',
54 'sort', 60 'sort',
55 - 'imageUrl:image',  
56 [ 61 [
57 'attribute' => 'parent_id', 62 'attribute' => 'parent_id',
58 - 'value' => ( !empty( $model->parent ) ) ? $model->parent->lang->title : '', 63 + 'value' => ( !empty($model->parent) ) ? $model->parent->lang->title : '',
59 ], 64 ],
60 - 'lang.alias',  
61 'lang.description:text', 65 'lang.description:text',
62 [ 66 [
63 'attribute' => 'status', 67 'attribute' => 'status',
@@ -66,5 +70,7 @@ @@ -66,5 +70,7 @@
66 ], 70 ],
67 ] 71 ]
68 ) ?> 72 ) ?>
  73 +
  74 + <?php $panel::end(); ?>
69 75
70 </div> 76 </div>
views/blog-tag/_form.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogTag;  
4 - use artweb\artbox\blog\models\BlogTagLang; 3 + use artbox\core\widgets\LanguageForm;
  4 + use artbox\weblog\models\Tag;
  5 + use artbox\weblog\models\TagLang;
5 use yii\helpers\Html; 6 use yii\helpers\Html;
6 use yii\web\View; 7 use yii\web\View;
7 use yii\widgets\ActiveForm; 8 use yii\widgets\ActiveForm;
8 - use artweb\artbox\language\widgets\LanguageForm; 9 +
9 10
10 /** 11 /**
11 - * @var View $this  
12 - * @var BlogTag $model  
13 - * @var ActiveForm $form  
14 - * @var BlogTagLang[] $modelLangs 12 + * @var View $this
  13 + * @var Tag $model
  14 + * @var ActiveForm $form
  15 + * @var TagLang[] $modelLangs
15 */ 16 */
16 ?> 17 ?>
17 18
@@ -23,7 +24,7 @@ @@ -23,7 +24,7 @@
23 echo LanguageForm::widget( 24 echo LanguageForm::widget(
24 [ 25 [
25 'modelLangs' => $modelLangs, 26 'modelLangs' => $modelLangs,
26 - 'formView' => '@artweb/artbox/blog/views/blog-tag/_form_language', 27 + 'formView' => '@artbox/weblog/views/blog-tag/_form_language',
27 'form' => $form, 28 'form' => $form,
28 ] 29 ]
29 ); 30 );
views/blog-tag/_form_language.php
1 <?php 1 <?php
2 - use artweb\artbox\blog\models\BlogArticleLang;  
3 - use artweb\artbox\language\models\Language; 2 +
  3 + use artbox\core\models\Language;
  4 + use artbox\weblog\models\ArticleLang;
4 use yii\web\View; 5 use yii\web\View;
5 use yii\widgets\ActiveForm; 6 use yii\widgets\ActiveForm;
6 7
7 /** 8 /**
8 - * @var BlogArticleLang $model_lang  
9 - * @var Language $language  
10 - * @var ActiveForm $form  
11 - * @var View $this 9 + * @var ArticleLang $model_lang
  10 + * @var Language $language
  11 + * @var ActiveForm $form
  12 + * @var View $this
12 */ 13 */
13 ?> 14 ?>
14 <?= $form->field($model_lang, '[' . $language->id . ']label') 15 <?= $form->field($model_lang, '[' . $language->id . ']label')
views/blog-tag/create.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogTag;  
4 - use artweb\artbox\blog\models\BlogTagLang;  
5 - use yii\helpers\Html; 3 + use artbox\weblog\models\Tag;
  4 + use artbox\weblog\models\TagLang;
6 use yii\web\View; 5 use yii\web\View;
  6 + use yiister\gentelella\widgets\Panel;
7 7
8 /** 8 /**
9 - * @var View $this  
10 - * @var BlogTagLang[] $modelLangs  
11 - * @var BlogTag $model 9 + * @var View $this
  10 + * @var TagLang[] $modelLangs
  11 + * @var Tag $model
12 */ 12 */
13 13
14 $this->title = \Yii::t('blog', 'Create Blog Tag'); 14 $this->title = \Yii::t('blog', 'Create Blog Tag');
@@ -20,7 +20,11 @@ @@ -20,7 +20,11 @@
20 ?> 20 ?>
21 <div class="blog-tag-create"> 21 <div class="blog-tag-create">
22 22
23 - <h1><?= Html::encode($this->title) ?></h1> 23 + <?php $panel = Panel::begin(
  24 + [
  25 + 'header' => $this->title,
  26 + ]
  27 + ); ?>
24 28
25 <?= $this->render( 29 <?= $this->render(
26 '_form', 30 '_form',
@@ -29,5 +33,7 @@ @@ -29,5 +33,7 @@
29 'modelLangs' => $modelLangs, 33 'modelLangs' => $modelLangs,
30 ] 34 ]
31 ) ?> 35 ) ?>
  36 +
  37 + <?php $panel::end(); ?>
32 38
33 </div> 39 </div>
views/blog-tag/update.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogTag;  
4 - use artweb\artbox\blog\models\BlogTagLang;  
5 - use yii\helpers\Html; 3 + use artbox\weblog\models\Tag;
  4 + use artbox\weblog\models\TagLang;
6 use yii\web\View; 5 use yii\web\View;
  6 + use yiister\gentelella\widgets\Panel;
7 7
8 /** 8 /**
9 - * @var View $this  
10 - * @var BlogTagLang[] $modelLangs  
11 - * @var BlogTag $model 9 + * @var View $this
  10 + * @var TagLang[] $modelLangs
  11 + * @var Tag $model
12 */ 12 */
13 13
14 $this->title = \Yii::t('blog', 'Update Blog Tag: ') . $model->lang->label; 14 $this->title = \Yii::t('blog', 'Update Blog Tag: ') . $model->lang->label;
@@ -27,7 +27,11 @@ @@ -27,7 +27,11 @@
27 ?> 27 ?>
28 <div class="blog-tag-update"> 28 <div class="blog-tag-update">
29 29
30 - <h1><?= Html::encode($this->title) ?></h1> 30 + <?php $panel = Panel::begin(
  31 + [
  32 + 'header' => $this->title,
  33 + ]
  34 + ); ?>
31 35
32 <?= $this->render( 36 <?= $this->render(
33 '_form', 37 '_form',
@@ -36,5 +40,7 @@ @@ -36,5 +40,7 @@
36 'modelLangs' => $modelLangs, 40 'modelLangs' => $modelLangs,
37 ] 41 ]
38 ) ?> 42 ) ?>
39 - 43 +
  44 + <?php $panel::end(); ?>
  45 +
40 </div> 46 </div>
views/blog-tag/view.php
1 <?php 1 <?php
2 2
3 - use artweb\artbox\blog\models\BlogTag; 3 + use artbox\weblog\models\Tag;
4 use yii\helpers\Html; 4 use yii\helpers\Html;
5 use yii\web\View; 5 use yii\web\View;
6 use yii\widgets\DetailView; 6 use yii\widgets\DetailView;
  7 + use yiister\gentelella\widgets\Panel;
7 8
8 /** 9 /**
9 - * @var View $this  
10 - * @var BlogTag $model 10 + * @var View $this
  11 + * @var Tag $model
11 */ 12 */
12 13
13 $this->title = $model->lang->label; 14 $this->title = $model->lang->label;
@@ -19,32 +20,36 @@ @@ -19,32 +20,36 @@
19 ?> 20 ?>
20 <div class="blog-tag-view"> 21 <div class="blog-tag-view">
21 22
22 - <h1><?= Html::encode($this->title) ?></h1>  
23 -  
24 - <p>  
25 - <?= Html::a(  
26 - 'Update',  
27 - [  
28 - 'update',  
29 - 'id' => $model->id,  
30 - ],  
31 - [ 'class' => 'btn btn-primary' ]  
32 - ) ?>  
33 - <?= Html::a(  
34 - 'Delete',  
35 - [  
36 - 'delete',  
37 - 'id' => $model->id,  
38 - ],  
39 - [  
40 - 'class' => 'btn btn-danger',  
41 - 'data' => [  
42 - 'confirm' => 'Are you sure you want to delete this item?',  
43 - 'method' => 'post',  
44 - ],  
45 - ]  
46 - ) ?>  
47 - </p> 23 + <?php $panel = Panel::begin(
  24 + [
  25 + 'header' => $this->title,
  26 + ]
  27 + ); ?>
  28 +
  29 + <p>
  30 + <?= Html::a(
  31 + 'Update',
  32 + [
  33 + 'update',
  34 + 'id' => $model->id,
  35 + ],
  36 + [ 'class' => 'btn btn-primary' ]
  37 + ) ?>
  38 + <?= Html::a(
  39 + 'Delete',
  40 + [
  41 + 'delete',
  42 + 'id' => $model->id,
  43 + ],
  44 + [
  45 + 'class' => 'btn btn-danger',
  46 + 'data' => [
  47 + 'confirm' => 'Are you sure you want to delete this item?',
  48 + 'method' => 'post',
  49 + ],
  50 + ]
  51 + ) ?>
  52 + </p>
48 53
49 <?= DetailView::widget( 54 <?= DetailView::widget(
50 [ 55 [
@@ -55,5 +60,7 @@ @@ -55,5 +60,7 @@
55 ], 60 ],
56 ] 61 ]
57 ) ?> 62 ) ?>
  63 +
  64 + <?php $panel::end(); ?>
58 65
59 </div> 66 </div>