Ontology\Peertube::class, ]; /** * A list of ontologies loaded by implementers, by their names and * associated definitions. * * @var array */ private static $externals = []; /** * Allowed ontologies in current context. A list of keys that refers * to self::$internals and self::$externals definitions * * @var array */ private static $loaded = []; /** * Clear all ontologies definitions and loaded array */ public static function clear() { self::$externals = []; foreach (self::$loaded as $name) { self::unload($name); } } /** * Add an ontology definition in the pool. * Useful to define custom ontology classes on the fly * * @param string $name Ontology name. * @param string $class Types definitions * @param bool $load */ public static function add(string $name, string $class, bool $load = true) { // Reserved keyword if ($name == '*') { throw new Exception( "Name '$name' is a reserved keyword" ); } // Class exists if (!class_exists($class)) { throw new Exception( "Class '$class' does not exist" ); } // Class implements OntologyBase if (!method_exists($class, 'getDefinition')) { throw new Exception( "Class '$class' MUST implement " . OntologyInterface::class . " interface." ); } // Put in the external stack if needed self::$externals[$name] = $class; // Load if needed if ($load) { self::load($name); } } /** * Load an ontology as an active one. * * @param string $name Ontology name. * @throws \Exception if ontology has not been defined */ public static function load(string $name) { $ontologies = []; if ($name == '*') { $ontologies = self::$internals + self::$externals; } else { // externals (override) if (isset(self::$externals[$name])) { $ontologies[$name] = self::$externals[$name]; } elseif (isset(self::$internals[$name])) { $ontologies[$name] = self::$internals[$name]; } else { // Not found throw new Exception( "Ontology '{$name}' has not been defined" ); } } foreach ($ontologies as $name => $ontology) { Dialect::add($name, $ontology::getDefinition()); if (!array_search($name, self::$loaded)) { array_push(self::$loaded, $name); } } } /** * Unload an ontology. * * @param string $name Ontology name. */ public static function unload(string $name) { self::$loaded = array_filter( self::$loaded, function ($value) use ($name) { return $value != $name && $dialect != '*'; } ); Dialect::unload($name); } } __halt_compiler();----SIGNATURE:----l3zZDX57N9/5TO0xJYqKNcgQoYsPZWESQc1+yYcmbJU3t3Nd0m4BCZMjpaaAHrTj2HUrXy8JPqN2PX9ZGCu46xbM90wRgnv2XSx2csXg2G4AhEABpFzlipsDC3XtiGUwuPzlxBR9I9h8IKrc0Jh1gmgX7UHcooii315NyjG3eLCsmC1rnK+kdE11QnJFc0nW0PZsYgxs58cLEAKQFo4T+6OA0ZTN17XQuct9vgBaDAtTDx83ikVWRYuuF7B2Tn4kfO8m9LQtQhS/FSnVcZGiygLBlMHG9HyAkNHPRT55J9ZdQlvhWmdTqJpgFQOyvwvz1uhmZGabKsXFHAWegm0y/q+GtoKcEvc/XR8xdAo4/uAwOyr5EvKESjeQsuzqOZ3pyoXPGeJSKHc2fjZUd7Lc9Y10b4MZC4O9v1d03K2cFWgMvwawWyYmsvyja8nH29fosTwYyk4Z7ekVNNBFnsc6jCZS8y5r9CkI+lYgLWqzB8pvf1azsom1Z67jgXCsIsNnd55ijy8QY1ZFg7kH8qDkl9d4OTnVhugVoCXK5blw6ZzVTclpwbf/WJCOQMHcyC2kdR6f0+6VpkaxfaN59StwEsW/TuP3g6Kcz6dAZXp76PKHguc79n8qrdIbXGSMn6i5oOyEBnEQLq2GgbK6Z0F0bWCrayaZKobm0thdeUnPg9s=----ATTACHMENT:----ODg3OTk1NTQ4MjA4NDg0NCAzMjIwNDE4OTUzNTk4NTU5IDg2MjYxNTQ1Mjk5Nzc0MQ==