You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							114 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							114 lines
						
					
					
						
							3.2 KiB
						
					
					
				| <?php | |
| /** | |
|  * Created by Error202 | |
|  * Date: 04.06.2018 | |
|  */ | |
|  | |
| namespace backend\components; | |
|  | |
| use yii\base\Action; | |
| use yii\db\Expression; | |
| use yii\base\InvalidConfigException; | |
| use yii\web\MethodNotAllowedHttpException; | |
| use Yii; | |
|  | |
| class ToggleAction extends Action | |
| { | |
|     /** | |
|      * @var string name of the model | |
|      */ | |
|     public $modelClass; | |
|     /** | |
|      * @var string model attribute | |
|      */ | |
|     public $attribute = 'active'; | |
|     /** | |
|      * @var string scenario model | |
|      */ | |
|     public $scenario = null; | |
|     /** | |
|      * @var string|array additional condition for loading the model | |
|      */ | |
|     public $andWhere; | |
|     /** | |
|      * @var string|int|boolean|Expression what to set active models to | |
|      */ | |
|     public $onValue = 1; | |
|     /** | |
|      * @var string|int|boolean what to set inactive models to | |
|      */ | |
|     public $offValue = 0; | |
|     /** | |
|      * @var bool whether to set flash messages or not | |
|      */ | |
|     public $setFlash = false; | |
|     /** | |
|      * @var string flash message on success | |
|      */ | |
|     public $flashSuccess = 'Model saved'; | |
|     /** | |
|      * @var string flash message on error | |
|      */ | |
|     public $flashError = 'Error saving Model'; | |
|     /** | |
|      * @var string|array URL to redirect to | |
|      */ | |
|     public $redirect; | |
|     /** | |
|      * @var string pk field name | |
|      */ | |
|     public $primaryKey = 'id'; | |
|  | |
|  | |
|     public function run($id) | |
|     { | |
|         if (!Yii::$app->request->getIsPost()) { | |
|             throw new MethodNotAllowedHttpException(); | |
|         } | |
|         $id     = (int)$id; | |
|         $result = null; | |
|         if (empty($this->modelClass) || !class_exists($this->modelClass)) { | |
|             throw new InvalidConfigException("Model class doesn't exist"); | |
|         } | |
|         /* @var $modelClass \yii\db\ActiveRecord */ | |
|         $modelClass = $this->modelClass; | |
|         $attribute  = $this->attribute; | |
|         $model      = $modelClass::find()->where([$this->primaryKey => $id]); | |
|         if (!empty($this->andWhere)) { | |
|             $model->andWhere($this->andWhere); | |
|         } | |
|         $model = $model->one(); | |
|         if (!is_null($this->scenario)) { | |
|             $model->scenario = $this->scenario; | |
|         } | |
|         if (!$model->hasAttribute($this->attribute)) { | |
|             throw new InvalidConfigException("Attribute doesn't exist"); | |
|         } | |
|         if ($model->$attribute == $this->onValue) { | |
|             $model->$attribute = $this->offValue; | |
|         } elseif ($this->onValue instanceof Expression && $model->$attribute != $this->offValue) { | |
|             $model->$attribute = $this->offValue; | |
|         } else { | |
|             $model->$attribute = $this->onValue; | |
|         } | |
|         if ($model->save()) { | |
|             if ($this->setFlash) { | |
|                 Yii::$app->session->setFlash('success', $this->flashSuccess); | |
|             } | |
|         } else { | |
|             if ($this->setFlash) { | |
|                 Yii::$app->session->setFlash('error', $this->flashError); | |
|             } | |
|         } | |
|         if (Yii::$app->request->getIsAjax()) { | |
|             Yii::$app->end(); | |
|         } | |
|         /* @var $controller \yii\web\Controller */ | |
|         $controller = $this->controller; | |
|         if (!empty($this->redirect)) { | |
|             return $controller->redirect($this->redirect); | |
|         } | |
|  | |
|         return $controller->redirect(Yii::$app->request->getReferrer()); | |
|     } | |
| }
 | |
| 
 |