コード例 #1
0
ファイル: Debug.php プロジェクト: jollysean/solr-codeigniter
 /**
  * Add request settings for the debug component
  *
  * @param  DebugComponent $component
  * @param  Request        $request
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     $request->addParam('debugQuery', 'true');
     $request->addParam('debug.explain.structured', 'true');
     $request->addParam('explainOther', $component->getExplainOther());
     return $request;
 }
コード例 #2
0
 /**
  * @depends testConstructorAndGetters
  *
  * @param PreCreateRequest $event
  */
 public function testSetAndGetQuery($event)
 {
     $request = new Request();
     $request->addParam('testparam', 'test value');
     $event->setRequest($request);
     $this->assertEquals($request, $event->getRequest());
 }
コード例 #3
0
 public function testConstructorAndGetters()
 {
     $query = new Query();
     $query->setQuery('test123');
     $request = new Request();
     $request->addParam('testparam', 'test value');
     $event = new PostCreateRequest($query, $request);
     $this->assertEquals($query, $event->getQuery());
     $this->assertEquals($request, $event->getRequest());
 }
コード例 #4
0
 public function testConstructorAndGetters()
 {
     $client = new Client();
     $request = new Request();
     $request->addParam('testparam', 'test value');
     $endpoint = $client->getEndpoint();
     $event = new PreExecuteRequest($request, $endpoint);
     $this->assertEquals($request, $event->getRequest());
     $this->assertEquals($endpoint, $event->getEndpoint());
     return $event;
 }
コード例 #5
0
 public function testConstructorAndGetters()
 {
     $client = new Client();
     $request = new Request();
     $request->addParam('testparam', 'test value');
     $endpoint = $client->getEndpoint();
     $response = new Response('', array('HTTP 1.0 200 OK'));
     $event = new PostExecuteRequest($request, $endpoint, $response);
     $this->assertEquals($request, $event->getRequest());
     $this->assertEquals($endpoint, $event->getEndpoint());
     $this->assertEquals($response, $event->getResponse());
 }
コード例 #6
0
 /**
  * Add request settings for DistributedSearch
  *
  * @param  DistributedSearchComponent $component
  * @param  Request                    $request
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // add shards to request
     $shards = array_values($component->getShards());
     if (count($shards)) {
         $request->addParam('shards', implode(',', $shards));
     }
     $request->addParam('shards.qt', $component->getShardRequestHandler());
     // add collections to request
     $collections = array_values($component->getCollections());
     if (count($collections)) {
         $request->addParam('collection', implode(',', $collections));
     }
     return $request;
 }
コード例 #7
0
 /**
  * Build request for a select query.
  *
  * @param QueryInterface|Query $query
  *
  * @return Request
  */
 public function build(QueryInterface $query)
 {
     $request = new Request();
     $request->setHandler($query->getHandler());
     $request->addParam('omitHeader', $query->getOmitHeader());
     $request->addParam('timeAllowed', $query->getTimeAllowed());
     $request->addParams($query->getParams());
     $request->addParam('wt', $query->getResponseWriter());
     if ($query->getResponseWriter() == $query::WT_JSON) {
         // only one JSON format is supported
         $request->addParam('json.nl', 'flat');
     }
     return $request;
 }
コード例 #8
0
 /**
  * Build request for a select query
  *
  * @param  Query   $query
  * @return Request
  */
 public function build(QueryInterface $query)
 {
     $request = new Request();
     $request->setHandler($query->getHandler());
     $request->addParam('omitHeader', $query->getOmitHeader());
     $request->addParams($query->getParams());
     $request->addParam('wt', $query->getResponseWriter());
     return $request;
 }
