Verzeichnisstruktur phpBB-3.1.0
- Veröffentlicht
- 27.10.2014
So funktioniert es
|
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
ucp_register.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 /**
015 * @ignore
016 */
017 if (!defined('IN_PHPBB'))
018 {
019 exit;
020 }
021
022 /**
023 * ucp_register
024 * Board registration
025 */
026 class ucp_register
027 {
028 var $u_action;
029
030 function main($id, $mode)
031 {
032 global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
033 global $request, $phpbb_container;
034
035 //
036 if ($config['require_activation'] == USER_ACTIVATION_DISABLE)
037 {
038 trigger_error('UCP_REGISTER_DISABLE');
039 }
040
041 $coppa = $request->is_set('coppa') ? (int) $request->variable('coppa', false) : false;
042 $agreed = $request->variable('agreed', false);
043 $submit = $request->is_set_post('submit');
044 $change_lang = request_var('change_lang', '');
045 $user_lang = request_var('lang', $user->lang_name);
046
047 if ($agreed)
048 {
049 add_form_key('ucp_register');
050 }
051 else
052 {
053 add_form_key('ucp_register_terms');
054 }
055
056 if ($change_lang || $user_lang != $config['default_lang'])
057 {
058 $use_lang = ($change_lang) ? basename($change_lang) : basename($user_lang);
059
060 if (!validate_language_iso_name($use_lang))
061 {
062 if ($change_lang)
063 {
064 $submit = false;
065
066 // Setting back agreed to let the user view the agreement in his/her language
067 $agreed = false;
068 }
069
070 $user_lang = $use_lang;
071 }
072 else
073 {
074 $change_lang = '';
075 $user_lang = $user->lang_name;
076 }
077 }
078
079 $cp = $phpbb_container->get('profilefields.manager');
080
081 $error = $cp_data = $cp_error = array();
082 $s_hidden_fields = array();
083
084 // Handle login_link data added to $_hidden_fields
085 $login_link_data = $this->get_login_link_data_array();
086
087 if (!empty($login_link_data))
088 {
089 // Confirm that we have all necessary data
090 $auth_provider = 'auth.provider.' . $request->variable('auth_provider', $config['auth_method']);
091 $auth_provider = $phpbb_container->get($auth_provider);
092
093 $result = $auth_provider->login_link_has_necessary_data($login_link_data);
094 if ($result !== null)
095 {
096 $error[] = $user->lang[$result];
097 }
098
099 $s_hidden_fields = array_merge($s_hidden_fields, $this->get_login_link_data_for_hidden_fields($login_link_data));
100 }
101
102 if (!$agreed || ($coppa === false && $config['coppa_enable']) || ($coppa && !$config['coppa_enable']))
103 {
104 $add_coppa = ($coppa !== false) ? '&coppa=' . $coppa : '';
105
106 $s_hidden_fields = array_merge($s_hidden_fields, array(
107 'change_lang' => '',
108 ));
109
110 // If we change the language, we want to pass on some more possible parameter.
111 if ($change_lang)
112 {
113 // We do not include the password
114 $s_hidden_fields = array_merge($s_hidden_fields, array(
115 'username' => utf8_normalize_nfc(request_var('username', '', true)),
116 'email' => strtolower(request_var('email', '')),
117 'lang' => $user->lang_name,
118 'tz' => request_var('tz', $config['board_timezone']),
119 ));
120
121 }
122
123 // Checking amount of available languages
124 $sql = 'SELECT lang_id
125 FROM ' . LANG_TABLE;
126 $result = $db->sql_query($sql);
127
128 $lang_row = array();
129 while ($row = $db->sql_fetchrow($result))
130 {
131 $lang_row[] = $row;
132 }
133 $db->sql_freeresult($result);
134
135 if ($coppa === false && $config['coppa_enable'])
136 {
137 $now = getdate();
138 $coppa_birthday = $user->create_datetime()
139 ->setDate($now['year'] - 13, $now['mon'], $now['mday'] - 1)
140 ->setTime(0, 0, 0)
141 ->format($user->lang['DATE_FORMAT'], true);
142 unset($now);
143
144 $template->assign_vars(array(
145 'S_LANG_OPTIONS' => (sizeof($lang_row) > 1) ? language_select($user_lang) : '',
146 'L_COPPA_NO' => sprintf($user->lang['UCP_COPPA_BEFORE'], $coppa_birthday),
147 'L_COPPA_YES' => sprintf($user->lang['UCP_COPPA_ON_AFTER'], $coppa_birthday),
148
149 'U_COPPA_NO' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register&coppa=0'),
150 'U_COPPA_YES' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register&coppa=1'),
151
152 'S_SHOW_COPPA' => true,
153 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
154 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
155
156 'COOKIE_NAME' => $config['cookie_name'],
157 'COOKIE_PATH' => $config['cookie_path'],
158 ));
159 }
160 else
161 {
162 $template->assign_vars(array(
163 'S_LANG_OPTIONS' => (sizeof($lang_row) > 1) ? language_select($user_lang) : '',
164 'L_TERMS_OF_USE' => sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()),
165
166 'S_SHOW_COPPA' => false,
167 'S_REGISTRATION' => true,
168 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
169 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_coppa),
170
171 'COOKIE_NAME' => $config['cookie_name'],
172 'COOKIE_PATH' => $config['cookie_path'],
173 )
174 );
175 }
176 unset($lang_row);
177
178 $this->tpl_name = 'ucp_agreement';
179 return;
180 }
181
182 // The CAPTCHA kicks in here. We can't help that the information gets lost on language change.
183 if ($config['enable_confirm'])
184 {
185 $captcha = $phpbb_container->get('captcha.factory')->get_instance($config['captcha_plugin']);
186 $captcha->init(CONFIRM_REG);
187 }
188
189 $timezone = $config['board_timezone'];
190
191 $data = array(
192 'username' => utf8_normalize_nfc(request_var('username', '', true)),
193 'new_password' => $request->variable('new_password', '', true),
194 'password_confirm' => $request->variable('password_confirm', '', true),
195 'email' => strtolower(request_var('email', '')),
196 'lang' => basename(request_var('lang', $user->lang_name)),
197 'tz' => request_var('tz', $timezone),
198 );
199
200 // Check and initialize some variables if needed
201 if ($submit)
202 {
203 $error = validate_data($data, array(
204 'username' => array(
205 array('string', false, $config['min_name_chars'], $config['max_name_chars']),
206 array('username', '')),
207 'new_password' => array(
208 array('string', false, $config['min_pass_chars'], $config['max_pass_chars']),
209 array('password')),
210 'password_confirm' => array('string', false, $config['min_pass_chars'], $config['max_pass_chars']),
211 'email' => array(
212 array('string', false, 6, 60),
213 array('user_email')),
214 'tz' => array('timezone'),
215 'lang' => array('language_iso_name'),
216 ));
217
218 if (!check_form_key('ucp_register'))
219 {
220 $error[] = $user->lang['FORM_INVALID'];
221 }
222
223 // Replace "error" strings with their real, localised form
224 $error = array_map(array($user, 'lang'), $error);
225
226 if ($config['enable_confirm'])
227 {
228 $vc_response = $captcha->validate($data);
229 if ($vc_response !== false)
230 {
231 $error[] = $vc_response;
232 }
233
234 if ($config['max_reg_attempts'] && $captcha->get_attempt_count() > $config['max_reg_attempts'])
235 {
236 $error[] = $user->lang['TOO_MANY_REGISTERS'];
237 }
238 }
239
240 // DNSBL check
241 if ($config['check_dnsbl'])
242 {
243 if (($dnsbl = $user->check_dnsbl('register')) !== false)
244 {
245 $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
246 }
247 }
248
249 // validate custom profile fields
250 $cp->submit_cp_field('register', $user->get_iso_lang_id(), $cp_data, $error);
251
252 if (!sizeof($error))
253 {
254 if ($data['new_password'] != $data['password_confirm'])
255 {
256 $error[] = $user->lang['NEW_PASSWORD_ERROR'];
257 }
258 }
259
260 if (!sizeof($error))
261 {
262 $server_url = generate_board_url();
263
264 // Which group by default?
265 $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
266
267 $sql = 'SELECT group_id
268 FROM ' . GROUPS_TABLE . "
269 WHERE group_name = '" . $db->sql_escape($group_name) . "'
270 AND group_type = " . GROUP_SPECIAL;
271 $result = $db->sql_query($sql);
272 $row = $db->sql_fetchrow($result);
273 $db->sql_freeresult($result);
274
275 if (!$row)
276 {
277 trigger_error('NO_GROUP');
278 }
279
280 $group_id = $row['group_id'];
281
282 if (($coppa ||
283 $config['require_activation'] == USER_ACTIVATION_SELF ||
284 $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable'])
285 {
286 $user_actkey = gen_rand_string(mt_rand(6, 10));
287 $user_type = USER_INACTIVE;
288 $user_inactive_reason = INACTIVE_REGISTER;
289 $user_inactive_time = time();
290 }
291 else
292 {
293 $user_type = USER_NORMAL;
294 $user_actkey = '';
295 $user_inactive_reason = 0;
296 $user_inactive_time = 0;
297 }
298
299 // Instantiate passwords manager
300 $passwords_manager = $phpbb_container->get('passwords.manager');
301
302 $user_row = array(
303 'username' => $data['username'],
304 'user_password' => $passwords_manager->hash($data['new_password']),
305 'user_email' => $data['email'],
306 'group_id' => (int) $group_id,
307 'user_timezone' => $data['tz'],
308 'user_lang' => $data['lang'],
309 'user_type' => $user_type,
310 'user_actkey' => $user_actkey,
311 'user_ip' => $user->ip,
312 'user_regdate' => time(),
313 'user_inactive_reason' => $user_inactive_reason,
314 'user_inactive_time' => $user_inactive_time,
315 );
316
317 if ($config['new_member_post_limit'])
318 {
319 $user_row['user_new'] = 1;
320 }
321
322 // Register user...
323 $user_id = user_add($user_row, $cp_data);
324
325 // This should not happen, because the required variables are listed above...
326 if ($user_id === false)
327 {
328 trigger_error('NO_USER', E_USER_ERROR);
329 }
330
331 // Okay, captcha, your job is done.
332 if ($config['enable_confirm'] && isset($captcha))
333 {
334 $captcha->reset();
335 }
336
337 if ($coppa && $config['email_enable'])
338 {
339 $message = $user->lang['ACCOUNT_COPPA'];
340 $email_template = 'coppa_welcome_inactive';
341 }
342 else if ($config['require_activation'] == USER_ACTIVATION_SELF && $config['email_enable'])
343 {
344 $message = $user->lang['ACCOUNT_INACTIVE'];
345 $email_template = 'user_welcome_inactive';
346 }
347 else if ($config['require_activation'] == USER_ACTIVATION_ADMIN && $config['email_enable'])
348 {
349 $message = $user->lang['ACCOUNT_INACTIVE_ADMIN'];
350 $email_template = 'admin_welcome_inactive';
351 }
352 else
353 {
354 $message = $user->lang['ACCOUNT_ADDED'];
355 $email_template = 'user_welcome';
356 }
357
358 if ($config['email_enable'])
359 {
360 include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
361
362 $messenger = new messenger(false);
363
364 $messenger->template($email_template, $data['lang']);
365
366 $messenger->to($data['email'], $data['username']);
367
368 $messenger->anti_abuse_headers($config, $user);
369
370 $messenger->assign_vars(array(
371 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])),
372 'USERNAME' => htmlspecialchars_decode($data['username']),
373 'PASSWORD' => htmlspecialchars_decode($data['new_password']),
374 'U_ACTIVATE' => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
375 );
376
377 if ($coppa)
378 {
379 $messenger->assign_vars(array(
380 'FAX_INFO' => $config['coppa_fax'],
381 'MAIL_INFO' => $config['coppa_mail'],
382 'EMAIL_ADDRESS' => $data['email'])
383 );
384 }
385
386 $messenger->send(NOTIFY_EMAIL);
387 }
388
389 if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
390 {
391 $phpbb_notifications = $phpbb_container->get('notification_manager');
392 $phpbb_notifications->add_notifications('notification.type.admin_activate_user', array(
393 'user_id' => $user_id,
394 'user_actkey' => $user_row['user_actkey'],
395 'user_regdate' => $user_row['user_regdate'],
396 ));
397 }
398
399 // Perform account linking if necessary
400 if (!empty($login_link_data))
401 {
402 $login_link_data['user_id'] = $user_id;
403
404 $result = $auth_provider->link_account($login_link_data);
405
406 if ($result)
407 {
408 $message = $message . '<br /><br />' . $user->lang[$result];
409 }
410 }
411
412 $message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
413 trigger_error($message);
414 }
415 }
416
417 $s_hidden_fields = array_merge($s_hidden_fields, array(
418 'agreed' => 'true',
419 'change_lang' => 0,
420 ));
421
422 if ($config['coppa_enable'])
423 {
424 $s_hidden_fields['coppa'] = $coppa;
425 }
426
427 if ($config['enable_confirm'])
428 {
429 $s_hidden_fields = array_merge($s_hidden_fields, $captcha->get_hidden_fields());
430 }
431 $s_hidden_fields = build_hidden_fields($s_hidden_fields);
432 $confirm_image = '';
433
434 // Visual Confirmation - Show images
435 if ($config['enable_confirm'])
436 {
437 $template->assign_vars(array(
438 'CAPTCHA_TEMPLATE' => $captcha->get_template(),
439 ));
440 }
441
442 //
443 $l_reg_cond = '';
444 switch ($config['require_activation'])
445 {
446 case USER_ACTIVATION_SELF:
447 $l_reg_cond = $user->lang['UCP_EMAIL_ACTIVATE'];
448 break;
449
450 case USER_ACTIVATION_ADMIN:
451 $l_reg_cond = $user->lang['UCP_ADMIN_ACTIVATE'];
452 break;
453 }
454
455 $timezone_selects = phpbb_timezone_select($template, $user, $data['tz'], true);
456 $template->assign_vars(array(
457 'ERROR' => (sizeof($error)) ? implode('<br />', $error) : '',
458 'USERNAME' => $data['username'],
459 'PASSWORD' => $data['new_password'],
460 'PASSWORD_CONFIRM' => $data['password_confirm'],
461 'EMAIL' => $data['email'],
462
463 'L_REG_COND' => $l_reg_cond,
464 'L_USERNAME_EXPLAIN' => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_name_chars']), $user->lang('CHARACTERS', (int) $config['max_name_chars'])),
465 'L_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars']), $user->lang('CHARACTERS', (int) $config['max_pass_chars'])),
466
467 'S_LANG_OPTIONS' => language_select($data['lang']),
468 'S_TZ_PRESELECT' => !$submit,
469 'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false,
470 'S_REGISTRATION' => true,
471 'S_COPPA' => $coppa,
472 'S_HIDDEN_FIELDS' => $s_hidden_fields,
473 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
474
475 'COOKIE_NAME' => $config['cookie_name'],
476 'COOKIE_PATH' => $config['cookie_path'],
477 ));
478
479 //
480 $user->profile_fields = array();
481
482 // Generate profile fields -> Template Block Variable profile_fields
483 $cp->generate_profile_fields('register', $user->get_iso_lang_id());
484
485 //
486 $this->tpl_name = 'ucp_register';
487 $this->page_title = 'UCP_REGISTRATION';
488 }
489
490 /**
491 * Creates the login_link data array
492 *
493 * @return array Returns an array of all POST paramaters whose names
494 * begin with 'login_link_'
495 */
496 protected function get_login_link_data_array()
497 {
498 global $request;
499
500 $var_names = $request->variable_names(\phpbb\request\request_interface::POST);
501 $login_link_data = array();
502 $string_start_length = strlen('login_link_');
503
504 foreach ($var_names as $var_name)
505 {
506 if (strpos($var_name, 'login_link_') === 0)
507 {
508 $key_name = substr($var_name, $string_start_length);
509 $login_link_data[$key_name] = $request->variable($var_name, '', false, \phpbb\request\request_interface::POST);
510 }
511 }
512
513 return $login_link_data;
514 }
515
516 /**
517 * Prepends they key names of an associative array with 'login_link_' for
518 * inclusion on the page as hidden fields.
519 *
520 * @param array $data The array to be modified
521 * @return array The modified array
522 */
523 protected function get_login_link_data_for_hidden_fields($data)
524 {
525 $new_data = array();
526
527 foreach ($data as $key => $value)
528 {
529 $new_data['login_link_' . $key] = $value;
530 }
531
532 return $new_data;
533 }
534 }
535