Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
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, $template, $phpbb_root_path, $phpEx;
033 global $request, $phpbb_container, $phpbb_dispatcher;
034
035 //
036 if ($config['require_activation'] == USER_ACTIVATION_DISABLE ||
037 (in_array($config['require_activation'], array(USER_ACTIVATION_SELF, USER_ACTIVATION_ADMIN)) && !$config['email_enable']))
038 {
039 trigger_error('UCP_REGISTER_DISABLE');
040 }
041
042 $coppa = $request->is_set('coppa') ? (int) $request->variable('coppa', false) : false;
043 $agreed = $request->variable('agreed', false);
044 $submit = $request->is_set_post('submit');
045 $change_lang = $request->variable('change_lang', '');
046 $user_lang = $request->variable('lang', $user->lang_name);
047
048 /**
049 * Add UCP register data before they are assigned to the template or submitted
050 *
051 * To assign data to the template, use $template->assign_vars()
052 *
053 * @event core.ucp_register_requests_after
054 * @var bool coppa Is set coppa
055 * @var bool agreed Did user agree to coppa?
056 * @var bool submit Is set post submit?
057 * @var string change_lang Change language request
058 * @var string user_lang User language request
059 * @since 3.1.11-RC1
060 */
061 $vars = array(
062 'coppa',
063 'agreed',
064 'submit',
065 'change_lang',
066 'user_lang',
067 );
068 extract($phpbb_dispatcher->trigger_event('core.ucp_register_requests_after', compact($vars)));
069
070 if ($agreed)
071 {
072 add_form_key('ucp_register');
073 }
074 else
075 {
076 add_form_key('ucp_register_terms');
077 }
078
079 if ($change_lang || $user_lang != $config['default_lang'])
080 {
081 $use_lang = ($change_lang) ? basename($change_lang) : basename($user_lang);
082
083 if (!validate_language_iso_name($use_lang))
084 {
085 if ($change_lang)
086 {
087 $submit = false;
088
089 // Setting back agreed to let the user view the agreement in his/her language
090 $agreed = false;
091 }
092
093 $user_lang = $use_lang;
094 }
095 else
096 {
097 $change_lang = '';
098 $user_lang = $user->lang_name;
099 }
100 }
101
102 /* @var $cp \phpbb\profilefields\manager */
103 $cp = $phpbb_container->get('profilefields.manager');
104
105 $error = $cp_data = $cp_error = array();
106 $s_hidden_fields = array();
107
108 // Handle login_link data added to $_hidden_fields
109 $login_link_data = $this->get_login_link_data_array();
110
111 if (!empty($login_link_data))
112 {
113 // Confirm that we have all necessary data
114 /* @var $provider_collection \phpbb\auth\provider_collection */
115 $provider_collection = $phpbb_container->get('auth.provider_collection');
116 $auth_provider = $provider_collection->get_provider($request->variable('auth_provider', ''));
117
118 $result = $auth_provider->login_link_has_necessary_data($login_link_data);
119 if ($result !== null)
120 {
121 $error[] = $user->lang[$result];
122 }
123
124 $s_hidden_fields = array_merge($s_hidden_fields, $this->get_login_link_data_for_hidden_fields($login_link_data));
125 }
126
127 if (!$agreed || ($coppa === false && $config['coppa_enable']) || ($coppa && !$config['coppa_enable']))
128 {
129 $add_coppa = ($coppa !== false) ? '&coppa=' . $coppa : '';
130
131 $s_hidden_fields = array_merge($s_hidden_fields, array(
132 'change_lang' => '',
133 ));
134
135 // If we change the language, we want to pass on some more possible parameter.
136 if ($change_lang)
137 {
138 // We do not include the password
139 $s_hidden_fields = array_merge($s_hidden_fields, array(
140 'username' => $request->variable('username', '', true),
141 'email' => strtolower($request->variable('email', '')),
142 'lang' => $user->lang_name,
143 'tz' => $request->variable('tz', $config['board_timezone']),
144 ));
145
146 }
147
148 // Checking amount of available languages
149 $sql = 'SELECT lang_id
150 FROM ' . LANG_TABLE;
151 $result = $db->sql_query($sql);
152
153 $lang_row = array();
154 while ($row = $db->sql_fetchrow($result))
155 {
156 $lang_row[] = $row;
157 }
158 $db->sql_freeresult($result);
159
160 if ($coppa === false && $config['coppa_enable'])
161 {
162 $now = getdate();
163 $coppa_birthday = $user->create_datetime()
164 ->setDate($now['year'] - 13, $now['mon'], $now['mday'] - 1)
165 ->setTime(0, 0, 0)
166 ->format($user->lang['DATE_FORMAT'], true);
167 unset($now);
168
169 $template->assign_vars(array(
170 'S_LANG_OPTIONS' => (sizeof($lang_row) > 1) ? language_select($user_lang) : '',
171 'L_COPPA_NO' => sprintf($user->lang['UCP_COPPA_BEFORE'], $coppa_birthday),
172 'L_COPPA_YES' => sprintf($user->lang['UCP_COPPA_ON_AFTER'], $coppa_birthday),
173
174 'U_COPPA_NO' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register&coppa=0'),
175 'U_COPPA_YES' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register&coppa=1'),
176
177 'S_SHOW_COPPA' => true,
178 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
179 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
180
181 'COOKIE_NAME' => $config['cookie_name'],
182 'COOKIE_PATH' => $config['cookie_path'],
183 ));
184 }
185 else
186 {
187 $template->assign_vars(array(
188 'S_LANG_OPTIONS' => (sizeof($lang_row) > 1) ? language_select($user_lang) : '',
189 'L_TERMS_OF_USE' => sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()),
190
191 'S_SHOW_COPPA' => false,
192 'S_REGISTRATION' => true,
193 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
194 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_coppa),
195
196 'COOKIE_NAME' => $config['cookie_name'],
197 'COOKIE_PATH' => $config['cookie_path'],
198 )
199 );
200 }
201 unset($lang_row);
202
203 /**
204 * Allows to modify the agreements.
205 *
206 * To assign data to the template, use $template->assign_vars()
207 *
208 * @event core.ucp_register_agreement
209 * @since 3.1.6-RC1
210 */
211 $phpbb_dispatcher->dispatch('core.ucp_register_agreement');
212
213 $this->tpl_name = 'ucp_agreement';
214 return;
215 }
216
217 // The CAPTCHA kicks in here. We can't help that the information gets lost on language change.
218 if ($config['enable_confirm'])
219 {
220 $captcha = $phpbb_container->get('captcha.factory')->get_instance($config['captcha_plugin']);
221 $captcha->init(CONFIRM_REG);
222 }
223
224 $timezone = $config['board_timezone'];
225
226 $data = array(
227 'username' => $request->variable('username', '', true),
228 'new_password' => $request->variable('new_password', '', true),
229 'password_confirm' => $request->variable('password_confirm', '', true),
230 'email' => strtolower($request->variable('email', '')),
231 'lang' => basename($request->variable('lang', $user->lang_name)),
232 'tz' => $request->variable('tz', $timezone),
233 );
234 /**
235 * Add UCP register data before they are assigned to the template or submitted
236 *
237 * To assign data to the template, use $template->assign_vars()
238 *
239 * @event core.ucp_register_data_before
240 * @var bool submit Do we display the form only
241 * or did the user press submit
242 * @var array data Array with current ucp registration data
243 * @since 3.1.4-RC1
244 */
245 $vars = array('submit', 'data');
246 extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_before', compact($vars)));
247
248 // Check and initialize some variables if needed
249 if ($submit)
250 {
251 $error = validate_data($data, array(
252 'username' => array(
253 array('string', false, $config['min_name_chars'], $config['max_name_chars']),
254 array('username', '')),
255 'new_password' => array(
256 array('string', false, $config['min_pass_chars'], $config['max_pass_chars']),
257 array('password')),
258 'password_confirm' => array('string', false, $config['min_pass_chars'], $config['max_pass_chars']),
259 'email' => array(
260 array('string', false, 6, 60),
261 array('user_email')),
262 'tz' => array('timezone'),
263 'lang' => array('language_iso_name'),
264 ));
265
266 if (!check_form_key('ucp_register'))
267 {
268 $error[] = $user->lang['FORM_INVALID'];
269 }
270
271 // Replace "error" strings with their real, localised form
272 $error = array_map(array($user, 'lang'), $error);
273
274 if ($config['enable_confirm'])
275 {
276 $vc_response = $captcha->validate($data);
277 if ($vc_response !== false)
278 {
279 $error[] = $vc_response;
280 }
281
282 if ($config['max_reg_attempts'] && $captcha->get_attempt_count() > $config['max_reg_attempts'])
283 {
284 $error[] = $user->lang['TOO_MANY_REGISTERS'];
285 }
286 }
287
288 // DNSBL check
289 if ($config['check_dnsbl'])
290 {
291 if (($dnsbl = $user->check_dnsbl('register')) !== false)
292 {
293 $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
294 }
295 }
296
297 // validate custom profile fields
298 $cp->submit_cp_field('register', $user->get_iso_lang_id(), $cp_data, $error);
299
300 if (!sizeof($error))
301 {
302 if ($data['new_password'] != $data['password_confirm'])
303 {
304 $error[] = $user->lang['NEW_PASSWORD_ERROR'];
305 }
306 }
307 /**
308 * Check UCP registration data after they are submitted
309 *
310 * @event core.ucp_register_data_after
311 * @var bool submit Do we display the form only
312 * or did the user press submit
313 * @var array data Array with current ucp registration data
314 * @var array cp_data Array with custom profile fields data
315 * @var array error Array with list of errors
316 * @since 3.1.4-RC1
317 */
318 $vars = array('submit', 'data', 'cp_data', 'error');
319 extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_after', compact($vars)));
320
321 if (!sizeof($error))
322 {
323 $server_url = generate_board_url();
324
325 // Which group by default?
326 $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
327
328 $sql = 'SELECT group_id
329 FROM ' . GROUPS_TABLE . "
330 WHERE group_name = '" . $db->sql_escape($group_name) . "'
331 AND group_type = " . GROUP_SPECIAL;
332 $result = $db->sql_query($sql);
333 $row = $db->sql_fetchrow($result);
334 $db->sql_freeresult($result);
335
336 if (!$row)
337 {
338 trigger_error('NO_GROUP');
339 }
340
341 $group_id = $row['group_id'];
342
343 if (($coppa ||
344 $config['require_activation'] == USER_ACTIVATION_SELF ||
345 $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable'])
346 {
347 $user_actkey = gen_rand_string(mt_rand(6, 10));
348 $user_type = USER_INACTIVE;
349 $user_inactive_reason = INACTIVE_REGISTER;
350 $user_inactive_time = time();
351 }
352 else
353 {
354 $user_type = USER_NORMAL;
355 $user_actkey = '';
356 $user_inactive_reason = 0;
357 $user_inactive_time = 0;
358 }
359
360 // Instantiate passwords manager
361 /* @var $passwords_manager \phpbb\passwords\manager */
362 $passwords_manager = $phpbb_container->get('passwords.manager');
363
364 $user_row = array(
365 'username' => $data['username'],
366 'user_password' => $passwords_manager->hash($data['new_password']),
367 'user_email' => $data['email'],
368 'group_id' => (int) $group_id,
369 'user_timezone' => $data['tz'],
370 'user_lang' => $data['lang'],
371 'user_type' => $user_type,
372 'user_actkey' => $user_actkey,
373 'user_ip' => $user->ip,
374 'user_regdate' => time(),
375 'user_inactive_reason' => $user_inactive_reason,
376 'user_inactive_time' => $user_inactive_time,
377 );
378
379 if ($config['new_member_post_limit'])
380 {
381 $user_row['user_new'] = 1;
382 }
383 /**
384 * Add into $user_row before user_add
385 *
386 * user_add allows adding more data into the users table
387 *
388 * @event core.ucp_register_user_row_after
389 * @var bool submit Do we display the form only
390 * or did the user press submit
391 * @var array cp_data Array with custom profile fields data
392 * @var array user_row Array with current ucp registration data
393 * @since 3.1.4-RC1
394 */
395 $vars = array('submit', 'cp_data', 'user_row');
396 extract($phpbb_dispatcher->trigger_event('core.ucp_register_user_row_after', compact($vars)));
397
398 // Register user...
399 $user_id = user_add($user_row, $cp_data);
400
401 // This should not happen, because the required variables are listed above...
402 if ($user_id === false)
403 {
404 trigger_error('NO_USER', E_USER_ERROR);
405 }
406
407 // Okay, captcha, your job is done.
408 if ($config['enable_confirm'] && isset($captcha))
409 {
410 $captcha->reset();
411 }
412
413 if ($coppa && $config['email_enable'])
414 {
415 $message = $user->lang['ACCOUNT_COPPA'];
416 $email_template = 'coppa_welcome_inactive';
417 }
418 else if ($config['require_activation'] == USER_ACTIVATION_SELF && $config['email_enable'])
419 {
420 $message = $user->lang['ACCOUNT_INACTIVE'];
421 $email_template = 'user_welcome_inactive';
422 }
423 else if ($config['require_activation'] == USER_ACTIVATION_ADMIN && $config['email_enable'])
424 {
425 $message = $user->lang['ACCOUNT_INACTIVE_ADMIN'];
426 $email_template = 'admin_welcome_inactive';
427 }
428 else
429 {
430 $message = $user->lang['ACCOUNT_ADDED'];
431 $email_template = 'user_welcome';
432 }
433
434 if ($config['email_enable'])
435 {
436 include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
437
438 $messenger = new messenger(false);
439
440 $messenger->template($email_template, $data['lang']);
441
442 $messenger->to($data['email'], $data['username']);
443
444 $messenger->anti_abuse_headers($config, $user);
445
446 $messenger->assign_vars(array(
447 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])),
448 'USERNAME' => htmlspecialchars_decode($data['username']),
449 'PASSWORD' => htmlspecialchars_decode($data['new_password']),
450 'U_ACTIVATE' => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
451 );
452
453 if ($coppa)
454 {
455 $messenger->assign_vars(array(
456 'FAX_INFO' => $config['coppa_fax'],
457 'MAIL_INFO' => $config['coppa_mail'],
458 'EMAIL_ADDRESS' => $data['email'])
459 );
460 }
461
462 $messenger->send(NOTIFY_EMAIL);
463 }
464
465 if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
466 {
467 /* @var $phpbb_notifications \phpbb\notification\manager */
468 $phpbb_notifications = $phpbb_container->get('notification_manager');
469 $phpbb_notifications->add_notifications('notification.type.admin_activate_user', array(
470 'user_id' => $user_id,
471 'user_actkey' => $user_row['user_actkey'],
472 'user_regdate' => $user_row['user_regdate'],
473 ));
474 }
475
476 // Perform account linking if necessary
477 if (!empty($login_link_data))
478 {
479 $login_link_data['user_id'] = $user_id;
480
481 $result = $auth_provider->link_account($login_link_data);
482
483 if ($result)
484 {
485 $message = $message . '<br /><br />' . $user->lang[$result];
486 }
487 }
488
489 $message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
490 trigger_error($message);
491 }
492 }
493
494 $s_hidden_fields = array_merge($s_hidden_fields, array(
495 'agreed' => 'true',
496 'change_lang' => 0,
497 ));
498
499 if ($config['coppa_enable'])
500 {
501 $s_hidden_fields['coppa'] = $coppa;
502 }
503
504 if ($config['enable_confirm'])
505 {
506 $s_hidden_fields = array_merge($s_hidden_fields, $captcha->get_hidden_fields());
507 }
508 $s_hidden_fields = build_hidden_fields($s_hidden_fields);
509
510 // Visual Confirmation - Show images
511 if ($config['enable_confirm'])
512 {
513 $template->assign_vars(array(
514 'CAPTCHA_TEMPLATE' => $captcha->get_template(),
515 ));
516 }
517
518 //
519 $l_reg_cond = '';
520 switch ($config['require_activation'])
521 {
522 case USER_ACTIVATION_SELF:
523 $l_reg_cond = $user->lang['UCP_EMAIL_ACTIVATE'];
524 break;
525
526 case USER_ACTIVATION_ADMIN:
527 $l_reg_cond = $user->lang['UCP_ADMIN_ACTIVATE'];
528 break;
529 }
530
531 // Assign template vars for timezone select
532 phpbb_timezone_select($template, $user, $data['tz'], true);
533
534 $template->assign_vars(array(
535 'ERROR' => (sizeof($error)) ? implode('<br />', $error) : '',
536 'USERNAME' => $data['username'],
537 'PASSWORD' => $data['new_password'],
538 'PASSWORD_CONFIRM' => $data['password_confirm'],
539 'EMAIL' => $data['email'],
540
541 'L_REG_COND' => $l_reg_cond,
542 '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'])),
543 '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'])),
544
545 'S_LANG_OPTIONS' => language_select($data['lang']),
546 'S_TZ_PRESELECT' => !$submit,
547 'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false,
548 'S_REGISTRATION' => true,
549 'S_COPPA' => $coppa,
550 'S_HIDDEN_FIELDS' => $s_hidden_fields,
551 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
552
553 'COOKIE_NAME' => $config['cookie_name'],
554 'COOKIE_PATH' => $config['cookie_path'],
555 ));
556
557 //
558 $user->profile_fields = array();
559
560 // Generate profile fields -> Template Block Variable profile_fields
561 $cp->generate_profile_fields('register', $user->get_iso_lang_id());
562
563 //
564 $this->tpl_name = 'ucp_register';
565 $this->page_title = 'UCP_REGISTRATION';
566 }
567
568 /**
569 * Creates the login_link data array
570 *
571 * @return array Returns an array of all POST paramaters whose names
572 * begin with 'login_link_'
573 */
574 protected function get_login_link_data_array()
575 {
576 global $request;
577
578 $var_names = $request->variable_names(\phpbb\request\request_interface::POST);
579 $login_link_data = array();
580 $string_start_length = strlen('login_link_');
581
582 foreach ($var_names as $var_name)
583 {
584 if (strpos($var_name, 'login_link_') === 0)
585 {
586 $key_name = substr($var_name, $string_start_length);
587 $login_link_data[$key_name] = $request->variable($var_name, '', false, \phpbb\request\request_interface::POST);
588 }
589 }
590
591 return $login_link_data;
592 }
593
594 /**
595 * Prepends they key names of an associative array with 'login_link_' for
596 * inclusion on the page as hidden fields.
597 *
598 * @param array $data The array to be modified
599 * @return array The modified array
600 */
601 protected function get_login_link_data_for_hidden_fields($data)
602 {
603 $new_data = array();
604
605 foreach ($data as $key => $value)
606 {
607 $new_data['login_link_' . $key] = $value;
608 }
609
610 return $new_data;
611 }
612 }
613