Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 369
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ucp_register
0.00% covered (danger)
0.00%
0 / 367
0.00% covered (danger)
0.00%
0 / 3
5852
0.00% covered (danger)
0.00%
0 / 1
 main
0.00% covered (danger)
0.00%
0 / 354
0.00% covered (danger)
0.00%
0 / 1
5112
 get_login_link_data_array
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
 get_login_link_data_for_hidden_fields
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14/**
15* @ignore
16*/
17if (!defined('IN_PHPBB'))
18{
19    exit;
20}
21
22/**
23* ucp_register
24* Board registration
25*/
26class ucp_register
27{
28    var $u_action;
29
30    function main($id, $mode)
31    {
32        global $config, $db, $user, $template, $phpbb_root_path, $phpEx;
33        global $request, $phpbb_container, $phpbb_dispatcher;
34
35        /** @var \phpbb\controller\helper $controller_helper */
36        $controller_helper = $phpbb_container->get('controller.helper');
37
38        //
39        if ($config['require_activation'] == USER_ACTIVATION_DISABLE ||
40            (in_array($config['require_activation'], array(USER_ACTIVATION_SELF, USER_ACTIVATION_ADMIN)) && !$config['email_enable']))
41        {
42            trigger_error('UCP_REGISTER_DISABLE');
43        }
44
45        $coppa            = $request->is_set('coppa_yes') ? 1 : ($request->is_set('coppa_no') ? 0 : false);
46        $coppa            = $request->is_set('coppa') ? $request->variable('coppa', 0) : $coppa;
47        $agreed            = $request->variable('agreed', false);
48        $submit            = $request->is_set_post('submit');
49        $change_lang    = $request->variable('change_lang', '');
50        $user_lang        = $request->variable('lang', $user->lang_name);
51
52        if ($agreed && !check_form_key('ucp_register'))
53        {
54            $agreed = false;
55        }
56
57        if ($coppa !== false && !check_form_key('ucp_register'))
58        {
59            $coppa = false;
60        }
61
62        /**
63        * Add UCP register data before they are assigned to the template or submitted
64        *
65        * To assign data to the template, use $template->assign_vars()
66        *
67        * @event core.ucp_register_requests_after
68        * @var    bool    coppa        Is set coppa
69        * @var    bool    agreed        Did user agree to coppa?
70        * @var    bool    submit        Is set post submit?
71        * @var    string    change_lang    Change language request
72        * @var    string    user_lang    User language request
73        * @since 3.1.11-RC1
74        */
75        $vars = array(
76            'coppa',
77            'agreed',
78            'submit',
79            'change_lang',
80            'user_lang',
81        );
82        extract($phpbb_dispatcher->trigger_event('core.ucp_register_requests_after', compact($vars)));
83
84        add_form_key('ucp_register');
85
86        if ($change_lang || $user_lang != $config['default_lang'])
87        {
88            $use_lang = ($change_lang) ? basename($change_lang) : basename($user_lang);
89
90            if (!validate_language_iso_name($use_lang))
91            {
92                if ($change_lang)
93                {
94                    $submit = false;
95
96                    // Setting back agreed to let the user view the agreement in his/her language
97                    $agreed = false;
98                }
99
100                $user_lang = $use_lang;
101            }
102            else
103            {
104                $change_lang = '';
105                $user_lang = $user->lang_name;
106            }
107        }
108
109        /* @var $cp \phpbb\profilefields\manager */
110        $cp = $phpbb_container->get('profilefields.manager');
111
112        $error = $cp_data = array();
113        $s_hidden_fields = array();
114
115        // Handle login_link data added to $_hidden_fields
116        $login_link_data = $this->get_login_link_data_array();
117
118        if (!empty($login_link_data))
119        {
120            // Confirm that we have all necessary data
121            /* @var $provider_collection \phpbb\auth\provider_collection */
122            $provider_collection = $phpbb_container->get('auth.provider_collection');
123            $auth_provider = $provider_collection->get_provider($request->variable('auth_provider', ''));
124
125            $result = $auth_provider->login_link_has_necessary_data($login_link_data);
126            if ($result !== null)
127            {
128                $error[] = $user->lang[$result];
129            }
130
131            $s_hidden_fields = array_merge($s_hidden_fields, $this->get_login_link_data_for_hidden_fields($login_link_data));
132        }
133
134        if (!$agreed || ($coppa === false && $config['coppa_enable']) || ($coppa && !$config['coppa_enable']))
135        {
136            $add_coppa = ($coppa !== false) ? '&amp;coppa=' . $coppa : '';
137
138            $s_hidden_fields = array_merge($s_hidden_fields, array(
139                'change_lang'    => '',
140            ));
141
142            // If we change the language, we want to pass on some more possible parameter.
143            if ($change_lang)
144            {
145                // We do not include the password
146                $s_hidden_fields = array_merge($s_hidden_fields, array(
147                    'username'            => $request->variable('username', '', true),
148                    'email'                => strtolower($request->variable('email', '')),
149                    'lang'                => $user->lang_name,
150                    'tz'                => $request->variable('tz', $config['board_timezone']),
151                ));
152
153            }
154
155            // Checking amount of available languages
156            $sql = 'SELECT lang_iso, lang_local_name
157                FROM ' . LANG_TABLE . '
158                ORDER BY lang_english_name';
159            $result = $db->sql_query($sql);
160            $lang_row = (array) $db->sql_fetchrowset($result);
161            $db->sql_freeresult($result);
162
163            $lang_options = phpbb_language_select($db, $user_lang, $lang_row);
164
165            if ($coppa === false && $config['coppa_enable'])
166            {
167                $now = getdate();
168                $coppa_birthday = $user->create_datetime()
169                    ->setDate($now['year'] - 13, $now['mon'], $now['mday'] - 1)
170                    ->setTime(0, 0, 0)
171                    ->format($user->lang['DATE_FORMAT'], true);
172                unset($now);
173
174                $template_vars = array(
175                    'LANG_OPTIONS'        => [
176                        'id'        => 'lang',
177                        'name'        => 'lang',
178                        'options'    => $lang_options,
179                    ],
180                    'L_COPPA_NO'        => $user->lang('UCP_COPPA_BEFORE', $coppa_birthday),
181                    'L_COPPA_YES'        => $user->lang('UCP_COPPA_ON_AFTER', $coppa_birthday),
182
183                    'S_SHOW_COPPA'        => true,
184                    'S_HIDDEN_FIELDS'    => build_hidden_fields($s_hidden_fields),
185                    'S_UCP_ACTION'        => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
186
187                    'COOKIE_NAME'        => $config['cookie_name'],
188                    'COOKIE_PATH'        => $config['cookie_path'],
189                );
190            }
191            else
192            {
193                $template_vars = array(
194                    'LANG_OPTIONS'        => [
195                        'id'        => 'lang',
196                        'name'        => 'lang',
197                        'options'    => $lang_options,
198                    ],
199                    'L_TERMS_OF_USE'    => sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()),
200
201                    'S_SHOW_COPPA'        => false,
202                    'S_REGISTRATION'    => true,
203                    'S_HIDDEN_FIELDS'    => build_hidden_fields($s_hidden_fields),
204                    'S_UCP_ACTION'        => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_coppa),
205
206                    'COOKIE_NAME'        => $config['cookie_name'],
207                    'COOKIE_PATH'        => $config['cookie_path'],
208                );
209            }
210
211            $tpl_name = 'ucp_agreement';
212
213            /**
214            * Allows to modify the agreements.
215            *
216            * @event core.ucp_register_agreement_modify_template_data
217            * @var    string    tpl_name            Template file
218            * @var    array    template_vars        Array with data about to be assigned to the template
219            * @var    array    s_hidden_fields        Array with hidden form elements
220            * @var    array    lang_row            Array with available languages, read only
221            * @since 3.2.2-RC1
222            */
223            $vars = array('tpl_name', 'template_vars', 's_hidden_fields', 'lang_row');
224            extract($phpbb_dispatcher->trigger_event('core.ucp_register_agreement_modify_template_data', compact($vars)));
225
226            unset($lang_row);
227
228            $template_vars = array_merge($template_vars, array(
229                'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
230            ));
231
232            $template->assign_vars($template_vars);
233
234            $this->tpl_name = $tpl_name;
235            return;
236        }
237
238        // The CAPTCHA kicks in here. We can't help that the information gets lost on language change.
239        if ($config['enable_confirm'])
240        {
241            /** @var \phpbb\captcha\factory $captcha_factory */
242            $captcha_factory = $phpbb_container->get('captcha.factory');
243            $captcha = $captcha_factory->get_instance($config['captcha_plugin']);
244            $captcha->init(\phpbb\captcha\plugins\confirm_type::REGISTRATION);
245        }
246
247        $timezone = $config['board_timezone'];
248
249        $data = array(
250            'username'            => $request->variable('username', '', true),
251            'new_password'        => $request->variable('new_password', '', true),
252            'password_confirm'    => $request->variable('password_confirm', '', true),
253            'email'                => strtolower($request->variable('email', '')),
254            'lang'                => basename($request->variable('lang', $user->lang_name)),
255            'tz'                => $request->variable('tz', $timezone),
256        );
257        /**
258        * Add UCP register data before they are assigned to the template or submitted
259        *
260        * To assign data to the template, use $template->assign_vars()
261        *
262        * @event core.ucp_register_data_before
263        * @var    bool    submit        Do we display the form only
264        *                            or did the user press submit
265        * @var    array    data        Array with current ucp registration data
266        * @since 3.1.4-RC1
267        */
268        $vars = array('submit', 'data');
269        extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_before', compact($vars)));
270
271        // Check and initialize some variables if needed
272        if ($submit)
273        {
274            $error = validate_data($data, array(
275                'username'            => array(
276                    array('string', false, $config['min_name_chars'], $config['max_name_chars']),
277                    array('username', '')),
278                'new_password'        => array(
279                    array('string', false, $config['min_pass_chars'], 0),
280                    array('password')),
281                'password_confirm'    => array('string', false, $config['min_pass_chars'], 0),
282                'email'                => array(
283                    array('string', false, 6, 60),
284                    array('user_email')),
285                'tz'                => array('timezone'),
286                'lang'                => array('language_iso_name'),
287            ));
288
289            if (!check_form_key('ucp_register'))
290            {
291                $error[] = $user->lang['FORM_INVALID'];
292            }
293
294            // Replace "error" strings with their real, localised form
295            $error = array_map(array($user, 'lang'), $error);
296
297            if ($config['enable_confirm'])
298            {
299                if ($captcha->validate() !== true)
300                {
301                    $error[] = $captcha->get_error();
302                }
303
304                if ($config['max_reg_attempts'] && $captcha->get_attempt_count() > $config['max_reg_attempts'])
305                {
306                    trigger_error('TOO_MANY_REGISTERS');
307                }
308            }
309
310            // DNSBL check
311            if ($config['check_dnsbl'])
312            {
313                if (($dnsbl = $user->check_dnsbl('register')) !== false)
314                {
315                    $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
316                }
317            }
318
319            // validate custom profile fields
320            $cp->submit_cp_field('register', $user->get_iso_lang_id(), $cp_data, $error);
321
322            if (!count($error))
323            {
324                if ($data['new_password'] != $data['password_confirm'])
325                {
326                    $error[] = $user->lang['NEW_PASSWORD_ERROR'];
327                }
328            }
329            /**
330            * Check UCP registration data after they are submitted
331            *
332            * @event core.ucp_register_data_after
333            * @var    bool    submit        Do we display the form only
334            *                            or did the user press submit
335            * @var    array     data        Array with current ucp registration data
336            * @var    array    cp_data        Array with custom profile fields data
337            * @var    array     error        Array with list of errors
338            * @since 3.1.4-RC1
339            */
340            $vars = array('submit', 'data', 'cp_data', 'error');
341            extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_after', compact($vars)));
342
343            if (!count($error))
344            {
345                $server_url = generate_board_url();
346
347                // Which group by default?
348                $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
349
350                $sql = 'SELECT group_id
351                    FROM ' . GROUPS_TABLE . "
352                    WHERE group_name = '" . $db->sql_escape($group_name) . "'
353                        AND group_type = " . GROUP_SPECIAL;
354                $result = $db->sql_query($sql);
355                $row = $db->sql_fetchrow($result);
356                $db->sql_freeresult($result);
357
358                if (!$row)
359                {
360                    trigger_error('NO_GROUP');
361                }
362
363                $group_id = $row['group_id'];
364
365                if (($coppa ||
366                    $config['require_activation'] == USER_ACTIVATION_SELF ||
367                    $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable'])
368                {
369                    $user_actkey = strtolower(gen_rand_string(32));
370                    $user_type = USER_INACTIVE;
371                    $user_inactive_reason = INACTIVE_REGISTER;
372                    $user_inactive_time = time();
373                }
374                else
375                {
376                    $user_type = USER_NORMAL;
377                    $user_actkey = '';
378                    $user_inactive_reason = 0;
379                    $user_inactive_time = 0;
380                }
381
382                // Instantiate passwords manager
383                /* @var $passwords_manager \phpbb\passwords\manager */
384                $passwords_manager = $phpbb_container->get('passwords.manager');
385
386                $user_row = array(
387                    'username'                    => $data['username'],
388                    'user_password'                => $passwords_manager->hash($data['new_password']),
389                    'user_email'                => $data['email'],
390                    'group_id'                    => (int) $group_id,
391                    'user_timezone'                => $data['tz'],
392                    'user_lang'                    => $data['lang'],
393                    'user_type'                    => $user_type,
394                    'user_actkey'                => $user_actkey,
395                    'user_actkey_expiration'    => $user::get_token_expiration(),
396                    'user_ip'                    => $user->ip,
397                    'user_regdate'                => time(),
398                    'user_inactive_reason'        => $user_inactive_reason,
399                    'user_inactive_time'        => $user_inactive_time,
400                );
401
402                if ($config['new_member_post_limit'])
403                {
404                    $user_row['user_new'] = 1;
405                }
406                /**
407                * Add into $user_row before user_add
408                *
409                * user_add allows adding more data into the users table
410                *
411                * @event core.ucp_register_user_row_after
412                * @var    bool    submit        Do we display the form only
413                *                            or did the user press submit
414                * @var    array    data        Array with current ucp registration data
415                * @var    array    cp_data        Array with custom profile fields data
416                * @var    array    user_row    Array with user data that will be inserted
417                * @since 3.1.4-RC1
418                * @changed 3.2.10-RC1 Added data array
419                */
420                $vars = array('submit', 'data', 'cp_data', 'user_row');
421                extract($phpbb_dispatcher->trigger_event('core.ucp_register_user_row_after', compact($vars)));
422
423                // Register user...
424                $user_id = user_add($user_row, $cp_data);
425
426                // This should not happen, because the required variables are listed above...
427                if ((bool) $user_id === false)
428                {
429                    trigger_error('NO_USER', E_USER_ERROR);
430                }
431
432                // Okay, captcha, your job is done.
433                if ($config['enable_confirm'])
434                {
435                    $captcha->reset();
436                }
437
438                if ($coppa && $config['email_enable'])
439                {
440                    $message = $user->lang['ACCOUNT_COPPA'];
441                    $email_template = 'coppa_welcome_inactive';
442                }
443                else if ($config['require_activation'] == USER_ACTIVATION_SELF && $config['email_enable'])
444                {
445                    $message = $user->lang['ACCOUNT_INACTIVE'];
446                    $email_template = 'user_welcome_inactive';
447                }
448                else if ($config['require_activation'] == USER_ACTIVATION_ADMIN && $config['email_enable'])
449                {
450                    $message = $user->lang['ACCOUNT_INACTIVE_ADMIN'];
451                    $email_template = 'admin_welcome_inactive';
452                }
453                else
454                {
455                    $message = $user->lang['ACCOUNT_ADDED'];
456                    $email_template = 'user_welcome';
457
458                    // Autologin after registration
459                    $user->session_create($user_id, 0, false, 1);
460                }
461
462                if ($config['email_enable'])
463                {
464                    /** var \phpbb\messenger\method\email */
465                    $email_method = $phpbb_container->get('messenger.method.email');
466                    $email_method->set_use_queue(false);
467                    $email_method->template($email_template, $data['lang']);
468                    $email_method->to($data['email'], $data['username']);
469                    $email_method->anti_abuse_headers($config, $user);
470                    $email_method->assign_vars([
471                        'WELCOME_MSG'    => html_entity_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename']), ENT_COMPAT),
472                        'USERNAME'        => html_entity_decode($data['username'], ENT_COMPAT),
473                        'PASSWORD'        => html_entity_decode($data['new_password'], ENT_COMPAT),
474                        'U_ACTIVATE'    => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey",
475                    ]);
476
477                    if ($coppa)
478                    {
479                        $email_method->assign_vars([
480                            'FAX_INFO'        => $config['coppa_fax'],
481                            'MAIL_INFO'        => $config['coppa_mail'],
482                            'EMAIL_ADDRESS'    => $data['email'],
483                        ]);
484                    }
485
486                    /**
487                    * Modify messenger data before welcome mail is sent
488                    *
489                    * @event core.ucp_register_welcome_email_before
490                    * @var    array        user_row    Array with user registration data
491                    * @var    array        cp_data        Array with custom profile fields data
492                    * @var    array        data        Array with current ucp registration data
493                    * @var    string        message        Message to be displayed to the user after registration
494                    * @var    string        server_url    Server URL
495                    * @var    int            user_id        New user ID
496                    * @var    string        user_actkey    User activation key
497                    * @var    \phpbb\messenger\method\email    email_method    phpBB email notification method
498                    * @since 3.2.4-RC1
499                    * @changed 4.0.0-a1 Added vars: email_method. Removed vars: messenger.
500                    */
501                    $vars = array(
502                        'user_row',
503                        'cp_data',
504                        'data',
505                        'message',
506                        'server_url',
507                        'user_id',
508                        'user_actkey',
509                        'email_method',
510                    );
511                    extract($phpbb_dispatcher->trigger_event('core.ucp_register_welcome_email_before', compact($vars)));
512
513                    $email_method->send();
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="' . $controller_helper->route('phpbb_index_controller') . '">', '</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        $timezone_select = phpbb_timezone_select($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        $lang_options = phpbb_language_select($db, $data['lang'], $lang_row);
642
643        $template_vars = array(
644            'USERNAME'            => $data['username'],
645            'PASSWORD'            => $data['new_password'],
646            'PASSWORD_CONFIRM'    => $data['password_confirm'],
647            'EMAIL'                => $data['email'],
648
649            'L_REG_COND'                => $l_reg_cond,
650            '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'])),
651            'L_PASSWORD_EXPLAIN'        => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS_XY', (int) $config['min_pass_chars'])),
652
653            'LANG_OPTIONS'        => [
654                'id'        => 'lang',
655                'name'        => 'lang',
656                'options'    => $lang_options,
657            ],
658            'TIMEZONE_OPTIONS'    => [
659                'tag'        => 'select',
660                'name'        => 'tz',
661                'options'    => $timezone_select,
662            ],
663            'S_TZ_PRESELECT'    => !$submit,
664            'S_CONFIRM_REFRESH'    => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false,
665            'S_REGISTRATION'    => true,
666            'S_COPPA'            => $coppa,
667            'S_UCP_ACTION'        => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
668
669            'COOKIE_NAME'        => $config['cookie_name'],
670            'COOKIE_PATH'        => $config['cookie_path'],
671        );
672
673        $tpl_name = 'ucp_register';
674
675        /**
676        * Modify template data on the registration page
677        *
678        * @event core.ucp_register_modify_template_data
679        * @var    array    template_vars        Array with template data
680        * @var    array    data                Array with user data, read only
681        * @var    array    error                Array with errors
682        * @var    array    s_hidden_fields        Array with hidden field elements
683        * @var    string    tpl_name            Template name
684        * @since 3.2.2-RC1
685        */
686        $vars = array(
687            'template_vars',
688            'data',
689            'error',
690            's_hidden_fields',
691            'tpl_name',
692        );
693        extract($phpbb_dispatcher->trigger_event('core.ucp_register_modify_template_data', compact($vars)));
694
695        $template_vars = array_merge($template_vars, array(
696            'ERROR'                => (count($error)) ? implode('<br />', $error) : '',
697            'S_HIDDEN_FIELDS'    => build_hidden_fields($s_hidden_fields),
698        ));
699
700        $template->assign_vars($template_vars);
701
702        //
703        $user->profile_fields = array();
704
705        // Generate profile fields -> Template Block Variable profile_fields
706        $cp->generate_profile_fields('register', $user->get_iso_lang_id());
707
708        //
709        $this->tpl_name = $tpl_name;
710    }
711
712    /**
713    * Creates the login_link data array
714    *
715    * @return    array    Returns an array of all POST paramaters whose names
716    *                    begin with 'login_link_'
717    */
718    protected function get_login_link_data_array()
719    {
720        global $request;
721
722        $var_names = $request->variable_names(\phpbb\request\request_interface::POST);
723        $login_link_data = array();
724        $string_start_length = strlen('login_link_');
725
726        foreach ($var_names as $var_name)
727        {
728            if (strpos($var_name, 'login_link_') === 0)
729            {
730                $key_name = substr($var_name, $string_start_length);
731                $login_link_data[$key_name] = $request->variable($var_name, '', false, \phpbb\request\request_interface::POST);
732            }
733        }
734
735        return $login_link_data;
736    }
737
738    /**
739    * Prepends they key names of an associative array with 'login_link_' for
740    * inclusion on the page as hidden fields.
741    *
742    * @param    array    $data    The array to be modified
743    * @return    array    The modified array
744    */
745    protected function get_login_link_data_for_hidden_fields($data)
746    {
747        $new_data = array();
748
749        foreach ($data as $key => $value)
750        {
751            $new_data['login_link_' . $key] = $value;
752        }
753
754        return $new_data;
755    }
756}