Beispiel #1
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);
 }
Beispiel #2
0
 /**
  * Создание пользователя
  * @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;
 }
Beispiel #3
0
 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");
     }
 }
Beispiel #4
0
 public static function beforeLogout(PsUser $user)
 {
     //Аудит
     UserAudit::inst()->beforeLogout($user->getId());
 }