1+ <?php
2+
3+ // Загружаем файл перевода для smarty
4+ $ smarty ->config_load ($ conf_file , 'account ' );
5+
6+ // Создание аккаунта
7+ if ($ _REQUEST ['account ' ] == 'signup ' && isset ($ _POST ['username ' ]) && isset ($ _POST ['password ' ]) && isset ($ _POST ['c_password ' ]) && $ AoWoWconf ['register ' ] == true )
8+ {
9+ // Совпадают ли введенные пароли?
10+ if ($ _POST ['password ' ] != $ _POST ['c_password ' ])
11+ {
12+ $ smarty ->assign ('signup_error ' , $ smarty ->get_config_vars ('Different_passwords ' ));
13+ }
14+ else
15+ {
16+ // Существует ли уже такой пользователь?
17+ if ($ rDB ->selectCell ('SELECT Count(id) FROM account WHERE username=? LIMIT 1 ' , $ _POST ['username ' ]) == 1 )
18+ {
19+ $ smarty ->assign ('signup_error ' , $ smarty ->get_config_vars ('Such_user_exists ' ));
20+ }
21+ else
22+ {
23+ // Вроде все нормально, создаем аккаунт
24+ $ success = $ rDB ->selectCell ('
25+ INSERT INTO account (username, sha_pass_hash, email, joindate, expansion, last_ip)
26+ VALUES (?, ?, ?, NOW(), ?, ?)
27+ ' ,
28+ $ _POST ['username ' ],
29+ create_usersend_pass ($ _POST ['username ' ], $ _POST ['password ' ]),
30+ (isset ($ _POST ['email ' ]))? $ _POST ['email ' ] : '' ,
31+ $ AoWoWconf ['expansion ' ],
32+ (isset ($ _SERVER ["REMOTE_ADDR " ]))? $ _SERVER ["REMOTE_ADDR " ] : ''
33+ );
34+ if ($ success > 0 )
35+ // Все отлично, авторизуем
36+ $ _REQUEST ['account ' ]='signin ' ;
37+ else
38+ // Неизвестная ошибка
39+ $ smarty ->assign ('signup_error ' , $ smarty ->get_config_vars ('Unknow_error_on_account_create ' ));
40+ }
41+ }
42+ }
43+
44+ if ($ _REQUEST ['account ' ] == 'signin ' && isset ($ _POST ['username ' ]) && isset ($ _POST ['password ' ]))
45+ {
46+ $ usersend_pass = create_usersend_pass ($ _POST ['username ' ], $ _POST ['password ' ]);
47+ $ user = CheckPwd ($ _POST ['username ' ], $ usersend_pass );
48+ if ($ user == -1 )
49+ {
50+ del_user_cookie ();
51+ if (isset ($ _SESSION ['username ' ]))
52+ unset($ _SESSION ['username ' ]);
53+ $ smarty ->assign ('signin_error ' , $ smarty ->get_config_vars ('Such_user_doesnt_exists ' ));
54+ }
55+ elseif ($ user == 0 )
56+ {
57+ del_user_cookie ();
58+ if (isset ($ _SESSION ['username ' ]))
59+ unset($ _SESSION ['username ' ]);
60+ $ smarty ->assign ('signin_error ' , $ smarty ->get_config_vars ('Wrong_password ' ));
61+ }
62+ else
63+ {
64+ // Имя пользователя и пароль совпадают
65+ $ _SESSION ['username ' ] = $ user ['name ' ];
66+ $ _SESSION ['shapass ' ] = $ usersend_pass ;
67+ $ _REQUEST ['account ' ] = 'signin_true ' ;
68+ $ _POST ['remember_me ' ] = isset ($ _POST ['remember_me ' ]) ? $ _POST ['remember_me ' ] : 'no ' ;
69+ if ($ _POST ['remember_me ' ] == 'yes ' )
70+ {
71+ // Запоминаем пользователя
72+ $ remember_time = time () + 3000000 ;
73+ SetCookie ('remember_me ' , $ _POST ['username ' ].$ usersend_pass , $ remember_time );
74+ }
75+ else
76+ del_user_cookie ();
77+ }
78+ }
79+
80+
81+ switch ($ _REQUEST ['account ' ])
82+ {
83+ case '' :
84+ // TODO: Настройки аккаунта (Account Settings)
85+ break ;
86+ case 'signin_false ' :
87+ case 'signin ' :
88+ // Вход в систему
89+ $ smarty ->assign ('register ' , $ AoWoWconf ['register ' ]);
90+ $ smarty ->display ('signin.tpl ' );
91+ break ;
92+ case 'signup_false ' :
93+ case 'signup ' :
94+ // Регистрация аккаунта
95+ $ smarty ->display ('signup.tpl ' );
96+ break ;
97+ case 'signout ' :
98+ // Выход из пользователя
99+ unset($ user );
100+ session_unset ();
101+ session_destroy ();
102+ $ _SESSION = array ();
103+ del_user_cookie ();
104+ case 'signin_true ' :
105+ default :
106+ // На предыдущую страницу
107+ // Срабатывает при:
108+ // 1. $_REQUEST['account'] = 'signout' (выход)
109+ // 2. $_REQUEST['account'] = 'signok' (успешная авторизация)
110+ // 3. Неизвестное значение $_REQUEST['account']
111+ $ _REQUEST ['next ' ] = (isset ($ _REQUEST ['next ' ]))? $ _REQUEST ['next ' ] : '' ;
112+ if (($ _REQUEST ['next ' ] == '?account=signin ' ) or ($ _REQUEST ['next ' ] == '?account=signup ' ))
113+ $ _REQUEST ['next ' ]='' ;
114+ header ('Location: ? ' .$ _REQUEST ['next ' ]);
115+ break ;
116+ }
117+ ?>
0 commit comments