Blame view

common/modules/blog/controllers/ArticleController.php 10.4 KB
77d30544   Yarik   Начата разработка...
1
2
3
  <?php
  namespace common\modules\blog\controllers;
  
ecf03367   Yarik   TEst
4
5
6
7
  use common\components\rules\CommentRule;
  use common\components\rules\DeleteRule;
  use common\components\rules\UpdateRule;
  use common\components\rules\ViewRule;
4921cad4   Yarik   Добален блог v 0....
8
  use common\models\Language;
1175ed37   Yarik   Добавлена миграция
9
  use common\modules\blog\models\Article;
4921cad4   Yarik   Добален блог v 0....
10
11
12
  use common\modules\blog\models\ArticleLang;
  use common\modules\blog\models\ArticleMedia;
  use common\modules\blog\models\ArticleToCategory;
1175ed37   Yarik   Добавлена миграция
13
  use yii\data\ActiveDataProvider;
ecf03367   Yarik   TEst
14
  use yii\rbac\DbManager;
77d30544   Yarik   Начата разработка...
15
  use yii\web\Controller;
4921cad4   Yarik   Добален блог v 0....
16
  use yii\web\UploadedFile;
77d30544   Yarik   Начата разработка...
17
18
19
  
  class ArticleController extends Controller
  {
4921cad4   Yarik   Добален блог v 0....
20
  
1175ed37   Yarik   Добавлена миграция
21
22
  	public function actionIndex()
      {
ecf03367   Yarik   TEst
23
          var_dump(\Yii::$app->options->rule);
1175ed37   Yarik   Добавлена миграция
24
25
26
27
28
29
30
31
          $dataProvider = new ActiveDataProvider([
              'query' => Article::find(),
              'pagination' => [
                  'pageSize' => 1,
              ],
          ]);
          return $this->render('index', ['dataProvider' => $dataProvider]);
      }
18ac4398   Yarik   Добавлен блог (ча...
32
33
34
  
      public function actionCreate()
      {
4921cad4   Yarik   Добален блог v 0....
35
36
          $article_langs = array();
          $article = new Article();
6506d20d   Yarik   Коммит 25.15.2015...
37
          $default_lang = Language::getDefaultLang();
4921cad4   Yarik   Добален блог v 0....
38
          $images = array();
6506d20d   Yarik   Коммит 25.15.2015...
39
40
41
          $images[$default_lang->language_id]['full'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_FULL]);
          $images[$default_lang->language_id]['preview'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_PREVIEW]);
          $images[0]['additional'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);
4921cad4   Yarik   Добален блог v 0....
42
43
          $article->loadDefaultValues();
          $langs = Language::getActiveLanguages();
4921cad4   Yarik   Добален блог v 0....
44
45
46
47
          $isValid = false;
          if(!empty(\Yii::$app->request->post())) {
              $isValid = true;
              $article->load(\Yii::$app->request->post());
e3105834   Yarik   Стандартизация
48
              $article->user_id = \Yii::$app->user->getId();
4921cad4   Yarik   Добален блог v 0....
49
              $isValid = $article->validate();
6506d20d   Yarik   Коммит 25.15.2015...
50
51
52
53
              foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) {
                  foreach($value as $type => $fields) {
                      $images[$lang][$type] = new ArticleMedia(['scenario' => $type]);
                      $images[$lang][$type]->type = $type;
e3105834   Yarik   Стандартизация
54
                      $images[$lang][$type]->language_id = $lang;
6506d20d   Yarik   Коммит 25.15.2015...
55
56
                      $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");
                      $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;
4921cad4   Yarik   Добален блог v 0....
57
                  }
4921cad4   Yarik   Добален блог v 0....
58
              }
e3105834   Yarik   Стандартизация
59
              $images[0]['additional']->language_id = 0;
6506d20d   Yarik   Коммит 25.15.2015...
60
61
              $images[0]['additional']->type = 'additional';
              $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile");
4921cad4   Yarik   Добален блог v 0....
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
              if(empty(\Yii::$app->request->post()['ArticleLang'])) {
                  $article_langs[$default_lang->language_id] = new ArticleLang();
                  $isValid  = ArticleLang::validateMultiple($article_langs) && $isValid;
              } else {
                  foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) {
                      $article_langs[$index] = new ArticleLang();
                  }
                  ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post());
                  $isValid = ArticleLang::validateMultiple($article_langs) && $isValid;
              }
          } else {
              $article_langs[$default_lang->language_id] = new ArticleLang();
          }
          if($isValid) {
              $article->save(false);
              $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray'];
              if(!empty($article_categories)) {
                  foreach($article_categories as $article_category) {
                      $articletocategory[$article_category] = new ArticleToCategory();
e3105834   Yarik   Стандартизация
81
                      $articletocategory[$article_category]->article_category_id = $article_category;
4921cad4   Yarik   Добален блог v 0....
82
83
84
85
                      $articletocategory[$article_category]->link('article', $article);
                  }
              }
              $first = 1;
6506d20d   Yarik   Коммит 25.15.2015...
86
87
              foreach($images as $lang => $value) {
                  foreach($value as $type => $fields) {
e3105834   Yarik   Стандартизация
88
                      $images[$lang][$type]->upload($article->article_id);
6506d20d   Yarik   Коммит 25.15.2015...
89
90
91
                      if($first && $type != 'additional') {
                          $media_clone = clone $images[$lang][$type];
                          $media_clone->setIsNewRecord(true);
e3105834   Yarik   Стандартизация
92
93
94
                          unset($media_clone->article_media_id);
                          $media_clone->language_id = 0;
                          $media_clone->upload($article->article_id);
6506d20d   Yarik   Коммит 25.15.2015...
95
96
97
98
                          unset($media_clone);
                          $first = 0;
                      }
                  }
4921cad4   Yarik   Добален блог v 0....
99
              }
6506d20d   Yarik   Коммит 25.15.2015...
100
              $first = 1;
4921cad4   Yarik   Добален блог v 0....
101
102
103
              foreach($article_langs as $article_lang) {
                  if($first) {
                      $article_lang_clone = clone $article_lang;
e3105834   Yarik   Стандартизация
104
                      $article_lang_clone->language_id = 0;
4921cad4   Yarik   Добален блог v 0....
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
                      $article_lang_clone->link('article', $article);
                      unset($article_lang_clone);
                  }
                  $article_lang->link('article', $article);
                  $first = 0;
              }
              echo "ok";
              //$this->redirect('index');
          } else {
              return $this->render('create', [
                  'article_langs' => $article_langs,
                  'article' => $article,
                  'langs' => $langs,
                  'images' => $images
              ]);
          }
      }
  
      public function actionUpdate($id)
      {
          $article = Article::findOne($id);
6506d20d   Yarik   Коммит 25.15.2015...
126
127
128
129
          $imagestack = $article->getArticleMedia()->all();
          $images = [];
          $images[0]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);
          $images[0]['additional'][0]->type = 'additional';
