/** * 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(); }