コード例 #9
0
 /**
  * Add request settings for DistributedSearch.
  *
  * @param DistributedSearchComponent $component
  * @param Request                    $request
  *
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // add shards to request
     $shards = array_values($component->getShards());
     if (count($shards)) {
         $request->addParam('shards', implode(',', $shards));
     }
     $replicas = array_values($component->getReplicas());
     if (count($replicas)) {
         $value = $request->getParam('shards') ? $request->getParam('shards') . ',' . implode('|', $replicas) : implode('|', $replicas);
         $request->addParam('shards', $value, true);
     }
     $request->addParam('shards.qt', $component->getShardRequestHandler());
     // add collections to request
     $collections = array_values($component->getCollections());
     if (count($collections)) {
         $request->addParam('collection', implode(',', $collections));
     }
     return $request;
 }
コード例 #10
0
ファイル: Stats.php プロジェクト: jollysean/solr-codeigniter
 /**
  * Add request settings for the stats component
  *
  * @param  StatsComponent $component
  * @param  Request        $request
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable stats
     $request->addParam('stats', 'true');
     // add fields
     foreach ($component->getFields() as $field) {
         $request->addParam('stats.field', $field->getKey());
         // add field specific facet stats
         foreach ($field->getFacets() as $facet) {
             $request->addParam('f.' . $field->getKey() . '.stats.facet', $facet);
         }
     }
     // add facet stats for all fields
     foreach ($component->getFacets() as $facet) {
         $request->addParam('stats.facet', $facet);
     }
     return $request;
 }
コード例 #11
0
ファイル: Stats.php プロジェクト: nubs/solarium
 /**
  * Add request settings for the stats component
  *
  * @param  StatsComponent $component
  * @param  Request        $request
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable stats
     $request->addParam('stats', 'true');
     // add fields
     foreach ($component->getFields() as $field) {
         $value = $this->renderLocalParams($field->getKey(), array('ex' => $field->getExcludes()));
         $request->addParam('stats.field', $value);
         // add field specific facet stats
         foreach ($field->getFacets() as $facet) {
             $request->addParam('f.' . $field->getKey() . '.stats.facet', $facet);
         }
     }
     // add facet stats for all fields
     foreach ($component->getFacets() as $facet) {
         $request->addParam('stats.facet', $facet);
     }
     return $request;
 }
コード例 #12
0
ファイル: Stats.php プロジェクト: starsw001/solarium
 /**
  * Add request settings for the stats component.
  *
  * @param StatsComponent $component
  * @param Request        $request
  *
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable stats
     $request->addParam('stats', 'true');
     // add fields
     foreach ($component->getFields() as $field) {
         $pivots = $field->getPivots();
         $prefix = count($pivots) > 0 ? '{!tag=' . implode(',', $pivots) . '}' : '';
         $request->addParam('stats.field', $prefix . $field->getKey());
         // add field specific facet stats
         foreach ($field->getFacets() as $facet) {
             $request->addParam('f.' . $field->getKey() . '.stats.facet', $facet);
         }
     }
     // add facet stats for all fields
     foreach ($component->getFacets() as $facet) {
         $request->addParam('stats.facet', $facet);
     }
     return $request;
 }
コード例 #13
0
ファイル: FacetSet.php プロジェクト: nubs/solarium
 /**
  * Add params for a range facet to request
  *
  * @param  Request    $request
  * @param  FacetPivot $facet
  * @return void
  */
 public function addFacetPivot($request, $facet)
 {
     $request->addParam('facet.pivot', $this->renderLocalParams(implode(',', $facet->getFields()), array('key' => $facet->getKey(), 'ex' => $facet->getExcludes())));
     $request->addParam('facet.pivot.mincount', $facet->getMinCount(), true);
 }
