PageRenderTime 49ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/phpBB/includes/ucp/ucp_register.php

http://github.com/phpbb/phpbb3
PHP | 740 lines | 466 code | 107 blank | 167 comment | 71 complexity | d83f1b4fa56a910ed5ac5c724dac3648 MD5 | raw file
Possible License(s): AGPL-1.0
  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. * @ignore
  15. */
  16. if (!defined('IN_PHPBB'))
  17. {
  18. exit;
  19. }
  20. /**
  21. * ucp_register
  22. * Board registration
  23. */
  24. class ucp_register
  25. {
  26. var $u_action;
  27. function main($id, $mode)
  28. {
  29. global $config, $db, $user, $template, $phpbb_root_path, $phpEx;
  30. global $request, $phpbb_container, $phpbb_dispatcher;
  31. //
  32. if ($config['require_activation'] == USER_ACTIVATION_DISABLE ||
  33. (in_array($config['require_activation'], array(USER_ACTIVATION_SELF, USER_ACTIVATION_ADMIN)) && !$config['email_enable']))
  34. {
  35. trigger_error('UCP_REGISTER_DISABLE');
  36. }
  37. $coppa = $request->is_set('coppa_yes') ? 1 : ($request->is_set('coppa_no') ? 0 : false);
  38. $coppa = $request->is_set('coppa') ? $request->variable('coppa', 0) : $coppa;
  39. $agreed = $request->variable('agreed', false);
  40. $submit = $request->is_set_post('submit');
  41. $change_lang = $request->variable('change_lang', '');
  42. $user_lang = $request->variable('lang', $user->lang_name);
  43. if ($agreed && !check_form_key('ucp_register'))
  44. {
  45. $agreed = false;
  46. }
  47. if ($coppa !== false && !check_form_key('ucp_register'))
  48. {
  49. $coppa = false;
  50. }
  51. /**
  52. * Add UCP register data before they are assigned to the template or submitted
  53. *
  54. * To assign data to the template, use $template->assign_vars()
  55. *
  56. * @event core.ucp_register_requests_after
  57. * @var bool coppa Is set coppa
  58. * @var bool agreed Did user agree to coppa?
  59. * @var bool submit Is set post submit?
  60. * @var string change_lang Change language request
  61. * @var string user_lang User language request
  62. * @since 3.1.11-RC1
  63. */
  64. $vars = array(
  65. 'coppa',
  66. 'agreed',
  67. 'submit',
  68. 'change_lang',
  69. 'user_lang',
  70. );
  71. extract($phpbb_dispatcher->trigger_event('core.ucp_register_requests_after', compact($vars)));
  72. add_form_key('ucp_register');
  73. if ($change_lang || $user_lang != $config['default_lang'])
  74. {
  75. $use_lang = ($change_lang) ? basename($change_lang) : basename($user_lang);
  76. if (!validate_language_iso_name($use_lang))
  77. {
  78. if ($change_lang)
  79. {
  80. $submit = false;
  81. // Setting back agreed to let the user view the agreement in his/her language
  82. $agreed = false;
  83. }
  84. $user_lang = $use_lang;
  85. }
  86. else
  87. {
  88. $change_lang = '';
  89. $user_lang = $user->lang_name;
  90. }
  91. }
  92. /* @var $cp \phpbb\profilefields\manager */
  93. $cp = $phpbb_container->get('profilefields.manager');
  94. $error = $cp_data = $cp_error = array();
  95. $s_hidden_fields = array();
  96. // Handle login_link data added to $_hidden_fields
  97. $login_link_data = $this->get_login_link_data_array();
  98. if (!empty($login_link_data))
  99. {
  100. // Confirm that we have all necessary data
  101. /* @var $provider_collection \phpbb\auth\provider_collection */
  102. $provider_collection = $phpbb_container->get('auth.provider_collection');
  103. $auth_provider = $provider_collection->get_provider($request->variable('auth_provider', ''));
  104. $result = $auth_provider->login_link_has_necessary_data($login_link_data);
  105. if ($result !== null)
  106. {
  107. $error[] = $user->lang[$result];
  108. }
  109. $s_hidden_fields = array_merge($s_hidden_fields, $this->get_login_link_data_for_hidden_fields($login_link_data));
  110. }
  111. if (!$agreed || ($coppa === false && $config['coppa_enable']) || ($coppa && !$config['coppa_enable']))
  112. {
  113. $add_coppa = ($coppa !== false) ? '&amp;coppa=' . $coppa : '';
  114. $s_hidden_fields = array_merge($s_hidden_fields, array(
  115. 'change_lang' => '',
  116. ));
  117. // If we change the language, we want to pass on some more possible parameter.
  118. if ($change_lang)
  119. {
  120. // We do not include the password
  121. $s_hidden_fields = array_merge($s_hidden_fields, array(
  122. 'username' => $request->variable('username', '', true),
  123. 'email' => strtolower($request->variable('email', '')),
  124. 'lang' => $user->lang_name,
  125. 'tz' => $request->variable('tz', $config['board_timezone']),
  126. ));
  127. }
  128. // Checking amount of available languages
  129. $sql = 'SELECT lang_id
  130. FROM ' . LANG_TABLE;
  131. $result = $db->sql_query($sql);
  132. $lang_row = array();
  133. while ($row = $db->sql_fetchrow($result))
  134. {
  135. $lang_row[] = $row;
  136. }
  137. $db->sql_freeresult($result);
  138. if ($coppa === false && $config['coppa_enable'])
  139. {
  140. $now = getdate();
  141. $coppa_birthday = $user->create_datetime()
  142. ->setDate($now['year'] - 13, $now['mon'], $now['mday'] - 1)
  143. ->setTime(0, 0, 0)
  144. ->format($user->lang['DATE_FORMAT'], true);
  145. unset($now);
  146. $template_vars = array(
  147. 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($user_lang) : '',
  148. 'L_COPPA_NO' => $user->lang('UCP_COPPA_BEFORE', $coppa_birthday),
  149. 'L_COPPA_YES' => $user->lang('UCP_COPPA_ON_AFTER', $coppa_birthday),
  150. 'S_SHOW_COPPA' => true,
  151. 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
  152. 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
  153. 'COOKIE_NAME' => $config['cookie_name'],
  154. 'COOKIE_PATH' => $config['cookie_path'],
  155. );
  156. }
  157. else
  158. {
  159. $template_vars = array(
  160. 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($user_lang) : '',
  161. 'L_TERMS_OF_USE' => sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()),
  162. 'S_SHOW_COPPA' => false,
  163. 'S_REGISTRATION' => true,
  164. 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
  165. 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_coppa),
  166. 'COOKIE_NAME' => $config['cookie_name'],
  167. 'COOKIE_PATH' => $config['cookie_path'],
  168. );
  169. }
  170. $tpl_name = 'ucp_agreement';
  171. /**
  172. * Allows to modify the agreements.
  173. *
  174. * @event core.ucp_register_agreement_modify_template_data
  175. * @var string tpl_name Template file
  176. * @var array template_vars Array with data about to be assigned to the template
  177. * @var array s_hidden_fields Array with hidden form elements
  178. * @var array lang_row Array with available languages, read only
  179. * @since 3.2.2-RC1
  180. */
  181. $vars = array('tpl_name', 'template_vars', 's_hidden_fields', 'lang_row');
  182. extract($phpbb_dispatcher->trigger_event('core.ucp_register_agreement_modify_template_data', compact($vars)));
  183. unset($lang_row);
  184. $template_vars = array_merge($template_vars, array(
  185. 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
  186. ));
  187. $template->assign_vars($template_vars);
  188. /**
  189. * Allows to modify the agreements.
  190. *
  191. * To assign data to the template, use $template->assign_vars()
  192. *
  193. * @event core.ucp_register_agreement
  194. * @since 3.1.6-RC1
  195. * @deprecated 3.2.2-RC1 Replaced by core.ucp_register_agreement_modify_template_data and to be removed in 3.3.0-RC1
  196. */
  197. $phpbb_dispatcher->dispatch('core.ucp_register_agreement');
  198. $this->tpl_name = $tpl_name;
  199. return;
  200. }
  201. // The CAPTCHA kicks in here. We can't help that the information gets lost on language change.
  202. if ($config['enable_confirm'])
  203. {
  204. $captcha = $phpbb_container->get('captcha.factory')->get_instance($config['captcha_plugin']);
  205. $captcha->init(CONFIRM_REG);
  206. }
  207. $timezone = $config['board_timezone'];
  208. $data = array(
  209. 'username' => $request->variable('username', '', true),
  210. 'new_password' => $request->variable('new_password', '', true),
  211. 'password_confirm' => $request->variable('password_confirm', '', true),
  212. 'email' => strtolower($request->variable('email', '')),
  213. 'lang' => basename($request->variable('lang', $user->lang_name)),
  214. 'tz' => $request->variable('tz', $timezone),
  215. );
  216. /**
  217. * Add UCP register data before they are assigned to the template or submitted
  218. *
  219. * To assign data to the template, use $template->assign_vars()
  220. *
  221. * @event core.ucp_register_data_before
  222. * @var bool submit Do we display the form only
  223. * or did the user press submit
  224. * @var array data Array with current ucp registration data
  225. * @since 3.1.4-RC1
  226. */
  227. $vars = array('submit', 'data');
  228. extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_before', compact($vars)));
  229. // Check and initialize some variables if needed
  230. if ($submit)
  231. {
  232. $error = validate_data($data, array(
  233. 'username' => array(
  234. array('string', false, $config['min_name_chars'], $config['max_name_chars']),
  235. array('username', '')),
  236. 'new_password' => array(
  237. array('string', false, $config['min_pass_chars'], 0),
  238. array('password')),
  239. 'password_confirm' => array('string', false, $config['min_pass_chars'], 0),
  240. 'email' => array(
  241. array('string', false, 6, 60),
  242. array('user_email')),
  243. 'tz' => array('timezone'),
  244. 'lang' => array('language_iso_name'),
  245. ));
  246. if (!check_form_key('ucp_register'))
  247. {
  248. $error[] = $user->lang['FORM_INVALID'];
  249. }
  250. // Replace "error" strings with their real, localised form
  251. $error = array_map(array($user, 'lang'), $error);
  252. if ($config['enable_confirm'])
  253. {
  254. $vc_response = $captcha->validate($data);
  255. if ($vc_response !== false)
  256. {
  257. $error[] = $vc_response;
  258. }
  259. if ($config['max_reg_attempts'] && $captcha->get_attempt_count() > $config['max_reg_attempts'])
  260. {
  261. $error[] = $user->lang['TOO_MANY_REGISTERS'];
  262. }
  263. }
  264. // DNSBL check
  265. if ($config['check_dnsbl'])
  266. {
  267. if (($dnsbl = $user->check_dnsbl('register')) !== false)
  268. {
  269. $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
  270. }
  271. }
  272. // validate custom profile fields
  273. $cp->submit_cp_field('register', $user->get_iso_lang_id(), $cp_data, $error);
  274. if (!count($error))
  275. {
  276. if ($data['new_password'] != $data['password_confirm'])
  277. {
  278. $error[] = $user->lang['NEW_PASSWORD_ERROR'];
  279. }
  280. }
  281. /**
  282. * Check UCP registration data after they are submitted
  283. *
  284. * @event core.ucp_register_data_after
  285. * @var bool submit Do we display the form only
  286. * or did the user press submit
  287. * @var array data Array with current ucp registration data
  288. * @var array cp_data Array with custom profile fields data
  289. * @var array error Array with list of errors
  290. * @since 3.1.4-RC1
  291. */
  292. $vars = array('submit', 'data', 'cp_data', 'error');
  293. extract($phpbb_dispatcher->trigger_event('core.ucp_register_data_after', compact($vars)));
  294. if (!count($error))
  295. {
  296. $server_url = generate_board_url();
  297. // Which group by default?
  298. $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
  299. $sql = 'SELECT group_id
  300. FROM ' . GROUPS_TABLE . "
  301. WHERE group_name = '" . $db->sql_escape($group_name) . "'
  302. AND group_type = " . GROUP_SPECIAL;
  303. $result = $db->sql_query($sql);
  304. $row = $db->sql_fetchrow($result);
  305. $db->sql_freeresult($result);
  306. if (!$row)
  307. {
  308. trigger_error('NO_GROUP');
  309. }
  310. $group_id = $row['group_id'];
  311. if (($coppa ||
  312. $config['require_activation'] == USER_ACTIVATION_SELF ||
  313. $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable'])
  314. {
  315. $user_actkey = gen_rand_string(mt_rand(6, 10));
  316. $user_type = USER_INACTIVE;
  317. $user_inactive_reason = INACTIVE_REGISTER;
  318. $user_inactive_time = time();
  319. }
  320. else
  321. {
  322. $user_type = USER_NORMAL;
  323. $user_actkey = '';
  324. $user_inactive_reason = 0;
  325. $user_inactive_time = 0;
  326. }
  327. // Instantiate passwords manager
  328. /* @var $passwords_manager \phpbb\passwords\manager */
  329. $passwords_manager = $phpbb_container->get('passwords.manager');
  330. $user_row = array(
  331. 'username' => $data['username'],
  332. 'user_password' => $passwords_manager->hash($data['new_password']),
  333. 'user_email' => $data['email'],
  334. 'group_id' => (int) $group_id,
  335. 'user_timezone' => $data['tz'],
  336. 'user_lang' => $data['lang'],
  337. 'user_type' => $user_type,
  338. 'user_actkey' => $user_actkey,
  339. 'user_ip' => $user->ip,
  340. 'user_regdate' => time(),
  341. 'user_inactive_reason' => $user_inactive_reason,
  342. 'user_inactive_time' => $user_inactive_time,
  343. );
  344. if ($config['new_member_post_limit'])
  345. {
  346. $user_row['user_new'] = 1;
  347. }
  348. /**
  349. * Add into $user_row before user_add
  350. *
  351. * user_add allows adding more data into the users table
  352. *
  353. * @event core.ucp_register_user_row_after
  354. * @var bool submit Do we display the form only
  355. * or did the user press submit
  356. * @var array data Array with current ucp registration data
  357. * @var array cp_data Array with custom profile fields data
  358. * @var array user_row Array with user data that will be inserted
  359. * @since 3.1.4-RC1
  360. * @changed 3.2.10-RC1 Added data array
  361. */
  362. $vars = array('submit', 'data', 'cp_data', 'user_row');
  363. extract($phpbb_dispatcher->trigger_event('core.ucp_register_user_row_after', compact($vars)));
  364. // Register user...
  365. $user_id = user_add($user_row, $cp_data);
  366. // This should not happen, because the required variables are listed above...
  367. if ($user_id === false)
  368. {
  369. trigger_error('NO_USER', E_USER_ERROR);
  370. }
  371. // Okay, captcha, your job is done.
  372. if ($config['enable_confirm'] && isset($captcha))
  373. {
  374. $captcha->reset();
  375. }
  376. if ($coppa && $config['email_enable'])
  377. {
  378. $message = $user->lang['ACCOUNT_COPPA'];
  379. $email_template = 'coppa_welcome_inactive';
  380. }
  381. else if ($config['require_activation'] == USER_ACTIVATION_SELF && $config['email_enable'])
  382. {
  383. $message = $user->lang['ACCOUNT_INACTIVE'];
  384. $email_template = 'user_welcome_inactive';
  385. }
  386. else if ($config['require_activation'] == USER_ACTIVATION_ADMIN && $config['email_enable'])
  387. {
  388. $message = $user->lang['ACCOUNT_INACTIVE_ADMIN'];
  389. $email_template = 'admin_welcome_inactive';
  390. }
  391. else
  392. {
  393. $message = $user->lang['ACCOUNT_ADDED'];
  394. $email_template = 'user_welcome';
  395. // Autologin after registration
  396. $user->session_create($user_id, 0, false, 1);
  397. }
  398. if ($config['email_enable'])
  399. {
  400. include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
  401. $messenger = new messenger(false);
  402. $messenger->template($email_template, $data['lang']);
  403. $messenger->to($data['email'], $data['username']);
  404. $messenger->anti_abuse_headers($config, $user);
  405. $messenger->assign_vars(array(
  406. 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])),
  407. 'USERNAME' => htmlspecialchars_decode($data['username']),
  408. 'PASSWORD' => htmlspecialchars_decode($data['new_password']),
  409. 'U_ACTIVATE' => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
  410. );
  411. if ($coppa)
  412. {
  413. $messenger->assign_vars(array(
  414. 'FAX_INFO' => $config['coppa_fax'],
  415. 'MAIL_INFO' => $config['coppa_mail'],
  416. 'EMAIL_ADDRESS' => $data['email'])
  417. );
  418. }
  419. /**
  420. * Modify messenger data before welcome mail is sent
  421. *
  422. * @event core.ucp_register_welcome_email_before
  423. * @var array user_row Array with user registration data
  424. * @var array cp_data Array with custom profile fields data
  425. * @var array data Array with current ucp registration data
  426. * @var string message Message to be displayed to the user after registration
  427. * @var string server_url Server URL
  428. * @var int user_id New user ID
  429. * @var string user_actkey User activation key
  430. * @var messenger messenger phpBB Messenger
  431. * @since 3.2.4-RC1
  432. */
  433. $vars = array(
  434. 'user_row',
  435. 'cp_data',
  436. 'data',
  437. 'message',
  438. 'server_url',
  439. 'user_id',
  440. 'user_actkey',
  441. 'messenger',
  442. );
  443. extract($phpbb_dispatcher->trigger_event('core.ucp_register_welcome_email_before', compact($vars)));
  444. $messenger->send(NOTIFY_EMAIL);
  445. }
  446. if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
  447. {
  448. /* @var $phpbb_notifications \phpbb\notification\manager */
  449. $phpbb_notifications = $phpbb_container->get('notification_manager');
  450. $phpbb_notifications->add_notifications('notification.type.admin_activate_user', array(
  451. 'user_id' => $user_id,
  452. 'user_actkey' => $user_row['user_actkey'],
  453. 'user_regdate' => $user_row['user_regdate'],
  454. ));
  455. }
  456. // Perform account linking if necessary
  457. if (!empty($login_link_data))
  458. {
  459. $login_link_data['user_id'] = $user_id;
  460. $result = $auth_provider->link_account($login_link_data);
  461. if ($result)
  462. {
  463. $message = $message . '<br /><br />' . $user->lang[$result];
  464. }
  465. }
  466. /**
  467. * Perform additional actions after user registration
  468. *
  469. * @event core.ucp_register_register_after
  470. * @var array user_row Array with user registration data
  471. * @var array cp_data Array with custom profile fields data
  472. * @var array data Array with current ucp registration data
  473. * @var string message Message to be displayed to the user after registration
  474. * @var string server_url Server URL
  475. * @var int user_id New user ID
  476. * @var string user_actkey User activation key
  477. * @since 3.2.4-RC1
  478. */
  479. $vars = array(
  480. 'user_row',
  481. 'cp_data',
  482. 'data',
  483. 'message',
  484. 'server_url',
  485. 'user_id',
  486. 'user_actkey',
  487. );
  488. extract($phpbb_dispatcher->trigger_event('core.ucp_register_register_after', compact($vars)));
  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. $s_hidden_fields = array_merge($s_hidden_fields, array(
  494. 'agreed' => 'true',
  495. 'change_lang' => 0,
  496. ));
  497. if ($config['coppa_enable'])
  498. {
  499. $s_hidden_fields['coppa'] = $coppa;
  500. }
  501. if ($config['enable_confirm'])
  502. {
  503. $s_hidden_fields = array_merge($s_hidden_fields, $captcha->get_hidden_fields());
  504. }
  505. // Visual Confirmation - Show images
  506. if ($config['enable_confirm'])
  507. {
  508. $template->assign_vars(array(
  509. 'CAPTCHA_TEMPLATE' => $captcha->get_template(),
  510. ));
  511. }
  512. //
  513. $l_reg_cond = '';
  514. switch ($config['require_activation'])
  515. {
  516. case USER_ACTIVATION_SELF:
  517. $l_reg_cond = $user->lang['UCP_EMAIL_ACTIVATE'];
  518. break;
  519. case USER_ACTIVATION_ADMIN:
  520. $l_reg_cond = $user->lang['UCP_ADMIN_ACTIVATE'];
  521. break;
  522. }
  523. /* @var $provider_collection \phpbb\auth\provider_collection */
  524. $provider_collection = $phpbb_container->get('auth.provider_collection');
  525. $auth_provider = $provider_collection->get_provider();
  526. $auth_provider_data = $auth_provider->get_login_data();
  527. if ($auth_provider_data)
  528. {
  529. if (isset($auth_provider_data['VARS']))
  530. {
  531. $template->assign_vars($auth_provider_data['VARS']);
  532. }
  533. if (isset($auth_provider_data['BLOCK_VAR_NAME']))
  534. {
  535. foreach ($auth_provider_data['BLOCK_VARS'] as $block_vars)
  536. {
  537. $template->assign_block_vars($auth_provider_data['BLOCK_VAR_NAME'], $block_vars);
  538. }
  539. }
  540. $template->assign_vars(array(
  541. 'PROVIDER_TEMPLATE_FILE' => $auth_provider_data['TEMPLATE_FILE'],
  542. ));
  543. }
  544. // Assign template vars for timezone select
  545. phpbb_timezone_select($template, $user, $data['tz'], true);
  546. $template_vars = array(
  547. 'USERNAME' => $data['username'],
  548. 'PASSWORD' => $data['new_password'],
  549. 'PASSWORD_CONFIRM' => $data['password_confirm'],
  550. 'EMAIL' => $data['email'],
  551. 'L_REG_COND' => $l_reg_cond,
  552. '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'])),
  553. 'L_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars'])),
  554. 'S_LANG_OPTIONS' => language_select($data['lang']),
  555. 'S_TZ_PRESELECT' => !$submit,
  556. 'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false,
  557. 'S_REGISTRATION' => true,
  558. 'S_COPPA' => $coppa,
  559. 'S_UCP_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
  560. 'COOKIE_NAME' => $config['cookie_name'],
  561. 'COOKIE_PATH' => $config['cookie_path'],
  562. );
  563. $tpl_name = 'ucp_register';
  564. /**
  565. * Modify template data on the registration page
  566. *
  567. * @event core.ucp_register_modify_template_data
  568. * @var array template_vars Array with template data
  569. * @var array data Array with user data, read only
  570. * @var array error Array with errors
  571. * @var array s_hidden_fields Array with hidden field elements
  572. * @var string tpl_name Template name
  573. * @since 3.2.2-RC1
  574. */
  575. $vars = array(
  576. 'template_vars',
  577. 'data',
  578. 'error',
  579. 's_hidden_fields',
  580. 'tpl_name',
  581. );
  582. extract($phpbb_dispatcher->trigger_event('core.ucp_register_modify_template_data', compact($vars)));
  583. $template_vars = array_merge($template_vars, array(
  584. 'ERROR' => (count($error)) ? implode('<br />', $error) : '',
  585. 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
  586. ));
  587. $template->assign_vars($template_vars);
  588. //
  589. $user->profile_fields = array();
  590. // Generate profile fields -> Template Block Variable profile_fields
  591. $cp->generate_profile_fields('register', $user->get_iso_lang_id());
  592. //
  593. $this->tpl_name = $tpl_name;
  594. }
  595. /**
  596. * Creates the login_link data array
  597. *
  598. * @return array Returns an array of all POST paramaters whose names
  599. * begin with 'login_link_'
  600. */
  601. protected function get_login_link_data_array()
  602. {
  603. global $request;
  604. $var_names = $request->variable_names(\phpbb\request\request_interface::POST);
  605. $login_link_data = array();
  606. $string_start_length = strlen('login_link_');
  607. foreach ($var_names as $var_name)
  608. {
  609. if (strpos($var_name, 'login_link_') === 0)
  610. {
  611. $key_name = substr($var_name, $string_start_length);
  612. $login_link_data[$key_name] = $request->variable($var_name, '', false, \phpbb\request\request_interface::POST);
  613. }
  614. }
  615. return $login_link_data;
  616. }
  617. /**
  618. * Prepends they key names of an associative array with 'login_link_' for
  619. * inclusion on the page as hidden fields.
  620. *
  621. * @param array $data The array to be modified
  622. * @return array The modified array
  623. */
  624. protected function get_login_link_data_for_hidden_fields($data)
  625. {
  626. $new_data = array();
  627. foreach ($data as $key => $value)
  628. {
  629. $new_data['login_link_' . $key] = $value;
  630. }
  631. return $new_data;
  632. }
  633. }