Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

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

index.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 6.62 KiB


 001  <?php
 002  /**
 003  *
 004  * @package phpBB3
 005  * @version $Id$
 006  * @copyright (c) 2007 phpBB Group
 007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 008  *
 009  */
 010   
 011  /**
 012  * @ignore
 013  */
 014  if (!defined('IN_PHPBB'))
 015  {
 016      exit;
 017  }
 018   
 019  /**
 020  * phpBB Hook Class
 021  * @package phpBB3
 022  */
 023  class phpbb_hook
 024  {
 025      /**
 026      * Registered hooks
 027      */
 028      var $hooks = array();
 029   
 030      /**
 031      * Results returned by functions called
 032      */
 033      var $hook_result = array();
 034   
 035      /**
 036      * internal pointer
 037      */
 038      var $current_hook = NULL;
 039   
 040      /**
 041      * Initialize hook class.
 042      *
 043      * @param array $valid_hooks array containing the hookable functions/methods
 044      */
 045      function phpbb_hook($valid_hooks)
 046      {
 047          foreach ($valid_hooks as $_null => $method)
 048          {
 049              $this->add_hook($method);
 050          }
 051   
 052          if (function_exists('phpbb_hook_register'))
 053          {
 054              phpbb_hook_register($this);
 055          }
 056      }
 057   
 058      /**
 059      * Register function/method to be called within hook
 060      * This function is normally called by the modification/application to attach/register the functions.
 061      *
 062      * @param mixed $definition Declaring function (with __FUNCTION__) or class with array(__CLASS__, __FUNCTION__)
 063      * @param mixed $hook The replacement function/method to be called. Passing function name or array with object/class definition
 064      * @param string $mode Specify the priority/chain mode. 'normal' -> hook gets appended to the chain. 'standalone' -> only the specified hook gets called - later hooks are not able to overwrite this (E_NOTICE is triggered then). 'first' -> hook is called as the first one within the chain. 'last' -> hook is called as the last one within the chain.
 065      */
 066      function register($definition, $hook, $mode = 'normal')
 067      {
 068          $class = (!is_array($definition)) ? '__global' : $definition[0];
 069          $function = (!is_array($definition)) ? $definition : $definition[1];
 070   
 071          // Method able to be hooked?
 072          if (isset($this->hooks[$class][$function]))
 073          {
 074              switch ($mode)
 075              {
 076                  case 'standalone':
 077                      if (!isset($this->hooks[$class][$function]['standalone']))
 078                      {
 079                          $this->hooks[$class][$function] = array('standalone' => $hook);
 080                      }
 081                      else
 082                      {
 083                          trigger_error('Hook not able to be called standalone, previous hook already standalone.', E_NOTICE);
 084                      }
 085                  break;
 086   
 087                  case 'first':
 088                  case 'last':
 089                      $this->hooks[$class][$function][$mode][] = $hook;
 090                  break;
 091   
 092                  case 'normal':
 093                  default:
 094                      $this->hooks[$class][$function]['normal'][] = $hook;
 095                  break;
 096              }
 097          }
 098      }
 099   
 100      /**
 101      * Calling all functions/methods attached to a specified hook.
 102      * Called by the function allowing hooks...
 103      *
 104      * @param mixed $definition Declaring function (with __FUNCTION__) or class with array(__CLASS__, __FUNCTION__)
 105      * @return bool False if no hook got executed, true otherwise
 106      */
 107      function call_hook($definition)
 108      {
 109          $class = (!is_array($definition)) ? '__global' : $definition[0];
 110          $function = (!is_array($definition)) ? $definition : $definition[1];
 111   
 112          if (!empty($this->hooks[$class][$function]))
 113          {
 114              // Developer tries to call a hooked function within the hooked function...
 115              if ($this->current_hook !== NULL && $this->current_hook['class'] === $class && $this->current_hook['function'] === $function)
 116              {
 117                  return false;
 118              }
 119   
 120              // Call the hook with the arguments attached and store result
 121              $arguments = func_get_args();
 122              $this->current_hook = array('class' => $class, 'function' => $function);
 123              $arguments[0] = &$this;
 124   
 125              // Call the hook chain...
 126              if (isset($this->hooks[$class][$function]['standalone']))
 127              {
 128                  $this->hook_result[$class][$function] = call_user_func_array($this->hooks[$class][$function]['standalone'], $arguments);
 129              }
 130              else
 131              {
 132                  foreach (array('first', 'normal', 'last') as $mode)
 133                  {
 134                      if (!isset($this->hooks[$class][$function][$mode]))
 135                      {
 136                          continue;
 137                      }
 138   
 139                      foreach ($this->hooks[$class][$function][$mode] as $hook)
 140                      {
 141                          $this->hook_result[$class][$function] = call_user_func_array($hook, $arguments);
 142                      }
 143                  }
 144              }
 145   
 146              $this->current_hook = NULL;
 147              return true;
 148          }
 149   
 150          $this->current_hook = NULL;
 151          return false;
 152      }
 153   
 154      /**
 155      * Get result from previously called functions/methods for the same hook
 156      *
 157      * @param mixed $definition Declaring function (with __FUNCTION__) or class with array(__CLASS__, __FUNCTION__)
 158      * @return mixed False if nothing returned if there is no result, else array('result' => ... )
 159      */
 160      function previous_hook_result($definition)
 161      {
 162          $class = (!is_array($definition)) ? '__global' : $definition[0];
 163          $function = (!is_array($definition)) ? $definition : $definition[1];
 164   
 165          if (!empty($this->hooks[$class][$function]) && isset($this->hook_result[$class][$function]))
 166          {
 167              return array('result' => $this->hook_result[$class][$function]);
 168          }
 169   
 170          return false;
 171      }
 172   
 173      /**
 174      * Check if the called functions/methods returned something.
 175      *
 176      * @param mixed $definition Declaring function (with __FUNCTION__) or class with array(__CLASS__, __FUNCTION__)
 177      * @return bool True if results are there, false if not
 178      */
 179      function hook_return($definition)
 180      {
 181          $class = (!is_array($definition)) ? '__global' : $definition[0];
 182          $function = (!is_array($definition)) ? $definition : $definition[1];
 183   
 184          if (!empty($this->hooks[$class][$function]) && isset($this->hook_result[$class][$function]))
 185          {
 186              return true;
 187          }
 188   
 189          return false;
 190      }
 191   
 192      /**
 193      * Give actual result from called functions/methods back.
 194      *
 195      * @param mixed $definition Declaring function (with __FUNCTION__) or class with array(__CLASS__, __FUNCTION__)
 196      * @return mixed The result
 197      */
 198      function hook_return_result($definition)
 199      {
 200          $class = (!is_array($definition)) ? '__global' : $definition[0];
 201          $function = (!is_array($definition)) ? $definition : $definition[1];
 202   
 203          if (!empty($this->hooks[$class][$function]) && isset($this->hook_result[$class][$function]))
 204          {
 205              $result = $this->hook_result[$class][$function];
 206              unset($this->hook_result[$class][$function]);
 207              return $result;
 208          }
 209   
 210          return;
 211      }
 212   
 213      /**
 214      * Add new function to the allowed hooks.
 215      *
 216      * @param mixed $definition Declaring function (with __FUNCTION__) or class with array(__CLASS__, __FUNCTION__)
 217      */
 218      function add_hook($definition)
 219      {
 220          if (!is_array($definition))
 221          {
 222              $definition = array('__global', $definition);
 223          }
 224   
 225          $this->hooks[$definition[0]][$definition[1]] = array();
 226      }
 227   
 228      /**
 229      * Remove function from the allowed hooks.
 230      *
 231      * @param mixed $definition Declaring function (with __FUNCTION__) or class with array(__CLASS__, __FUNCTION__)
 232      */
 233      function remove_hook($definition)
 234      {
 235          $class = (!is_array($definition)) ? '__global' : $definition[0];
 236          $function = (!is_array($definition)) ? $definition : $definition[1];
 237   
 238          if (isset($this->hooks[$class][$function]))
 239          {
 240              unset($this->hooks[$class][$function]);
 241   
 242              if (isset($this->hook_result[$class][$function]))
 243              {
 244                  unset($this->hook_result[$class][$function]);
 245              }
 246          }
 247      }
 248  }
 249   
 250  ?>