function handle() { $output = array(); // Get and handle a comma-seperated list of valid params which we will forward to the indexer $permitted_forwarding_params = explode(',', $this->options['valid_solr_params']); $forwarded_params = array_intersect_key(array_flip($permitted_forwarding_params), $this->params); $fields = array(); foreach ($forwarded_params as $param_name => $_) { $fields[$param_name] = $this->params[$param_name]; } $fields = array_merge($this->default_params, $fields); $CI =& get_instance(); $CI->load->library('solr'); foreach ($fields as $key => $field) { $CI->solr->setOpt($key, $field); } // Get back a list of IDs for matching registry objects $solr_result = $CI->solr->executeSearch(true); $rifcsOutput = array(); $CI->load->helper('crosswalks'); $crosswalks = getCrossWalks(); if (isset($solr_result['response']['docs']) && is_array($solr_result['response']['docs'])) { foreach ($solr_result['response']['docs'] as $result) { $CI->load->model('registry_object/registry_objects', 'ro'); $registryObject = $CI->ro->getByID((int) $result['id']); if ($registryObject) { $nativeFormat = $registryObject->getNativeFormat(); // Try and get the native version? if (in_array($nativeFormat, array(RIFCS_SCHEME, EXTRIF_SCHEME))) { $registryObjects[] = array("slug" => $registryObject->slug, "scheme" => $nativeFormat, "data" => wrapRegistryObjects($registryObject->getRif())); } else { // Check for a matching scheme from a crosswalk $matched = false; foreach ($crosswalks as $cw) { if ($cw->metadataFormat() == $nativeFormat) { $matched = true; $registryObjects[] = array("slug" => $registryObject->slug, "scheme" => $nativeFormat, "data" => $cw->wrapNativeFormat($registryObject->getNativeFormatData())); } } // If no matching crosswalk wraped, then just spit out whatever we've got... if (!$matched) { $registryObjects[] = array("slug" => $registryObject->slug, "scheme" => $nativeFormat, "data" => $registryObject->getNativeFormatData()); } } } } } $rifcsOutput = array("numFound" => $solr_result['response']['numFound'], "start" => $solr_result['response']['start'], "docs" => &$registryObjects); // Bubble back the output status return $this->formatter->display($rifcsOutput); }
/** * */ public function setCrosswalk($crosswalk_metadata_format) { $crosswalk_identity = ''; if (!$crosswalk_metadata_format) { return; } $predefinedProviderTypes = $this->CI->config->item('provider_types'); // die("ppt: ". $predefinedProviderTypes); foreach ($predefinedProviderTypes as $ppt) { if ($ppt['prefix'] == $crosswalk_metadata_format) { $crosswalk_identity = $ppt['cross_walk']; } } $crosswalks = getCrossWalks(); foreach ($crosswalks as $crosswalk) { if ($crosswalk->metadataFormat() == $crosswalk_metadata_format || $crosswalk->identify() == $crosswalk_identity) { $this->crosswalk = $crosswalk; } } return; /*if($crosswalk_identity == '') { return;} if (!$this->crosswalk) { throw new Exception("Unable to load crosswalk: " . $crosswalk_metadata_format); }*/ }