Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
user.php
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 namespace phpbb;
015
016 /**
017 * Base user class
018 *
019 * This is the overarching class which contains (through session extend)
020 * all methods utilised for user functionality during a session.
021 */
022 class user extends \phpbb\session
023 {
024 /**
025 * @var \phpbb\language\language
026 */
027 protected $language;
028
029 var $style = array();
030 var $date_format;
031
032 /**
033 * DateTimeZone object holding the timezone of the user
034 */
035 public $timezone;
036
037 /**
038 * @var string Class name of datetime object
039 */
040 protected $datetime;
041
042 var $lang_name = false;
043 var $lang_id = false;
044 var $lang_path;
045 var $img_lang;
046 var $img_array = array();
047
048 /** @var bool */
049 protected $is_setup_flag;
050
051 // Able to add new options (up to id 31)
052 var $keyoptions = array('viewimg' => 0, 'viewflash' => 1, 'viewsmilies' => 2, 'viewsigs' => 3, 'viewavatars' => 4, 'viewcensors' => 5, 'attachsig' => 6, 'bbcode' => 8, 'smilies' => 9, 'sig_bbcode' => 15, 'sig_smilies' => 16, 'sig_links' => 17);
053
054 /**
055 * Constructor to set the lang path
056 *
057 * @param \phpbb\language\language $lang phpBB's Language loader
058 * @param string $datetime_class Class name of datetime class
059 */
060 function __construct(\phpbb\language\language $lang, $datetime_class)
061 {
062 global $phpbb_root_path;
063
064 $this->lang_path = $phpbb_root_path . 'language/';
065 $this->language = $lang;
066 $this->datetime = $datetime_class;
067
068 $this->is_setup_flag = false;
069 }
070
071 /**
072 * Returns whether user::setup was called
073 *
074 * @return bool
075 */
076 public function is_setup()
077 {
078 return $this->is_setup_flag;
079 }
080
081 /**
082 * Magic getter for BC compatibility
083 *
084 * Implement array access for user::lang.
085 *
086 * @param string $param_name Name of the BC component the user want to access
087 *
088 * @return array The appropriate array
089 *
090 * @deprecated 3.2.0-dev (To be removed: 4.0.0)
091 */
092 public function __get($param_name)
093 {
094 if ($param_name === 'lang')
095 {
096 return $this->language->get_lang_array();
097 }
098 else if ($param_name === 'help')
099 {
100 $help_array = $this->language->get_lang_array();
101 return $help_array['__help'];
102 }
103
104 return array();
105 }
106
107 /**
108 * Setup basic user-specific items (style, language, ...)
109 */
110 function setup($lang_set = false, $style_id = false)
111 {
112 global $db, $request, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;
113 global $phpbb_dispatcher;
114
115 $this->language->set_default_language($config['default_lang']);
116
117 if ($this->data['user_id'] != ANONYMOUS)
118 {
119 $user_lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']);
120 $user_date_format = $this->data['user_dateformat'];
121 $user_timezone = $this->data['user_timezone'];
122 }
123 else
124 {
125 $lang_override = $request->variable('language', '');
126 if ($lang_override)
127 {
128 $this->set_cookie('lang', $lang_override, 0, false);
129 }
130 else
131 {
132 $lang_override = $request->variable($config['cookie_name'] . '_lang', '', true, \phpbb\request\request_interface::COOKIE);
133 }
134
135 if ($lang_override)
136 {
137 $use_lang = basename($lang_override);
138 $user_lang_name = (file_exists($this->lang_path . $use_lang . "/common.$phpEx")) ? $use_lang : basename($config['default_lang']);
139 $this->data['user_lang'] = $user_lang_name;
140 }
141 else
142 {
143 $user_lang_name = basename($config['default_lang']);
144 }
145
146 $user_date_format = $config['default_dateformat'];
147 $user_timezone = $config['board_timezone'];
148
149 /**
150 * If a guest user is surfing, we try to guess his/her language first by obtaining the browser language
151 * If re-enabled we need to make sure only those languages installed are checked
152 * Commented out so we do not loose the code.
153
154 if ($request->header('Accept-Language'))
155 {
156 $accept_lang_ary = explode(',', $request->header('Accept-Language'));
157
158 foreach ($accept_lang_ary as $accept_lang)
159 {
160 // Set correct format ... guess full xx_YY form
161 $accept_lang = substr($accept_lang, 0, 2) . '_' . strtoupper(substr($accept_lang, 3, 2));
162 $accept_lang = basename($accept_lang);
163
164 if (file_exists($this->lang_path . $accept_lang . "/common.$phpEx"))
165 {
166 $user_lang_name = $config['default_lang'] = $accept_lang;
167 break;
168 }
169 else
170 {
171 // No match on xx_YY so try xx
172 $accept_lang = substr($accept_lang, 0, 2);
173 $accept_lang = basename($accept_lang);
174
175 if (file_exists($this->lang_path . $accept_lang . "/common.$phpEx"))
176 {
177 $user_lang_name = $config['default_lang'] = $accept_lang;
178 break;
179 }
180 }
181 }
182 }
183 */
184 }
185
186 $user_data = $this->data;
187 $lang_set_ext = array();
188
189 /**
190 * Event to load language files and modify user data on every page
191 *
192 * @event core.user_setup
193 * @var array user_data Array with user's data row
194 * @var string user_lang_name Basename of the user's langauge
195 * @var string user_date_format User's date/time format
196 * @var string user_timezone User's timezone, should be one of
197 * http://www.php.net/manual/en/timezones.php
198 * @var mixed lang_set String or array of language files
199 * @var array lang_set_ext Array containing entries of format
200 * array(
201 * 'ext_name' => (string) [extension name],
202 * 'lang_set' => (string|array) [language files],
203 * )
204 * For performance reasons, only load translations
205 * that are absolutely needed globally using this
206 * event. Use local events otherwise.
207 * @var mixed style_id Style we are going to display
208 * @since 3.1.0-a1
209 */
210 $vars = array(
211 'user_data',
212 'user_lang_name',
213 'user_date_format',
214 'user_timezone',
215 'lang_set',
216 'lang_set_ext',
217 'style_id',
218 );
219 extract($phpbb_dispatcher->trigger_event('core.user_setup', compact($vars)));
220
221 $this->data = $user_data;
222 $this->lang_name = $user_lang_name;
223 $this->date_format = $user_date_format;
224
225 $this->language->set_user_language($user_lang_name);
226
227 try
228 {
229 $this->timezone = new \DateTimeZone($user_timezone);
230 }
231 catch (\Exception $e)
232 {
233 // If the timezone the user has selected is invalid, we fall back to UTC.
234 $this->timezone = new \DateTimeZone('UTC');
235 }
236
237 $this->add_lang($lang_set);
238 unset($lang_set);
239
240 foreach ($lang_set_ext as $ext_lang_pair)
241 {
242 $this->add_lang_ext($ext_lang_pair['ext_name'], $ext_lang_pair['lang_set']);
243 }
244 unset($lang_set_ext);
245
246 $style_request = $request->variable('style', 0);
247 if ($style_request && (!$config['override_user_style'] || $auth->acl_get('a_styles')) && !defined('ADMIN_START'))
248 {
249 global $SID, $_EXTRA_URL;
250
251 $style_id = $style_request;
252 $SID .= '&style=' . $style_id;
253 $_EXTRA_URL = array('style=' . $style_id);
254 }
255 else
256 {
257 // Set up style
258 $style_id = ($style_id) ? $style_id : ((!$config['override_user_style']) ? $this->data['user_style'] : $config['default_style']);
259 }
260
261 $sql = 'SELECT *
262 FROM ' . STYLES_TABLE . " s
263 WHERE s.style_id = $style_id";
264 $result = $db->sql_query($sql, 3600);
265 $this->style = $db->sql_fetchrow($result);
266 $db->sql_freeresult($result);
267
268 // Fallback to user's standard style
269 if (!$this->style && $style_id != $this->data['user_style'])
270 {
271 $style_id = $this->data['user_style'];
272
273 $sql = 'SELECT *
274 FROM ' . STYLES_TABLE . " s
275 WHERE s.style_id = $style_id";
276 $result = $db->sql_query($sql, 3600);
277 $this->style = $db->sql_fetchrow($result);
278 $db->sql_freeresult($result);
279 }
280
281 // User has wrong style
282 if (!$this->style && $style_id == $this->data['user_style'])
283 {
284 $style_id = $this->data['user_style'] = $config['default_style'];
285
286 $sql = 'UPDATE ' . USERS_TABLE . "
287 SET user_style = $style_id
288 WHERE user_id = {$this->data['user_id']}";
289 $db->sql_query($sql);
290
291 $sql = 'SELECT *
292 FROM ' . STYLES_TABLE . " s
293 WHERE s.style_id = $style_id";
294 $result = $db->sql_query($sql, 3600);
295 $this->style = $db->sql_fetchrow($result);
296 $db->sql_freeresult($result);
297 }
298
299 if (!$this->style)
300 {
301 trigger_error('NO_STYLE_DATA', E_USER_ERROR);
302 }
303
304 // Now parse the cfg file and cache it
305 $parsed_items = $cache->obtain_cfg_items($this->style);
306
307 $check_for = array(
308 'pagination_sep' => (string) ', '
309 );
310
311 foreach ($check_for as $key => $default_value)
312 {
313 $this->style[$key] = (isset($parsed_items[$key])) ? $parsed_items[$key] : $default_value;
314 settype($this->style[$key], gettype($default_value));
315
316 if (is_string($default_value))
317 {
318 $this->style[$key] = htmlspecialchars($this->style[$key]);
319 }
320 }
321
322 $template->set_style();
323
324 $this->img_lang = $this->lang_name;
325
326 // Call phpbb_user_session_handler() in case external application want to "bend" some variables or replace classes...
327 // After calling it we continue script execution...
328 phpbb_user_session_handler();
329
330 /**
331 * Execute code at the end of user setup
332 *
333 * @event core.user_setup_after
334 * @since 3.1.6-RC1
335 */
336 $phpbb_dispatcher->dispatch('core.user_setup_after');
337
338 // If this function got called from the error handler we are finished here.
339 if (defined('IN_ERROR_HANDLER'))
340 {
341 return;
342 }
343
344 // Disable board if the install/ directory is still present
345 // For the brave development army we do not care about this, else we need to comment out this everytime we develop locally
346 if (!defined('DEBUG') && !defined('ADMIN_START') && !defined('IN_INSTALL') && !defined('IN_LOGIN') && file_exists($phpbb_root_path . 'install') && !is_file($phpbb_root_path . 'install'))
347 {
348 // Adjust the message slightly according to the permissions
349 if ($auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_'))
350 {
351 $message = 'REMOVE_INSTALL';
352 }
353 else
354 {
355 $message = (!empty($config['board_disable_msg'])) ? $config['board_disable_msg'] : 'BOARD_DISABLE';
356 }
357 trigger_error($message);
358 }
359
360 // Is board disabled and user not an admin or moderator?
361 if ($config['board_disable'] && !defined('IN_LOGIN') && !defined('SKIP_CHECK_DISABLED') && !$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_'))
362 {
363 if ($this->data['is_bot'])
364 {
365 send_status_line(503, 'Service Unavailable');
366 }
367
368 $message = (!empty($config['board_disable_msg'])) ? $config['board_disable_msg'] : 'BOARD_DISABLE';
369 trigger_error($message);
370 }
371
372 // Is load exceeded?
373 if ($config['limit_load'] && $this->load !== false)
374 {
375 if ($this->load > floatval($config['limit_load']) && !defined('IN_LOGIN') && !defined('IN_ADMIN'))
376 {
377 // Set board disabled to true to let the admins/mods get the proper notification
378 $config['board_disable'] = '1';
379
380 if (!$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_'))
381 {
382 if ($this->data['is_bot'])
383 {
384 send_status_line(503, 'Service Unavailable');
385 }
386 trigger_error('BOARD_UNAVAILABLE');
387 }
388 }
389 }
390
391 if (isset($this->data['session_viewonline']))
392 {
393 // Make sure the user is able to hide his session
394 if (!$this->data['session_viewonline'])
395 {
396 // Reset online status if not allowed to hide the session...
397 if (!$auth->acl_get('u_hideonline'))
398 {
399 $sql = 'UPDATE ' . SESSIONS_TABLE . '
400 SET session_viewonline = 1
401 WHERE session_user_id = ' . $this->data['user_id'];
402 $db->sql_query($sql);
403 $this->data['session_viewonline'] = 1;
404 }
405 }
406 else if (!$this->data['user_allow_viewonline'])
407 {
408 // the user wants to hide and is allowed to -> cloaking device on.
409 if ($auth->acl_get('u_hideonline'))
410 {
411 $sql = 'UPDATE ' . SESSIONS_TABLE . '
412 SET session_viewonline = 0
413 WHERE session_user_id = ' . $this->data['user_id'];
414 $db->sql_query($sql);
415 $this->data['session_viewonline'] = 0;
416 }
417 }
418 }
419
420 // Does the user need to change their password? If so, redirect to the
421 // ucp profile reg_details page ... of course do not redirect if we're already in the ucp
422 if (!defined('IN_ADMIN') && !defined('ADMIN_START') && $config['chg_passforce'] && !empty($this->data['is_registered']) && $auth->acl_get('u_chgpasswd') && $this->data['user_passchg'] < time() - ($config['chg_passforce'] * 86400))
423 {
424 if (strpos($this->page['query_string'], 'mode=reg_details') === false && $this->page['page_name'] != "ucp.$phpEx")
425 {
426 redirect(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=profile&mode=reg_details'));
427 }
428 }
429
430 $this->is_setup_flag = true;
431
432 return;
433 }
434
435 /**
436 * More advanced language substitution
437 * Function to mimic sprintf() with the possibility of using phpBB's language system to substitute nullar/singular/plural forms.
438 * Params are the language key and the parameters to be substituted.
439 * This function/functionality is inspired by SHS` and Ashe.
440 *
441 * Example call: <samp>$user->lang('NUM_POSTS_IN_QUEUE', 1);</samp>
442 *
443 * If the first parameter is an array, the elements are used as keys and subkeys to get the language entry:
444 * Example: <samp>$user->lang(array('datetime', 'AGO'), 1)</samp> uses $user->lang['datetime']['AGO'] as language entry.
445 *
446 * @deprecated 3.2.0-dev (To be removed 4.0.0)
447 */
448 function lang()
449 {
450 $args = func_get_args();
451 return call_user_func_array(array($this->language, 'lang'), $args);
452 }
453
454 /**
455 * Determine which plural form we should use.
456 * For some languages this is not as simple as for English.
457 *
458 * @param $number int|float The number we want to get the plural case for. Float numbers are floored.
459 * @param $force_rule mixed False to use the plural rule of the language package
460 * or an integer to force a certain plural rule
461 * @return int|bool The plural-case we need to use for the number plural-rule combination, false if $force_rule
462 * was invalid.
463 *
464 * @deprecated: 3.2.0-dev (To be removed: 3.3.0)
465 */
466 function get_plural_form($number, $force_rule = false)
467 {
468 return $this->language->get_plural_form($number, $force_rule);
469 }
470
471 /**
472 * Add Language Items - use_db and use_help are assigned where needed (only use them to force inclusion)
473 *
474 * @param mixed $lang_set specifies the language entries to include
475 * @param bool $use_db internal variable for recursion, do not use @deprecated 3.2.0-dev (To be removed: 3.3.0)
476 * @param bool $use_help internal variable for recursion, do not use @deprecated 3.2.0-dev (To be removed: 3.3.0)
477 * @param string $ext_name The extension to load language from, or empty for core files
478 *
479 * Examples:
480 * <code>
481 * $lang_set = array('posting', 'help' => 'faq');
482 * $lang_set = array('posting', 'viewtopic', 'help' => array('bbcode', 'faq'))
483 * $lang_set = array(array('posting', 'viewtopic'), 'help' => array('bbcode', 'faq'))
484 * $lang_set = 'posting'
485 * $lang_set = array('help' => 'faq', 'db' => array('help:faq', 'posting'))
486 * </code>
487 *
488 * Note: $use_db and $use_help should be removed. The old function was kept for BC purposes,
489 * so the BC logic is handled here.
490 *
491 * @deprecated: 3.2.0-dev (To be removed: 3.3.0)
492 */
493 function add_lang($lang_set, $use_db = false, $use_help = false, $ext_name = '')
494 {
495 if (is_array($lang_set))
496 {
497 foreach ($lang_set as $key => $lang_file)
498 {
499 // Please do not delete this line.
500 // We have to force the type here, else [array] language inclusion will not work
501 $key = (string) $key;
502
503 if ($key == 'db')
504 {
505 // This is never used
506 $this->add_lang($lang_file, true, $use_help, $ext_name);
507 }
508 else if ($key == 'help')
509 {
510 $this->add_lang($lang_file, $use_db, true, $ext_name);
511 }
512 else if (!is_array($lang_file))
513 {
514 $this->set_lang($lang_file, $use_help, $ext_name);
515 }
516 else
517 {
518 $this->add_lang($lang_file, $use_db, $use_help, $ext_name);
519 }
520 }
521 unset($lang_set);
522 }
523 else if ($lang_set)
524 {
525 $this->set_lang($lang_set, $use_help, $ext_name);
526 }
527 }
528
529 /**
530 * BC function for loading language files
531 *
532 * @deprecated 3.2.0-dev (To be removed: 3.3.0)
533 */
534 private function set_lang($lang_set, $use_help, $ext_name)
535 {
536 if (empty($ext_name))
537 {
538 $ext_name = null;
539 }
540
541 if ($use_help && strpos($lang_set, '/') !== false)
542 {
543 $component = dirname($lang_set) . '/help_' . basename($lang_set);
544
545 if ($component[0] === '/')
546 {
547 $component = substr($component, 1);
548 }
549 }
550 else
551 {
552 $component = (($use_help) ? 'help_' : '') . $lang_set;
553 }
554
555 $this->language->add_lang($component, $ext_name);
556 }
557
558 /**
559 * Add Language Items from an extension - use_db and use_help are assigned where needed (only use them to force inclusion)
560 *
561 * @param string $ext_name The extension to load language from, or empty for core files
562 * @param mixed $lang_set specifies the language entries to include
563 * @param bool $use_db internal variable for recursion, do not use
564 * @param bool $use_help internal variable for recursion, do not use
565 *
566 * Note: $use_db and $use_help should be removed. Kept for BC purposes.
567 *
568 * @deprecated: 3.2.0-dev (To be removed: 3.3.0)
569 */
570 function add_lang_ext($ext_name, $lang_set, $use_db = false, $use_help = false)
571 {
572 if ($ext_name === '/')
573 {
574 $ext_name = '';
575 }
576
577 $this->add_lang($lang_set, $use_db, $use_help, $ext_name);
578 }
579
580 /**
581 * Format user date
582 *
583 * @param int $gmepoch unix timestamp
584 * @param string $format date format in date() notation. | used to indicate relative dates, for example |d m Y|, h:i is translated to Today, h:i.
585 * @param bool $forcedate force non-relative date format.
586 *
587 * @return mixed translated date
588 */
589 function format_date($gmepoch, $format = false, $forcedate = false)
590 {
591 static $utc;
592
593 if (!isset($utc))
594 {
595 $utc = new \DateTimeZone('UTC');
596 }
597
598 $time = new $this->datetime($this, '@' . (int) $gmepoch, $utc);
599 $time->setTimezone($this->timezone);
600
601 return $time->format($format, $forcedate);
602 }
603
604 /**
605 * Create a \phpbb\datetime object in the context of the current user
606 *
607 * @since 3.1
608 * @param string $time String in a format accepted by strtotime().
609 * @param DateTimeZone $timezone Time zone of the time.
610 * @return \phpbb\datetime Date time object linked to the current users locale
611 */
612 public function create_datetime($time = 'now', \DateTimeZone $timezone = null)
613 {
614 $timezone = $timezone ?: $this->timezone;
615 return new $this->datetime($this, $time, $timezone);
616 }
617
618 /**
619 * Get the UNIX timestamp for a datetime in the users timezone, so we can store it in the database.
620 *
621 * @param string $format Format of the entered date/time
622 * @param string $time Date/time with the timezone applied
623 * @param DateTimeZone $timezone Timezone of the date/time, falls back to timezone of current user
624 * @return int Returns the unix timestamp
625 */
626 public function get_timestamp_from_format($format, $time, \DateTimeZone $timezone = null)
627 {
628 $timezone = $timezone ?: $this->timezone;
629 $date = \DateTime::createFromFormat($format, $time, $timezone);
630 return ($date !== false) ? $date->format('U') : false;
631 }
632
633 /**
634 * Get language id currently used by the user
635 */
636 function get_iso_lang_id()
637 {
638 global $config, $db;
639
640 if (!empty($this->lang_id))
641 {
642 return $this->lang_id;
643 }
644
645 if (!$this->lang_name)
646 {
647 $this->lang_name = $config['default_lang'];
648 }
649
650 $sql = 'SELECT lang_id
651 FROM ' . LANG_TABLE . "
652 WHERE lang_iso = '" . $db->sql_escape($this->lang_name) . "'";
653 $result = $db->sql_query($sql);
654 $this->lang_id = (int) $db->sql_fetchfield('lang_id');
655 $db->sql_freeresult($result);
656
657 return $this->lang_id;
658 }
659
660 /**
661 * Get users profile fields
662 */
663 function get_profile_fields($user_id)
664 {
665 global $db;
666
667 if (isset($this->profile_fields))
668 {
669 return;
670 }
671
672 $sql = 'SELECT *
673 FROM ' . PROFILE_FIELDS_DATA_TABLE . "
674 WHERE user_id = $user_id";
675 $result = $db->sql_query_limit($sql, 1);
676 $this->profile_fields = (!($row = $db->sql_fetchrow($result))) ? array() : $row;
677 $db->sql_freeresult($result);
678 }
679
680 /**
681 * Specify/Get image
682 */
683 function img($img, $alt = '')
684 {
685 $title = '';
686
687 if ($alt)
688 {
689 $alt = $this->language->lang($alt);
690 $title = ' title="' . $alt . '"';
691 }
692 return '<span class="imageset ' . $img . '"' . $title . '>' . $alt . '</span>';
693 }
694
695 /**
696 * Get option bit field from user options.
697 *
698 * @param int $key option key, as defined in $keyoptions property.
699 * @param int $data bit field value to use, or false to use $this->data['user_options']
700 * @return bool true if the option is set in the bit field, false otherwise
701 */
702 function optionget($key, $data = false)
703 {
704 $var = ($data !== false) ? $data : $this->data['user_options'];
705 return phpbb_optionget($this->keyoptions[$key], $var);
706 }
707
708 /**
709 * Set option bit field for user options.
710 *
711 * @param int $key Option key, as defined in $keyoptions property.
712 * @param bool $value True to set the option, false to clear the option.
713 * @param int $data Current bit field value, or false to use $this->data['user_options']
714 * @return int|bool If $data is false, the bit field is modified and
715 * written back to $this->data['user_options'], and
716 * return value is true if the bit field changed and
717 * false otherwise. If $data is not false, the new
718 * bitfield value is returned.
719 */
720 function optionset($key, $value, $data = false)
721 {
722 $var = ($data !== false) ? $data : $this->data['user_options'];
723
724 $new_var = phpbb_optionset($this->keyoptions[$key], $value, $var);
725
726 if ($data === false)
727 {
728 if ($new_var != $var)
729 {
730 $this->data['user_options'] = $new_var;
731 return true;
732 }
733 else
734 {
735 return false;
736 }
737 }
738 else
739 {
740 return $new_var;
741 }
742 }
743
744 /**
745 * Funtion to make the user leave the NEWLY_REGISTERED system group.
746 * @access public
747 */
748 function leave_newly_registered()
749 {
750 if (empty($this->data['user_new']))
751 {
752 return false;
753 }
754
755 if (!function_exists('remove_newly_registered'))
756 {
757 global $phpbb_root_path, $phpEx;
758
759 include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
760 }
761 if ($group = remove_newly_registered($this->data['user_id'], $this->data))
762 {
763 $this->data['group_id'] = $group;
764
765 }
766 $this->data['user_permissions'] = '';
767 $this->data['user_new'] = 0;
768
769 return true;
770 }
771
772 /**
773 * Returns all password protected forum ids the user is currently NOT authenticated for.
774 *
775 * @return array Array of forum ids
776 * @access public
777 */
778 function get_passworded_forums()
779 {
780 global $db;
781
782 $sql = 'SELECT f.forum_id, fa.user_id
783 FROM ' . FORUMS_TABLE . ' f
784 LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa
785 ON (fa.forum_id = f.forum_id
786 AND fa.session_id = '" . $db->sql_escape($this->session_id) . "')
787 WHERE f.forum_password <> ''";
788 $result = $db->sql_query($sql);
789
790 $forum_ids = array();
791 while ($row = $db->sql_fetchrow($result))
792 {
793 $forum_id = (int) $row['forum_id'];
794
795 if ($row['user_id'] != $this->data['user_id'])
796 {
797 $forum_ids[$forum_id] = $forum_id;
798 }
799 }
800 $db->sql_freeresult($result);
801
802 return $forum_ids;
803 }
804 }
805