/** * Обновление размера страницы * * @return void */ protected function _updatePageSize() { // ID текущей модели $modelID = strtolower($this->_modelName); // Делаем так, ибо при попытке править Yii::app()->session['modSettings'] - получаем ошибку $sessionSettings = Yii::app()->user->getState('modSettings', null); $currentPageSize = $this->dataProvider->getPagination()->pageSize; if (!isset($sessionSettings[$modelID])) { $sessionSettings[$modelID] = array(); } // Если для данного модуля не установлен pageSize - устанавливаем его if (!isset($sessionSettings[$modelID]['pageSize'])) { $newSets = new Settings(); $newSets->module_id = $modelID; $newSets->param_name = 'pageSize'; $newSets->param_value = $currentPageSize; $newSets->type = Settings::TYPE_USER; $newSets->save(); } else { $oldSets = Settings::model()->findByAttributes(array('user_id' => Yii::app()->user->getId(), 'module_id' => $modelID, 'param_name' => 'pageSize', 'type' => Settings::TYPE_USER)); $oldSets->param_value = $currentPageSize; $oldSets->update(); } $sessionSettings[$modelID]['pageSize'] = $currentPageSize; // Перезаписываем сессию Yii::app()->user->setState('modSettings', $sessionSettings); }
/** * Экшен начальной настройки проекта: * * @return nothing **/ public function actionSitesettings() { $model = new InstallForm('siteSettings'); if (isset($this->session['InstallForm']['siteSettings'])) { $model->setAttributes($this->session['InstallForm']['siteSettings']); if ($model->validate() && $this->session['InstallForm']['siteSettingsStep'] === true) { $this->session['InstallForm'] = array_merge($this->session['InstallForm'], ['siteSettings' => $model->attributes, 'siteSettingsStep' => false]); $this->_markFinished('sitesettings'); $this->_setSession(); $this->redirect(['/install/default/finish']); } } if (Yii::app()->getRequest()->getIsPostRequest() && isset($_POST['InstallForm'])) { $model->setAttributes($_POST['InstallForm']); if ($model->validate()) { $transaction = Yii::app()->db->beginTransaction(); try { Settings::model()->deleteAll(); $user = User::model()->admin()->findAll(); foreach (['siteDescription', 'siteName', 'siteKeyWords', 'email', 'theme', 'backendTheme'] as $param) { $settings = new Settings(); $model->email = $model->siteEmail; $settings->setAttributes(['module_id' => 'yupe', 'param_name' => $param, 'param_value' => $model->{$param}, 'user_id' => $user[0]->id]); if ($settings->save()) { continue; } else { throw new CDbException(print_r($settings->getErrors(), true)); } } $transaction->commit(); Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::SUCCESS_MESSAGE, Yii::t('InstallModule.install', 'Site settings saved successfully!')); // попробуем создать каталог assets $assetsPath = dirname(Yii::app()->getRequest()->getScriptFile()) . '/' . CAssetManager::DEFAULT_BASEPATH; if (!is_dir($assetsPath)) { @mkdir($assetsPath); } $this->session['InstallForm'] = array_merge($this->session['InstallForm'], ['siteSettings' => $model->attributes, 'siteSettingsStep' => true]); $this->_setSession(); $this->redirect(['/install/default/sitesettings']); } catch (CDbException $e) { $transaction->rollback(); Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::ERROR_MESSAGE, $e->__toString()); Yii::log($e->__toString(), CLogger::LEVEL_ERROR); $this->redirect(['/install/default/sitesettings/']); } } } else { $model->siteEmail = $model->emailName; } $this->render('_view', ['data' => ['model' => $model, 'themes' => $this->yupe->getThemes(), 'backendThemes' => $this->yupe->getThemes(true)]]); }
/** * Сохраняет настройки модуля * @param string $module_id Идентификатор модуля * @param mixed $params Массив параметров и значений которые следует сохранить (param_name => param_value) * */ public static function saveModuleSettings($moduleId, $paramValues) { foreach ($paramValues as $name => $value) { // Получаем настройку $setting = Settings::model()->find('module_id = :module_id and param_name = :param_name', array(':module_id' => $moduleId, ':param_name' => $name)); // Если новая запись if ($setting == null) { $setting = new Settings(); $setting->module_id = $moduleId; $setting->param_name = $name; } else { if ($setting->param_value == $value) { continue; } } // Присваиваем новое значение $setting->param_value = $value; // Добавляем для параметра его правила валидации $setting->rulesFromModule = Yii::app()->getModule($moduleId)->getRulesForParam($name); //Сохраняем if (!$setting->save()) { return false; } } return true; }
/** * Обновление размера страницы * * @return void */ protected function _updatePageSize() { $modelName = strtolower($this->_modelName); // Делаем так, ибо при попытке править Yii::app()->session['modSettings'] - получаем ошибку $sessionSettings = Yii::app()->getUser()->getState(\YWebUser::STATE_MOD_SETTINGS, null); $currentPageSize = $this->dataProvider->getPagination()->getPageSize(); // Если переменная не найдена нужно проверить наличие данных в БД if (!isset($sessionSettings[$modelName]['pageSize'])) { $sessionSettings[$modelName] = []; $setting = Settings::model()->findAllByAttributes(['user_id' => Yii::app()->getUser()->getId(), 'module_id' => $modelName, 'param_name' => 'pageSize', 'type' => Settings::TYPE_USER]); // Если не найдена запись, создаем if (null === $setting) { $setting = new Settings(); $setting->setAttributes(['module_id' => $modelName, 'param_name' => 'pageSize', 'param_value' => $currentPageSize, 'type' => Settings::TYPE_USER]); $setting->save(); } } elseif ($currentPageSize !== $sessionSettings[$modelName]['pageSize']) { // Обновим запись в базе $setting = Settings::model()->findByAttributes(['user_id' => Yii::app()->getUser()->getId(), 'module_id' => $modelName, 'param_name' => 'pageSize', 'type' => Settings::TYPE_USER]); // Если не найдена запись, создаем if (null === $setting) { $setting = new Settings(); $setting->setAttributes(['module_id' => $modelName, 'param_name' => 'pageSize', 'param_value' => $currentPageSize, 'type' => Settings::TYPE_USER]); $setting->save(); } else { $setting->param_value = $currentPageSize; $setting->update(['param_value']); } } $sessionSettings[$modelName]['pageSize'] = $currentPageSize; // Перезаписываем сессию Yii::app()->getUser()->setState(\YWebUser::STATE_MOD_SETTINGS, $sessionSettings); }