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.
		
		
		
		
		
			
		
			
				
					
					
						
							113 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							113 lines
						
					
					
						
							2.7 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()); | |
| 	} | |
| } |