isInstantiable()) $concrete[$class] = singleton($class); } self::$all_indexes = $concrete; } return self::$all_indexes; } else { if (!isset(self::$indexes_by_subclass[$class])) { $all = self::get_indexes(); $valid = array(); foreach ($all as $indexclass => $instance) { if (is_subclass_of($indexclass, $class)) $valid[$indexclass] = $instance; } self::$indexes_by_subclass[$class] = $valid; } return self::$indexes_by_subclass[$class]; } } /** * Sometimes, like when in tests, you want to restrain the actual indexes to a subset * * Call with one argument - an array of class names, index instances or classname => indexinstance pairs (can be mixed). * Alternatively call with multiple arguments, each of which is a class name or index instance * * From then on, fulltext search system will only see those indexes passed in this most recent call. * * Passing in no arguments resets back to automatic index list */ static function force_index_list() { $indexes = func_get_args(); // No arguments = back to automatic if (!$indexes) { self::get_indexes(null, true); return; } // Arguments can be a single array if (is_array($indexes[0])) $indexes = $indexes[0]; // Reset to empty first self::$all_indexes = array(); self::$indexes_by_subclass = array(); // And parse out alternative type combos for arguments and add to allIndexes foreach ($indexes as $class => $index) { if (is_string($index)) { $class = $index; $index = singleton($class); } if (is_numeric($class)) $class = get_class($index); self::$all_indexes[$class] = $index; } } }