コード例 #14
0
ファイル: Http.php プロジェクト: lhess/solarium
 /**
  * Create a stream context for a request
  *
  * @param  Request  $request
  * @param  Endpoint $endpoint
  * @return resource
  */
 public function createContext($request, $endpoint)
 {
     $method = $request->getMethod();
     $context = stream_context_create(array('http' => array('method' => $method, 'timeout' => $endpoint->getTimeout())));
     if ($method == Request::METHOD_POST) {
         if ($request->getFileUpload()) {
             stream_context_set_option($context, 'http', 'content', file_get_contents($request->getFileUpload()));
             $request->addHeader('Content-Type: multipart/form-data');
         } else {
             $data = $request->getRawData();
             if (null !== $data) {
                 stream_context_set_option($context, 'http', 'content', $data);
                 $request->addHeader('Content-Type: text/xml; charset=UTF-8');
             }
         }
     }
     // Try endpoint authentication first, fallback to request for backwards compatibility
     $authData = $endpoint->getAuthentication();
     if (empty($authData['username'])) {
         $authData = $request->getAuthentication();
     }
     if (!empty($authData['username']) && !empty($authData['password'])) {
         $request->addHeader('Authorization: Basic ' . base64_encode($authData['username'] . ':' . $authData['password']));
     }
     $headers = $request->getHeaders();
     if (count($headers) > 0) {
         stream_context_set_option($context, 'http', 'header', implode("\r\n", $headers));
     }
     return $context;
 }
コード例 #15
0
 /**
  * Add per-field override options to the request
  *
  * @param  HighlightingField $field
  * @param  Request           $request
  * @return void
  */
 protected function addFieldParams($field, $request)
 {
     $prefix = 'f.' . $field->getName() . '.hl.';
     $request->addParam($prefix . 'snippets', $field->getSnippets());
     $request->addParam($prefix . 'fragsize', $field->getFragSize());
     $request->addParam($prefix . 'mergeContiguous', $field->getMergeContiguous());
     $request->addParam($prefix . 'alternateField', $field->getAlternateField());
     $request->addParam($prefix . 'formatter', $field->getFormatter());
     $request->addParam($prefix . 'simple.pre', $field->getSimplePrefix());
     $request->addParam($prefix . 'simple.post', $field->getSimplePostfix());
     $request->addParam($prefix . 'fragmenter', $field->getFragmenter());
     $request->addParam($prefix . 'useFastVectorHighlighter', $field->getUseFastVectorHighlighter());
 }
コード例 #16
0
 public function testCreateContextWithAuthorization()
 {
     $timeout = 13;
     $method = Request::METHOD_HEAD;
     $request = new Request();
     $request->setMethod($method);
     $request->setAuthentication('someone', 'S0M3p455');
     $endpoint = new Endpoint();
     $endpoint->setTimeout($timeout);
     $context = $this->adapter->createContext($request, $endpoint);
     $this->assertEquals(array('http' => array('method' => $method, 'timeout' => $timeout, 'header' => 'Authorization: Basic c29tZW9uZTpTME0zcDQ1NQ==')), stream_context_get_options($context));
 }
コード例 #17
0
 public function testCreateRequestWithOverridingPlugin()
 {
     $expectedRequest = new Request();
     $expectedRequest->setHandler('something-unique-345978');
     $query = new SelectQuery();
     $expectedEvent = new PreCreateRequestEvent($query);
     $expectedEvent->setDispatcher($this->client->getEventDispatcher());
     $expectedEvent->setName(Events::PRE_CREATE_REQUEST);
     $test = $this;
     $this->client->getEventDispatcher()->addListener(Events::PRE_CREATE_REQUEST, function (PreCreateRequestEvent $event) use($test, $expectedRequest, $expectedEvent) {
         $test->assertEquals($expectedEvent, $event);
         $event->setRequest($expectedRequest);
     });
     $returnedRequest = $this->client->createRequest($query);
     $this->assertEquals($expectedRequest, $returnedRequest);
 }
