<?php /** * Broker * @package Broker */ namespace Broker; /** * Handles solr requests */ class Solr { /** * Request * * @var string */ private $request = null; /** * Request addition * * @var string */ private $requestAddition = null; /** * Handler * * @var string */ private $handler = null; /** * Url * * @var string */ private $url = null; /** * Shards * * @var array */ private $shards = null; /** * Cache * * @var \Broker\Cache */ private $cache = null; /** * Configuration * * @var object */ private $configuration = null; /** * Constructor * * @param string $configuration * @param string $url * @param string $handler * @param string $request * @param string $requestAddition * @param array $shards * @param \Broker\Cache $cache */ public function __construct($configuration, $url, $handler, $request, $requestAddition, $shards, $cache) { $this->request = $request; $this->requestAddition = $requestAddition; $this->handler = $handler; $this->url = $url; $this->shards = $shards; $this->cache = $cache; $this->configuration = $configuration; } /** * Perform request and return response object * * @return object * @throws \Broker\SolrException */ public function getResponse() { $finalRequest = $this->request; if ($this->shards != null) { $finalRequest = ($finalRequest ? $finalRequest . "&" : "") . "shards=" . urlencode ( $this->shards ); } //check cache if ($this->cache != null) { list ( $id, $response ) = $this->cache->check ( $this->configuration, $this->url . $this->handler . "/", $finalRequest ); if ($id && $response) { if ($data = json_decode ( $response )) { return $data; } else { $this->cache->del ( $id ); } } } //add addition after cache handling if($this->requestAddition!=null) { $finalSearchRequest=$finalRequest."&".$this->requestAddition; } else { $finalSearchRequest=$finalRequest; } $ch = curl_init ( $this->url . $this->handler . "/" ); $options = array ( CURLOPT_HTTPHEADER => array ( "Content-Type: application/x-www-form-urlencoded; charset=utf-8" ), CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $finalSearchRequest ); curl_setopt_array ( $ch, $options ); $result = curl_exec ( $ch ); if (($data = json_decode ( $result ))) { // cache if ($this->cache != null && ! isset ( $data->error )) { if(!isset($data->responseHeader) || !isset($data->responseHeader->partialResults) || !$data->responseHeader->partialResults) { $this->cache->create ( $this->configuration, $this->url . $this->handler . "/", $finalRequest, $this->requestAddition, $result ); } } // return data return $data; } else { throw new \Broker\SolrException ( "No valid json from " . $this->url, 500 ); } } } ?>