Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

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