parser

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

 

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

Вылазит непонятно откуда

sly 20.09.2003 18:48 / 20.09.2003 18:50

Вот класс. Когда гость, показывает "]" - непонятно откуда вылазит. Хочется понять, ОТКУДА. Вызывается метод ^user:check[]в корневом auto.p.
@CLASS
user

@auto[]
#========================================
^use[${MAIN:dir_mods}user/user.tmpl]
#========================================
$session_start[^dtf:sql[]]
$session_ip[$env:REMOTE_ADDR]

# Самая главная проверка, вызывается в корневом auto.p
#========================================
@check[]
^if(def $cookie:user_nick && def $cookie:session_key){
# Если куки есть, пойдем узнавать про него...
	^user_info[]
}{
# ...а если нету...сделаем гостя!
	^make_session_guest[]
}

#========================================
@login[]
# Если в куке написано "гость", показываем ему форму для входа
^if($cookie:user_nick ne $alert:guest){
# Если по кукам не гость (т.е. уже зашел), тогда покажем ему на выход
	^show_logout_form[]
}{
# В противном случае пригласим зайти
	^show_login_form[]
}

# Генерим 20-значный ключ в зависимости от времени входа
#========================================
@make_session_key[]
$long_session_key[^math:crypt[${session_start}^math:random(10000);^$apr1^$]]
$session_key[^long_session_key.right(20)]

# Генерим куки с именем и ключом сессии. Для гостя имя $alert:guest
#========================================
@make_session_cookie[nick;key;expires]
$cookie:user_nick[
	$.value[$nick]
	$.expires[$expires]
]
$cookie:session_key[
	$.value[$key]
	$.expires[$expires]
]

# Начинает сессию, записывая ник, ключ и времы старта
#========================================
@write_session[nick;key;ip;start]
	^connect[${MAIN:db_connect}]{
# Удалим сессию с ip, ником (и пустым тоже - на всякий случай :о) или истекшим сроком
		^void:sql{delete from
			${MAIN:db_prefix}_session
			where
				session_ip='$ip' | 
				session_nick='' | 
				session_nick='$nick' | 
				session_start<='$session_start-$MAIN:site_cookie_expires'
			}
# Запишем новую
		^void:sql{insert into
			${MAIN:db_prefix}_session
				(session_nick, 
				session_key, 
				session_ip, 
				session_start)
			values
				('$nick', 
				'$key', 
				'$ip', 
				'$start')
			}
# Если не гость, запишем в user дату последнего входа ($session_start -> $user_last_session)
		^void:sql{update
			${MAIN:db_prefix}_user
			set
				user_last_session='$session_start'
			where
				user_nick='$nick'
			}
		]
	}

# Делаем сессию для гостя (для юзверя это делает скрипт ~login.html)
#========================================
@make_session_guest[]
^make_session_key[]
^write_session[$alert:guest;$session_key;$session_ip;$session_start]
^make_session_cookie[$alert:guest;$session_key;${MAIN:site_cookie_expires}]


# Получение информации о юзере
#========================================
@user_info[]
# Поищем его в табле session:
	^connect[${MAIN:db_connect}]{
		$user[^table::sql{
			select	
				${MAIN:db_prefix}_user.*
			from
				${MAIN:db_prefix}_session, 
				${MAIN:db_prefix}_user
			where
				user_nick=session_nick &&
				session_key='$cookie:session_key'
			}
		]
	}
# Если юзверь есть в обоих таблах, не забанен и ключ в порядке, сделаем ему мешок-хэш и будем дергать в любом месте
# ^user:get[что-нибудь]
#========================================
^if($user){
	$status[$user.user_status]
# Статус юзверя: 1-подключен, 0-забанен
	^if(^status.int[] == 1){
		$info_hash[^user.hash[user_nick]]
	}{
		^page:refresh[$request.uri;$alert:banned]
	}
}{
# Если же куки остались, но инфы о нем в сессиях нет, то сделаем его гостем
	^make_session_guest[]
}

# Сама функция доставания из мешка
#========================================
@get[field][field]
^switch[$field]{
	^case[id]{$info_hash.[$cookie:user_nick].user_id}
	^case[status]{$info_hash.[$cookie:user_nick].user_status}
	^case[reg_date]{$info_hash.[$cookie:user_nick].user_reg_date}
	^case[last_session]{$info_hash.[$cookie:user_nick].user_last_session}
	^case[nick]{$info_hash.[$cookie:user_nick].user_nick}
	^case[pass]{$info_hash.[$cookie:user_nick].user_pass}
	^case[name]{$info_hash.[$cookie:user_nick].user_name}
	^case[level]{$info_hash.[$cookie:user_nick].user_level}
	^case[lang]{$info_hash.[$cookie:user_nick].user_lang}
	^case[theme]{$info_hash.[$cookie:user_nick].user_theme}
	^case[mail]{$info_hash.[$cookie:user_nick].user_mail}
	^case[spam_mail]{$info_hash.[$cookie:user_nick].user_spam_mail}
	^case[url]{$info_hash.[$cookie:user_nick].user_url}
	^case[msn]{$info_hash.[$cookie:user_nick].user_msn}
	^case[icq]{$info_hash.[$cookie:user_nick].user_icq}
	^case[slogan]{$info_hash.[$cookie:user_nick].user_slogan}
	^case[avatar]{$info_hash.[$cookie:user_nick].user_avatar}
	^case[DEFAULT]{'$field' - $alert:not_def}
}