/** * Метод сбрасывает информацию по пользователю (вызывается после изменения пользователя). */ public final function reset($userId) { $userId = AuthManager::validateUserId($userId); $this->CACHE->set($userId, null); $this->LOGGER->info('Reseting user: ' . $userId); return $userId; }
/** * Назначает аватар пользователю * * @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; }
/** * Основной метод, выполняющий обновление пользователя * * @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); }
/** * Метод удаляет неиспользованные коды, высланные пользователю */ 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)); }
/** * Возвращает экземпляр пользователя. Если не передан, то будет взят текущий (авторизованный). * * Определяет и извлекает пользователя из переданных данных. Будем искать в: * 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]; }