Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

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

functions_compatibility.php

Zuletzt modifiziert: 02.04.2025, 15:01 - Dateigröße: 25.43 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  * Get user avatar
024  *
025  * @deprecated 3.1.0-a1 (To be removed: 4.0.0)
026  *
027  * @param string $avatar Users assigned avatar name
028  * @param int $avatar_type Type of avatar
029  * @param string $avatar_width Width of users avatar
030  * @param string $avatar_height Height of users avatar
031  * @param string $alt Optional language string for alt tag within image, can be a language key or text
032  * @param bool $ignore_config Ignores the config-setting, to be still able to view the avatar in the UCP
033  * @param bool $lazy If true, will be lazy loaded (requires JS)
034  *
035  * @return string Avatar image
036  */
037  function get_user_avatar($avatar, $avatar_type, $avatar_width, $avatar_height, $alt = 'USER_AVATAR', $ignore_config = false, $lazy = false)
038  {
039      // map arguments to new function phpbb_get_avatar()
040      $row = array(
041          'avatar'        => $avatar,
042          'avatar_type'    => $avatar_type,
043          'avatar_width'    => $avatar_width,
044          'avatar_height'    => $avatar_height,
045      );
046   
047      return phpbb_get_avatar($row, $alt, $ignore_config, $lazy);
048  }
049   
050  /**
051  * Hash the password
052  *
053  * @deprecated 3.1.0-a2 (To be removed: 4.0.0)
054  *
055  * @param string $password Password to be hashed
056  *
057  * @return string|bool Password hash or false if something went wrong during hashing
058  */
059  function phpbb_hash($password)
060  {
061      global $phpbb_container;
062   
063      /* @var $passwords_manager \phpbb\passwords\manager */
064      $passwords_manager = $phpbb_container->get('passwords.manager');
065      return $passwords_manager->hash($password);
066  }
067   
068  /**
069  * Check for correct password
070  *
071  * @deprecated 3.1.0-a2 (To be removed: 4.0.0)
072  *
073  * @param string $password The password in plain text
074  * @param string $hash The stored password hash
075  *
076  * @return bool Returns true if the password is correct, false if not.
077  */
078  function phpbb_check_hash($password, $hash)
079  {
080      global $phpbb_container;
081   
082      /* @var $passwords_manager \phpbb\passwords\manager */
083      $passwords_manager = $phpbb_container->get('passwords.manager');
084      return $passwords_manager->check($password, $hash);
085  }
086   
087  /**
088  * Eliminates useless . and .. components from specified path.
089  *
090  * Deprecated, use filesystem class instead
091  *
092  * @param string $path Path to clean
093  * @return string Cleaned path
094  *
095  * @deprecated 3.1.0 (To be removed: 4.0.0)
096  */
097  function phpbb_clean_path($path)
098  {
099      global $phpbb_path_helper, $phpbb_container;
100   
101      if (!$phpbb_path_helper && $phpbb_container)
102      {
103          /* @var $phpbb_path_helper \phpbb\path_helper */
104          $phpbb_path_helper = $phpbb_container->get('path_helper');
105      }
106      else if (!$phpbb_path_helper)
107      {
108          global $phpbb_root_path, $phpEx;
109   
110          // The container is not yet loaded, use a new instance
111          if (!class_exists('\phpbb\path_helper'))
112          {
113              require($phpbb_root_path . 'phpbb/path_helper.' . $phpEx);
114          }
115   
116          $request = new phpbb\request\request();
117          $phpbb_path_helper = new phpbb\path_helper(
118              new phpbb\symfony_request(
119                  $request
120              ),
121              new phpbb\filesystem\filesystem(),
122              $request,
123              $phpbb_root_path,
124              $phpEx
125          );
126      }
127   
128      return $phpbb_path_helper->clean_path($path);
129  }
130   
131  /**
132  * Pick a timezone
133  *
134  * @param    string        $default            A timezone to select
135  * @param    boolean        $truncate            Shall we truncate the options text
136  *
137  * @return        string        Returns the options for timezone selector only
138  *
139  * @deprecated 3.1.0 (To be removed: 4.0.0)
140  */
141  function tz_select($default = '', $truncate = false)
142  {
143      global $template, $user;
144   
145      return phpbb_timezone_select($template, $user, $default, $truncate);
146  }
147   
148  /**
149  * Cache moderators. Called whenever permissions are changed
150  * via admin_permissions. Changes of usernames and group names
151  * must be carried through for the moderators table.
152  *
153  * @deprecated 3.1.0 (To be removed: 4.0.0)
154  * @return null
155  */
156  function cache_moderators()
157  {
158      global $db, $cache, $auth;
159      return phpbb_cache_moderators($db, $cache, $auth);
160  }
161   
162  /**
163  * Removes moderators and administrators from foe lists.
164  *
165  * @deprecated 3.1.0 (To be removed: 4.0.0)
166  * @param array|bool $group_id If an array, remove all members of this group from foe lists, or false to ignore
167  * @param array|bool $user_id If an array, remove this user from foe lists, or false to ignore
168  * @return null
169  */
170  function update_foes($group_id = false, $user_id = false)
171  {
172      global $db, $auth;
173      return phpbb_update_foes($db, $auth, $group_id, $user_id);
174  }
175   
176  /**
177  * Get user rank title and image
178  *
179  * @param int $user_rank the current stored users rank id
180  * @param int $user_posts the users number of posts
181  * @param string &$rank_title the rank title will be stored here after execution
182  * @param string &$rank_img the rank image as full img tag is stored here after execution
183  * @param string &$rank_img_src the rank image source is stored here after execution
184  *
185  * @deprecated 3.1.0-RC5 (To be removed: 4.0.0)
186  *
187  * Note: since we do not want to break backwards-compatibility, this function will only properly assign ranks to guests if you call it for them with user_posts == false
188  */
189  function get_user_rank($user_rank, $user_posts, &$rank_title, &$rank_img, &$rank_img_src)
190  {
191      global $phpbb_root_path, $phpEx;
192      if (!function_exists('phpbb_get_user_rank'))
193      {
194          include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
195      }
196   
197      $rank_data = phpbb_get_user_rank(array('user_rank' => $user_rank), $user_posts);
198      $rank_title = $rank_data['title'];
199      $rank_img = $rank_data['img'];
200      $rank_img_src = $rank_data['img_src'];
201  }
202   
203  /**
204   * Retrieve contents from remotely stored file
205   *
206   * @deprecated    3.1.2    Use file_downloader instead
207   */
208  function get_remote_file($host, $directory, $filename, &$errstr, &$errno, $port = 80, $timeout = 6)
209  {
210      global $phpbb_container;
211   
212      // Get file downloader and assign $errstr and $errno
213      /* @var $file_downloader \phpbb\file_downloader */
214      $file_downloader = $phpbb_container->get('file_downloader');
215   
216      $file_data = $file_downloader->get($host, $directory, $filename, $port, $timeout);
217      $errstr = $file_downloader->get_error_string();
218      $errno = $file_downloader->get_error_number();
219   
220      return $file_data;
221  }
222   
223  /**
224   * Add log entry
225   *
226   * string    $mode                The mode defines which log_type is used and from which log the entry is retrieved
227   * int        $forum_id            Mode 'mod' ONLY: forum id of the related item, NOT INCLUDED otherwise
228   * int        $topic_id            Mode 'mod' ONLY: topic id of the related item, NOT INCLUDED otherwise
229   * int        $reportee_id        Mode 'user' ONLY: user id of the reportee, NOT INCLUDED otherwise
230   * string    $log_operation        Name of the operation
231   * array    $additional_data    More arguments can be added, depending on the log_type
232   *
233   * @return    int|bool        Returns the log_id, if the entry was added to the database, false otherwise.
234   *
235   * @deprecated    3.1.0 (To be removed: 4.0.0)
236   */
237  function add_log()
238  {
239      global $phpbb_log, $user;
240   
241      $args = func_get_args();
242      $mode = array_shift($args);
243   
244      // This looks kind of dirty, but add_log has some additional data before the log_operation
245      $additional_data = array();
246      switch ($mode)
247      {
248          case 'admin':
249          case 'critical':
250              break;
251          case 'mod':
252              $additional_data['forum_id'] = array_shift($args);
253              $additional_data['topic_id'] = array_shift($args);
254              break;
255          case 'user':
256              $additional_data['reportee_id'] = array_shift($args);
257              break;
258      }
259   
260      $log_operation = array_shift($args);
261      $additional_data = array_merge($additional_data, $args);
262   
263      $user_id = (empty($user->data)) ? ANONYMOUS : $user->data['user_id'];
264      $user_ip = (empty($user->ip)) ? '' : $user->ip;
265   
266      return $phpbb_log->add($mode, $user_id, $user_ip, $log_operation, time(), $additional_data);
267  }
268   
269  /**
270   * Sets a configuration option's value.
271   *
272   * Please note that this function does not update the is_dynamic value for
273   * an already existing config option.
274   *
275   * @param string $config_name   The configuration option's name
276   * @param string $config_value  New configuration value
277   * @param bool   $is_dynamic    Whether this variable should be cached (false) or
278   *                              if it changes too frequently (true) to be
279   *                              efficiently cached.
280   *
281   * @return null
282   *
283   * @deprecated 3.1.0 (To be removed: 4.0.0)
284   */
285  function set_config($config_name, $config_value, $is_dynamic = false, \phpbb\config\config $set_config = null)
286  {
287      static $config = null;
288   
289      if ($set_config !== null)
290      {
291          $config = $set_config;
292   
293          if (empty($config_name))
294          {
295              return;
296          }
297      }
298   
299      $config->set($config_name, $config_value, !$is_dynamic);
300  }
301   
302  /**
303   * Increments an integer config value directly in the database.
304   *
305   * @param string $config_name   The configuration option's name
306   * @param int    $increment     Amount to increment by
307   * @param bool   $is_dynamic    Whether this variable should be cached (false) or
308   *                              if it changes too frequently (true) to be
309   *                              efficiently cached.
310   *
311   * @return null
312   *
313   * @deprecated 3.1.0 (To be removed: 4.0.0)
314   */
315  function set_config_count($config_name, $increment, $is_dynamic = false, \phpbb\config\config $set_config = null)
316  {
317      static $config = null;
318      if ($set_config !== null)
319      {
320          $config = $set_config;
321          if (empty($config_name))
322          {
323              return;
324          }
325      }
326      $config->increment($config_name, $increment, !$is_dynamic);
327  }
328   
329  /**
330   * Wrapper function of \phpbb\request\request::variable which exists for backwards compatability.
331   * See {@link \phpbb\request\request_interface::variable \phpbb\request\request_interface::variable} for
332   * documentation of this function's use.
333   *
334   * @deprecated 3.1.0 (To be removed: 4.0.0)
335   * @param    mixed            $var_name    The form variable's name from which data shall be retrieved.
336   *                                         If the value is an array this may be an array of indizes which will give
337   *                                         direct access to a value at any depth. E.g. if the value of "var" is array(1 => "a")
338   *                                         then specifying array("var", 1) as the name will return "a".
339   *                                         If you pass an instance of {@link \phpbb\request\request_interface phpbb_request_interface}
340   *                                         as this parameter it will overwrite the current request class instance. If you do
341   *                                         not do so, it will create its own instance (but leave superglobals enabled).
342   * @param    mixed            $default    A default value that is returned if the variable was not set.
343   *                                         This function will always return a value of the same type as the default.
344   * @param    bool            $multibyte    If $default is a string this paramater has to be true if the variable may contain any UTF-8 characters
345   *                                        Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks
346   * @param    bool            $cookie        This param is mapped to \phpbb\request\request_interface::COOKIE as the last param for
347   *                                         \phpbb\request\request_interface::variable for backwards compatability reasons.
348   * @param    \phpbb\request\request_interface|null|false    $request
349   *                                         If an instance of \phpbb\request\request_interface is given the instance is stored in
350   *                                        a static variable and used for all further calls where this parameters is null. Until
351   *                                        the function is called with an instance it automatically creates a new \phpbb\request\request
352   *                                        instance on every call. By passing false this per-call instantiation can be restored
353   *                                        after having passed in a \phpbb\request\request_interface instance.
354   *
355   * @return    mixed    The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the
356   *                     the same as that of $default. If the variable is not set $default is returned.
357   */
358  function request_var($var_name, $default, $multibyte = false, $cookie = false, $request = null)
359  {
360      // This is all just an ugly hack to add "Dependency Injection" to a function
361      // the only real code is the function call which maps this function to a method.
362      static $static_request = null;
363      if ($request instanceof \phpbb\request\request_interface)
364      {
365          $static_request = $request;
366          if (empty($var_name))
367          {
368              return;
369          }
370      }
371      else if ($request === false)
372      {
373          $static_request = null;
374          if (empty($var_name))
375          {
376              return;
377          }
378      }
379      $tmp_request = $static_request;
380      // no request class set, create a temporary one ourselves to keep backwards compatibility
381      if ($tmp_request === null)
382      {
383          // false param: enable super globals, so the created request class does not
384          // make super globals inaccessible everywhere outside this function.
385          $tmp_request = new \phpbb\request\request(new \phpbb\request\type_cast_helper(), false);
386      }
387      return $tmp_request->variable($var_name, $default, $multibyte, ($cookie) ? \phpbb\request\request_interface::COOKIE : \phpbb\request\request_interface::REQUEST);
388  }
389   
390  /**
391   * Get tables of a database
392   *
393   * @deprecated 3.1.0 (To be removed: 4.0.0)
394   */
395  function get_tables($db)
396  {
397      $db_tools_factory = new \phpbb\db\tools\factory();
398      $db_tools = $db_tools_factory->get($db);
399   
400      return $db_tools->sql_list_tables();
401  }
402   
403  /**
404   * Global function for chmodding directories and files for internal use
405   *
406   * This function determines owner and group whom the file belongs to and user and group of PHP and then set safest possible file permissions.
407   * The function determines owner and group from common.php file and sets the same to the provided file.
408   * The function uses bit fields to build the permissions.
409   * The function sets the appropiate execute bit on directories.
410   *
411   * Supported constants representing bit fields are:
412   *
413   * CHMOD_ALL - all permissions (7)
414   * CHMOD_READ - read permission (4)
415   * CHMOD_WRITE - write permission (2)
416   * CHMOD_EXECUTE - execute permission (1)
417   *
418   * NOTE: The function uses POSIX extension and fileowner()/filegroup() functions. If any of them is disabled, this function tries to build proper permissions, by calling is_readable() and is_writable() functions.
419   *
420   * @param string    $filename    The file/directory to be chmodded
421   * @param int    $perms        Permissions to set
422   *
423   * @return bool    true on success, otherwise false
424   *
425   * @deprecated 3.2.0-dev    use \phpbb\filesystem\filesystem::phpbb_chmod() instead
426   */
427  function phpbb_chmod($filename, $perms = CHMOD_READ)
428  {
429      global $phpbb_filesystem;
430   
431      try
432      {
433          $phpbb_filesystem->phpbb_chmod($filename, $perms);
434      }
435      catch (\phpbb\filesystem\exception\filesystem_exception $e)
436      {
437          return false;
438      }
439   
440      return true;
441  }
442   
443  /**
444   * Test if a file/directory is writable
445   *
446   * This function calls the native is_writable() when not running under
447   * Windows and it is not disabled.
448   *
449   * @param string $file Path to perform write test on
450   * @return bool True when the path is writable, otherwise false.
451   *
452   * @deprecated 3.2.0-dev    use \phpbb\filesystem\filesystem::is_writable() instead
453   */
454  function phpbb_is_writable($file)
455  {
456      global $phpbb_filesystem;
457   
458      return $phpbb_filesystem->is_writable($file);
459  }
460   
461  /**
462   * Checks if a path ($path) is absolute or relative
463   *
464   * @param string $path Path to check absoluteness of
465   * @return boolean
466   *
467   * @deprecated 3.2.0-dev    use \phpbb\filesystem\filesystem::is_absolute_path() instead
468   */
469  function phpbb_is_absolute($path)
470  {
471      global $phpbb_filesystem;
472   
473      return $phpbb_filesystem->is_absolute_path($path);
474  }
475   
476  /**
477   * A wrapper for realpath
478   *
479   * @deprecated 3.2.0-dev    use \phpbb\filesystem\filesystem::realpath() instead
480   */
481  function phpbb_realpath($path)
482  {
483      global $phpbb_filesystem;
484   
485      return $phpbb_filesystem->realpath($path);
486  }
487   
488  /**
489   * Determine which plural form we should use.
490   * For some languages this is not as simple as for English.
491   *
492   * @param    int            $rule    ID of the plural rule we want to use, see https://area51.phpbb.com/docs/dev/3.3.x/language/plurals.html
493   * @param    int|float    $number    The number we want to get the plural case for. Float numbers are floored.
494   * @return    int        The plural-case we need to use for the number plural-rule combination
495   *
496   * @deprecated 3.2.0-dev (To be removed: 4.0.0)
497   */
498  function phpbb_get_plural_form($rule, $number)
499  {
500      global $phpbb_container;
501   
502      /** @var \phpbb\language\language $language */
503      $language = $phpbb_container->get('language');
504      return $language->get_plural_form($number, $rule);
505  }
506   
507  /**
508  * @return bool Always true
509  * @deprecated 3.2.0-dev
510  */
511  function phpbb_pcre_utf8_support()
512  {
513      return true;
514  }
515   
516  /**
517   * Casts a variable to the given type.
518   *
519   * @deprecated 3.1 (To be removed 4.0.0)
520   */
521  function set_var(&$result, $var, $type, $multibyte = false)
522  {
523      // no need for dependency injection here, if you have the object, call the method yourself!
524      $type_cast_helper = new \phpbb\request\type_cast_helper();
525      $type_cast_helper->set_var($result, $var, $type, $multibyte);
526  }
527   
528  /**
529   * Delete Attachments
530   *
531   * @deprecated 3.2.0-a1 (To be removed: 4.0.0)
532   *
533   * @param string $mode can be: post|message|topic|attach|user
534   * @param mixed $ids can be: post_ids, message_ids, topic_ids, attach_ids, user_ids
535   * @param bool $resync set this to false if you are deleting posts or topics
536   */
537  function delete_attachments($mode, $ids, $resync = true)
538  {
539      global $phpbb_container;
540   
541      /** @var \phpbb\attachment\manager $attachment_manager */
542      $attachment_manager = $phpbb_container->get('attachment.manager');
543      $num_deleted = $attachment_manager->delete($mode, $ids, $resync);
544   
545      unset($attachment_manager);
546   
547      return $num_deleted;
548  }
549   
550  /**
551   * Delete attached file
552   *
553   * @deprecated 3.2.0-a1 (To be removed: 4.0.0)
554   */
555  function phpbb_unlink($filename, $mode = 'file', $entry_removed = false)
556  {
557      global $phpbb_container;
558   
559      /** @var \phpbb\attachment\manager $attachment_manager */
560      $attachment_manager = $phpbb_container->get('attachment.manager');
561      $unlink = $attachment_manager->unlink($filename, $mode, $entry_removed);
562      unset($attachment_manager);
563   
564      return $unlink;
565  }
566   
567  /**
568   * Display reasons
569   *
570   * @deprecated 3.2.0-dev (To be removed: 4.0.0)
571   */
572  function display_reasons($reason_id = 0)
573  {
574      global $phpbb_container;
575   
576      $phpbb_container->get('phpbb.report.report_reason_list_provider')->display_reasons($reason_id);
577  }
578   
579  /**
580   * Upload Attachment - filedata is generated here
581   * Uses upload class
582   *
583   * @deprecated 3.2.0-a1 (To be removed: 4.0.0)
584   *
585   * @param string            $form_name        The form name of the file upload input
586   * @param int            $forum_id        The id of the forum
587   * @param bool            $local            Whether the file is local or not
588   * @param string            $local_storage    The path to the local file
589   * @param bool            $is_message        Whether it is a PM or not
590   * @param array            $local_filedata    A filespec object created for the local file
591   *
592   * @return array File data array
593   */
594  function upload_attachment($form_name, $forum_id, $local = false, $local_storage = '', $is_message = false, $local_filedata = false)
595  {
596      global $phpbb_container;
597   
598      /** @var \phpbb\attachment\manager $attachment_manager */
599      $attachment_manager = $phpbb_container->get('attachment.manager');
600      $file = $attachment_manager->upload($form_name, $forum_id, $local, $local_storage, $is_message, $local_filedata);
601      unset($attachment_manager);
602   
603      return $file;
604  }
605   
606  /**
607  * Wrapper for php's checkdnsrr function.
608  *
609  * @param string $host    Fully-Qualified Domain Name
610  * @param string $type    Resource record type to lookup
611  *                        Supported types are: MX (default), A, AAAA, NS, TXT, CNAME
612  *                        Other types may work or may not work
613  *
614  * @return mixed        true if entry found,
615  *                    false if entry not found,
616  *                    null if this function is not supported by this environment
617  *
618  * Since null can also be returned, you probably want to compare the result
619  * with === true or === false,
620  *
621  * @deprecated 3.3.0-b2 (To be removed: 4.0.0)
622  */
623  function phpbb_checkdnsrr($host, $type = 'MX')
624  {
625      return checkdnsrr($host, $type);
626  }
627   
628  /*
629   * Wrapper for inet_ntop()
630   *
631   * Converts a packed internet address to a human readable representation
632   * inet_ntop() is supported by PHP since 5.1.0, since 5.3.0 also on Windows.
633   *
634   * @param string $in_addr    A 32bit IPv4, or 128bit IPv6 address.
635   *
636   * @return mixed        false on failure,
637   *                    string otherwise
638    *
639   * @deprecated 3.3.0-b2 (To be removed: 4.0.0)
640   */
641  function phpbb_inet_ntop($in_addr)
642  {
643      return inet_ntop($in_addr);
644  }
645   
646  /**
647   * Wrapper for inet_pton()
648   *
649   * Converts a human readable IP address to its packed in_addr representation
650   * inet_pton() is supported by PHP since 5.1.0, since 5.3.0 also on Windows.
651   *
652   * @param string $address    A human readable IPv4 or IPv6 address.
653   *
654   * @return mixed        false if address is invalid,
655   *                    in_addr representation of the given address otherwise (string)
656   *
657   * @deprecated 3.3.0-b2 (To be removed: 4.0.0)
658   */
659  function phpbb_inet_pton($address)
660  {
661      return inet_pton($address);
662  }
663   
664  /**
665   * Hashes an email address to a big integer
666   *
667   * @param string $email        Email address
668   *
669   * @return string            Unsigned Big Integer
670   *
671   * @deprecated 3.3.0-b2 (To be removed: 4.0.0)
672   */
673  function phpbb_email_hash($email)
674  {
675      return sprintf('%u', crc32(strtolower($email))) . strlen($email);
676  }
677   
678  /**
679   * Load the autoloaders added by the extensions.
680   *
681   * @param string $phpbb_root_path Path to the phpbb root directory.
682   */
683  function phpbb_load_extensions_autoloaders($phpbb_root_path)
684  {
685      $iterator = new \RecursiveIteratorIterator(
686          new \phpbb\recursive_dot_prefix_filter_iterator(
687              new \RecursiveDirectoryIterator(
688                  $phpbb_root_path . 'ext/',
689                  \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS
690              )
691          ),
692          \RecursiveIteratorIterator::SELF_FIRST
693      );
694      $iterator->setMaxDepth(2);
695   
696      foreach ($iterator as $file_info)
697      {
698          if ($file_info->getFilename() === 'vendor' && $iterator->getDepth() === 2)
699          {
700              $filename = $file_info->getRealPath() . '/autoload.php';
701              if (file_exists($filename))
702              {
703                  require $filename;
704              }
705          }
706      }
707  }
708   
709  /**
710  * Login using http authenticate.
711  *
712  * @param array    $param        Parameter array, see $param_defaults array.
713  *
714  * @return null
715  *
716  * @deprecated 3.2.10 (To be removed 4.0.0)
717  */
718  function phpbb_http_login($param)
719  {
720      global $auth, $user, $request;
721      global $config;
722   
723      $param_defaults = array(
724          'auth_message'    => '',
725   
726          'autologin'        => false,
727          'viewonline'    => true,
728          'admin'            => false,
729      );
730   
731      // Overwrite default values with passed values
732      $param = array_merge($param_defaults, $param);
733   
734      // User is already logged in
735      // We will not overwrite his session
736      if (!empty($user->data['is_registered']))
737      {
738          return;
739      }
740   
741      // $_SERVER keys to check
742      $username_keys = array(
743          'PHP_AUTH_USER',
744          'Authorization',
745          'REMOTE_USER', 'REDIRECT_REMOTE_USER',
746          'HTTP_AUTHORIZATION', 'REDIRECT_HTTP_AUTHORIZATION',
747          'REMOTE_AUTHORIZATION', 'REDIRECT_REMOTE_AUTHORIZATION',
748          'AUTH_USER',
749      );
750   
751      $password_keys = array(
752          'PHP_AUTH_PW',
753          'REMOTE_PASSWORD',
754          'AUTH_PASSWORD',
755      );
756   
757      $username = null;
758      foreach ($username_keys as $k)
759      {
760          if ($request->is_set($k, \phpbb\request\request_interface::SERVER))
761          {
762              $username = html_entity_decode($request->server($k), ENT_COMPAT);
763              break;
764          }
765      }
766   
767      $password = null;
768      foreach ($password_keys as $k)
769      {
770          if ($request->is_set($k, \phpbb\request\request_interface::SERVER))
771          {
772              $password = html_entity_decode($request->server($k), ENT_COMPAT);
773              break;
774          }
775      }
776   
777      // Decode encoded information (IIS, CGI, FastCGI etc.)
778      if (!is_null($username) && is_null($password) && strpos($username, 'Basic ') === 0)
779      {
780          list($username, $password) = explode(':', base64_decode(substr($username, 6)), 2);
781      }
782   
783      if (!is_null($username) && !is_null($password))
784      {
785          set_var($username, $username, 'string', true);
786          set_var($password, $password, 'string', true);
787   
788          $auth_result = $auth->login($username, $password, $param['autologin'], $param['viewonline'], $param['admin']);
789   
790          if ($auth_result['status'] == LOGIN_SUCCESS)
791          {
792              return;
793          }
794          else if ($auth_result['status'] == LOGIN_ERROR_ATTEMPTS)
795          {
796              send_status_line(401, 'Unauthorized');
797   
798              trigger_error('NOT_AUTHORISED');
799          }
800      }
801   
802      // Prepend sitename to auth_message
803      $param['auth_message'] = ($param['auth_message'] === '') ? $config['sitename'] : $config['sitename'] . ' - ' . $param['auth_message'];
804   
805      // We should probably filter out non-ASCII characters - RFC2616
806      $param['auth_message'] = preg_replace('/[\x80-\xFF]/', '?', $param['auth_message']);
807   
808      header('WWW-Authenticate: Basic realm="' . $param['auth_message'] . '"');
809      send_status_line(401, 'Unauthorized');
810   
811      trigger_error('NOT_AUTHORISED');
812  }
813   
814  /**
815  * Converts query string (GET) parameters in request into hidden fields.
816  *
817  * Useful for forwarding GET parameters when submitting forms with GET method.
818  *
819  * It is possible to omit some of the GET parameters, which is useful if
820  * they are specified in the form being submitted.
821  *
822  * sid is always omitted.
823  *
824  * @param \phpbb\request\request $request Request object
825  * @param array $exclude A list of variable names that should not be forwarded
826  * @return string HTML with hidden fields
827  *
828  * @deprecated 3.2.10 (To be removed 4.0.0)
829  */
830  function phpbb_build_hidden_fields_for_query_params($request, $exclude = null)
831  {
832      $names = $request->variable_names(\phpbb\request\request_interface::GET);
833      $hidden = '';
834      foreach ($names as $name)
835      {
836          // Sessions are dealt with elsewhere, omit sid always
837          if ($name == 'sid')
838          {
839              continue;
840          }
841   
842          // Omit any additional parameters requested
843          if (!empty($exclude) && in_array($name, $exclude))
844          {
845              continue;
846          }
847   
848          $escaped_name = phpbb_quoteattr($name);
849   
850          // Note: we might retrieve the variable from POST or cookies
851          // here. To avoid exposing cookies, skip variables that are
852          // overwritten somewhere other than GET entirely.
853          $value = $request->variable($name, '', true);
854          $get_value = $request->variable($name, '', true, \phpbb\request\request_interface::GET);
855          if ($value === $get_value)
856          {
857              $escaped_value = phpbb_quoteattr($value);
858              $hidden .= "<input type='hidden' name=$escaped_name value=$escaped_value />";
859          }
860      }
861      return $hidden;
862  }
863   
864  /**
865  * Delete all PM(s) for a given user and delete the ones without references
866  *
867  * @param    int        $user_id    ID of the user whose private messages we want to delete
868  *
869  * @return    boolean        False if there were no pms found, true otherwise.
870  *
871  * @deprecated 3.2.10 (To be removed 4.0.0)
872  */
873  function phpbb_delete_user_pms($user_id)
874  {
875      $user_id = (int) $user_id;
876   
877      if (!$user_id)
878      {
879          return false;
880      }
881   
882      return phpbb_delete_users_pms(array($user_id));
883  }
884