parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

т.е. ситуация №2 :)

egr 03.10.2003 13:49 / 03.10.2003 13:51

Нужно взять класс auth (у Миши), найти там метод insertUser и заменить это (старый код метода):
################################################################################
# добавление пользователя
# 0 - all ok
# 1 - не задано имя, пароль или email в некоректном формате
# 2 - пользователь с таким именем уже существует
# 3 - неверно подтвержден пароль
@insertUser[user_data][exist]
^if(def $user_data.[auth.name] && ^is_email[$user_data.[auth.email]] && def $user_data.[auth.passwd]){
	^rem{ *** правильно подтвержден пароль? *** }
	^if($user_data.[auth.passwd] eq $user_data.[auth.passwd_confirm]){
		^rem{ *** пароль подтвержден правильно. есть уже пользователь с таким именем? ***}
		$exist(^csql.sql[int]{
			SELECT
				COUNT(*)
			FROM
				auser
			WHERE
				auser_type_id = $USER_ID AND
				^csql.lower[name] = '^user_data.[auth.name].lower[]'
		})
		^if(!$exist){
			^rem{ *** нету пользователя с таким именем, регистрируем ***}
			^csql.sql[void]{
				INSERT INTO auser (
					auser_type_id,
					name,
					email,
					passwd,
					dt_register,
					event_type
					^if(def $user_data.[auth.rights]){, rights}
				) VALUES (
					$USER_ID,
					'$user_data.[auth.name]',
					'$user_data.[auth.email]',
					'^cryptPassword[$user_data.[auth.passwd]]',
					^csql.now[],
					$new_user_event_type
					^if(def $user_data.[auth.rights]){, '$user_data.[auth.rights]'}
			)}
			$new_user[
				$.user_id(^csql.last_insert_id[auser])
				$.name[$user_data.[auth.name]]
				$.email[$user_data.[auth.email]]
				$.rights[$user_data.rights]
			]
			$result(0)
			
			^rem{ *** загружаем полный список групп *** }
			^getGroups[]

			^rem{ *** а теперь включаем вновь добавленного пользователя в группы, у которых установлен is_default *** }
			^groups.menu{
				^if($groups.is_default){
					^csql.sql[void]{
						INSERT INTO auser_to_auser (
							auser_id,
							parent_id
						) VALUES (
							$new_user.user_id,
							$groups.group_id
					)}
				}
			}
		}{
			^rem{ *** есть уже пользователь с таким именем ***}
			$result(2)
		}
	}{
		^rem{ *** неверно подтвержден пароль ***}
		$result(3)
	}
}{
	^rem{ *** пришли неверные данные для регистрации: не задано имя/пароль или не валидный email ***}
	$result(1)
}
^rem{ *** пишем в лог об этом событии *** }
^logEvent[
	$.user_id(^new_user.user_id.int(0))
	$.name[$user_data.[auth.name]]
	$.email[$user_data.[auth.email]]
	$.rights[$user_data.rights]
	$.event_type[$EVENT.insert_user]
]($EVENT.insert_user)[$result]
#end @insertUser[]
На вот это:
################################################################################
# добавление пользователя
# 0 - all ok
# 1 - не задано имя, пароль или email в некоректном формате
# 2 - пользователь с таким именем уже существует
# 3 - неверно подтвержден пароль
@insertUser[user_data][exist]
^if(def $user_data.[auth.name] && ^is_email[$user_data.[auth.email]] && def $user_data.[auth.passwd]){
	^rem{ *** правильно подтвержден пароль? *** }
	^if($user_data.[auth.passwd] eq $user_data.[auth.passwd_confirm]){
		^rem{ *** пароль подтвержден правильно. есть уже пользователь с таким именем? ***}
		^try{
			^csql.sql[void]{
				INSERT INTO auser (
					auser_type_id,
					name,
					email,
					passwd,
					dt_register,
					event_type
					^if(def $user_data.[auth.rights]){, rights}
				) VALUES (
					$USER_ID,
					'$user_data.[auth.name]',
					'$user_data.[auth.email]',
					'^cryptPassword[$user_data.[auth.passwd]]',
					^csql.now[],
					$new_user_event_type
					^if(def $user_data.[auth.rights]){, '$user_data.[auth.rights]'}
			)}

			$new_user[
				$.user_id(^csql.last_insert_id[auser])
				$.name[$user_data.[auth.name]]
				$.email[$user_data.[auth.email]]
				$.rights[$user_data.rights]
			]
			$result(0)
			
			^rem{ *** загружаем полный список групп *** }
			^getGroups[]

			^rem{ *** а теперь включаем вновь добавленного пользователя в группы, у которых установлен is_default *** }
			^groups.menu{
				^if($groups.is_default){
					^csql.sql[void]{
						INSERT INTO auser_to_auser (
							auser_id,
							parent_id
						) VALUES (
							$new_user.user_id,
							$groups.group_id
					)}
				}
			}
		}{
			^rem{ *** есть уже пользователь с таким именем ***}
			$exception.handled(1)
			$result(2)
		}
	}{
		^rem{ *** неверно подтвержден пароль ***}
		$result(3)
	}
}{
	^rem{ *** пришли неверные данные для регистрации: не задано имя/пароль или не валидный email ***}
	$result(1)
}
^rem{ *** пишем в лог об этом событии *** }
^logEvent[
	$.user_id(^new_user.user_id.int(0))
	$.name[$user_data.[auth.name]]
	$.email[$user_data.[auth.email]]
	$.rights[$user_data.rights]
	$.event_type[$EVENT.insert_user]
]($EVENT.insert_user)[$result]
#end @insertUser[]
При добавлении пользователя, логин которого уже есть в БД, появится эта ошибка, - если поместить ^logEvent[...] в ^try все проходит нормально, - вам говорится что уже есть такой логин, правда при этом событие в лог по понятным причинам не пишется.

Правда в БД должен быть уникальный индекс по name и auser_type_id