/**
  * Метод сбрасывает информацию по пользователю (вызывается после изменения пользователя).
  */
 public final function reset($userId)
 {
     $userId = AuthManager::validateUserId($userId);
     $this->CACHE->set($userId, null);
     $this->LOGGER->info('Reseting user: ' . $userId);
     return $userId;
 }
Example #2
0
 /**
  * Назначает аватар пользователю
  * 
  * @param int $userId - код пользователя
  * @param int $avatarId - код аватара (может быть null, если мы сбрасываем аватар)
  */
 public function setUserAvatar($userId, $avatarId = null)
 {
     //Валидируем входные параметры
     $avatarId = PsCheck::intOrNull($avatarId);
     $userId = AuthManager::validateUserId($userId);
     if (is_integer($avatarId) && !AvatarUploader::inst()->hasUploadedFile($avatarId, $userId)) {
         return false;
     }
     UserBean::inst()->setUserAvatar($userId, $avatarId);
     return true;
 }
Example #3
0
 /**
  * Основной метод, выполняющий обновление пользователя
  * 
  * @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);
 }
Example #4
0
 /**
  * Метод удаляет неиспользованные коды, высланные пользователю
  */
 public function dropUnusedCodes($type, $userId)
 {
     $this->update('delete from ps_user_codes where v_type=? and id_user=? and n_status!=?', array($type, AuthManager::validateUserId($userId), self::CODE_STATUS_USED));
 }
Example #5
0
 /**
  * Возвращает экземпляр пользователя. Если не передан, то будет взят текущий (авторизованный).
  * 
  * Определяет и извлекает пользователя из переданных данных. Будем искать в:
  * 1. Массиве,если передан массив.
  * 2. Попытаемся привести число к нужному виду, если передано число.
  * 3. В сессии.
  * 
  * @return PsUser
  */
 public static function inst($DataOrId = null, $forceFill = false)
 {
     if (is_array($DataOrId)) {
         $userId = AuthManager::validateUserId(array_get_value('id_user', $DataOrId));
     } else {
         $userId = AuthManager::extractUserId($DataOrId);
     }
     if (!array_key_exists($userId, self::$insts)) {
         self::$insts[$userId] = null;
         self::$insts[$userId] = new PsUser($userId);
     }
     check_condition(self::$insts[$userId] instanceof PsUser, "Попытка повторно создать объект пользователя с кодом [{$userId}].");
     if ($forceFill) {
         //Проверим, что пользователь существует
         UserBean::inst()->getUserDataById($userId);
     }
     return self::$insts[$userId];
 }