<?php /** * Module search * @package Broker */ if (strtoupper ( $_SERVER ['REQUEST_METHOD'] ) == "POST") { header ( "Content-Type: text/javascript; charset=utf-8" ); header ( "Access-Control-Allow-Origin: *" ); header ( "Access-Control-Allow-Headers: content-type" ); $brokerRequest = file_get_contents ( "php://input" ); $response = array (); $response ["status"] = "ERROR"; try { $parser = new \Broker\Parser ( $brokerRequest, $configuration, null, null, null, null ); header ( "X-Broker-errors: " . count ( $parser->getErrors () ) ); header ( "X-Broker-warnings: " . count ( $parser->getWarnings () ) ); header ( "X-Broker-shards: " . count ( $parser->getShards () ) ); header ( "X-Broker-configuration: " . urlencode ( $parser->getConfiguration () ) ); if (count ( $parser->getErrors () ) > 0) { header ( "HTTP/1.0 400 Bad request" ); $response ["brokerErrors"] = array ( "data" => $parser->getErrors () ); $response ["solrStatus"] = \Broker\Response::createSolrStatus ( "broker", "request couldn't be parsed by broker" ); if (count ( $parser->getWarnings () ) > 0) { $response ["brokerWarnings"] = array ( "data" => $parser->getWarnings () ); } echo json_encode ( $response ); } else { $collectionIds = $parser->getCollectionIds (); if (count ( $collectionIds ) > 0) { $collection = $parser->getCollection (); foreach ( $collectionIds as $collectionId ) { $checkInfo = $collection->check ( $collectionId ); if (! $checkInfo) { $response ["error"] = "collection " . $collectionId . " not found"; return $response; } else if (! $checkInfo ["initialised"]) { $response ["error"] = "collection " . $collectionId . " not initialised"; return $response; } else if ($checkInfo ["check"]) { if (! $collection->doCheck ( $collectionId )) { $response ["error"] = "collection " . $collectionId . " couldn't be checked"; return $response; } } } } try { $solr = new \Broker\Solr ( $parser->getConfiguration (), $parser->getUrl (), "select", $parser->getRequest (), $parser->getRequestAddition(), $parser->getShards () != null ? implode ( ",", $parser->getShards () ) : null, $parser->getCache () ); $solrResponse = $solr->getResponse (); if ($solrResponse && is_object ( $solrResponse )) { if (isset ( $solrResponse->error )) { $response ["error"] = $solrResponse->error; } else if (isset ( $solrResponse->responseHeader ) && isset ( $solrResponse->responseHeader->partialResults ) && $solrResponse->responseHeader->partialResults) { $partialNumber = (isset($solrResponse->response) && isset($solrResponse->response->numFound))?intval($solrResponse->response->numFound):null; $partialTime = (isset ($solrResponse->responseHeader) && isset ($solrResponse->responseHeader->QTime))?intval($solrResponse->responseHeader->QTime):null; $partialError = "Only partial results"; if($partialNumber!==null) { $partialError.=": ".$partialNumber." documents"; } if($partialTime!==null) { $partialError.=" found in ".$partialTime." ms"; } $response ["error"] = $partialError; } else if (isset ( $solrResponse->response )) { $response ["status"] = "OK"; $response ["response"] = clone $solrResponse; $responseObject = new \Broker\Response ( $response, $parser->getResponseJoins (), $configuration, $parser->getCache (), null ); $response = $responseObject->process (); } else { $response ["error"] = $solrResponse; } } else { $response ["error"] = $solrResponse; } } catch ( \Broker\SolrException $se ) { $response ["error"] = $se->getMessage (); } catch ( \Exception $e ) { $response ["error"] = $solr->getResponse (); } if ($response ["status"] !== "OK") { header ( "HTTP/1.0 500 Internal Server Error" ); header ( "X-Broker-errors: " . (count ( $parser->getErrors () ) + 1) ); $response ["solrStatus"] = \Broker\Response::createSolrStatus ( "broker", "request parsed by broker" ); if (count ( $parser->getWarnings () ) > 0) { $response ["brokerWarnings"] = array ( "data" => $parser->getWarnings () ); } echo json_encode ( $response ); } else { if (isset ( $response ["response"] )) { if (isset ( $_SERVER ["HTTP_ACCEPT_ENCODING"] ) && strpos ( $_SERVER ["HTTP_ACCEPT_ENCODING"], "gzip" ) !== false) { header ( "Content-Encoding: gzip" ); $content = gzencode ( json_encode ( $response ["response"] ) ); } else { $content = json_encode ( $response ["response"] ); } header ( "Vary: Accept-Encoding" ); header ( "Content-Length: " . strlen ( $content ) ); echo $content; } } } } catch ( Exception $e ) { header ( "HTTP/1.0 400 Bad request" ); $response ["brokerErrors"] = array ( "data" => $e->getMessage () ); $response ["solrStatus"] = \Broker\Response::createSolrStatus ( "broker", "request couldn't be parsed by broker" ); echo json_encode ( $response ); } exit (); } ?>