Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

ucp_register.php

Zuletzt modifiziert: 02.04.2025, 15:02 - Dateigröße: 22.40 KiB


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_yes') ? 1 : ($request->is_set('coppa_no') ? 0 : false);
043          $coppa            = $request->is_set('coppa') ? $request->variable('coppa', 0) : $coppa;
044          $agreed            = $request->variable('agreed', false);
045          $submit            = $request->is_set_post('submit');
046          $change_lang    = $request->variable('change_lang', '');
047          $user_lang        = $request->variable('lang', $user->lang_name);
048   
049          if ($agreed && !check_form_key('ucp_register'))
050          {
051              $agreed = false;
052          }
053   
054          if ($coppa !== false && !check_form_key('ucp_register'))
055          {
056              $coppa = false;
057          }
058   
059          /**
060          * Add UCP register data before they are assigned to the template or submitted
061          *
062          * To assign data to the template, use $template->assign_vars()
063          *
064          * @event core.ucp_register_requests_after
065          * @var    bool    coppa        Is set coppa
066          * @var    bool    agreed        Did user agree to coppa?
067          * @var    bool    submit        Is set post submit?
068          * @var    string    change_lang    Change language request
069          * @var    string    user_lang    User language request
070          * @since 3.1.11-RC1
071          */
072          $vars = array(
073              'coppa',
074              'agreed',
075              'submit',
076              'change_lang',
077              'user_lang',
078          );
079          extract($phpbb_dispatcher->trigger_event('core.ucp_register_requests_after', compact($vars)));
080   
081          add_form_key('ucp_register');
082   
083          if ($change_lang || $user_lang != $config['default_lang'])
084          {
085              $use_lang = ($change_lang) ? basename($change_lang) : basename($user_lang);
086   
087              if (!validate_language_iso_name($use_lang))
088              {
089                  if ($change_lang)
090                  {
091                      $submit = false;
092   
093                      // Setting back agreed to let the user view the agreement in his/her language
094                      $agreed = false;
095                  }
096   
097                  $user_lang = $use_lang;
098              }
099              else
100              {
101                  $change_lang = '';
102                  $user_lang = $user->lang_name;
103              }
104          }
105   
106          /* @var $cp \phpbb\profilefields\manager */
107          $cp = $phpbb_container->get('profilefields.manager');
108   
109          $error = $cp_data = $cp_error = array();
110          $s_hidden_fields = array();
111   
112          // Handle login_link data added to $_hidden_fields
113          $login_link_data = $this->get_login_link_data_array();
114   
115          if (!empty($login_link_data))
116          {
117              // Confirm that we have all necessary data
118              /* @var $provider_collection \phpbb\auth\provider_collection */
119              $provider_collection = $phpbb_container->get('auth.provider_collection');
120              $auth_provider = $provider_collection->get_provider($request->variable('auth_provider', ''));
121   
122              $result = $auth_provider->login_link_has_necessary_data($login_link_data);
123              if ($result !== null)
124              {
125                  $error[] = $user->lang[$result];
126              }
127   
128              $s_hidden_fields = array_merge($s_hidden_fields, $this->get_login_link_data_for_hidden_fields($login_link_data));
129          }
130   
131          if (!$agreed || ($coppa === false && $config['coppa_enable']) || ($coppa && !$config['coppa_enable']))
132          {
133              $add_coppa = ($coppa !== false) ? '&amp;coppa=' . $coppa : '';
134   
135              $s_hidden_fields = array_merge($s_hidden_fields, array(
136                  'change_lang'    => '',
137              ));
138   
139              // If we change the language, we want to pass on some more possible parameter.
140              if ($change_lang)
141              {
142                  // We do not include the password
143                  $s_hidden_fields = array_merge($s_hidden_fields, array(
144                      'username'            => $request->variable('username', '', true),
145                      'email'                => strtolower($request->variable('email', '')),
146                      'lang'                => $user->lang_name,
147                      'tz'                => $request->variable('tz', $config['board_timezone']),
148                  ));
149   
150              }
151   
152              // Checking amount of available languages
153              $sql = 'SELECT lang_iso, lang_local_name
154                  FROM ' . LANG_TABLE . '
155                  ORDER BY lang_english_name';
156              $result = $db->sql_query($sql);
157              $lang_row = (array) $db->sql_fetchrowset($result);
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_vars = array(
170                      'S_LANG_OPTIONS'    => (count($lang_row) > 1) ? language_select($user_lang, $lang_row) : '',
171                      'L_COPPA_NO'        => $user->lang('UCP_COPPA_BEFORE', $coppa_birthday),
172                      'L_COPPA_YES'        => $user->lang('UCP_COPPA_ON_AFTER', $coppa_birthday),
173   
174                      'S_SHOW_COPPA'        => true,
175                      'S_HIDDEN_FIELDS'    => build_hidden_fields($s_hidden_fields),
176                      'S_UCP_ACTION'        => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
177   
178                      'COOKIE_NAME'        => $config['cookie_name'],
179                      'COOKIE_PATH'        => $config['cookie_path'],
180                  );
181              }
182              else
183              {
184                  $template_vars = array(
185                      'S_LANG_OPTIONS'    => (count($lang_row) > 1) ? language_select($user_lang, $lang_row) : '',
186                      'L_TERMS_OF_USE'    => sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()),
187   
188                      'S_SHOW_COPPA'        => false,
189                      'S_REGISTRATION'    => true,
190                      'S_HIDDEN_FIELDS'    => build_hidden_fields($s_hidden_fields),
191                      'S_UCP_ACTION'        => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_coppa),
192   
193                      'COOKIE_NAME'        => $config['cookie_name'],
194                      'COOKIE_PATH'        => $config['cookie_path'],
195                  );
196              }
197   
198              $tpl_name = 'ucp_agreement';
199   
200              /**
201              * Allows to modify the agreements.
202              *
203              * @event core.ucp_register_agreement_modify_template_data
204              * @var    string    tpl_name            Template file
205              * @var    array    template_vars        Array with data about to be assigned to the template
206              * @var    array    s_hidden_fields        Array with hidden form elements
207              * @var    array    lang_row            Array with available languages, read only
208              * @since 3.2.2-RC1
209              */
210              $vars = array('tpl_name', 'template_vars', 's_hidden_fields', 'lang_row');
211              extract($phpbb_dispatcher->trigger_event('core.ucp_register_agreement_modify_template_data', compact($vars)));
212   
213              unset($lang_row);
214   
215              $template_vars = array_merge($template_vars, array(
216                  'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
217              ));
218   
219              $template->assign_vars($template_vars);
220   
221              /**
222              * Allows to modify the agreements.
223              *
224              * To assign data to the template, use $template->assign_vars()
225              *
226              * @event core.ucp_register_agreement
227              * @since 3.1.6-RC1
228              * @deprecated 3.2.2-RC1 Replaced by core.ucp_register_agreement_modify_template_data and to be removed in 3.3.0-RC1
229              */
230              $phpbb_dispatcher->dispatch('core.ucp_register_agreement');
231   
232              $this->tpl_name = $tpl_name;
233              return;
234          }
235   
236          // The CAPTCHA kicks in here. We can't help that the information gets lost on language change.
237          if ($config['enable_confirm'])
238          {
239              $captcha = $phpbb_container->get('captcha.factory')->get_instance($config['captcha_plugin']);
240              $captcha->init(CONFIRM_REG);
241          }
242   
243          $timezone = $config['board_timezone'];
244   
245          $data = array(
246              'username'            => $request->variable('username', '', true),
247              'new_password'        => $request->variable('new_password', '', true),
248              'password_confirm'    => $request->variable('password_confirm', '', true),
249              'email'                => strtolower($request->variable('email', '')),
250              'lang'                => basename($request->variable('lang', $user->lang_name)),
251              'tz'                => $request->variable('tz', $timezone),
252          );
253          /**
254          * Add UCP register data before they are assigned to the template or submitted
255          *
256          * To assign data to the template, use $template->assign_vars()
257          *
258          * @event core.ucp_register_data_before
259          * @var    bool    submit        Do we display the form only
260          *                            or did the user press submit
261          * @var    array    data        Array with current ucp registration data
262          * @since 3.1.4-RC1
263          */
264          $vars = array('submit', 'data');
265          extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_before', compact($vars)));
266   
267          // Check and initialize some variables if needed
268          if ($submit)
269          {
270              $error = validate_data($data, array(
271                  'username'            => array(
272                      array('string', false, $config['min_name_chars'], $config['max_name_chars']),
273                      array('username', '')),
274                  'new_password'        => array(
275                      array('string', false, $config['min_pass_chars'], 0),
276                      array('password')),
277                  'password_confirm'    => array('string', false, $config['min_pass_chars'], 0),
278                  'email'                => array(
279                      array('string', false, 6, 60),
280                      array('user_email')),
281                  'tz'                => array('timezone'),
282                  'lang'                => array('language_iso_name'),
283              ));
284   
285              if (!check_form_key('ucp_register'))
286              {
287                  $error[] = $user->lang['FORM_INVALID'];
288              }
289   
290              // Replace "error" strings with their real, localised form
291              $error = array_map(array($user, 'lang'), $error);
292   
293              if ($config['enable_confirm'])
294              {
295                  $vc_response = $captcha->validate($data);
296                  if ($vc_response !== false)
297                  {
298                      $error[] = $vc_response;
299                  }
300   
301                  if ($config['max_reg_attempts'] && $captcha->get_attempt_count() > $config['max_reg_attempts'])
302                  {
303                      trigger_error('TOO_MANY_REGISTERS');
304                  }
305              }
306   
307              // DNSBL check
308              if ($config['check_dnsbl'])
309              {
310                  if (($dnsbl = $user->check_dnsbl('register')) !== false)
311                  {
312                      $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
313                  }
314              }
315   
316              // validate custom profile fields
317              $cp->submit_cp_field('register', $user->get_iso_lang_id(), $cp_data, $error);
318   
319              if (!count($error))
320              {
321                  if ($data['new_password'] != $data['password_confirm'])
322                  {
323                      $error[] = $user->lang['NEW_PASSWORD_ERROR'];
324                  }
325              }
326              /**
327              * Check UCP registration data after they are submitted
328              *
329              * @event core.ucp_register_data_after
330              * @var    bool    submit        Do we display the form only
331              *                            or did the user press submit
332              * @var    array     data        Array with current ucp registration data
333              * @var    array    cp_data        Array with custom profile fields data
334              * @var    array     error        Array with list of errors
335              * @since 3.1.4-RC1
336              */
337              $vars = array('submit', 'data', 'cp_data', 'error');
338              extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_after', compact($vars)));
339   
340              if (!count($error))
341              {
342                  $server_url = generate_board_url();
343   
344                  // Which group by default?
345                  $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
346   
347                  $sql = 'SELECT group_id
348                      FROM ' . GROUPS_TABLE . "
349                      WHERE group_name = '" . $db->sql_escape($group_name) . "'
350                          AND group_type = " . GROUP_SPECIAL;
351                  $result = $db->sql_query($sql);
352                  $row = $db->sql_fetchrow($result);
353                  $db->sql_freeresult($result);
354   
355                  if (!$row)
356                  {
357                      trigger_error('NO_GROUP');
358                  }
359   
360                  $group_id = $row['group_id'];
361   
362                  if (($coppa ||
363                      $config['require_activation'] == USER_ACTIVATION_SELF ||
364                      $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable'])
365                  {
366                      $user_actkey = strtolower(gen_rand_string(32));
367                      $user_type = USER_INACTIVE;
368                      $user_inactive_reason = INACTIVE_REGISTER;
369                      $user_inactive_time = time();
370                  }
371                  else
372                  {
373                      $user_type = USER_NORMAL;
374                      $user_actkey = '';
375                      $user_inactive_reason = 0;
376                      $user_inactive_time = 0;
377                  }
378   
379                  // Instantiate passwords manager
380                  /* @var $passwords_manager \phpbb\passwords\manager */
381                  $passwords_manager = $phpbb_container->get('passwords.manager');
382   
383                  $user_row = array(
384                      'username'                    => $data['username'],
385                      'user_password'                => $passwords_manager->hash($data['new_password']),
386                      'user_email'                => $data['email'],
387                      'group_id'                    => (int) $group_id,
388                      'user_timezone'                => $data['tz'],
389                      'user_lang'                    => $data['lang'],
390                      'user_type'                    => $user_type,
391                      'user_actkey'                => $user_actkey,
392                      'user_actkey_expiration'    => $user::get_token_expiration(),
393                      'user_ip'                    => $user->ip,
394                      'user_regdate'                => time(),
395                      'user_inactive_reason'        => $user_inactive_reason,
396                      'user_inactive_time'        => $user_inactive_time,
397                  );
398   
399                  if ($config['new_member_post_limit'])
400                  {
401                      $user_row['user_new'] = 1;
402                  }
403                  /**
404                  * Add into $user_row before user_add
405                  *
406                  * user_add allows adding more data into the users table
407                  *
408                  * @event core.ucp_register_user_row_after
409                  * @var    bool    submit        Do we display the form only
410                  *                            or did the user press submit
411                  * @var    array    data        Array with current ucp registration data
412                  * @var    array    cp_data        Array with custom profile fields data
413                  * @var    array    user_row    Array with user data that will be inserted
414                  * @since 3.1.4-RC1
415                  * @changed 3.2.10-RC1 Added data array
416                  */
417                  $vars = array('submit', 'data', 'cp_data', 'user_row');
418                  extract($phpbb_dispatcher->trigger_event('core.ucp_register_user_row_after', compact($vars)));
419   
420                  // Register user...
421                  $user_id = user_add($user_row, $cp_data);
422   
423                  // This should not happen, because the required variables are listed above...
424                  if ((bool) $user_id === false)
425                  {
426                      trigger_error('NO_USER', E_USER_ERROR);
427                  }
428   
429                  // Okay, captcha, your job is done.
430                  if ($config['enable_confirm'] && isset($captcha))
431                  {
432                      $captcha->reset();
433                  }
434   
435                  if ($coppa && $config['email_enable'])
436                  {
437                      $message = $user->lang['ACCOUNT_COPPA'];
438                      $email_template = 'coppa_welcome_inactive';
439                  }
440                  else if ($config['require_activation'] == USER_ACTIVATION_SELF && $config['email_enable'])
441                  {
442                      $message = $user->lang['ACCOUNT_INACTIVE'];
443                      $email_template = 'user_welcome_inactive';
444                  }
445                  else if ($config['require_activation'] == USER_ACTIVATION_ADMIN && $config['email_enable'])
446                  {
447                      $message = $user->lang['ACCOUNT_INACTIVE_ADMIN'];
448                      $email_template = 'admin_welcome_inactive';
449                  }
450                  else
451                  {
452                      $message = $user->lang['ACCOUNT_ADDED'];
453                      $email_template = 'user_welcome';
454   
455                      // Autologin after registration
456                      $user->session_create($user_id, 0, false, 1);
457                  }
458   
459                  if ($config['email_enable'])
460                  {
461                      include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
462   
463                      $messenger = new messenger(false);
464   
465                      $messenger->template($email_template, $data['lang']);
466   
467                      $messenger->to($data['email'], $data['username']);
468   
469                      $messenger->anti_abuse_headers($config, $user);
470   
471                      $messenger->assign_vars(array(
472                          'WELCOME_MSG'    => html_entity_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename']), ENT_COMPAT),
473                          'USERNAME'        => html_entity_decode($data['username'], ENT_COMPAT),
474                          'PASSWORD'        => html_entity_decode($data['new_password'], ENT_COMPAT),
475                          'U_ACTIVATE'    => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
476                      );
477   
478                      if ($coppa)
479                      {
480                          $messenger->assign_vars(array(
481                              'FAX_INFO'        => $config['coppa_fax'],
482                              'MAIL_INFO'        => $config['coppa_mail'],
483                              'EMAIL_ADDRESS'    => $data['email'])
484                          );
485                      }
486   
487                      /**
488                      * Modify messenger data before welcome mail is sent
489                      *
490                      * @event core.ucp_register_welcome_email_before
491                      * @var    array        user_row    Array with user registration data
492                      * @var    array        cp_data        Array with custom profile fields data
493                      * @var    array        data        Array with current ucp registration data
494                      * @var    string        message        Message to be displayed to the user after registration
495                      * @var    string        server_url    Server URL
496                      * @var    int            user_id        New user ID
497                      * @var    string        user_actkey    User activation key
498                      * @var    messenger    messenger    phpBB Messenger
499                      * @since 3.2.4-RC1
500                      */
501                      $vars = array(
502                          'user_row',
503                          'cp_data',
504                          'data',
505                          'message',
506                          'server_url',
507                          'user_id',
508                          'user_actkey',
509                          'messenger',
510                      );
511                      extract($phpbb_dispatcher->trigger_event('core.ucp_register_welcome_email_before', compact($vars)));
512   
513                      $messenger->send(NOTIFY_EMAIL);
514                  }
515   
516                  if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
517                  {
518                      /* @var $phpbb_notifications \phpbb\notification\manager */
519                      $phpbb_notifications = $phpbb_container->get('notification_manager');
520                      $phpbb_notifications->add_notifications('notification.type.admin_activate_user', array(
521                          'user_id'        => $user_id,
522                          'user_actkey'    => $user_row['user_actkey'],
523                          'user_regdate'    => $user_row['user_regdate'],
524                      ));
525                  }
526   
527                  // Perform account linking if necessary
528                  if (!empty($login_link_data))
529                  {
530                      $login_link_data['user_id'] = $user_id;
531   
532                      $result = $auth_provider->link_account($login_link_data);
533   
534                      if ($result)
535                      {
536                          $message = $message . '<br /><br />' . $user->lang[$result];
537                      }
538                  }
539   
540                  /**
541                  * Perform additional actions after user registration
542                  *
543                  * @event core.ucp_register_register_after
544                  * @var    array        user_row    Array with user registration data
545                  * @var    array        cp_data        Array with custom profile fields data
546                  * @var    array        data        Array with current ucp registration data
547                  * @var    string        message        Message to be displayed to the user after registration
548                  * @var    string        server_url    Server URL
549                  * @var    int            user_id        New user ID
550                  * @var    string        user_actkey    User activation key
551                  * @since 3.2.4-RC1
552                  */
553                  $vars = array(
554                      'user_row',
555                      'cp_data',
556                      'data',
557                      'message',
558                      'server_url',
559                      'user_id',
560                      'user_actkey',
561                  );
562                  extract($phpbb_dispatcher->trigger_event('core.ucp_register_register_after', compact($vars)));
563   
564                  $message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
565                  trigger_error($message);
566              }
567          }
568   
569          $s_hidden_fields = array_merge($s_hidden_fields, array(
570              'agreed'        => 'true',
571              'change_lang'    => 0,
572          ));
573   
574          if ($config['coppa_enable'])
575          {
576              $s_hidden_fields['coppa'] = $coppa;
577          }
578   
579          if ($config['enable_confirm'])
580          {
581              $s_hidden_fields = array_merge($s_hidden_fields, $captcha->get_hidden_fields());
582          }
583   
584          // Visual Confirmation - Show images
585          if ($config['enable_confirm'])
586          {
587              $template->assign_vars(array(
588                  'CAPTCHA_TEMPLATE'        => $captcha->get_template(),
589              ));
590          }
591   
592          //
593          $l_reg_cond = '';
594          switch ($config['require_activation'])
595          {
596              case USER_ACTIVATION_SELF:
597                  $l_reg_cond = $user->lang['UCP_EMAIL_ACTIVATE'];
598              break;
599   
600              case USER_ACTIVATION_ADMIN:
601                  $l_reg_cond = $user->lang['UCP_ADMIN_ACTIVATE'];
602              break;
603          }
604   
605          /* @var $provider_collection \phpbb\auth\provider_collection */
606          $provider_collection = $phpbb_container->get('auth.provider_collection');
607          $auth_provider = $provider_collection->get_provider();
608   
609          $auth_provider_data = $auth_provider->get_login_data();
610          if ($auth_provider_data)
611          {
612              if (isset($auth_provider_data['VARS']))
613              {
614                  $template->assign_vars($auth_provider_data['VARS']);
615              }
616   
617              if (isset($auth_provider_data['BLOCK_VAR_NAME']))
618              {
619                  foreach ($auth_provider_data['BLOCK_VARS'] as $block_vars)
620                  {
621                      $template->assign_block_vars($auth_provider_data['BLOCK_VAR_NAME'], $block_vars);
622                  }
623              }
624   
625              $template->assign_vars(array(
626                  'PROVIDER_TEMPLATE_FILE' => $auth_provider_data['TEMPLATE_FILE'],
627              ));
628          }
629   
630          // Assign template vars for timezone select
631          phpbb_timezone_select($template, $user, $data['tz'], true);
632   
633          // Checking amount of available languages
634          $sql = 'SELECT lang_iso, lang_local_name
635              FROM ' . LANG_TABLE . '
636              ORDER BY lang_english_name';
637          $result = $db->sql_query($sql);
638          $lang_row = (array) $db->sql_fetchrowset($result);
639          $db->sql_freeresult($result);
640   
641          $template_vars = array(
642              'USERNAME'            => $data['username'],
643              'PASSWORD'            => $data['new_password'],
644              'PASSWORD_CONFIRM'    => $data['password_confirm'],
645              'EMAIL'                => $data['email'],
646   
647              'L_REG_COND'                => $l_reg_cond,
648              'L_USERNAME_EXPLAIN'        => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS_XY', (int) $config['min_name_chars']), $user->lang('CHARACTERS_XY', (int) $config['max_name_chars'])),
649              'L_PASSWORD_EXPLAIN'        => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS_XY', (int) $config['min_pass_chars'])),
650   
651              'S_LANG_OPTIONS'    => (count($lang_row) > 1) ? language_select($data['lang'], $lang_row) : '',
652              'S_TZ_PRESELECT'    => !$submit,
653              'S_CONFIRM_REFRESH'    => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false,
654              'S_REGISTRATION'    => true,
655              'S_COPPA'            => $coppa,
656              'S_UCP_ACTION'        => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
657   
658              'COOKIE_NAME'        => $config['cookie_name'],
659              'COOKIE_PATH'        => $config['cookie_path'],
660          );
661   
662          $tpl_name = 'ucp_register';
663   
664          /**
665          * Modify template data on the registration page
666          *
667          * @event core.ucp_register_modify_template_data
668          * @var    array    template_vars        Array with template data
669          * @var    array    data                Array with user data, read only
670          * @var    array    error                Array with errors
671          * @var    array    s_hidden_fields        Array with hidden field elements
672          * @var    string    tpl_name            Template name
673          * @since 3.2.2-RC1
674          */
675          $vars = array(
676              'template_vars',
677              'data',
678              'error',
679              's_hidden_fields',
680              'tpl_name',
681          );
682          extract($phpbb_dispatcher->trigger_event('core.ucp_register_modify_template_data', compact($vars)));
683   
684          $template_vars = array_merge($template_vars, array(
685              'ERROR'                => (count($error)) ? implode('<br />', $error) : '',
686              'S_HIDDEN_FIELDS'    => build_hidden_fields($s_hidden_fields),
687          ));
688   
689          $template->assign_vars($template_vars);
690   
691          //
692          $user->profile_fields = array();
693   
694          // Generate profile fields -> Template Block Variable profile_fields
695          $cp->generate_profile_fields('register', $user->get_iso_lang_id());
696   
697          //
698          $this->tpl_name = $tpl_name;
699      }
700   
701      /**
702      * Creates the login_link data array
703      *
704      * @return    array    Returns an array of all POST paramaters whose names
705      *                    begin with 'login_link_'
706      */
707      protected function get_login_link_data_array()
708      {
709          global $request;
710   
711          $var_names = $request->variable_names(\phpbb\request\request_interface::POST);
712          $login_link_data = array();
713          $string_start_length = strlen('login_link_');
714   
715          foreach ($var_names as $var_name)
716          {
717              if (strpos($var_name, 'login_link_') === 0)
718              {
719                  $key_name = substr($var_name, $string_start_length);
720                  $login_link_data[$key_name] = $request->variable($var_name, '', false, \phpbb\request\request_interface::POST);
721              }
722          }
723   
724          return $login_link_data;
725      }
726   
727      /**
728      * Prepends they key names of an associative array with 'login_link_' for
729      * inclusion on the page as hidden fields.
730      *
731      * @param    array    $data    The array to be modified
732      * @return    array    The modified array
733      */
734      protected function get_login_link_data_for_hidden_fields($data)
735      {
736          $new_data = array();
737   
738          foreach ($data as $key => $value)
739          {
740              $new_data['login_link_' . $key] = $value;
741          }
742   
743          return $new_data;
744      }
745  }
746