-
Notifications
You must be signed in to change notification settings - Fork 0
/
Registration.class.php
executable file
·114 lines (97 loc) · 3.79 KB
/
Registration.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?PHP
/**
* Simpla CMS
*
* @copyright 2009 Denis Pikusov
* @link http://simp.la
* @author Denis Pikusov
*
* Класс для регистрации пользователя на сайте
* Этот класс использует шаблон registrotion.tpl, с формой регистрации,
* а так же registration_done.tpl при успешной регистрации
*
*/
require_once('Widget.class.php');
class Registration extends Widget
{
var $title = 'Регистрация';
// Соль для шифрования пароля
var $salt = 'simpla';
// Шаблоны для проверки корректности вводимых данных
var $pattern_name = '/^([А-яA-z0-9\s\-_]){1,25}$/iu';
var $pattern_email = '/^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,6})$/i';
/**
*
* Конструктор
*
*/
function Registration(&$parent)
{
Widget::Widget($parent);
}
/**
*
* Отображение
*
*/
function fetch()
{
if(isset($_POST['email']) && isset($_POST['password']))
{
$name = $_POST['name'];
$password = $_POST['password'];
$email = $_POST['email'];
$encpassword = md5($password.$this->salt);
// Проверка возможных ошибок
$error = null;
// Не занят ли такой email?
$query = sql_placeholder("select * from users where email=?", $email);
$this->db->query($query);
$num = $this->db->num_rows();
if($num>0)
$error = "Email $email уже используется";
// Проверка на правильность заполнения формы
if(!preg_match($this->pattern_name, $name))
$error = "Введите имя";
elseif(empty($password))
$error = "Введите пароль";
elseif(!preg_match($this->pattern_email, $email))
$error = "Введите правильный email";
elseif($this->gd_loaded && ($_SESSION["captcha_code"] != $_POST['captcha_code'] || empty($_POST['captcha_code']))) // только при включенной капче
$error = "Введите число с картинки";
// Приберем сохраненную капчу, иначе можно отключить загрузку рисунков и постить старую
unset($_SESSION["captcha_code"]);
// Возврящаем в шаблон введенные данные
$this->smarty->assign('error', $error);
$this->smarty->assign('name', $name);
$this->smarty->assign('password', $password);
$this->smarty->assign('email', $email);
if(!empty($error))
{
// Если возникла ошибка, выводим заново форму регистрации
$this->smarty->assign('error', $error);
$this->body = $this->smarty->fetch('registration.tpl');
}else
{
// Если все хорошо, добавляем пользователя в базу
$query = sql_placeholder("INSERT INTO users
(email, name, password, enabled, group_id)
values(?, ?, ?, 1, 0)",
$email, $name, $encpassword);
$this->db->query($query);
// А так же сразу залогиниваем
$_SESSION['user_email'] = $email;
$_SESSION['user_password'] = $encpassword;
// и выводим сообщение об успешной регистрации
header("Location: http://$this->root_url/");
exit();
}
}
else
{
// Если ничего не постили, просто выводим форму регистрации
$this->body = $this->smarty->fetch('registration.tpl');
}
return $this->body;
}
}