831 |
florian |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
////////////////////////////////////////////////////////////////////////////////
|
|
|
4 |
// //
|
|
|
5 |
// Copyright (C) 2006 Phorum Development Team //
|
|
|
6 |
// http://www.phorum.org //
|
|
|
7 |
// //
|
|
|
8 |
// This program is free software. You can redistribute it and/or modify //
|
|
|
9 |
// it under the terms of either the current Phorum License (viewable at //
|
|
|
10 |
// phorum.org) or the Phorum License that was distributed with this file //
|
|
|
11 |
// //
|
|
|
12 |
// This program is distributed in the hope that it will be useful, //
|
|
|
13 |
// but WITHOUT ANY WARRANTY, without even the implied warranty of //
|
|
|
14 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
|
|
|
15 |
// //
|
|
|
16 |
// You should have received a copy of the Phorum License //
|
|
|
17 |
// along with this program. //
|
|
|
18 |
////////////////////////////////////////////////////////////////////////////////
|
|
|
19 |
define('phorum_page','register');
|
|
|
20 |
|
|
|
21 |
include_once("./common.php");
|
|
|
22 |
include_once("./include/users.php");
|
|
|
23 |
include_once("./include/profile_functions.php");
|
|
|
24 |
include_once("./include/email_functions.php");
|
|
|
25 |
|
|
|
26 |
// set all our URL's
|
|
|
27 |
phorum_build_common_urls();
|
|
|
28 |
|
|
|
29 |
// The URL contains an approve argument, which means that a new user
|
|
|
30 |
// is confirming a new user account.
|
|
|
31 |
if (isset($PHORUM["args"]["approve"])) {
|
|
|
32 |
|
|
|
33 |
// Extract registration validation code and user_id.
|
|
|
34 |
$tmp_pass=substr($PHORUM["args"]["approve"], 0, 8);
|
|
|
35 |
$user_id = (int)substr($PHORUM["args"]["approve"], 8);
|
|
|
36 |
$user_id = phorum_user_verify($user_id, $tmp_pass);
|
|
|
37 |
|
|
|
38 |
// Validation code correct.
|
|
|
39 |
if ($user_id) {
|
|
|
40 |
|
|
|
41 |
$user = phorum_user_get($user_id);
|
|
|
42 |
|
|
|
43 |
$moduser=array();
|
|
|
44 |
|
|
|
45 |
// The user has been denied by a moderator.
|
|
|
46 |
if ($user["active"] == PHORUM_USER_INACTIVE) {
|
|
|
47 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegVerifyFailed"];
|
|
|
48 |
// The user should still be approved by a moderator.
|
|
|
49 |
} elseif ($user["active"] == PHORUM_USER_PENDING_MOD) {
|
|
|
50 |
// TODO: this message should be changed in 5.1 to have a unique message!!!
|
|
|
51 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegVerifyMod"];
|
|
|
52 |
// The user is waiting for email and/or email+moderator confirmation.
|
|
|
53 |
} else {
|
|
|
54 |
// Waiting for both? Then switch to wait for moderator.
|
|
|
55 |
if ($user["active"] == PHORUM_USER_PENDING_BOTH) {
|
|
|
56 |
$moduser["active"] = PHORUM_USER_PENDING_MOD;
|
|
|
57 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegVerifyMod"];
|
|
|
58 |
// Only email confirmation was required. Active the user.
|
|
|
59 |
} else {
|
|
|
60 |
$moduser["active"] = PHORUM_USER_ACTIVE;
|
|
|
61 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegAcctActive"];
|
|
|
62 |
}
|
|
|
63 |
|
|
|
64 |
// Save the new user active status.
|
|
|
65 |
$moduser["user_id"] = $user_id;
|
|
|
66 |
phorum_user_save($moduser);
|
|
|
67 |
}
|
|
|
68 |
|
|
|
69 |
// Validation code incorrect.
|
|
|
70 |
} else {
|
|
|
71 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegVerifyFailed"];
|
|
|
72 |
}
|
|
|
73 |
|
|
|
74 |
include phorum_get_template("header");
|
|
|
75 |
phorum_hook("after_header");
|
|
|
76 |
include phorum_get_template("message");
|
|
|
77 |
phorum_hook("before_footer");
|
|
|
78 |
include phorum_get_template("footer");
|
|
|
79 |
return;
|
|
|
80 |
|
|
|
81 |
}
|
|
|
82 |
|
|
|
83 |
$error = ''; // Init error as empty.
|
|
|
84 |
|
|
|
85 |
// Process posted form data.
|
|
|
86 |
if (count($_POST)) {
|
|
|
87 |
|
|
|
88 |
// Sanitize input data.
|
|
|
89 |
foreach ($_POST as $key => $val) {
|
|
|
90 |
if ($key == 'username') {
|
|
|
91 |
// Trim and space-collapse usernames, so people can't
|
|
|
92 |
// impersonate as other users using the same username,
|
|
|
93 |
// but with extra spaces in it.
|
|
|
94 |
$_POST[$key] = preg_replace('/\s+/', ' ', trim($val));
|
|
|
95 |
} else {
|
|
|
96 |
$_POST[$key] = trim($val);
|
|
|
97 |
}
|
|
|
98 |
}
|
|
|
99 |
|
|
|
100 |
// Check if all required fields are filled and valid.
|
|
|
101 |
if (!isset($_POST["username"]) || empty($_POST['username'])) {
|
|
|
102 |
$error = $PHORUM["DATA"]["LANG"]["ErrUsername"];
|
|
|
103 |
} elseif (!isset($_POST["email"]) || !phorum_valid_email($_POST["email"])) {
|
|
|
104 |
$error = $PHORUM["DATA"]["LANG"]["ErrEmail"];
|
|
|
105 |
} elseif (empty($_POST["password"]) || $_POST["password"] != $_POST["password2"]) {
|
|
|
106 |
$error = $PHORUM["DATA"]["LANG"]["ErrPassword"];
|
|
|
107 |
}
|
|
|
108 |
// Check if the username and email address don't already exist.
|
|
|
109 |
elseif(phorum_user_check_username($_POST["username"])) {
|
|
|
110 |
$error = $PHORUM["DATA"]["LANG"]["ErrRegisterdName"];
|
|
|
111 |
} elseif (phorum_user_check_email($_POST["email"])){
|
|
|
112 |
$error = $PHORUM["DATA"]["LANG"]["ErrRegisterdEmail"];
|
|
|
113 |
}
|
|
|
114 |
|
|
|
115 |
// Check banlists.
|
|
|
116 |
if (empty($error)) {
|
|
|
117 |
$error = phorum_check_bans(array(
|
|
|
118 |
array($_POST["username"], PHORUM_BAD_NAMES),
|
|
|
119 |
array($_POST["email"], PHORUM_BAD_EMAILS),
|
|
|
120 |
array(NULL, PHORUM_BAD_IPS),
|
|
|
121 |
));
|
|
|
122 |
}
|
|
|
123 |
|
|
|
124 |
// Create user if no errors have been encountered.
|
|
|
125 |
if (empty($error)) {
|
|
|
126 |
|
|
|
127 |
// Setup the default userdata to store.
|
|
|
128 |
$userdata = array(
|
|
|
129 |
'username' => NULL,
|
|
|
130 |
'password' => NULL,
|
|
|
131 |
'email' => NULL,
|
|
|
132 |
);
|
|
|
133 |
// Add custom profile fields as acceptable fields.
|
|
|
134 |
foreach ($PHORUM["PROFILE_FIELDS"] as $data) {
|
|
|
135 |
$userdata[$data["name"]] = NULL;
|
|
|
136 |
}
|
|
|
137 |
// Update userdata with $_POST information.
|
|
|
138 |
foreach ($_POST as $key => $val) {
|
|
|
139 |
if (array_key_exists($key, $userdata)) {
|
|
|
140 |
$userdata[$key] = $val;
|
|
|
141 |
}
|
|
|
142 |
}
|
|
|
143 |
// Remove unused custom profile fields.
|
|
|
144 |
foreach ($PHORUM["PROFILE_FIELDS"] as $field) {
|
|
|
145 |
if (is_null($userdata[$field["name"]])) {
|
|
|
146 |
unset($userdata[$field["name"]]);
|
|
|
147 |
}
|
|
|
148 |
}
|
|
|
149 |
// Add static info.
|
|
|
150 |
$userdata["date_added"]=time();
|
|
|
151 |
$userdata["date_last_active"]=time();
|
|
|
152 |
$userdata["hide_email"]=true;
|
|
|
153 |
|
|
|
154 |
// Set user active status depending on the registration verification
|
|
|
155 |
// setting. Generate a confirmation code for email verification.
|
|
|
156 |
if ($PHORUM["registration_control"] == PHORUM_REGISTER_INSTANT_ACCESS) {
|
|
|
157 |
$userdata["active"] = PHORUM_USER_ACTIVE;
|
|
|
158 |
} elseif ($PHORUM["registration_control"] == PHORUM_REGISTER_VERIFY_EMAIL) {
|
|
|
159 |
$userdata["active"] = PHORUM_USER_PENDING_EMAIL;
|
|
|
160 |
$userdata["password_temp"]=substr(md5(microtime()), 0, 8);
|
|
|
161 |
} elseif ($PHORUM["registration_control"]==PHORUM_REGISTER_VERIFY_MODERATOR) {
|
|
|
162 |
$userdata["active"] = PHORUM_USER_PENDING_MOD;
|
|
|
163 |
} elseif ($PHORUM["registration_control"]==PHORUM_REGISTER_VERIFY_BOTH) {
|
|
|
164 |
$userdata["password_temp"]=substr(md5(microtime()), 0, 8);
|
|
|
165 |
$userdata["active"] = PHORUM_USER_PENDING_BOTH;
|
|
|
166 |
}
|
|
|
167 |
|
|
|
168 |
// Run a hook, so module writers can update and check the userdata.
|
|
|
169 |
$userdata = phorum_hook("before_register", $userdata);
|
|
|
170 |
|
|
|
171 |
// Set $error, in case the before_register hook did set an error.
|
|
|
172 |
if (isset($userdata['error'])) {
|
|
|
173 |
$error = $userdata['error'];
|
|
|
174 |
unset($userdata['error']);
|
|
|
175 |
}
|
|
|
176 |
// Try to add the user to the database.
|
|
|
177 |
elseif ($user_id = phorum_user_add($userdata)) {
|
|
|
178 |
|
|
|
179 |
// The user was added. Determine what message to show.
|
|
|
180 |
if ($PHORUM["registration_control"] == PHORUM_REGISTER_INSTANT_ACCESS) {
|
|
|
181 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegThanks"];
|
|
|
182 |
} elseif($PHORUM["registration_control"] == PHORUM_REGISTER_VERIFY_EMAIL ||
|
|
|
183 |
$PHORUM["registration_control"] == PHORUM_REGISTER_VERIFY_BOTH) {
|
|
|
184 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegVerifyEmail"];
|
|
|
185 |
} elseif($PHORUM["registration_control"] == PHORUM_REGISTER_VERIFY_MODERATOR) {
|
|
|
186 |
$PHORUM["DATA"]["MESSAGE"] = $PHORUM["DATA"]["LANG"]["RegVerifyMod"];
|
|
|
187 |
}
|
|
|
188 |
|
|
|
189 |
// Send a message to the new user in case email verification is required.
|
|
|
190 |
if ($PHORUM["registration_control"] == PHORUM_REGISTER_VERIFY_BOTH ||
|
|
|
191 |
$PHORUM["registration_control"] == PHORUM_REGISTER_VERIFY_EMAIL) {
|
|
|
192 |
$verify_url = phorum_get_url(PHORUM_REGISTER_URL, "approve=".$userdata["password_temp"]."$user_id");
|
|
|
193 |
// make the link an anchor tag for AOL users
|
|
|
194 |
if (preg_match("!aol\.com$!i", $userdata["email"])) {
|
|
|
195 |
$verify_url = "<a href=\"$verify_url\">$verify_url</a>";
|
|
|
196 |
}
|
|
|
197 |
$maildata["mailsubject"] = $PHORUM["DATA"]["LANG"]["VerifyRegEmailSubject"];
|
|
|
198 |
$maildata["mailmessage"] = wordwrap($PHORUM["DATA"]["LANG"]["VerifyRegEmailBody1"], 72)."\n\n$verify_url\n\n".wordwrap($PHORUM["DATA"]["LANG"]["VerifyRegEmailBody2"], 72);
|
|
|
199 |
phorum_email_user(array($userdata["email"]), $maildata);
|
|
|
200 |
}
|
|
|
201 |
|
|
|
202 |
$PHORUM["DATA"]["BACKMSG"] = $PHORUM["DATA"]["LANG"]["RegBack"];
|
|
|
203 |
$PHORUM["DATA"]["URL"]["REDIRECT"] = phorum_get_url(PHORUM_LOGIN_URL);
|
|
|
204 |
|
|
|
205 |
// Run a hook, so module writers can run tasks after registering.
|
|
|
206 |
phorum_hook("after_register",$userdata);
|
|
|
207 |
|
|
|
208 |
include phorum_get_template("header");
|
|
|
209 |
phorum_hook("after_header");
|
|
|
210 |
include phorum_get_template("message");
|
|
|
211 |
phorum_hook("before_footer");
|
|
|
212 |
include phorum_get_template("footer");
|
|
|
213 |
return;
|
|
|
214 |
|
|
|
215 |
// Adding the user to the database failed.
|
|
|
216 |
} else {
|
|
|
217 |
$error = $PHORUM["DATA"]["LANG"]["ErrUserAddUpdate"];
|
|
|
218 |
}
|
|
|
219 |
}
|
|
|
220 |
|
|
|
221 |
// Some error encountered during processing? Then setup the
|
|
|
222 |
// data to redisplay the registration form, including an error.
|
|
|
223 |
if (!empty($error)) {
|
|
|
224 |
foreach($_POST as $key => $val){
|
|
|
225 |
$PHORUM["DATA"]["REGISTER"][$key] = htmlspecialchars($val);
|
|
|
226 |
}
|
|
|
227 |
$PHORUM["DATA"]["ERROR"] = htmlspecialchars($error);
|
|
|
228 |
}
|
|
|
229 |
|
|
|
230 |
// No data posted, so this is the first request. Initialize form data.
|
|
|
231 |
} else {
|
|
|
232 |
// Initialize fixed fields.
|
|
|
233 |
$PHORUM["DATA"]["REGISTER"]["username"] = "";
|
|
|
234 |
$PHORUM["DATA"]["REGISTER"]["email"] = "";
|
|
|
235 |
$PHORUM["DATA"]["ERROR"] = "";
|
|
|
236 |
|
|
|
237 |
// Initialize custom profile fields.
|
|
|
238 |
foreach($PHORUM["PROFILE_FIELDS"] as $field) {
|
|
|
239 |
$PHORUM["DATA"]["REGISTER"][$field["name"]] = "";
|
|
|
240 |
}
|
|
|
241 |
}
|
|
|
242 |
|
|
|
243 |
# Setup static template data.
|
|
|
244 |
$PHORUM["DATA"]["URL"]["ACTION"] = phorum_get_url( PHORUM_REGISTER_ACTION_URL );
|
|
|
245 |
$PHORUM["DATA"]["REGISTER"]["forum_id"] = $PHORUM["forum_id"];
|
|
|
246 |
$PHORUM["DATA"]["REGISTER"]["block_title"] = $PHORUM["DATA"]["LANG"]["Register"];
|
|
|
247 |
|
|
|
248 |
// Display the registration page.
|
|
|
249 |
include phorum_get_template("header");
|
|
|
250 |
phorum_hook("after_header");
|
|
|
251 |
include phorum_get_template("register");
|
|
|
252 |
phorum_hook("before_footer");
|
|
|
253 |
include phorum_get_template("footer");
|
|
|
254 |
|
|
|
255 |
?>
|