/** * * @param nc_search_document $document */ protected function set_indexing_context(nc_search_document $document) { if (!$this->context) { $this->context = new nc_search_context(array('search_provider' => get_class($this), 'action' => 'indexing')); } $this->context->set('language', $document->get('language')); nc_search::set_current_context($this->context); }
/** * * @param string $interface * @param nc_search_context $context * @return nc_search_extension_chain с экземплярами классов расширения, подходящих под данный контекст * @throws nc_search_exception */ public static function get($interface, nc_search_context $context) { $cache_id = $interface . "__" . $context->get_hash(); if (isset(self::$cache[$cache_id])) { return self::$cache[$cache_id]; } $result = new nc_search_extension_chain(); foreach (self::get_all_extensions() as $rule) { if ($rule->get('extension_interface') == $interface && $context->conforms_to($rule)) { $extension_class = $rule->get('extension_class'); $extension_instance = new $extension_class($context); if (!$extension_instance instanceof $interface) { // WTF? Implement an interface! throw new nc_search_exception("Extension '{$extension_class}' does not implement the interface '{$interface}'"); } $result->add($extension_instance); } } self::$cache[$cache_id] = $result; return $result; }