コード例 #18
0
 /**
  * Add request settings for morelikethis
  *
  * @param  MoreLikeThisComponent $component
  * @param  Request               $request
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable morelikethis
     $request->addParam('mlt', 'true');
     $request->addParam('mlt.fl', count($component->getFields()) ? implode(',', $component->getFields()) : null);
     $request->addParam('mlt.mintf', $component->getMinimumTermFrequency());
     $request->addParam('mlt.mindf', $component->getMinimumDocumentFrequency());
     $request->addParam('mlt.minwl', $component->getMinimumWordLength());
     $request->addParam('mlt.maxwl', $component->getMaximumWordLength());
     $request->addParam('mlt.maxqt', $component->getMaximumQueryTerms());
     $request->addParam('mlt.maxntp', $component->getMaximumNumberOfTokens());
     $request->addParam('mlt.boost', $component->getBoost());
     $request->addParam('mlt.qf', count($component->getQueryFields()) ? implode(',', $component->getQueryFields()) : null);
     $request->addParam('mlt.count', $component->getCount());
     return $request;
 }
コード例 #19
0
 public function testPreExecuteRequestWithPersistentAndNonPersistentCustomizations()
 {
     $input = array('key' => 'xid', 'type' => 'param', 'name' => 'xid', 'value' => 123);
     $this->plugin->addCustomization($input);
     $input = array('key' => 'auth', 'type' => 'header', 'name' => 'X-my-auth', 'value' => 'mypassword', 'persistent' => true);
     $this->plugin->addCustomization($input);
     $request = new Request();
     $event = new PreExecuteRequestEvent($request, new Endpoint());
     $this->plugin->preExecuteRequest($event);
     $this->assertEquals(123, $request->getParam('xid'));
     $this->assertEquals(array('X-my-auth: mypassword'), $request->getHeaders());
     // second use, only the header should be persistent
     $request = new Request();
     $event = new PreExecuteRequestEvent($request, new Endpoint());
     $this->plugin->preExecuteRequest($event);
     $this->assertEquals(null, $request->getParam('xid'));
     $this->assertEquals(array('X-my-auth: mypassword'), $request->getHeaders());
 }
コード例 #20
0
ファイル: FacetSet.php プロジェクト: lhess/solarium
 /**
  * Add params for a interval facet to request
  *
  * @param  Request    $request
  * @param  FacetInterval $facet
  * @return void
  */
 public function addFacetInterval($request, $facet)
 {
     $field = $facet->getField();
     $request->addParam('facet.interval', $this->renderLocalParams($field));
     foreach ($facet->getSet() as $key => $setValue) {
         if (is_string($key)) {
             $setValue = '{!key="' . $key . '"}' . $setValue;
         }
         $request->addParam("f.{$field}.facet.interval.set", $setValue);
     }
 }
コード例 #21
0
ファイル: ZendHttp.php プロジェクト: lhess/solarium
 /**
  * Prepare the client to send the file and params in request
  *
  * @param  \Zend_Http_Client $client
  * @param  Request           $request
  * @return void
  */
 protected function prepareFileUpload($client, $request)
 {
     $filename = $request->getFileUpload();
     $client->setFileUpload('content', 'content', file_get_contents($filename), 'application/octet-stream; charset=binary');
 }
コード例 #22
0
 public function testExecuteWithFileUpload()
 {
     $request = new Request();
     $request->setMethod(Request::METHOD_POST);
     $request->setFileUpload(__FILE__);
     $endpoint = new Endpoint();
     $response = new \Zend_Http_Response(200, array('status' => 'HTTP 1.1 200 OK'), 'dummy');
     $mock = $this->getMock('Zend_Http_Client');
     $mock->expects($this->once())->method('setFileUpload')->with($this->equalTo('content'), $this->equalTo('content'), $this->equalTo(file_get_contents(__FILE__)), $this->equalTo('application/octet-stream; charset=binary'));
     $mock->expects($this->once())->method('request')->will($this->returnValue($response));
     $this->adapter->setZendHttp($mock);
     $this->adapter->execute($request, $endpoint);
 }
