Inheritance: extends yupe\models\YModel
Esempio n. 1
0
 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]);
 }
Esempio n. 3
0
 /**
  * Метод аутентификации пользователя:
  *
  * @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;
 }
Esempio n. 4
0
 /**
  * Метод аутентификации пользователя:
  *
  * @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;
 }
Esempio n. 5
0
 /**
  * Метод аутентификации пользователя:
  *
  * @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");
 }
Esempio n. 7
0
 /**
  * Метод удаляющий БД модуля
  *
  * @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);
 }
Esempio n. 9
0
 /**
  * Сохраняет настройки модуля
  * @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;
 }
Esempio n. 10
0
 /**
  * Экшен начальной настройки проекта:
  *
  * @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)]]);
 }
Esempio n. 11
0
 /**
  * Обновление размера страницы
  *
  * @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);
 }
Esempio n. 12
0
 /**
  * Метода сохранения настроек модуля:
  *
  * @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;
 }
Esempio n. 13
0
 /**
  * Метода сохранения настроек модуля:
  *
  * @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);
 }