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

service.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 8.73 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  namespace phpbb\cache;
 015   
 016  /**
 017  * Class for grabbing/handling cached entries
 018  */
 019  class service
 020  {
 021      /**
 022      * Cache driver.
 023      *
 024      * @var \phpbb\cache\driver\driver_interface
 025      */
 026      protected $driver;
 027   
 028      /**
 029      * The config.
 030      *
 031      * @var \phpbb\config\config
 032      */
 033      protected $config;
 034   
 035      /**
 036      * Database connection.
 037      *
 038      * @var \phpbb\db\driver\driver_interface
 039      */
 040      protected $db;
 041   
 042      /**
 043      * Root path.
 044      *
 045      * @var string
 046      */
 047      protected $phpbb_root_path;
 048   
 049      /**
 050      * PHP file extension.
 051      *
 052      * @var string
 053      */
 054      protected $php_ext;
 055   
 056      /**
 057      * Creates a cache service around a cache driver
 058      *
 059      * @param \phpbb\cache\driver\driver_interface $driver The cache driver
 060      * @param \phpbb\config\config $config The config
 061      * @param \phpbb\db\driver\driver_interface $db Database connection
 062      * @param string $phpbb_root_path Root path
 063      * @param string $php_ext PHP file extension
 064      */
 065      public function __construct(\phpbb\cache\driver\driver_interface $driver, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, $phpbb_root_path, $php_ext)
 066      {
 067          $this->set_driver($driver);
 068          $this->config = $config;
 069          $this->db = $db;
 070          $this->phpbb_root_path = $phpbb_root_path;
 071          $this->php_ext = $php_ext;
 072      }
 073   
 074      /**
 075      * Returns the cache driver used by this cache service.
 076      *
 077      * @return \phpbb\cache\driver\driver_interface The cache driver
 078      */
 079      public function get_driver()
 080      {
 081          return $this->driver;
 082      }
 083   
 084      /**
 085      * Replaces the cache driver used by this cache service.
 086      *
 087      * @param \phpbb\cache\driver\driver_interface $driver The cache driver
 088      */
 089      public function set_driver(\phpbb\cache\driver\driver_interface $driver)
 090      {
 091          $this->driver = $driver;
 092      }
 093   
 094      public function __call($method, $arguments)
 095      {
 096          return call_user_func_array(array($this->driver, $method), $arguments);
 097      }
 098   
 099      /**
 100      * Obtain list of naughty words and build preg style replacement arrays for use by the
 101      * calling script
 102      */
 103      function obtain_word_list()
 104      {
 105          if (($censors = $this->driver->get('_word_censors')) === false)
 106          {
 107              $sql = 'SELECT word, replacement
 108                  FROM ' . WORDS_TABLE;
 109              $result = $this->db->sql_query($sql);
 110   
 111              $censors = array();
 112              while ($row = $this->db->sql_fetchrow($result))
 113              {
 114                  $censors['match'][] = get_censor_preg_expression($row['word']);
 115                  $censors['replace'][] = $row['replacement'];
 116              }
 117              $this->db->sql_freeresult($result);
 118   
 119              $this->driver->put('_word_censors', $censors);
 120          }
 121   
 122          return $censors;
 123      }
 124   
 125      /**
 126      * Obtain currently listed icons
 127      */
 128      function obtain_icons()
 129      {
 130          if (($icons = $this->driver->get('_icons')) === false)
 131          {
 132              // Topic icons
 133              $sql = 'SELECT *
 134                  FROM ' . ICONS_TABLE . '
 135                  ORDER BY icons_order';
 136              $result = $this->db->sql_query($sql);
 137   
 138              $icons = array();
 139              while ($row = $this->db->sql_fetchrow($result))
 140              {
 141                  $icons[$row['icons_id']]['img'] = $row['icons_url'];
 142                  $icons[$row['icons_id']]['width'] = (int) $row['icons_width'];
 143                  $icons[$row['icons_id']]['height'] = (int) $row['icons_height'];
 144                  $icons[$row['icons_id']]['display'] = (bool) $row['display_on_posting'];
 145              }
 146              $this->db->sql_freeresult($result);
 147   
 148              $this->driver->put('_icons', $icons);
 149          }
 150   
 151          return $icons;
 152      }
 153   
 154      /**
 155      * Obtain ranks
 156      */
 157      function obtain_ranks()
 158      {
 159          if (($ranks = $this->driver->get('_ranks')) === false)
 160          {
 161              $sql = 'SELECT *
 162                  FROM ' . RANKS_TABLE . '
 163                  ORDER BY rank_min DESC';
 164              $result = $this->db->sql_query($sql);
 165   
 166              $ranks = array();
 167              while ($row = $this->db->sql_fetchrow($result))
 168              {
 169                  if ($row['rank_special'])
 170                  {
 171                      unset($row['rank_min']);
 172                      $ranks['special'][$row['rank_id']] = $row;
 173                  }
 174                  else
 175                  {
 176                      $ranks['normal'][$row['rank_id']] = $row;
 177                  }
 178              }
 179              $this->db->sql_freeresult($result);
 180   
 181              $this->driver->put('_ranks', $ranks);
 182          }
 183   
 184          return $ranks;
 185      }
 186   
 187      /**
 188      * Obtain allowed extensions
 189      *
 190      * @param mixed $forum_id If false then check for private messaging, if int then check for forum id. If true, then only return extension informations.
 191      *
 192      * @return array allowed extensions array.
 193      */
 194      function obtain_attach_extensions($forum_id)
 195      {
 196          if (($extensions = $this->driver->get('_extensions')) === false)
 197          {
 198              $extensions = array(
 199                  '_allowed_post'    => array(),
 200                  '_allowed_pm'    => array(),
 201              );
 202   
 203              // The rule is to only allow those extensions defined. ;)
 204              $sql = 'SELECT e.extension, g.*
 205                  FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g
 206                  WHERE e.group_id = g.group_id
 207                      AND (g.allow_group = 1 OR g.allow_in_pm = 1)';
 208              $result = $this->db->sql_query($sql);
 209   
 210              while ($row = $this->db->sql_fetchrow($result))
 211              {
 212                  $extension = strtolower(trim($row['extension']));
 213   
 214                  $extensions[$extension] = array(
 215                      'display_cat'    => (int) $row['cat_id'],
 216                      'download_mode'    => (int) $row['download_mode'],
 217                      'upload_icon'    => trim($row['upload_icon']),
 218                      'max_filesize'    => (int) $row['max_filesize'],
 219                      'allow_group'    => $row['allow_group'],
 220                      'allow_in_pm'    => $row['allow_in_pm'],
 221                      'group_name'    => $row['group_name'],
 222                  );
 223   
 224                  $allowed_forums = ($row['allowed_forums']) ? unserialize(trim($row['allowed_forums'])) : array();
 225   
 226                  // Store allowed extensions forum wise
 227                  if ($row['allow_group'])
 228                  {
 229                      $extensions['_allowed_post'][$extension] = (!sizeof($allowed_forums)) ? 0 : $allowed_forums;
 230                  }
 231   
 232                  if ($row['allow_in_pm'])
 233                  {
 234                      $extensions['_allowed_pm'][$extension] = 0;
 235                  }
 236              }
 237              $this->db->sql_freeresult($result);
 238   
 239              $this->driver->put('_extensions', $extensions);
 240          }
 241   
 242          // Forum post
 243          if ($forum_id === false)
 244          {
 245              // We are checking for private messages, therefore we only need to get the pm extensions...
 246              $return = array('_allowed_' => array());
 247   
 248              foreach ($extensions['_allowed_pm'] as $extension => $check)
 249              {
 250                  $return['_allowed_'][$extension] = 0;
 251                  $return[$extension] = $extensions[$extension];
 252              }
 253   
 254              $extensions = $return;
 255          }
 256          else if ($forum_id === true)
 257          {
 258              return $extensions;
 259          }
 260          else
 261          {
 262              $forum_id = (int) $forum_id;
 263              $return = array('_allowed_' => array());
 264   
 265              foreach ($extensions['_allowed_post'] as $extension => $check)
 266              {
 267                  // Check for allowed forums
 268                  if (is_array($check))
 269                  {
 270                      $allowed = (!in_array($forum_id, $check)) ? false : true;
 271                  }
 272                  else
 273                  {
 274                      $allowed = true;
 275                  }
 276   
 277                  if ($allowed)
 278                  {
 279                      $return['_allowed_'][$extension] = 0;
 280                      $return[$extension] = $extensions[$extension];
 281                  }
 282              }
 283   
 284              $extensions = $return;
 285          }
 286   
 287          if (!isset($extensions['_allowed_']))
 288          {
 289              $extensions['_allowed_'] = array();
 290          }
 291   
 292          return $extensions;
 293      }
 294   
 295      /**
 296      * Obtain active bots
 297      */
 298      function obtain_bots()
 299      {
 300          if (($bots = $this->driver->get('_bots')) === false)
 301          {
 302              switch ($this->db->get_sql_layer())
 303              {
 304                  case 'mssql':
 305                  case 'mssql_odbc':
 306                  case 'mssqlnative':
 307                      $sql = 'SELECT user_id, bot_agent, bot_ip
 308                          FROM ' . BOTS_TABLE . '
 309                          WHERE bot_active = 1
 310                      ORDER BY LEN(bot_agent) DESC';
 311                  break;
 312   
 313                  // LENGTH supported by MySQL, IBM DB2 and Oracle for sure...
 314                  default:
 315                      $sql = 'SELECT user_id, bot_agent, bot_ip
 316                          FROM ' . BOTS_TABLE . '
 317                          WHERE bot_active = 1
 318                      ORDER BY LENGTH(bot_agent) DESC';
 319                  break;
 320              }
 321              $result = $this->db->sql_query($sql);
 322   
 323              $bots = array();
 324              while ($row = $this->db->sql_fetchrow($result))
 325              {
 326                  $bots[] = $row;
 327              }
 328              $this->db->sql_freeresult($result);
 329   
 330              $this->driver->put('_bots', $bots);
 331          }
 332   
 333          return $bots;
 334      }
 335   
 336      /**
 337      * Obtain cfg file data
 338      */
 339      function obtain_cfg_items($style)
 340      {
 341          $parsed_array = $this->driver->get('_cfg_' . $style['style_path']);
 342   
 343          if ($parsed_array === false)
 344          {
 345              $parsed_array = array();
 346          }
 347   
 348          $filename = $this->phpbb_root_path . 'styles/' . $style['style_path'] . '/style.cfg';
 349   
 350          if (!file_exists($filename))
 351          {
 352              return $parsed_array;
 353          }
 354   
 355          if (!isset($parsed_array['filetime']) || (($this->config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime'])))
 356          {
 357              // Re-parse cfg file
 358              $parsed_array = parse_cfg_file($filename);
 359              $parsed_array['filetime'] = @filemtime($filename);
 360   
 361              $this->driver->put('_cfg_' . $style['style_path'], $parsed_array);
 362          }
 363   
 364          return $parsed_array;
 365      }
 366   
 367      /**
 368      * Obtain disallowed usernames
 369      */
 370      function obtain_disallowed_usernames()
 371      {
 372          if (($usernames = $this->driver->get('_disallowed_usernames')) === false)
 373          {
 374              $sql = 'SELECT disallow_username
 375                  FROM ' . DISALLOW_TABLE;
 376              $result = $this->db->sql_query($sql);
 377   
 378              $usernames = array();
 379              while ($row = $this->db->sql_fetchrow($result))
 380              {
 381                  $usernames[] = str_replace('%', '.*?', preg_quote(utf8_clean_string($row['disallow_username']), '#'));
 382              }
 383              $this->db->sql_freeresult($result);
 384   
 385              $this->driver->put('_disallowed_usernames', $usernames);
 386          }
 387   
 388          return $usernames;
 389      }
 390  }
 391