コード例 #23
0
ファイル: Spellcheck.php プロジェクト: lhess/solarium
 /**
  * Add request settings for Spellcheck
  *
  * @param  SpellcheckComponent $component
  * @param  Request             $request
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable spellcheck
     $request->addParam('spellcheck', 'true');
     $request->addParam('spellcheck.q', $component->getQuery());
     $request->addParam('spellcheck.build', $component->getBuild());
     $request->addParam('spellcheck.reload', $component->getReload());
     $request->addParam('spellcheck.dictionary', $component->getDictionary());
     $request->addParam('spellcheck.count', $component->getCount());
     $request->addParam('spellcheck.onlyMorePopular', $component->getOnlyMorePopular());
     $request->addParam('spellcheck.extendedResults', $component->getExtendedResults());
     $request->addParam('spellcheck.collate', $component->getCollate());
     $request->addParam('spellcheck.maxCollations', $component->getMaxCollations());
     $request->addParam('spellcheck.maxCollationTries', $component->getMaxCollationTries());
     $request->addParam('spellcheck.maxCollationEvaluations', $component->getMaxCollationEvaluations());
     $request->addParam('spellcheck.collateExtendedResults', $component->getCollateExtendedResults());
     $request->addParam('spellcheck.accuracy', $component->getAccuracy());
     foreach ($component->getCollateParams() as $param => $value) {
         $request->addParam('spellcheck.collateParam.' . $param, $value);
     }
     return $request;
 }
コード例 #24
0
 /**
  * Build request for a stats.jsp query.
  *
  * @param QueryInterface $query
  * @return Request
  */
 public function build(QueryInterface $query)
 {
     $request = new Request();
     $request->setHandler($query->getHandler());
     return $request;
 }
コード例 #25
0
ファイル: DisMax.php プロジェクト: rmzamora/solarium
 /**
  * Add request settings for Dismax.
  *
  * @param DismaxComponent $component
  * @param Request         $request
  *
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable dismax
     $request->addParam('defType', $component->getQueryParser());
     $request->addParam('q.alt', $component->getQueryAlternative());
     $request->addParam('qf', $component->getQueryFields());
     $request->addParam('mm', $component->getMinimumMatch());
     $request->addParam('pf', $component->getPhraseFields());
     $request->addParam('ps', $component->getPhraseSlop());
     $request->addParam('qs', $component->getQueryPhraseSlop());
     $request->addParam('tie', $component->getTie());
     // add boostqueries to request
     $boostQueries = $component->getBoostQueries();
     if (count($boostQueries) !== 0) {
         foreach ($boostQueries as $boostQuery) {
             $request->addParam('bq', $boostQuery->getQuery());
         }
     }
     $request->addParam('bf', $component->getBoostFunctions());
     return $request;
 }
コード例 #26
0
ファイル: Grouping.php プロジェクト: starsw001/solarium
 /**
  * Add request settings for Grouping.
  *
  * @param GroupingComponent $component
  * @param Request           $request
  *
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable grouping
     $request->addParam('group', 'true');
     $request->addParam('group.field', $component->getFields());
     $request->addParam('group.query', $component->getQueries());
     $request->addParam('group.limit', $component->getLimit());
     $request->addParam('group.offset', $component->getOffset());
     $request->addParam('group.sort', $component->getSort());
     $request->addParam('group.main', $component->getMainResult());
     $request->addParam('group.ngroups', $component->getNumberOfGroups());
     $request->addParam('group.cache.percent', $component->getCachePercentage());
     $request->addParam('group.truncate', $component->getTruncate());
     $request->addParam('group.func', $component->getFunction());
     $request->addParam('group.facet', $component->getFacet());
     $request->addParam('group.format', $component->getFormat());
     return $request;
 }
コード例 #27
0
ファイル: PeclHttp.php プロジェクト: lhess/solarium
 /**
  *
  * adapt Request to HttpRequest
  *
  * {@link http://us.php.net/manual/en/http.constants.php
  *  HTTP Predefined Constant}
  *
  * {@link http://us.php.net/manual/en/http.request.options.php
  *  HttpRequest options}
  *
  * @throws InvalidArgumentException
  * @param  Request                  $request
  * @param  Endpoint                 $endpoint
  * @param  HttpRequest
  * @return \HttpRequest
  */
 public function toHttpRequest($request, $endpoint)
 {
     $url = $endpoint->getBaseUri() . $request->getUri();
     $httpRequest = new \HttpRequest($url);
     $headers = array();
     foreach ($request->getHeaders() as $headerLine) {
         list($header, $value) = explode(':', $headerLine);
         if ($header = trim($header)) {
             $headers[$header] = trim($value);
         }
     }
     // Try endpoint authentication first, fallback to request for backwards compatibility
     $authData = $endpoint->getAuthentication();
     if (empty($authData['username'])) {
         $authData = $request->getAuthentication();
     }
     if (!empty($authData['username']) && !empty($authData['password'])) {
         $headers['Authorization'] = 'Basic ' . base64_encode($authData['username'] . ':' . $authData['password']);
     }
     switch ($request->getMethod()) {
         case Request::METHOD_GET:
             $method = HTTP_METH_GET;
             break;
         case Request::METHOD_POST:
             $method = HTTP_METH_POST;
             if ($request->getFileUpload()) {
                 $httpRequest->addPostFile('content', $request->getFileUpload(), 'application/octet-stream; charset=binary');
             } else {
                 $httpRequest->setBody($request->getRawData());
                 if (!isset($headers['Content-Type'])) {
                     $headers['Content-Type'] = 'text/xml; charset=utf-8';
                 }
             }
             break;
         case Request::METHOD_HEAD:
             $method = HTTP_METH_HEAD;
             break;
         default:
             throw new InvalidArgumentException('Unsupported method: ' . $request->getMethod());
     }
     $httpRequest->setMethod($method);
     $httpRequest->setOptions(array('timeout' => $endpoint->getTimeout(), 'connecttimeout' => $endpoint->getTimeout(), 'dns_cache_timeout' => $endpoint->getTimeout()));
     $httpRequest->setHeaders($headers);
     return $httpRequest;
 }