e3105834   Yarik   Стандартизация
130
          $images[0]['additional'][0]->language_id = 0;
6506d20d   Yarik   Коммит 25.15.2015...
131
132
          foreach($imagestack as $image) {
              if(in_array($image->type, ['full', 'preview'])) {
e3105834   Yarik   Стандартизация
133
134
                  $images[$image->language_id][$image->type] = $image;
                  $images[$image->language_id][$image->type]->scenario = $image->type;
6506d20d   Yarik   Коммит 25.15.2015...
135
              } else {
e3105834   Yarik   Стандартизация
136
137
                  $images[$image->language_id][$image->type][$image->article_media_id] = $image;
                  $images[$image->language_id][$image->type][$image->article_media_id]->scenario = $image->type;
6506d20d   Yarik   Коммит 25.15.2015...
138
              }
4921cad4   Yarik   Добален блог v 0....
139
          }
6506d20d   Yarik   Коммит 25.15.2015...
140
141
          foreach($images as $lang => $value) {
              $images[$lang]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]);
4921cad4   Yarik   Добален блог v 0....
142
          }
e3105834   Yarik   Стандартизация
143
          $article_langs = $article->getArticleLangs()->where(['>=', 'language_id', '1'])->indexBy('language_id')->all();
4921cad4   Yarik   Добален блог v 0....
144
145
146
147
148
149
          $langs = Language::getActiveLanguages();
          $default_lang = Language::getDefaultLang();
          $isValid = false;
          if(!empty(\Yii::$app->request->post())) {
              $isValid = true;
              $article->load(\Yii::$app->request->post());
e3105834   Yarik   Стандартизация
150
              ArticleToCategory::deleteAll(['article_id' => $article->article_id]);
4921cad4   Yarik   Добален блог v 0....
151
152
153
154
              $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray'];
              if(!empty($article_categories)) {
                  foreach($article_categories as $article_category) {
                      $articletocategory[$article_category] = new ArticleToCategory();
e3105834   Yarik   Стандартизация
155
                      $articletocategory[$article_category]->article_category_id = $article_category;
4921cad4   Yarik   Добален блог v 0....
156
157
158
159
                      $articletocategory[$article_category]->link('article', $article);
                  }
              }
              $isValid = $article->validate();
6506d20d   Yarik   Коммит 25.15.2015...
160
              $images[0]['additional'][0]->type = 'additional';
e3105834   Yarik   Стандартизация
161
              $images[0]['additional'][0]->language_id = 0;
6506d20d   Yarik   Коммит 25.15.2015...
162
163
164
165
166
167
              $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile");
              $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid;
              foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) {
                  foreach($value as $type => $fields) {
                      if(!in_array($type, ['full', 'preview'])) continue;
                      $images[$lang][$type] = new ArticleMedia(['scenario' => $type]);
e3105834   Yarik   Стандартизация
168
                      $images[$lang][$type]->language_id = $lang;
6506d20d   Yarik   Коммит 25.15.2015...
169
170
171
                      $images[$lang][$type]->type = $type;
                      $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile");
                      $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid;
4921cad4   Yarik   Добален блог v 0....
172
173
174
175
176
177
178
179
                  }
              }
              if(empty(\Yii::$app->request->post()['ArticleLang'])) {
                  $isValid  = ArticleLang::validateMultiple($article_langs) && $isValid;
              } else {
                  foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) {
                      if (!array_key_exists($index, $article_langs)) {
                          $article_langs[$index] = new ArticleLang();
e3105834   Yarik   Стандартизация
180
                          $article_langs[$index]->article_id = $article->article_id;
4921cad4   Yarik   Добален блог v 0....
181
182
183
184
185
186
187
188
                      }
                  }
                  ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post());
                  $isValid = ArticleLang::validateMultiple($article_langs) && $isValid;
              }
          }
          if($isValid) {
              $article->save(false);
6506d20d   Yarik   Коммит 25.15.2015...
189
190
191
192
193
194
              foreach($images as $lang => $value) {
                  foreach($value as $type => $fields) {
                      if($type == 'additional') {
                          $images[$lang][$type][0]->upload($article->id);
                      } else {
                          if(!empty($images[$lang][$type]->imageFile)) {
e3105834   Yarik   Стандартизация
195
                              $images[$lang][$type]->replace($article->article_id);
6506d20d   Yarik   Коммит 25.15.2015...
196
                          }
4921cad4   Yarik   Добален блог v 0....
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
                      }
                  }
              }
              foreach($article_langs as $article_lang) {
                  $article_lang->save(false);
              }
              echo "ok";
              //$this->redirect('index');
          } else {
              return $this->render('update', [
                  'article_langs' => $article_langs,
                  'article' => $article,
                  'langs' => $langs,
                  'images' => $images
              ]);
          }
      }
  
      public function actionDelete($id)
      {
          $this->findModel($id)->delete();
          return $this->redirect(['index']);
      }
  
      protected function findModel($id)
      {
          if (($model = Article::findOne($id)) !== null) {
              return $model;
          } else {
              throw new NotFoundHttpException('The requested page does not exist.');
          }
18ac4398   Yarik   Добавлен блог (ча...
228
      }
77d30544   Yarik   Начата разработка...
229
  }