80 lines
2.5 KiB
PHP
80 lines
2.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Library\Search;
|
||
|
|
||
|
use App\Models\Dataset;
|
||
|
|
||
|
class SolrDocumentXslt
|
||
|
{
|
||
|
/**
|
||
|
* @var XSLTProcessor
|
||
|
*/
|
||
|
protected $processor;
|
||
|
|
||
|
public function __construct($options)
|
||
|
{
|
||
|
//parent::__construct($options);
|
||
|
|
||
|
try {
|
||
|
$xslt = new \DomDocument;
|
||
|
$xslt->load($options['xsltfile']);
|
||
|
|
||
|
$this->processor = new \XSLTProcessor;
|
||
|
$this->processor->importStyleSheet($xslt);
|
||
|
} catch (Exception $e) {
|
||
|
throw new Exception('invalid XSLT file for deriving Solr documents', 0, $e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function toSolrDocument(Dataset $rdrDataset, \DOMDocument $solrDoc)
|
||
|
{
|
||
|
if (!($solrDoc instanceof \DOMDocument)) {
|
||
|
throw new Exception('provided Solr document must be instance of DOMDocument');
|
||
|
}
|
||
|
|
||
|
$modelXml = $this->getModelXml($rdrDataset);//->saveXML();
|
||
|
|
||
|
$solrDoc->preserveWhiteSpace = false;
|
||
|
$solrDoc->loadXML($this->processor->transformToXML($modelXml));
|
||
|
|
||
|
// if (Opus_Config::get()->log->prepare->xml) {
|
||
|
// $modelXml->formatOutput = true;
|
||
|
// Opus_Log::get()->debug("input xml\n" . $modelXml->saveXML());
|
||
|
// $solrDoc->formatOutput = true;
|
||
|
// Opus_Log::get()->debug("transformed solr xml\n" . $solrDoc->saveXML());
|
||
|
// }
|
||
|
|
||
|
return $solrDoc;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieves XML describing model data of provided RDR dataset.
|
||
|
*
|
||
|
* @param Dataset $rdrDataset
|
||
|
* @return DOMDocument
|
||
|
*/
|
||
|
protected function getModelXml(Dataset $rdrDataset)
|
||
|
{
|
||
|
$rdrDataset->fetchValues();
|
||
|
// Set up caching xml-model and get XML representation of document.
|
||
|
$xmlModel = new \App\Library\Xml\XmlModel();
|
||
|
//$caching_xml_model = new Opus_Model_Xml;
|
||
|
|
||
|
//$caching_xml_model->setModel($opusDoc);
|
||
|
$xmlModel->setModel($rdrDataset);
|
||
|
$xmlModel->excludeEmptyFields();
|
||
|
//$xmlModel->setStrategy(new Opus_Model_Xml_Version1);
|
||
|
//$cache = new Opus_Model_Xml_Cache($opusDoc->hasPlugin('Opus_Document_Plugin_Index'));
|
||
|
//$xmlModel->setXmlCache($cache);
|
||
|
$cache = ($rdrDataset->xmlCache) ? $rdrDataset->xmlCache : new \App\Models\XmlCache();
|
||
|
$xmlModel->setXmlCache($cache);
|
||
|
|
||
|
$modelXml = $xmlModel->getDomDocument();
|
||
|
|
||
|
// extract fulltext from file and append it to the generated xml.
|
||
|
//$this->attachFulltextToXml($modelXml, $opusDoc->getFile(), $opusDoc->getId());
|
||
|
|
||
|
return $modelXml;
|
||
|
}
|
||
|
}
|