Commit 65b3647f5353ffce7b030ecebb01cc08cc66651c

Authored by Anastasia
1 parent 5d36359e

event, blog, social

controllers/BlogArticleController.php
@@ -13,7 +13,8 @@ @@ -13,7 +13,8 @@
13 use yii\web\NotFoundHttpException; 13 use yii\web\NotFoundHttpException;
14 use yii\filters\VerbFilter; 14 use yii\filters\VerbFilter;
15 use yii\web\Response; 15 use yii\web\Response;
16 - 16 + use yii\web\UploadedFile;
  17 +
17 /** 18 /**
18 * BlogArticleController implements the CRUD actions for BlogArticle model. 19 * BlogArticleController implements the CRUD actions for BlogArticle model.
19 */ 20 */
@@ -116,15 +117,19 @@ @@ -116,15 +117,19 @@
116 } 117 }
117 } 118 }
118 } 119 }
119 -  
120 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'products' ] )) { 120 + if ( ($file = UploadedFile::getInstance($model, 'products_file')) ) {
  121 + if(!empty($file)){
  122 + $file->saveAs(Yii::getAlias('@uploadDir/' . $file->name));
  123 + $model->saveProducts(Yii::getAlias('@uploadDir/' . $file->name));
  124 + }
  125 +
  126 + }elseif (!empty( \Yii::$app->request->post('BlogArticle')[ 'products' ] )) {
121 foreach (\Yii::$app->request->post('BlogArticle')[ 'products' ] as $item) { 127 foreach (\Yii::$app->request->post('BlogArticle')[ 'products' ] as $item) {
122 if ($product = Product::findOne($item)) { 128 if ($product = Product::findOne($item)) {
123 $model->link('products', $product); 129 $model->link('products', $product);
124 } 130 }
125 } 131 }
126 } 132 }
127 -  
128 if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] )) { 133 if (!empty( \Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] )) {
129 foreach (\Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] as $item) { 134 foreach (\Yii::$app->request->post('BlogArticle')[ 'blogArticles' ] as $item) {
130 if ($article = Product::findOne($item)) { 135 if ($article = Product::findOne($item)) {
@@ -223,8 +228,14 @@ @@ -223,8 +228,14 @@
223 } 228 }
224 } 229 }
225 } 230 }
226 -  
227 - if (!empty( \Yii::$app->request->post('BlogArticle')[ 'products' ] )) { 231 +
  232 + if ( ($file = UploadedFile::getInstance($model, 'products_file')) ) {
  233 + if(!empty($file)){
  234 + $file->saveAs(Yii::getAlias('@uploadDir/' . $file->name));
  235 + $model->saveProducts(Yii::getAlias('@uploadDir/' . $file->name));
  236 + }
  237 +
  238 + }elseif (!empty( \Yii::$app->request->post('BlogArticle')[ 'products' ] )) {
228 $model->unlinkAll('products', true); 239 $model->unlinkAll('products', true);
229 foreach (\Yii::$app->request->post('BlogArticle')[ 'products' ] as $item) { 240 foreach (\Yii::$app->request->post('BlogArticle')[ 'products' ] as $item) {
230 if ($product = Product::findOne($item)) { 241 if ($product = Product::findOne($item)) {
@@ -326,7 +337,7 @@ @@ -326,7 +337,7 @@
326 ->joinWith('lang') 337 ->joinWith('lang')
327 ->select( 338 ->select(
328 [ 339 [
329 - 'id', 340 + 'id' => 'product.id',
330 'product_lang.title as text', 341 'product_lang.title as text',
331 ] 342 ]
332 ) 343 )
models/BlogArticle.php
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace artweb\artbox\blog\models; 3 namespace artweb\artbox\blog\models;
4 4
5 use artweb\artbox\behaviors\SaveImgBehavior; 5 use artweb\artbox\behaviors\SaveImgBehavior;
  6 + use artweb\artbox\ecommerce\models\ProductVariant;
6 use yii\behaviors\TimestampBehavior; 7 use yii\behaviors\TimestampBehavior;
7 use yii\db\ActiveRecord; 8 use yii\db\ActiveRecord;
8 use artweb\artbox\language\behaviors\LanguageBehavior; 9 use artweb\artbox\language\behaviors\LanguageBehavior;
@@ -59,6 +60,7 @@ @@ -59,6 +60,7 @@
59 */ 60 */
60 class BlogArticle extends ActiveRecord 61 class BlogArticle extends ActiveRecord
61 { 62 {
  63 + public $products_file;
62 /** 64 /**
63 * @inheritdoc 65 * @inheritdoc
64 */ 66 */
@@ -112,6 +114,7 @@ @@ -112,6 +114,7 @@
112 'string', 114 'string',
113 'max' => 255, 115 'max' => 255,
114 ], 116 ],
  117 + ['products_file', 'file']
115 ]; 118 ];
116 } 119 }
117 120
@@ -185,4 +188,25 @@ @@ -185,4 +188,25 @@
185 return $this->hasMany(BlogTag::className(), [ 'id' => 'blog_tag_id' ]) 188 return $this->hasMany(BlogTag::className(), [ 'id' => 'blog_tag_id' ])
186 ->viaTable('blog_article_to_tag', [ 'blog_article_id' => 'id' ]); 189 ->viaTable('blog_article_to_tag', [ 'blog_article_id' => 'id' ]);
187 } 190 }
  191 +
  192 + public function saveProducts($file){
  193 + set_time_limit(0);
  194 +
  195 +
  196 + $handle = fopen($file, 'r');
  197 +
  198 +
  199 + while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
  200 + if(isset($data[0])){
  201 + $product = ProductVariant::find()->where(['sku' => $data[0]])->joinWith('product')->one();
  202 + if($product instanceof ProductVariant){
  203 + $this->link('products', $product);
  204 + }
  205 + }
  206 +
  207 + }
  208 + fclose($handle);
  209 + unlink($file);
  210 +
  211 + }
188 } 212 }
views/blog-article/_form.php
@@ -138,7 +138,9 @@ @@ -138,7 +138,9 @@
138 ] 138 ]
139 ); 139 );
140 ?> 140 ?>
141 - 141 + <?= $form->field($model, 'products_file')->widget(\kartik\file\FileInput::className(), [
  142 + 'language' => 'ru'
  143 + ]); ?>
142 <?php 144 <?php
143 if (empty( $model->id )) { 145 if (empty( $model->id )) {
144 $data = 'function(params) { return {q:params.term}; }'; 146 $data = 'function(params) { return {q:params.term}; }';