151 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace WapplerSystems\Meilisearch\System\Solr;
 | 
						|
use WapplerSystems\Meilisearch\System\Solr\Document\Document;
 | 
						|
use Countable;
 | 
						|
 | 
						|
/**
 | 
						|
 * In EXT:meilisearch 9 we have switched from the SolrPhpClient to the solarium api.
 | 
						|
 *
 | 
						|
 * In many places of the code the class Apache_Solr_Response and the property Apache_Solr_Response::reponse is used.
 | 
						|
 * To be able to refactor this we need to have a replacement for Apache_Solr_Response that behaves like the original class,
 | 
						|
 * to keep the old code working. This allows us to drop the old code of SolrPhpClient and refactore the other parts step by step.
 | 
						|
 *
 | 
						|
 * Class ResponseAdapter
 | 
						|
 *
 | 
						|
 * Search response
 | 
						|
 *
 | 
						|
 * @property \stdClass facet_counts
 | 
						|
 * @property \stdClass facets
 | 
						|
 * @property \stdClass spellcheck
 | 
						|
 * @property \stdClass response
 | 
						|
 * @property \stdClass responseHeader
 | 
						|
 * @property \stdClass highlighting
 | 
						|
 * @property \stdClass debug
 | 
						|
 * @property \stdClass lucene
 | 
						|
 * @property string file
 | 
						|
 * @property array file_metadata
 | 
						|
 *
 | 
						|
 * Luke response
 | 
						|
 *
 | 
						|
 * @property \stdClass index
 | 
						|
 * @property \stdClass fields
 | 
						|
 */
 | 
						|
class ResponseAdapter implements Countable
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $responseBody;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var \stdClass
 | 
						|
     */
 | 
						|
    protected $data = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var int
 | 
						|
     */
 | 
						|
    protected $httpStatus = 200;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $httpStatusMessage = '';
 | 
						|
 | 
						|
    /**
 | 
						|
     * ResponseAdapter constructor.
 | 
						|
     *
 | 
						|
     * @param string $responseBody
 | 
						|
     * @param int $httpStatus
 | 
						|
     * @param string $httpStatusMessage
 | 
						|
     */
 | 
						|
    public function __construct($responseBody, $httpStatus = 500, $httpStatusMessage = '')
 | 
						|
    {
 | 
						|
        $this->data = json_decode($responseBody);
 | 
						|
        $this->responseBody = $responseBody;
 | 
						|
        $this->httpStatus = $httpStatus;
 | 
						|
        $this->httpStatusMessage = $httpStatusMessage;
 | 
						|
 | 
						|
        // @extensionScannerIgnoreLine
 | 
						|
        if (isset($this->data->response) && is_array($this->data->response->docs)) {
 | 
						|
            $documents = array();
 | 
						|
 | 
						|
            // @extensionScannerIgnoreLine
 | 
						|
            foreach ($this->data->response->docs as $originalDocument) {
 | 
						|
                $fields = get_object_vars($originalDocument);
 | 
						|
                $document = new Document($fields);
 | 
						|
                $documents[] = $document;
 | 
						|
            }
 | 
						|
 | 
						|
            // @extensionScannerIgnoreLine
 | 
						|
            $this->data->response->docs = $documents;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Magic get to expose the parsed data and to lazily load it
 | 
						|
     *
 | 
						|
     * @param string $key
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    public function __get($key)
 | 
						|
    {
 | 
						|
        if (isset($this->data->$key)) {
 | 
						|
            return $this->data->$key;
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Magic function for isset function on parsed data
 | 
						|
     *
 | 
						|
     * @param string $key
 | 
						|
     * @return boolean
 | 
						|
     */
 | 
						|
    public function __isset($key)
 | 
						|
    {
 | 
						|
        return isset($this->data->$key);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    public function getParsedData()
 | 
						|
    {
 | 
						|
        return $this->data;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getRawResponse()
 | 
						|
    {
 | 
						|
        return $this->responseBody;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return int
 | 
						|
     */
 | 
						|
    public function getHttpStatus(): int
 | 
						|
    {
 | 
						|
        return $this->httpStatus;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getHttpStatusMessage(): string
 | 
						|
    {
 | 
						|
        return $this->httpStatusMessage;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Counts the elements of
 | 
						|
     */
 | 
						|
    public function count()
 | 
						|
    {
 | 
						|
        return count(get_object_vars($this->data));
 | 
						|
    }
 | 
						|
}
 |