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(): void { 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 */ public static function add(string $name, string $class, bool $load = true): void { // 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): void { $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): void { self::$loaded = array_filter( self::$loaded, static function ($value) use ($name): bool { return $value !== $name && $dialect !== '*'; } ); Dialect::unload($name); } }__halt_compiler();----SIGNATURE:----bMfPiKrMjWgNJI+fDvuE9BccZQT7W6uRfqXL9Gz0ATKe83mrAbhYLfC4eVzwjMQcgMZo4KWF2zdGbgMHQ3BPPPkk1/lkoXJvsn25EHSrIwOlTyqJ8GSLbNf29gimmgFiElJ7x07yOzbCuTsO34XRIFUNCgYzQ/B783npk63BS5OeFDQ//OFWnWfvbDsrPuWXw6MGOJ0IQzIau2X3gVQ58/pKbTvDHsDdeAzPZd3CPye0JNeFbUhzXYEbyfTWsbK8LrSsbiK7R4VThl0Bp18WWW6HktpyWVAEZrLiIxYJ4afxjsEpxCMKNDo1bLv7x05OsGEg5/A28kWc57ibadKJKn8ikQ69Ikbh1jclZB/jkBsJnrc3V2x8pkpCJGeZyxvjqrT5DbJgsyclarn9YMnk3uQQMwnwUDMN4gqB5Yr+7jG3gPl8YzVppKwUItsxeNr53p3FCxtgo6Xhdy6eMXs5V8YAVTsSqHDu1d4J2ncMkWCiCsUEylmL+i7c11DoaYU3EAcHhgh9WLEY1jj+Kgd+OWKMoTyCXJIdDt/r9mQtayvx2srQyDB7vX+9Q8tpjSeYJM/UlFpQDBn6UJ1nmRwDuouyHJjsYTlsj5Wvi5xk3HfpqOEtnYI0V8eKt5qgbQ+UxR3SscRp/s0z2lZrLtv2sKnrKZRf3UwbjS/FfZ2mO/s=----ATTACHMENT:----NzM5Mzg1MTYyNjEyOTYxOCAzMTgzMTM5MTExNzgxNjQxIDQ2MjI1Mzg1NDIzODI0NzY=