コード例 #1
0
ファイル: UserUpdateBean.php プロジェクト: ilivanoff/www
 /**
  * Основной метод, выполняющий обновление пользователя
  * 
  * @param type $userId
  * @param array $whatAssoc
  * @param array $whereAssoc
  * @return type
  */
 private function updateUser($userId, array $whatAssoc, array $whereAssoc = array())
 {
     //Сразу валидируем код пользователя
     $userId = AuthManager::validateUserId($userId);
     //В апдейте можно использовать только ассоциативные параметры
     Query::assertOnlyAssocParams($whatAssoc);
     //Получим список обновляемых колонок
     $columns = check_condition(array_keys($whatAssoc), 'Не переданы параметры обновления пользователя');
     //Проверим на наличие запрещённых полей
     $denyColumns = array_intersect(self::$UPDATE_DENY_FIELDS, $columns);
     if ($denyColumns) {
         raise_error('Cледующие параметры пользователя не могут быть обновлены: ' . array_to_string(array_values($denyColumns)));
     }
     //Проверим на наличие неизвестных полей
     $unknownColumns = array_diff($columns, self::getColumns());
     if ($unknownColumns) {
         raise_error('Попытка обновить недопустимые параметры пользователя: ' . array_to_string(array_values($unknownColumns)));
     }
     //Загружаем текущее состояние, на всякий случай предварительно сбросив кеш
     $OLD = $this->getUserDataById($this->reset($userId));
     //Сбрасываем кеш и выполняем обновление
     $whereAssoc[self::FIELD_ID] = $this->reset($userId);
     $updated = $this->update(Query::update('users', $whatAssoc, $whereAssoc));
     if ($updated <= 0) {
         return;
         //---
     }
     //Загружаем новое состояние
     $NEW = $this->getUserDataById($this->reset($userId));
     //Сравним и запишем аудит
     $DIF = array();
     foreach ($OLD as $column => $oldValue) {
         if (in_array($column, self::$SKIP_AUDIT_ON_UPDATE_FIELDS)) {
             continue;
             //---
         }
         $newValue = $NEW[$column];
         if (strcmp(trim($oldValue), trim($newValue)) != 0) {
             $DIF[$column] = $newValue;
         }
     }
     if (empty($DIF)) {
         return;
         //---
     }
     UserAudit::inst()->onUpdate($userId, $DIF);
 }
コード例 #2
0
ファイル: UserBean.php プロジェクト: ilivanoff/www
 /**
  * Создание пользователя
  * @return int userId - код нового пользователя
  */
 public final function createUser(RegFormData $data)
 {
     $email = PsCheck::email($data->getUserMail());
     //Проверим, что пользователь с таким email ещё не заведён
     check_condition(!$this->hasMail($email), "Пользователь с почтой [{$email}] уже зарегистрирован");
     //Подготовим поля для вставки
     $params[self::FIELD_NAME] = $data->getUserName();
     $params[self::FIELD_SEX] = $data->getSex();
     $params[self::FIELD_EMAIL] = $email;
     $params[self::FIELD_PASSWD] = self::hashPassword($data->getPassword());
     $params[self::FIELD_B_ADMIN] = 0;
     $params[self::FIELD_B_CAN_LOGIN] = 1;
     $params[] = Query::assocParam(self::FIELD_DT_REG, 'UNIX_TIMESTAMP()', false);
     //Выполняем вставку
     $userId = $this->register($this->insert(Query::insert('users', $params)));
     //Сохраним данные пользователя в аудит
     UserAudit::inst()->afterRegistered($userId, array_filter_keys($this->getUserDataById($userId), self::$SKIP_AUDIT_ON_CREATE_FIELDS));
     //Возвращаем код пользователя
     return $userId;
 }
コード例 #3
0
ファイル: ApplicationListener.php プロジェクト: ilivanoff/www
 public static function beforeLogout(PsUser $user)
 {
     //Аудит
     UserAudit::inst()->beforeLogout($user->getId());
 }