Move class mapping to global ext_typoscript_setup.txt

- use documentRepository in Document class
- change getInstance() to use settings over pid only as parameter
This commit is contained in:
Alexander Bigga 2021-11-22 11:03:38 +01:00
parent 31135ade9e
commit 5e6110fb3c
16 changed files with 162 additions and 209 deletions

View File

@ -12,12 +12,15 @@
namespace Kitodo\Dlf\Common;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
use TYPO3\CMS\Core\Configuration\ExtensionConfiguration;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction;
use TYPO3\CMS\Core\Log\LogManager;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\MathUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use Ubl\Iiif\Presentation\Common\Model\Resources\IiifResourceInterface;
use Ubl\Iiif\Tools\IiifHelper;
@ -418,13 +421,51 @@ abstract class Document
* @static
*
* @param mixed $uid: The unique identifier of the document to parse, the URL of XML file or the IRI of the IIIF resource
* @param int $pid: If > 0, then only document with this PID gets loaded
* @param array $settings
* @param bool $forceReload: Force reloading the document instead of returning the cached instance
*
* @return \Kitodo\Dlf\Common\Document Instance of this class, either MetsDocument or IiifManifest
*/
public static function &getInstance($uid, $pid = 0, $forceReload = false)
public static function &getInstance($uid, $settings = [], $forceReload = false)
{
/** @var ObjectManager $objectManager */
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$configurationManager = $objectManager->get(ConfigurationManager::class);
$frameworkConfiguration = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
// override storagePid if given
if ($settings['storagePid']) {
$frameworkConfiguration['persistence']['storagePid'] = $settings['storagePid'];
}
/**
* Set table mapping if missing.
*
* This should be evaluated with TYPO3 10 again. In TYPO3 9.5 the mapping set via TypoScript is not always present.
* This could be omitted if we rename all tables to the Extbase naming schema.
* */
if (empty($frameworkConfiguration['persistence']['classes'])) {
$frameworkConfiguration['persistence']['classes'] = [
'Kitodo\Dlf\Domain\Model\Document' => [
'mapping' => [
'tableName' => 'tx_dlf_documents'
]
],
'Kitodo\Dlf\Domain\Model\Collection' => [
'mapping' => [
'tableName' => 'tx_dlf_collections'
]
]
];
}
// set modified configuration
$configurationManager->setConfiguration($frameworkConfiguration);
/** Fill documentRepository */
$documentRepository = $objectManager->get(DocumentRepository::class);
// Sanitize input.
$pid = max(intval($pid), 0);
if (!$forceReload) {
@ -469,39 +510,12 @@ abstract class Document
$iiif = null;
// Try to get document format from database
if (MathUtility::canBeInterpretedAsInteger($uid)) {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('tx_dlf_documents');
$queryBuilder
->select(
'tx_dlf_documents.location AS location',
'tx_dlf_documents.document_format AS document_format'
)
->from('tx_dlf_documents');
// Get UID of document with given record identifier.
if ($pid) {
$queryBuilder
->where(
$queryBuilder->expr()->eq('tx_dlf_documents.uid', intval($uid)),
$queryBuilder->expr()->eq('tx_dlf_documents.pid', intval($pid)),
Helper::whereExpression('tx_dlf_documents')
);
} else {
$queryBuilder
->where(
$queryBuilder->expr()->eq('tx_dlf_documents.uid', intval($uid)),
Helper::whereExpression('tx_dlf_documents')
);
$document = $documentRepository->findOneByIdAndSettings($uid, $settings);
if ($document !== null) {
$documentFormat = $document->getDocumentFormat();
}
$result = $queryBuilder
->setMaxResults(1)
->execute();
if ($resArray = $result->fetch()) {
$documentFormat = $resArray['document_format'];
}
} else {
// Get document format from content of remote document
// Cast to string for safety reasons.

View File

@ -13,6 +13,7 @@ namespace Kitodo\Dlf\Controller;
use Kitodo\Dlf\Common\Document;
use Kitodo\Dlf\Common\Helper;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerAwareTrait;
use TYPO3\CMS\Core\Database\ConnectionPool;
@ -28,6 +29,19 @@ abstract class AbstractController extends \TYPO3\CMS\Extbase\Mvc\Controller\Acti
public $prefixId = 'tx_dlf';
/**
* @var DocumentRepository
*/
protected $documentRepository;
/**
* @param DocumentRepository $documentRepository
*/
public function injectDocumentRepository(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
/**
* @var
*/
@ -46,19 +60,16 @@ abstract class AbstractController extends \TYPO3\CMS\Extbase\Mvc\Controller\Acti
*
* @access protected
*
* @param array $requestData: The request data
*
* @return void
*/
protected function loadDocument($requestData)
{
// Check for required variable.
if (
!empty($requestData['id'])
&& !empty($this->settings['pages'])
) {
// Should we exclude documents from other pages than $this->settings['pages']?
$pid = (!empty($this->settings['excludeOther']) ? intval($this->settings['pages']) : 0);
if (!empty($requestData['id'])) {
// Get instance of \Kitodo\Dlf\Common\Document.
$this->doc = Document::getInstance($requestData['id'], $pid);
$this->doc = Document::getInstance($requestData['id'], $this->settings);
if (!$this->doc->ready) {
// Destroy the incomplete object.
$this->doc = null;

View File

@ -26,7 +26,6 @@ use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
class BasketController extends AbstractController
{
/**
* @var BasketRepository
*/

View File

@ -13,7 +13,6 @@
namespace Kitodo\Dlf\Controller;
use Kitodo\Dlf\Domain\Model\Document;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
@ -27,19 +26,6 @@ class CalendarController extends AbstractController
*/
protected $allIssues = [];
/**
* @var DocumentRepository
*/
protected $documentRepository;
/**
* @param DocumentRepository $documentRepository
*/
public function injectDocumentRepository(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
/**
* The main method of the plugin
*

View File

@ -20,7 +20,6 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\MathUtility;
use TYPO3\CMS\Frontend\Page\PageRepository;
use Kitodo\Dlf\Domain\Repository\CollectionRepository;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
class CollectionController extends AbstractController
{
@ -45,19 +44,6 @@ class CollectionController extends AbstractController
$this->collectionRepository = $collectionRepository;
}
/**
* @var DocumentRepository
*/
protected $documentRepository;
/**
* @param DocumentRepository $documentRepository
*/
public function injectDocumentRepository(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
/**
* The main method of the plugin
*

View File

@ -13,7 +13,6 @@ namespace Kitodo\Dlf\Controller;
use Kitodo\Dlf\Common\Document;
use Kitodo\Dlf\Domain\Repository\LibraryRepository;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
@ -33,19 +32,6 @@ class FeedsController extends AbstractController
$this->libraryRepository = $libraryRepository;
}
/**
* @var DocumentRepository
*/
protected $documentRepository;
/**
* @param DocumentRepository $documentRepository
*/
public function injectDocumentRepository(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
/**
* Initializes the current action
*

View File

@ -17,7 +17,6 @@ use Kitodo\Dlf\Common\DocumentList;
use Kitodo\Dlf\Common\Solr;
use Kitodo\Dlf\Domain\Model\Token;
use Kitodo\Dlf\Domain\Repository\CollectionRepository;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
use Kitodo\Dlf\Domain\Repository\LibraryRepository;
use Kitodo\Dlf\Domain\Repository\TokenRepository;
@ -31,19 +30,6 @@ use Kitodo\Dlf\Domain\Repository\TokenRepository;
*/
class OaiPmhController extends AbstractController
{
/**
* @var DocumentRepository
*/
protected $documentRepository;
/**
* @param DocumentRepository $documentRepository
*/
public function injectDocumentRepository(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
/**
* @var TokenRepository
*/

View File

@ -60,6 +60,8 @@ class PageViewController extends AbstractController
*/
public function mainAction()
{
$frameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
$requestData = GeneralUtility::_GPmerged('tx_dlf');
unset($requestData['__referrer'], $requestData['__trustedProperties']);

View File

@ -12,7 +12,6 @@
namespace Kitodo\Dlf\Controller;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
/**
* Controller for the plugin 'Statistics' for the 'dlf' extension
@ -24,19 +23,6 @@ use Kitodo\Dlf\Domain\Repository\DocumentRepository;
*/
class StatisticsController extends AbstractController
{
/**
* @var DocumentRepository
*/
protected $documentRepository;
/**
* @param DocumentRepository $documentRepository
*/
public function injectDocumentRepository(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
/**
* The main method of the plugin
*

View File

@ -14,8 +14,6 @@ namespace Kitodo\Dlf\Controller;
use Kitodo\Dlf\Common\Helper;
use TYPO3\CMS\Core\Utility\MathUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use Kitodo\Dlf\Domain\Repository\DocumentRepository;
/**
* Controller for plugin 'Table Of Contents' for the 'dlf' extension
@ -40,16 +38,6 @@ class TableOfContentsController extends AbstractController
*/
protected $pluginConf;
protected $documentRepository;
/**
* @param DocumentRepository $documentRepository
*/
public function injectDocumentRepository(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
/**
* SearchController constructor.
*/

View File

@ -75,6 +75,21 @@ class DocumentRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
return $query->execute();
}
/**
* Finds all documents for the given settings
*
* @param int $uid
* @param array $settings
*
* @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
*/
public function findOneByIdAndSettings($uid, $settings = [])
{
$settings['documentSets'] = $uid;
return $this->findDocumentsBySettings($settings)->getFirst();
}
/**
* Finds all documents for the given settings
*
@ -92,6 +107,10 @@ class DocumentRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
$constraints[] = $query->in('uid', GeneralUtility::intExplode(',', $settings['documentSets']));
}
if (isset($settings['excludeOther']) && (int) $settings['excludeOther'] === 0) {
$query->getQuerySettings()->setRespectStoragePage(false);
}
if (count($constraints)) {
$query->matching(
$query->logicalAnd($constraints)

View File

@ -81,7 +81,7 @@ class DocumentTypeFunctionProvider implements ExpressionFunctionProviderInterfac
}
// Load document with current plugin parameters.
$doc = $this->loadDocument($queryParams[$this->prefixId]);
$doc = $this->loadDocument($queryParams[$this->prefixId], $cPid);
if ($doc === null) {
return $type;
}
@ -110,15 +110,16 @@ class DocumentTypeFunctionProvider implements ExpressionFunctionProviderInterfac
* @access protected
*
* @param array $piVars The current plugin variables containing a document identifier
* @param int $pid: Storage Pid
*
* @return \Kitodo\Dlf\Common\Document Instance of the current document
*/
protected function loadDocument(array $piVars)
protected function loadDocument(array $piVars, int $pid)
{
// Check for required variable.
if (!empty($piVars['id'])) {
// Get instance of document.
$doc = Document::getInstance($piVars['id']);
$doc = Document::getInstance($piVars['id'], ['storagePid' => $pid]);
if ($doc->ready) {
return $doc;
} else {

View File

@ -2,86 +2,6 @@
plugin.tx_dlf {
persistence {
storagePid = {$plugin.tx_dlf.persistence.storagePid}
classes {
Kitodo\Dlf\Domain\Model\ActionLog {
mapping {
tableName = tx_dlf_actionlog
recordType = \Kitodo\Dlf\Domain\Model\ActionLog
}
}
Kitodo\Dlf\Domain\Model\Basket {
mapping {
tableName = tx_dlf_basket
recordType = \Kitodo\Dlf\Domain\Model\Basket
}
}
Kitodo\Dlf\Domain\Model\Collection {
mapping {
tableName = tx_dlf_collections
recordType = \Kitodo\Dlf\Domain\Model\Collection
}
}
Kitodo\Dlf\Domain\Model\Document {
mapping {
tableName = tx_dlf_documents
recordType = \Kitodo\Dlf\Domain\Model\Document
}
}
Kitodo\Dlf\Domain\Model\Format {
mapping {
tableName = tx_dlf_formats
recordType = \Kitodo\Dlf\Domain\Model\Format
}
}
Kitodo\Dlf\Domain\Model\Library {
mapping {
tableName = tx_dlf_libraries
recordType = \Kitodo\Dlf\Domain\Model\Library
}
}
Kitodo\Dlf\Domain\Model\Mail {
mapping {
tableName = tx_dlf_mail
recordType = \Kitodo\Dlf\Domain\Model\Mail
}
}
Kitodo\Dlf\Domain\Model\Metadata {
mapping {
tableName = tx_dlf_metadata
recordType = \Kitodo\Dlf\Domain\Model\Metadata
}
}
Kitodo\Dlf\Domain\Model\MetadataFormat {
mapping {
tableName = tx_dlf_metadataformat
recordType = \Kitodo\Dlf\Domain\Model\MetadataFormat
}
}
Kitodo\Dlf\Domain\Model\Printer {
mapping {
tableName = tx_dlf_printer
recordType = \Kitodo\Dlf\Domain\Model\Printer
}
}
Kitodo\Dlf\Domain\Model\SolrCore {
mapping {
tableName = tx_dlf_solrcores
recordType = \Kitodo\Dlf\Domain\Model\SolrCore
}
}
Kitodo\Dlf\Domain\Model\Structure {
mapping {
tableName = tx_dlf_structures
recordType = \Kitodo\Dlf\Domain\Model\Structure
}
}
Kitodo\Dlf\Domain\Model\Token {
mapping {
tableName = tx_dlf_tokens
recordType = \Kitodo\Dlf\Domain\Model\Token
}
}
}
}
}

View File

@ -37,8 +37,7 @@
"typo3/cms-tstemplate": "^9.5",
"caseyamcl/phpoaipmh": "^3.0",
"ubl/php-iiif-prezi-reader": "0.3.0",
"solarium/solarium": "^4.2|^5.2",
"fluidtypo3/vhs": "6.0.5"
"solarium/solarium": "^4.2|^5.2"
},
"replace": {
"typo3-ter/dlf": "self.version"

View File

@ -18,8 +18,7 @@ $EM_CONF[$_EXTKEY] = [
'constraints' => [
'depends' => [
'php' => '7.3.0-7.4.99',
'typo3' => '9.5.0-9.5.99',
'vhs' => '6.0.5'
'typo3' => '9.5.0-9.5.99'
],
'conflicts' => [],
'suggests' => []

71
ext_typoscript_setup.txt Normal file
View File

@ -0,0 +1,71 @@
config.tx_extbase {
persistence {
classes {
Kitodo\Dlf\Domain\Model\ActionLog {
mapping {
tableName = tx_dlf_actionlog
}
}
Kitodo\Dlf\Domain\Model\Basket {
mapping {
tableName = tx_dlf_basket
}
}
Kitodo\Dlf\Domain\Model\Collection {
mapping {
tableName = tx_dlf_collections
}
}
Kitodo\Dlf\Domain\Model\Document {
mapping {
tableName = tx_dlf_documents
}
}
Kitodo\Dlf\Domain\Model\Format {
mapping {
tableName = tx_dlf_formats
}
}
Kitodo\Dlf\Domain\Model\Library {
mapping {
tableName = tx_dlf_libraries
}
}
Kitodo\Dlf\Domain\Model\Mail {
mapping {
tableName = tx_dlf_mail
}
}
Kitodo\Dlf\Domain\Model\Metadata {
mapping {
tableName = tx_dlf_metadata
}
}
Kitodo\Dlf\Domain\Model\MetadataFormat {
mapping {
tableName = tx_dlf_metadataformat
}
}
Kitodo\Dlf\Domain\Model\Printer {
mapping {
tableName = tx_dlf_printer
}
}
Kitodo\Dlf\Domain\Model\SolrCore {
mapping {
tableName = tx_dlf_solrcores
}
}
Kitodo\Dlf\Domain\Model\Structure {
mapping {
tableName = tx_dlf_structures
}
}
Kitodo\Dlf\Domain\Model\Token {
mapping {
tableName = tx_dlf_tokens
}
}
}
}
}