231 lines
7.9 KiB
PHP
231 lines
7.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* (c) Kitodo. Key to digital objects e.V. <contact@kitodo.org>
|
|
*
|
|
* This file is part of the Kitodo and TYPO3 projects.
|
|
*
|
|
* @license GNU General Public License version 3 or later.
|
|
* For the full copyright and license information, please read the
|
|
* LICENSE.txt file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Kitodo\Dlf\Hooks;
|
|
|
|
use Kitodo\Dlf\Common\Helper;
|
|
use Kitodo\Dlf\Common\Solr;
|
|
use TYPO3\CMS\Core\Database\ConnectionPool;
|
|
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
|
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
|
|
/**
|
|
* Hooks and helper for \TYPO3\CMS\Core\TypoScript\ConfigurationForm
|
|
*
|
|
* @author Sebastian Meyer <sebastian.meyer@slub-dresden.de>
|
|
* @package TYPO3
|
|
* @subpackage dlf
|
|
* @access public
|
|
*/
|
|
class ConfigurationForm
|
|
{
|
|
/**
|
|
* This holds the current configuration
|
|
*
|
|
* @var array
|
|
* @access protected
|
|
*/
|
|
protected $conf = [];
|
|
|
|
/**
|
|
* Check if a connection to a Solr server could be established with the given credentials.
|
|
*
|
|
* @access public
|
|
*
|
|
* @param array &$params: An array with parameters
|
|
* @param \TYPO3\CMS\Core\TypoScript\ConfigurationForm &$pObj: The parent object
|
|
*
|
|
* @return string Message informing the user of success or failure
|
|
*/
|
|
public function checkSolrConnection(&$params, &$pObj)
|
|
{
|
|
$solrInfo = Solr::getSolrConnectionInfo();
|
|
// Prepend username and password to hostname.
|
|
if (
|
|
!empty($solrInfo['username'])
|
|
&& !empty($solrInfo['password'])
|
|
) {
|
|
$host = $solrInfo['username'] . ':' . $solrInfo['password'] . '@' . $solrInfo['host'];
|
|
} else {
|
|
$host = $solrInfo['host'];
|
|
}
|
|
// Build request URI.
|
|
$url = $solrInfo['scheme'] . '://' . $host . ':' . $solrInfo['port'] . '/' . $solrInfo['path'] . '/admin/cores?wt=xml';
|
|
$context = stream_context_create([
|
|
'http' => [
|
|
'method' => 'GET',
|
|
'user_agent' => (!empty($this->conf['useragent']) ? $this->conf['useragent'] : ini_get('user_agent'))
|
|
]
|
|
]);
|
|
// Try to connect to Solr server.
|
|
$response = @simplexml_load_string(file_get_contents($url, false, $context));
|
|
// Check status code.
|
|
if ($response) {
|
|
$status = $response->xpath('//lst[@name="responseHeader"]/int[@name="status"]');
|
|
if (is_array($status)) {
|
|
Helper::addMessage(
|
|
sprintf($GLOBALS['LANG']->getLL('solr.status'), (string) $status[0]),
|
|
$GLOBALS['LANG']->getLL('solr.connected'),
|
|
($status[0] == 0 ? \TYPO3\CMS\Core\Messaging\FlashMessage::OK : \TYPO3\CMS\Core\Messaging\FlashMessage::WARNING)
|
|
);
|
|
return Helper::renderFlashMessages();
|
|
}
|
|
}
|
|
Helper::addMessage(
|
|
sprintf($GLOBALS['LANG']->getLL('solr.error'), $url),
|
|
$GLOBALS['LANG']->getLL('solr.notConnected'),
|
|
\TYPO3\CMS\Core\Messaging\FlashMessage::WARNING
|
|
);
|
|
return Helper::renderFlashMessages();
|
|
}
|
|
|
|
/**
|
|
* Make sure the essential namespaces are defined.
|
|
*
|
|
* @access public
|
|
*
|
|
* @param array &$params: An array with parameters
|
|
* @param \TYPO3\CMS\Core\TypoScript\ConfigurationForm &$pObj: The parent object
|
|
*
|
|
* @return string Message informing the user of success or failure
|
|
*/
|
|
public function checkMetadataFormats(&$params, &$pObj)
|
|
{
|
|
$nsDefined = [
|
|
'MODS' => false,
|
|
'TEIHDR' => false,
|
|
'ALTO' => false,
|
|
'IIIF1' => false,
|
|
'IIIF2' => false,
|
|
'IIIF3' => false
|
|
];
|
|
|
|
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
|
|
->getQueryBuilderForTable('tx_dlf_collections');
|
|
|
|
// Check existing format specifications.
|
|
$result = $queryBuilder
|
|
->select('tx_dlf_formats.type AS type')
|
|
->from('tx_dlf_formats')
|
|
->where(
|
|
'1=1',
|
|
Helper::whereExpression('tx_dlf_formats')
|
|
)
|
|
->execute();
|
|
|
|
while ($resArray = $result->fetch()) {
|
|
$nsDefined[$resArray['type']] = true;
|
|
}
|
|
// Build data array.
|
|
$data = [];
|
|
// Add MODS namespace.
|
|
if (!$nsDefined['MODS']) {
|
|
$data['tx_dlf_formats'][uniqid('NEW')] = [
|
|
'pid' => 0,
|
|
'type' => 'MODS',
|
|
'root' => 'mods',
|
|
'namespace' => 'http://www.loc.gov/mods/v3',
|
|
'class' => 'Kitodo\\Dlf\\Format\\Mods'
|
|
];
|
|
}
|
|
// Add TEIHDR namespace.
|
|
if (!$nsDefined['TEIHDR']) {
|
|
$data['tx_dlf_formats'][uniqid('NEW')] = [
|
|
'pid' => 0,
|
|
'type' => 'TEIHDR',
|
|
'root' => 'teiHeader',
|
|
'namespace' => 'http://www.tei-c.org/ns/1.0',
|
|
'class' => 'Kitodo\\Dlf\\Format\\TeiHeader'
|
|
];
|
|
}
|
|
// Add ALTO namespace.
|
|
if (!$nsDefined['ALTO']) {
|
|
$data['tx_dlf_formats'][uniqid('NEW')] = [
|
|
'pid' => 0,
|
|
'type' => 'ALTO',
|
|
'root' => 'alto',
|
|
'namespace' => 'http://www.loc.gov/standards/alto/ns-v2#',
|
|
'class' => 'Kitodo\\Dlf\\Format\\Alto'
|
|
];
|
|
}
|
|
// Add IIIF Metadata API 1 context
|
|
if (!$nsDefined['IIIF1']) {
|
|
$data['tx_dlf_formats'][uniqid('NEW')] = [
|
|
'pid' => 0,
|
|
'type' => 'IIIF1',
|
|
'root' => 'IIIF1',
|
|
'namespace' => 'http://www.shared-canvas.org/ns/context.json',
|
|
'class' => ''
|
|
];
|
|
}
|
|
// Add IIIF Presentation 2 context
|
|
if (!$nsDefined['IIIF2']) {
|
|
$data['tx_dlf_formats'][uniqid('NEW')] = [
|
|
'pid' => 0,
|
|
'type' => 'IIIF2',
|
|
'root' => 'IIIF2',
|
|
'namespace' => 'http://iiif.io/api/presentation/2/context.json',
|
|
'class' => ''
|
|
];
|
|
}
|
|
// Add IIIF Presentation 3 context
|
|
if (!$nsDefined['IIIF3']) {
|
|
$data['tx_dlf_formats'][uniqid('NEW')] = [
|
|
'pid' => 0,
|
|
'type' => 'IIIF3',
|
|
'root' => 'IIIF3',
|
|
'namespace' => 'http://iiif.io/api/presentation/3/context.json',
|
|
'class' => ''
|
|
];
|
|
}
|
|
if (!empty($data)) {
|
|
// Process changes.
|
|
$substUid = Helper::processDBasAdmin($data);
|
|
if (!empty($substUid)) {
|
|
Helper::addMessage(
|
|
$GLOBALS['LANG']->getLL('metadataFormats.nsCreatedMsg'),
|
|
$GLOBALS['LANG']->getLL('metadataFormats.nsCreated'),
|
|
\TYPO3\CMS\Core\Messaging\FlashMessage::INFO
|
|
);
|
|
} else {
|
|
Helper::addMessage(
|
|
$GLOBALS['LANG']->getLL('metadataFormats.nsNotCreatedMsg'),
|
|
$GLOBALS['LANG']->getLL('metadataFormats.nsNotCreated'),
|
|
\TYPO3\CMS\Core\Messaging\FlashMessage::ERROR
|
|
);
|
|
}
|
|
} else {
|
|
Helper::addMessage(
|
|
$GLOBALS['LANG']->getLL('metadataFormats.nsOkayMsg'),
|
|
$GLOBALS['LANG']->getLL('metadataFormats.nsOkay'),
|
|
\TYPO3\CMS\Core\Messaging\FlashMessage::OK
|
|
);
|
|
}
|
|
return Helper::renderFlashMessages();
|
|
}
|
|
|
|
/**
|
|
* This is the constructor.
|
|
*
|
|
* @access public
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
// Load localization file.
|
|
$GLOBALS['LANG']->includeLLFile('EXT:dlf/Resources/Private/Language/FlashMessages.xml');
|
|
// Get current configuration.
|
|
$this->conf = array_merge((array) unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['dlf']), (array) \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('data'));
|
|
}
|
|
}
|