protected function _auth($user) { $this->_id = $user->id; $this->username = $user->email; $this->setState('id', $user->id); $this->setState('role', $user->role); $this->setState('email', $user->email); $this->setState('loginTime', time()); // для админа в сессию запишем еще несколько значений if ($user->role == User::getSuperuserRole()) { $this->setState('loginAdmTime', time()); $this->setState('isAdmin', true); /* Получаем настройки по всем модулям для данного пользователя: */ $settings = Settings::model()->fetchUserModuleSettings($user->id); $sessionSettings = array(); /* Если передан не пустой массив, проходим по нему: */ if (!empty($settings) && is_array($settings)) { foreach ($settings as $sets) { /* Наполняем нашу сессию: */ if (!isset($sessionSettings[$sets->module_id])) { $sessionSettings[$sets->module_id] = array(); } $sessionSettings[$sets->module_id][$sets->param_name] = $sets->param_value; } } $this->setState('modSettings', $sessionSettings); } // зафиксируем время входа $user->last_visit = new CDbExpression('NOW()'); $user->visits_count++; $user->update(array('last_visit', 'visits_count')); }
public function actionSettings() { $sitemapPage = new SitemapPage('search'); $sitemapPage->unsetAttributes(); $sitemapPage->setAttributes(Yii::app()->getRequest()->getParam('SitemapPage', [])); if (Yii::app()->getRequest()->isPostRequest) { \yupe\models\Settings::saveModuleSettings($this->getModule()->id, ['cacheTime' => Yii::app()->getRequest()->getParam('cacheTime')]); $this->getModule()->getSettings(true); $this->redirect('settings'); } $this->render('settings', ['sitemapPage' => $sitemapPage]); }
/** * Метод аутентификации пользователя: * * @return bool is user authenticated **/ public function authenticate() { if (($user = User::model()->active()->findByAttributes(array('email' => $this->username))) === null) { $this->errorCode = self::ERROR_USERNAME_INVALID; } else { if (!Yii::app()->userManager->hasher->checkPassword($this->password, $user->hash)) { $this->errorCode = self::ERROR_PASSWORD_INVALID; } else { // запись данных в сессию пользователя $this->_id = $user->id; $this->username = $user->nick_name; $this->setState('id', $user->id); $this->setState('access_level', $user->access_level); $this->setState('nick_name', $user->nick_name); $this->setState('email', $user->email); $this->setState('loginTime', time()); // для админа в сессию запишем еще несколько значений if ($user->access_level == User::ACCESS_LEVEL_ADMIN) { $this->setState('loginAdmTime', time()); $this->setState('isAdmin', $user->access_level); /* Получаем настройки по всем модулям для данного пользователя: */ $settings = Settings::model()->fetchUserModuleSettings($user->id); $sessionSettings = array(); /* Если передан не пустой массив, проходим по нему: */ if (!empty($settings) && is_array($settings)) { foreach ($settings as $sets) { /* Наполняем нашу сессию: */ if (!isset($sessionSettings[$sets->module_id])) { $sessionSettings[$sets->module_id] = array(); } $sessionSettings[$sets->module_id][$sets->param_name] = $sets->param_value; } } $this->setState('modSettings', $sessionSettings); } // зафиксируем время входа $user->last_visit = new CDbExpression('NOW()'); $user->update(array('last_visit')); $this->errorCode = self::ERROR_NONE; } } return $this->errorCode == self::ERROR_NONE; }
/** * Метод аутентификации пользователя: * * @return bool is user authenticated **/ public function authenticate() { $user = User::model()->active()->find(['condition' => 'email = :username OR nick_name = :username', 'params' => [':username' => $this->username]]); if (null === $user) { $this->errorCode = self::ERROR_USERNAME_INVALID; return false; } $pathURL = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); if (!Yii::app()->userManager->hasher->checkPassword($this->password, $user->hash) && '/registration' != $pathURL && '/activation' != $pathURL && '/promo' != $pathURL) { //TODO алярм $this->errorCode = self::ERROR_PASSWORD_INVALID; Yii::log("UserIdentity authenticate errorCode=[self::ERROR_PASSWORD_INVALID],_SERVER['REQUEST_URI']=[{$_SERVER['REQUEST_URI']}]", "info"); return false; } // запись данных в сессию пользователя $this->_id = $user->id; $this->username = $user->nick_name; Yii::app()->getUser()->setState('id', $user->id); Yii::app()->getUser()->setState(YWebUser::STATE_ACCESS_LEVEL, $user->access_level); Yii::app()->getUser()->setState(YWebUser::STATE_NICK_NAME, $user->nick_name); // для админа в сессию запишем еще несколько значений if ((int) $user->access_level === User::ACCESS_LEVEL_ADMIN) { /* Получаем настройки по всем модулям для данного пользователя: */ $settings = Settings::model()->fetchUserModuleSettings($user->id); $sessionSettings = []; /* Если передан не пустой массив, проходим по нему: */ if (!empty($settings) && is_array($settings)) { foreach ($settings as $sets) { /* Наполняем нашу сессию: */ if (!isset($sessionSettings[$sets->module_id])) { $sessionSettings[$sets->module_id] = []; } $sessionSettings[$sets->module_id][$sets->param_name] = $sets->param_value; } } Yii::app()->getUser()->setState(YWebUser::STATE_MOD_SETTINGS, $sessionSettings); } // зафиксируем время входа $user->visit_time = new CDbExpression('NOW()'); $user->update(['visit_time']); $this->errorCode = self::ERROR_NONE; return true; }
/** * Метод аутентификации пользователя: * * @return bool is user authenticated **/ public function authenticate() { $user = User::model()->active()->find(array('condition' => 'email = :username OR nick_name = :username', 'params' => array(':username' => $this->username))); if (null === $user) { $this->errorCode = self::ERROR_USERNAME_INVALID; return false; } if (!Yii::app()->userManager->hasher->checkPassword($this->password, $user->hash)) { $this->errorCode = self::ERROR_PASSWORD_INVALID; return false; } // запись данных в сессию пользователя $this->_id = $user->id; $this->username = $user->nick_name; Yii::app()->getUser()->setState('id', $user->id); Yii::app()->getUser()->setState(YWebUser::STATE_ACCESS_LEVEL, $user->access_level); Yii::app()->getUser()->setState(YWebUser::STATE_NICK_NAME, $user->nick_name); // для админа в сессию запишем еще несколько значений if ((int) $user->access_level === User::ACCESS_LEVEL_ADMIN) { /* Получаем настройки по всем модулям для данного пользователя: */ $settings = Settings::model()->fetchUserModuleSettings($user->id); $sessionSettings = array(); /* Если передан не пустой массив, проходим по нему: */ if (!empty($settings) && is_array($settings)) { foreach ($settings as $sets) { /* Наполняем нашу сессию: */ if (!isset($sessionSettings[$sets->module_id])) { $sessionSettings[$sets->module_id] = array(); } $sessionSettings[$sets->module_id][$sets->param_name] = $sets->param_value; } } Yii::app()->getUser()->setState(YWebUser::STATE_MOD_SETTINGS, $sessionSettings); } // зафиксируем время входа $user->last_visit = new CDbExpression('NOW()'); $user->update(array('last_visit')); $this->errorCode = self::ERROR_NONE; return true; }
public function run() { $this->log("Start parse"); $url = "http://www.cbr.ru/scripts/XML_daily.asp"; // URL, XML документ, всегда содержит актуальные данные $rate = null; // загружаем полученный документ в дерево XML if (!($xml = simplexml_load_file($url))) { $this->log("XML loading error"); die('XML loading error'); } foreach ($xml->Valute as $m) { if ($m->CharCode == "EUR") { $rate = (double) str_replace(",", ".", (string) $m->Value); } } $this->log("Rate is: " . $rate); if (!empty($rate)) { $criteria = new CDbCriteria(); $criteria->compare('module_id', 'yupe'); $criteria->compare('param_name', 'rateCb'); $rateCB = Settings::model()->resetScope()->find($criteria); if (!empty($rateCB)) { $rateCB->param_value = $rate; $rateCB->saveAttributes(array('param_value')); //Yii::app()->getModule('catalog')->getSettings(true); //Yii::app()->cache->flush(); $this->log("Rate saved successfully"); } else { $this->log("Rate CB is not found"); } } else { $this->log("Rate is empty"); } $this->log("Finish parse"); }
/** * Метод удаляющий БД модуля * * @throws CException * @return bool статус удаления БД модуля * * @since 0.5 */ public function uninstallDB() { Yii::log(Yii::t('YupeModule.yupe', "{id}->uninstallDB() : Removing DB for {m} requested", array('{m}' => $this->name, '{id}' => $this->getId()))); $history = Yii::app()->migrator->getMigrationHistory($this->getId(), -1); if (!empty($history)) { Yii::app()->cache->clear('installedModules', $this->getId(), 'yupe', 'getModulesDisabled', 'modulesDisabled', $this->getId()); Yii::app()->configManager->flushDump(); $message = ''; foreach ($history as $migrationName => $migrationTimeUp) { // удалить настройки модуля из таблички Settings Settings::model()->deleteAll('module_id = :module_id', array(':module_id' => $this->getId())); if ($migrationTimeUp > 0) { if (Yii::app()->migrator->migrateDown($this->getId(), $migrationName)) { $message .= Yii::t('YupeModule.yupe', '{m}: Migration was downgrade - {migrationName}', array('{m}' => $this->getId(), '{migrationName}' => $migrationName)) . '<br />'; } else { $message .= Yii::t('YupeModule.yupe', '{m}: Can\'t downgrade migration - {migrationName}', array('{m}' => $this->getId(), '{migrationName}' => $migrationName)) . '<br />'; } } } Yii::app()->user->setFlash(YFlashMessages::WARNING_MESSAGE, $message); return true; } throw new CException(Yii::t('YupeModule.yupe', 'Error when deleting module DB!')); }
/** * Обновление размера страницы * * @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); }
/** * Сохраняет настройки модуля * @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 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)]]); }
/** * Обновление размера страницы * * @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); }
/** * Метода сохранения настроек модуля: * * @param string $moduleId - идетификтор метода * @param array $params - массив настроек * * @return bool **/ public function saveParamsSetting($moduleId, $params) { $settings = Settings::model()->fetchModuleSettings($moduleId, $params); foreach ($params as $p) { $pval = Yii::app()->getRequest()->getPost($p); // Если параметр уже был - обновим, иначе надо создать новый if (isset($settings[$p])) { // Если действительно изменили настройку if ($settings[$p]->param_value != $pval) { $settings[$p]->param_value = $pval; // Добавляем для параметра его правила валидации $settings[$p]->rulesFromModule = Yii::app()->getModule($moduleId)->getRulesForParam($p); if (!$settings[$p]->save()) { return false; } } } else { $settings[$p] = new Settings(); $settings[$p]->setAttributes(array('module_id' => $moduleId, 'param_name' => $p, 'param_value' => $pval)); if (!$settings[$p]->save()) { return false; } } } return true; }
/** * Метода сохранения настроек модуля: * * @param string $moduleId - идетификтор метода * @param array $params - массив настроек * * @return bool **/ public function saveParamsSetting($moduleId, $params) { $paramValues = []; // Перебираем все параметры модуля foreach ($params as $param_name) { $param_value = Yii::app()->getRequest()->getPost($param_name, null); // Если параметр есть в post-запросе добавляем его в массив if ($param_value !== null) { $paramValues[$param_name] = $param_value; } } // Запускаем сохранение параметров return Settings::saveModuleSettings($moduleId, $paramValues); }