Commit 767d56734db4c867f3251784542d45e5ef2343bf
1 parent
c00502bf
event, blog, social
Showing
3 changed files
with
80 additions
and
1 deletions
Show diff stats
controllers/EventController.php
| ... | ... | @@ -3,9 +3,11 @@ |
| 3 | 3 | namespace artweb\artbox\event\controllers; |
| 4 | 4 | |
| 5 | 5 | |
| 6 | +use artweb\artbox\ecommerce\models\Product; | |
| 6 | 7 | use Yii; |
| 7 | 8 | use artweb\artbox\event\models\Event; |
| 8 | 9 | use artweb\artbox\event\models\EventSearch; |
| 10 | +use yii\helpers\ArrayHelper; | |
| 9 | 11 | use yii\web\Controller; |
| 10 | 12 | use yii\web\NotFoundHttpException; |
| 11 | 13 | use yii\filters\VerbFilter; |
| ... | ... | @@ -80,9 +82,24 @@ class EventController extends Controller |
| 80 | 82 | { |
| 81 | 83 | $model = new Event(); |
| 82 | 84 | $model->generateLangs(); |
| 85 | + $model->productsIds = []; | |
| 83 | 86 | if ($model->load(Yii::$app->request->post())) { |
| 84 | 87 | $model->loadLangs(\Yii::$app->request); |
| 85 | 88 | if ($model->save() && $model->transactionStatus) { |
| 89 | + if ( ($file = UploadedFile::getInstance($model, 'products_file')) ) { | |
| 90 | + if(!empty($file)){ | |
| 91 | + | |
| 92 | + $file->saveAs(Yii::getAlias('@uploadDir/' . $file->name)); | |
| 93 | + $model->goEvent(Yii::getAlias('@uploadDir/' . $file->name)); | |
| 94 | + } | |
| 95 | + | |
| 96 | + }else{ | |
| 97 | + $products = Product::find() | |
| 98 | + ->where([ 'id' => \Yii::$app->request->post('productIds') ]) | |
| 99 | + ->all(); | |
| 100 | + $model->linkMany('products', $products); | |
| 101 | + } | |
| 102 | + | |
| 86 | 103 | return $this->redirect([ |
| 87 | 104 | 'view', |
| 88 | 105 | 'id' => $model->id, |
| ... | ... | @@ -107,6 +124,9 @@ class EventController extends Controller |
| 107 | 124 | { |
| 108 | 125 | $model = $this->findModel($id); |
| 109 | 126 | $model->generateLangs(); |
| 127 | + $model->productsIds = ArrayHelper::map($model->products, | |
| 128 | + 'id', | |
| 129 | + 'lang.title'); | |
| 110 | 130 | if ($model->load(Yii::$app->request->post())) { |
| 111 | 131 | $model->loadLangs(\Yii::$app->request); |
| 112 | 132 | if ($model->save() && $model->transactionStatus) { |
| ... | ... | @@ -118,6 +138,11 @@ class EventController extends Controller |
| 118 | 138 | $model->goEvent(Yii::getAlias('@uploadDir/' . $file->name)); |
| 119 | 139 | } |
| 120 | 140 | |
| 141 | + }else{ | |
| 142 | + $products = Product::find() | |
| 143 | + ->where([ 'id' => \Yii::$app->request->post('productIds') ]) | |
| 144 | + ->all(); | |
| 145 | + $model->linkMany('products', $products); | |
| 121 | 146 | } |
| 122 | 147 | |
| 123 | 148 | return $this->redirect([ | ... | ... |
models/Event.php
| ... | ... | @@ -2,6 +2,7 @@ |
| 2 | 2 | |
| 3 | 3 | namespace artweb\artbox\event\models; |
| 4 | 4 | |
| 5 | +use artweb\artbox\behaviors\ManyToManyBehavior; | |
| 5 | 6 | use artweb\artbox\behaviors\SaveImgBehavior; |
| 6 | 7 | use artweb\artbox\ecommerce\models\Product; |
| 7 | 8 | use artweb\artbox\ecommerce\models\ProductVariant; |
| ... | ... | @@ -26,6 +27,7 @@ use yii\web\Request; |
| 26 | 27 | * @property integer $percent |
| 27 | 28 | * @property integer $banner |
| 28 | 29 | * @property integer $type |
| 30 | + * @property Product[] $products | |
| 29 | 31 | * * From language behavior * |
| 30 | 32 | * @property EventLang $lang |
| 31 | 33 | * @property EventLang[] $langs |
| ... | ... | @@ -60,6 +62,7 @@ class Event extends \yii\db\ActiveRecord |
| 60 | 62 | public $products_file; |
| 61 | 63 | const ACTIVE = 1; |
| 62 | 64 | const INACTIVE = 2; |
| 65 | + public $productsIds = array(); | |
| 63 | 66 | /** |
| 64 | 67 | * @inheritdoc |
| 65 | 68 | */ |
| ... | ... | @@ -89,6 +92,9 @@ class Event extends \yii\db\ActiveRecord |
| 89 | 92 | 'class' => LanguageBehavior::className(), |
| 90 | 93 | 'objectLang' => EventLang::className() |
| 91 | 94 | ], |
| 95 | + [ | |
| 96 | + 'class' => ManyToManyBehavior::className(), | |
| 97 | + ], | |
| 92 | 98 | ]; |
| 93 | 99 | } |
| 94 | 100 | ... | ... |
views/event/_form.php
| ... | ... | @@ -9,6 +9,7 @@ use kartik\select2\Select2; |
| 9 | 9 | use yii\helpers\Html; |
| 10 | 10 | use yii\helpers\Url; |
| 11 | 11 | use yii\widgets\ActiveForm; |
| 12 | + use yii\web\JsExpression; | |
| 12 | 13 | |
| 13 | 14 | /* @var $this yii\web\View */ |
| 14 | 15 | /* @var $model Event */ |
| ... | ... | @@ -112,7 +113,54 @@ use yii\helpers\Html; |
| 112 | 113 | 'form' => $form, |
| 113 | 114 | ]) ?> |
| 114 | 115 | |
| 115 | - | |
| 116 | + <?php $condition = ''; | |
| 117 | + echo Select2::widget( | |
| 118 | + [ | |
| 119 | + 'name' => 'productIds', | |
| 120 | + 'options' => [ | |
| 121 | + 'placeholder' => \Yii::t('app', 'Search for products ...'), | |
| 122 | + 'multiple' => true, | |
| 123 | + ], | |
| 124 | + 'value' => array_keys($model->productsIds), | |
| 125 | + 'data' => $model->productsIds, | |
| 126 | + 'pluginOptions' => [ | |
| 127 | + 'allowClear' => true, | |
| 128 | + 'minimumInputLength' => 3, | |
| 129 | + 'language' => [ | |
| 130 | + 'errorLoading' => new JsExpression( | |
| 131 | + "function () { return 'Waiting for results...'; }" | |
| 132 | + ), | |
| 133 | + ], | |
| 134 | + 'ajax' => [ | |
| 135 | + 'url' => Url::to([ '/ecommerce/manage/list' ]), | |
| 136 | + 'dataType' => 'json', | |
| 137 | + 'data' => new JsExpression( | |
| 138 | + 'function(params) { | |
| 139 | + return { | |
| 140 | + q:params.term' . $condition . ' | |
| 141 | + }; | |
| 142 | + }' | |
| 143 | + ), | |
| 144 | + ], | |
| 145 | + 'escapeMarkup' => new JsExpression( | |
| 146 | + 'function (markup) { | |
| 147 | + return markup; | |
| 148 | + }' | |
| 149 | + ), | |
| 150 | + 'templateResult' => new JsExpression( | |
| 151 | + 'function (product) { | |
| 152 | + return product.text; | |
| 153 | + }' | |
| 154 | + ), | |
| 155 | + 'templateSelection' => new JsExpression( | |
| 156 | + 'function (product) { | |
| 157 | + return product.text; | |
| 158 | + }' | |
| 159 | + ), | |
| 160 | + ], | |
| 161 | + ] | |
| 162 | + ); | |
| 163 | + ?> | |
| 116 | 164 | |
| 117 | 165 | |
| 118 | 166 | ... | ... |