コード例 #28
0
ファイル: DisMax.php プロジェクト: lhess/solarium
 /**
  * Add request settings for Dismax
  *
  * @param  DismaxComponent $component
  * @param  Request         $request
  * @return Request
  */
 public function buildComponent($component, $request)
 {
     // enable dismax
     $request->addParam('defType', $component->getQueryParser());
     $request->addParam('q.alt', $component->getQueryAlternative());
     $request->addParam('qf', $component->getQueryFields());
     $request->addParam('mm', $component->getMinimumMatch());
     $request->addParam('pf', $component->getPhraseFields());
     $request->addParam('ps', $component->getPhraseSlop());
     $request->addParam('qs', $component->getQueryPhraseSlop());
     $request->addParam('tie', $component->getTie());
     $request->addParam('bq', $component->getBoostQuery());
     $request->addParam('bf', $component->getBoostFunctions());
     return $request;
 }
コード例 #29
0
ファイル: PeclHttpTest.php プロジェクト: lhess/solarium
 public function testToHttpRequestWithDefaultContentType()
 {
     $request = new Request();
     $request->setMethod(Request::METHOD_POST);
     $endpoint = new Endpoint();
     $endpoint->setTimeout(10);
     $httpRequest = $this->adapter->toHttpRequest($request, $endpoint);
     $this->assertEquals(array('timeout' => 10, 'connecttimeout' => 10, 'dns_cache_timeout' => 10, 'headers' => array('Content-Type' => 'text/xml; charset=utf-8')), $httpRequest->getOptions());
 }
コード例 #30
0
ファイル: Curl.php プロジェクト: lhess/solarium
 /**
  * Create http request options from request.
  *
  * @param  Request  $request
  * @param  Endpoint $endpoint
  * @return array
  */
 protected function createOptions($request, $endpoint)
 {
     // @codeCoverageIgnoreStart
     $options = array('timeout' => $endpoint->getTimeout());
     foreach ($request->getHeaders() as $headerLine) {
         list($header, $value) = explode(':', $headerLine);
         if ($header = trim($header)) {
             $options['headers'][$header] = trim($value);
         }
     }
     return $options;
     // @codeCoverageIgnoreEnd
 }