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