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. |
|
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
functions_compatibility.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 /**
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