/** * Основной метод, выполняющий обновление пользователя * * @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); }
/** * Создание пользователя * @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; }
public function insert_to_be_audit_data($var) { global $pid; $data_credentials = $var[0]; if (UserService::valid($data_credentials)) { $audit_master_id_to_delete = $var['audit_master_id_to_delete']; $approval_status = $var['approval_status']; $type = $var['type']; $ip_address = $var['ip_address']; $table_name_array = $var['table_name_array']; $field_name_value_array = $var['field_name_value_array']; $entry_identification_array = $var['entry_identification_array']; if ($audit_master_id_to_delete) { $qry = "DELETE from audit_master WHERE id=?"; sqlStatement($qry, array($audit_master_id_to_delete)); $qry = "DELETE from audit_details WHERE audit_master_id=?"; sqlStatement($qry, array($audit_master_id_to_delete)); } $master_query = "INSERT INTO audit_master SET\n\t\t pid = ?,\n\t\t approval_status = ?,\n\t\t ip_address = ?,\n\t\t type = ?"; $audit_master_id = sqlInsert($master_query, array($pid, $approval_status, $ip_address, $type)); $detail_query = "INSERT INTO `audit_details` (`table_name`, `field_name`, `field_value`, `audit_master_id`, `entry_identification`) VALUES "; $detail_query_array = ''; foreach ($table_name_array as $key => $table_name) { foreach ($field_name_value_array[$key] as $field_name => $field_value) { $detail_query .= "(? ,? ,? ,? ,?),"; $detail_query_array[] = $table_name; $detail_query_array[] = trim($field_name); $detail_query_array[] = trim($field_value); $detail_query_array[] = $audit_master_id; $detail_query_array[] = trim($entry_identification_array[$key]); } } $detail_query = substr($detail_query, 0, -1); $detail_query = $detail_query . ';'; sqlInsert($detail_query, $detail_query_array); if ($var['auto_update'] == 1) { $var['audit_master_id'] = $audit_master_id; UserAudit::update_audited_data($var); } } else { throw new SoapFault("Server", "credentials failed"); } }
public static function beforeLogout(PsUser $user) { //Аудит UserAudit::inst()->beforeLogout($user->getId()); }