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
			| 
								 
											7 years ago
										 
									 | 
							
								<?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());
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |