示例#1
0
 /**
  * Registers an extension point.
  *
  * @param rex_extension_point $extensionPoint Extension point
  *
  * @return mixed Subject, maybe adjusted by the extensions
  */
 public static function registerPoint(rex_extension_point $extensionPoint)
 {
     if (static::hasFactoryClass()) {
         return static::callFactoryClass(__FUNCTION__, func_get_args());
     }
     $name = $extensionPoint->getName();
     foreach ([self::EARLY, self::NORMAL, self::LATE] as $level) {
         if (isset(self::$extensions[$name][$level]) && is_array(self::$extensions[$name][$level])) {
             foreach (self::$extensions[$name][$level] as $extensionAndParams) {
                 list($extension, $params) = $extensionAndParams;
                 $extensionPoint->setExtensionParams($params);
                 $subject = call_user_func($extension, $extensionPoint);
                 // Update subject only if the EP is not readonly and the extension has returned something
                 if (!$extensionPoint->isReadonly() && null !== $subject) {
                     $extensionPoint->setSubject($subject);
                 }
             }
         }
     }
     return $extensionPoint->getSubject();
 }