diff --git a/.gitignore b/.gitignore
index 8540401..34aa121 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,7 @@
Build/dist/*
Build/node_modules/*
+.idea/
+.Build/
+Build/testing-docker/.env
+composer.lock
+public/
diff --git a/Classes/Command/CalculateTablesCommand.php b/Classes/Command/CalculateTablesCommand.php
index 6c98cf4..81cf357 100644
--- a/Classes/Command/CalculateTablesCommand.php
+++ b/Classes/Command/CalculateTablesCommand.php
@@ -1,6 +1,6 @@
get('mpdb_core');
+ $coreExtConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('mpdb_core');
$prefix = $coreExtConf['prefix'];
$params = [
@@ -243,13 +243,13 @@ protected function commitChunk(Collection $chunk, string $index): void
*/
protected function commitPublishedItemTables(): void
{
- if ($this->client->indices()->exists(['index' => $this->prefix . PublishedItemController::TABLE_INDEX_NAME])) {
+ if ($this->client->indices()->exists(['index' => $this->prefix . PublishedItemController::TABLE_INDEX_NAME])->asBool()) {
$this->client->indices()->delete(['index' => $this->prefix . PublishedItemController::TABLE_INDEX_NAME]);
}
- if ($this->client->indices()->exists(['index' => $this->prefix . WorkController::TABLE_INDEX_NAME])) {
+ if ($this->client->indices()->exists(['index' => $this->prefix . WorkController::TABLE_INDEX_NAME])->asBool()) {
$this->client->indices()->delete(['index' => $this->prefix . WorkController::TABLE_INDEX_NAME]);
}
- if ($this->client->indices()->exists(['index' => $this->prefix . PersonController::TABLE_INDEX_NAME])) {
+ if ($this->client->indices()->exists(['index' => $this->prefix . PersonController::TABLE_INDEX_NAME])->asBool()) {
$this->client->indices()->delete(['index' => $this->prefix . PersonController::TABLE_INDEX_NAME]);
}
@@ -310,7 +310,7 @@ protected static function samplePublishedItemData(array $publishedItem): array
{
$publishedSubitems = Collection::wrap($publishedItem['_source']['published_subitems'])->
map(function ($item) { return self::samplePublishedSubitemData($item); })->
- toArray();
+ all();
return [
$publishedItem['_id'] =>
@@ -356,10 +356,10 @@ protected static function samplePublishedSubitemData(array $publishedSubitem): a
$result = [
'id' => $publishedSubitem['mvdb_id'],
- 'prints_by_date' => $printsByDate->toArray(),
- 'prints_per_year' => $printsPerYear->toArray(),
- 'prints_by_date_cumulative' => $printsByDateCumulative->toArray(),
- 'prints_per_year_cumulative' => $printsPerYearCumulative->toArray()
+ 'prints_by_date' => $printsByDate->values(),
+ 'prints_per_year' => $printsPerYear->values(),
+ 'prints_by_date_cumulative' => $printsByDateCumulative->values(),
+ 'prints_per_year_cumulative' => $printsPerYearCumulative->values()
];
foreach(explode(',', $extConf['movingAverages']) as $years) {
diff --git a/Classes/Command/IndexPublishersCommand.php b/Classes/Command/IndexPublishersCommand.php
index 6d670d6..5be9a6b 100644
--- a/Classes/Command/IndexPublishersCommand.php
+++ b/Classes/Command/IndexPublishersCommand.php
@@ -1,6 +1,6 @@
from(self::TABLE_NAME);
- if ($this->client->indices()->exists(['index' => $prefix . self::INDEX_NAME])) {
+ if ($this->client->indices()->exists(['index' => $prefix . self::INDEX_NAME])->asBool()) {
$this->client->indices()->delete(['index' => $prefix . self::INDEX_NAME]);
}
Collection::wrap($qb->execute()->fetchAll())->
filter(function ($publisher) { return $this->isPublic($publisher); })->
- //pluck('uid', self::NAME_COLNAME, self::SHORTHAND_COLNAME)//->
each(function ($publisher) { $this->indexPublisher($publisher); });
return 0;
diff --git a/Classes/Controller/AbstractController.php b/Classes/Controller/AbstractController.php
index 7cfacbe..844dfb7 100644
--- a/Classes/Controller/AbstractController.php
+++ b/Classes/Controller/AbstractController.php
@@ -3,9 +3,9 @@
use Illuminate\Support\Collection;
use Slub\MpdbCore\Controller\AbstractController as CoreAbstractController;
+use Slub\MpdbCore\Services\SearchServiceInterface;
+use Slub\MpdbCore\Services\SearchServiceNotFoundException;
use Slub\MpdbPresentation\Command\IndexPublishersCommand;
-use Slub\MpdbPresentation\Services\SearchServiceInterface;
-use Slub\MpdbPresentation\Services\SearchServiceNotFoundException;
use TYPO3\CMS\Core\Configuration\ExtensionConfiguration;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
@@ -18,32 +18,18 @@ abstract class AbstractController extends CoreAbstractController
const DASHBOARD_TARGET = 'tx_mpdbpresentation_dashboard';
const RESULT_COUNT = 25;
const INDICES = [
- 'person' => [
- 'symbol' => '🧍',
- 'controller' => 'Person'
- ],
- 'work' => [
- 'symbol' => 'đź“„',
- 'controller' => 'Work'
- ],
- 'published_item' => [
- 'symbol' => 'đź“•',
- 'controller' => 'PublishedItem'
- ],
- 'instrument' => [
- 'symbol' => '🎺',
- 'controller' => 'Instrument'
- ],
- 'genre' => [
- 'symbol' => '🎶',
- 'controller' => 'Genre'
- ]
+ 'person' => [
+ 'controller' => 'Person',
+ 'translation' => 'person' ],
+ 'work' => [
+ 'controller' => 'Work',
+ 'translation' => 'work' ],
+ 'published_item' => [
+ 'controller' => 'PublishedItem',
+ 'translation' => 'publishedItem' ]
];
- const EXT_NAME = 'MpdbPresentation';
- protected Collection $localizedIndices;
protected Collection $publishers;
- protected SearchServiceInterface $searchService;
public function initializeShowAction()
{
@@ -55,34 +41,6 @@ public function initializeShowAction()
pluck('_source');
}
- /**
- * @throws SearchServiceNotFoundException
- */
- protected function initializeAction(): void
- {
- $this->localizedIndices = Collection::wrap(self::INDICES)->
- mapWithKeys(function ($array, $key) { return self::localizeIndex($array, $key); });
-
- $searchService = GeneralUtility::makeInstanceService('search');
- if (is_object($searchService)) {
- $this->searchService = $searchService;
- } else {
- throw new SearchServiceNotFoundException();
- }
-
- $this->searchService->
- setSize(self::RESULT_COUNT);
- }
-
- private static function localizeIndex(array $array, string $key): array
- {
- $coreExtConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('mpdb_core');
- $body = $array;
- $translation = LocalizationUtility::translate($key, self::EXT_NAME);
- $body['translation'] = ucwords($translation);
- return [ $key => $body ];
- }
-
protected function getJsCall(Collection $data, Collection $publishers = null, string $title): string
{
$movingAverages = explode(',', GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('mpdb_presentation')['movingAverages']);
diff --git a/Classes/Controller/IndexController.php b/Classes/Controller/IndexController.php
index 704fa37..0985806 100644
--- a/Classes/Controller/IndexController.php
+++ b/Classes/Controller/IndexController.php
@@ -25,7 +25,7 @@ public function searchAction(array $config = []): ResponseInterface
$this->view->assign('entities', $entities->all());
$this->view->assign('config', $config);
- $this->view->assign('indices', $this->localizedIndices->all());
+ $this->view->assign('indices', self::INDICES);
$this->view->assign('totalItems', $totalItems);
$this->view->assign('publishers', $publishers->all());
$this->view->assign('resultCount', self::RESULT_COUNT);
diff --git a/Classes/Controller/PersonController.php b/Classes/Controller/PersonController.php
index d1b972d..111c1c6 100755
--- a/Classes/Controller/PersonController.php
+++ b/Classes/Controller/PersonController.php
@@ -41,6 +41,13 @@ public function showAction(GndPerson $person)
setIndex(self::TABLE_INDEX_NAME)->
setId($person->getGndId())->
search();
+ $hasPrints = $document->
+ get('published_items')->
+ pluck('published_subitems')->
+ flatten(1)->
+ pluck('prints_by_date')->
+ filter()->
+ count();
$visualizationCall = $this->getJsCall($document, $this->publishers, $personData['name']);
$this->view->assign('publishers', $this->publishers->all());
@@ -49,22 +56,15 @@ public function showAction(GndPerson $person)
$this->view->assign('dashboardTarget', self::DASHBOARD_TARGET);
$this->view->assign('person', $personData);
$this->view->assign('graphTarget', self::GRAPH_TARGET);
+ $this->view->assign('hasPrints', $hasPrints);
}
- protected function get(GndPerson $person): array
+ protected function get(GndPerson $person): Collection
{
- $params = [
- 'index' => 'person',
- 'body' => [
- 'query' => [
- 'match' => [
- 'uid' => $person->getUid()
- ]
- ]
- ]
- ];
-
- $personData = $this->elasticClient->search($params);
- return $personData['hits']['hits'][0]['_source'];
+ return $this->searchService->
+ reset()->
+ setIndex('person')->
+ setId($person->getGndId())->
+ search();
}
}
diff --git a/Classes/Controller/PublishedItemController.php b/Classes/Controller/PublishedItemController.php
index 36217b0..dcb58d7 100755
--- a/Classes/Controller/PublishedItemController.php
+++ b/Classes/Controller/PublishedItemController.php
@@ -55,7 +55,7 @@ public function showAction(PublishedItem $publishedItem)
foreach ($publisherMikroItems as $publisherMikroItem) {
$publisherActions = array_merge(
$publisherActions,
- $this->publisherActionRepository->findByPublisherMikroItem($publisherMikroItem)->toArray()
+ $this->publisherActionRepository->findByPublishedsubitem($publisherMikroItem)->toArray()
);
}
usort($publisherActions, $sortByDate);
diff --git a/Classes/Controller/WelcomeController.php b/Classes/Controller/WelcomeController.php
new file mode 100644
index 0000000..8949cbc
--- /dev/null
+++ b/Classes/Controller/WelcomeController.php
@@ -0,0 +1,62 @@
+, SLUB Dresden
+ *
+ ***/
+/**
+ * PublishedItemController
+ */
+class WelcomeController extends AbstractController
+{
+
+ /**
+ * action welcome
+ *
+ * @return void
+ */
+ public function welcomeAction(): ResponseInterface
+ {
+ $bodyText = $this->configurationManager->getContentObject()->getFieldVal('bodytext');
+ $and = LocalizationUtility::translate('LLL:EXT:mpdb_presentation/Resources/Private/Language/locallang:and');
+
+ $entityCount = $this->searchService->
+ setIndex(PublishedItemController::TABLE_INDEX_NAME)->
+ count();
+
+ $publishers = $this->searchService->
+ reset()->
+ setIndex(Publisher::INDEX_NAME)->
+ search()->
+ pluck('_source')->
+ map(function ($publisher) { return self::getPublisherName($publisher); })->
+ join(', ', ' ' . $and . ' ');
+
+ $processedText = Str::of($bodyText)->replace('{{ publishers }}', $publishers)->
+ replace('{{ count }}', $entityCount);
+
+ $this->view->assign('processedText', $processedText);
+
+ return $this->htmlResponse();
+ }
+
+ private static function getPublisherName(Collection $publisher): string
+ {
+ return $publisher->get('name') . ' (' . $publisher->get('shorthand') . ')';
+ }
+
+}
diff --git a/Classes/Controller/WorkController.php b/Classes/Controller/WorkController.php
index 852108f..55d68d5 100755
--- a/Classes/Controller/WorkController.php
+++ b/Classes/Controller/WorkController.php
@@ -7,6 +7,7 @@
use \TYPO3\CMS\Extbase\Pagination\QueryResultPaginator;
use \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
use \TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser;
+use \Slub\MpdbCore\Command\IndexCommand;
use \Slub\MpdbCore\Domain\Model\Publisher;
use \Slub\MpdbCore\Domain\Model\PublisherMakroItem;
use \Slub\MpdbCore\Lib\DbArray;
@@ -41,81 +42,29 @@ class WorkController extends AbstractController
*/
public function showAction(GndWork $work)
{
- if (isset($GLOBALS['BE_USER'])) {
- $level = -1;
- } else {
- $level = 2;
- }
if ($work->getSuperWork()) {
$work = $work->getSuperWork();
}
- //$publisherMakroItems = $this->publisherMakroItemRepository->lookupByWork($work);//->toArray();
- //$publisherMikroItems = $this->publisherMikroItemRepository->lookupByWork($work)->toArray();
-
- $outMakros = [];
- $outMikros = [];
- //foreach ($publisherMakroItems as $makro) {
- //if ($makro->getFinal() >= $level) {
- //$outMakros[] = $makro;
- //$outMikros = array_merge($outMikros, $makro->getPublisherMikroItems()->toArray());
- //}
- //}
-
- $publisherActions = [];
- foreach ($outMikros as $publisherMikroItem) {
- $publisherActions = array_merge(
- $publisherActions,
- $this->publisherActionRepository->findByPublisherMikroItem($publisherMikroItem)->toArray()
- );
- }
-
- $getPublishedItems = function ($subWork) {
- $makros = $this->publisherMakroItemRepository->lookupByWork($subWork, $this->level);
- foreach ($makros as $makro) {
- foreach ($makro->getPublisherMikroItems() as $mikro) {
- $mikros[] = $mikro;
- }
- }
- return [
- 'subWork' => $subWork,
- 'makros' => $makros,
- 'mikros' => $mikros ?? []
- ];
- };
-
- /*
- $subWorks = (new DbArray())
- ->set($this->workRepository->findBySuperWork($work)->toArray())
- ->map( $getPublishedItems )
- ->filter( function ($subwork) { return $subwork['makros'] != []; })
- ->toArray();
-
- $sw = $this->workRepository->findBySuperWork($work);
- foreach ($subWorks as $subWork) {
- $subPublisherMakroItems = $this->publisherMakroItemRepository->lookupByWork($work);
-
- $outMikros = [];
- $publisherActions = [];
- foreach ($subPublisherMakroItems as $makro) {
- if ($makro->getFinal() >= $level) {
- $outMakros[] = $makro;
- $outMikros = array_merge($outMikros, $makro->getPublisherMikroItems()->toArray());
- }
- }
- foreach ($outMikros as $mikro) {
- $publisherActions = array_merge($publisherActions, $mikro->getPublisherActions()->toArray());
- }
- foreach ($subWork['mikros'] as $mikro) {
- $publisherActions = array_merge($publisherActions, $mikro->getPublisherActions()->toArray());
- }
- }
- */
+ $indexedWork = $this->searchService->
+ reset()->
+ setIndex(IndexCommand::WORK_INDEX)->
+ setId($work->getGndId())->
+ search();
$document = $this->searchService->
reset()->
setIndex(self::TABLE_INDEX_NAME)->
setId($work->getGndId())->
search();
+ $hasPrints = $document->
+ get('published_items')->
+ pluck('published_subitems')->
+ flatten(1)->
+ pluck('prints_by_date')->
+ filter()->
+ count();
+ $publishedItems = $this->publishedItemRepository->findByContainedWorks($work->getUid());
+ $altTitles = explode(' $ ', $work->getAltTitles());
$visualizationCall = $this->getJsCall($document, $this->publishers, $work->getFullTitle());
$this->view->assign('publishers', $this->publishers);
@@ -123,10 +72,9 @@ public function showAction(GndWork $work)
$this->view->assign('tableTarget', self::TABLE_TARGET);
$this->view->assign('dashboardTarget', self::DASHBOARD_TARGET);
$this->view->assign('graphTarget', self::GRAPH_TARGET);
- $this->view->assign('work', $work);
- //$this->view->assign('subWorks', $subWorks);
- //$this->view->assign('publisherMikroItems', $outMikros);
- //$this->view->assign('publisherActions', $publisherActions);
- //$this->view->assign('publisherMakroItems', $outMakros);
+ $this->view->assign('work', $indexedWork);
+ $this->view->assign('publishedItems', $publishedItems);
+ $this->view->assign('altTitles', $altTitles);
+ $this->view->assign('hasPrints', $hasPrints);
}
}
diff --git a/Configuration/Icons.php b/Configuration/Icons.php
index 3fe7b90..4410d20 100644
--- a/Configuration/Icons.php
+++ b/Configuration/Icons.php
@@ -10,5 +10,9 @@
'mpdb_res_icon' => [
'provider' => SvgIconProvider::class,
'source' => 'EXT:mpdb_presentation/Resources/Public/Icons/mpdb_res_icon.svg'
+ ],
+ 'mpdb_wel_icon' => [
+ 'provider' => SvgIconProvider::class,
+ 'source' => 'EXT:mpdb_presentation/Resources/Public/Icons/mpdb_wel_icon.svg'
]
];
diff --git a/Configuration/TCA/Overrides/tt_content.php b/Configuration/TCA/Overrides/tt_content.php
index e589f73..d86952a 100644
--- a/Configuration/TCA/Overrides/tt_content.php
+++ b/Configuration/TCA/Overrides/tt_content.php
@@ -2,7 +2,6 @@
declare(strict_types=1);
-use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
defined('TYPO3') or die();
@@ -18,23 +17,20 @@
);
})();
+(static function (): void {
+ \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
+ // extension name, matching the PHP namespaces (but without the vendor)
+ 'MpdbPresentation',
+ // arbitrary, but unique plugin name (not visible in the backend)
+ 'Mpdbwelcome',
+ // plugin title, as visible in the drop-down in the backend, use "LLL:" for localization
+ 'Music publisher database welcome plugin'
+ );
+})();
+
$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']['tx_mpdbpresentation_mpdbresearch'] = 'mpdb_res_icon';
-$GLOBALS['TCA']['tt_content']['types']['tx_mpdbpresentation_mpdbresearch'] = [
- 'showitem' => '
- --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
- --palette--;;general,
- header; Title,
- bodytext;LLL:EXT:core/Resources/Private/Language/Form/locallang_ttc.xlf:bodytext_formlabel,
- --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
- --palette--;;hidden,
- --palette--;;acces,
- ',
- 'columnsOverrides' => [
- 'bodytext' => [
- 'config' => [
- 'enableRichtext' => true,
- 'richtextConfiguration' => 'default'
- ]
- ]
- ]
+$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']['tx_mpdbpresentation_mpdbwelcome'] = 'mpdb_wel_icon';
+
+$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'] = [
+ 'mpdbpresentation_mpdbwelcome' => 'bodytext'
];
diff --git a/Configuration/TypoScript/constants.typoscript b/Configuration/TypoScript/constants.typoscript
index d18c84d..9acc57d 100755
--- a/Configuration/TypoScript/constants.typoscript
+++ b/Configuration/TypoScript/constants.typoscript
@@ -13,6 +13,17 @@ plugin.tx_mpdbpresentation_mpdbapi {
}
}
+plugin.tx_mpdbpresentation_mpdbwelcome {
+ view {
+ # cat=plugin.tx_mpdbpresentation_mpdbwelcome/file; type=string; label=Path to template root (FE)
+ templateRootPath = EXT:mpdb_presentation/Resources/Private/Templates/
+ # cat=plugin.tx_mpdbpresentation_mpdbwelcome/file; type=string; label=Path to template partials (FE)
+ partialRootPath = EXT:mpdb_presentation/Resources/Private/Partials/
+ # cat=plugin.tx_mpdbpresentation_mpdbwelcome/file; type=string; label=Path to template layouts (FE)
+ layoutRootPath = EXT:mpdb_presentation/Resources/Private/Layouts/
+ }
+}
+
plugin.tx_mpdbpresentation_mpdbresearch {
view {
# cat=plugin.tx_mpdbpresentation_mpdbresearch/file; type=string; label=Path to template root (FE)
diff --git a/Configuration/TypoScript/setup.typoscript b/Configuration/TypoScript/setup.typoscript
index ac971d3..0ece0f2 100755
--- a/Configuration/TypoScript/setup.typoscript
+++ b/Configuration/TypoScript/setup.typoscript
@@ -53,6 +53,39 @@ plugin.tx_mpdbpresentation_mpdbresearch {
teamPage {
pid = {$config.teamPage.pid}
}
+ guidelinePage {
+ pid = {$config.guidelinePage.pid}
+ }
+ abbrPage {
+ pid = {$config.abbrPage.pid}
+ }
+ }
+}
+
+plugin.tx_mpdbpresentation_mpdbwelcome {
+ view {
+ templateRootPaths.0 = EXT:tx_mpdb_presentation/Resources/Private/Templates/
+ templateRootPaths.1 = {$plugin.tx_mpdbpresentation_mpdbwelcome.view.templateRootPath}
+ partialRootPaths.0 = EXT:tx_mpdb_presentation/Resources/Private/Partials/
+ partialRootPaths.1 = {$plugin.tx_mpdbpresentation_mpdbwelcome.view.partialRootPath}
+ layoutRootPaths.0 = EXT:tx_mpdb_presentation/Resources/Private/Layouts/
+ layoutRootPaths.1 = {$plugin.tx_mpdbpresentation_mpdbwelcome.view.layoutRootPath}
+ }
+ persistence {
+ storagePid = {$plugin.tx_mpdbpresentation_mpdbwelcome.persistence.storagePid}
+ #recursive = 1
+ }
+ features {
+ #skipDefaultArguments = 1
+ # if set to 1, the enable fields are ignored in BE context
+ ignoreAllEnableFieldsInBe = 0
+ # Should be on by default, but can be disabled if all action in the plugin are uncached
+ requireCHashArgumentForActionArguments = 1
+ }
+ settings {
+ researchPage {
+ pid = {$config.researchPage.pid}
+ }
}
}
@@ -72,7 +105,4 @@ page {
subitemController = EXT:mpdb_presentation/Resources/Public/JavaScript/SubitemController.js
graphController = EXT:mpdb_presentation/Resources/Public/JavaScript/GraphController.js
}
- includeCSS {
- mpdb_presentation_styles = EXT:mpdb_presentation/Resources/Public/Css/layout.css
- }
}
diff --git a/README.md b/README.md
index 5242489..6e4947b 100644
--- a/README.md
+++ b/README.md
@@ -16,6 +16,44 @@ $ typo3 mpdb_presentation:indexpublishers
$ typo3 mpdb_presentation:calculatetables
```
+# Welcome plugin
+
+The extension comes with a welcome plugin which displays a text that may be set in the "Plugin" tab of the plugin properties.
+Inside that text, you can use `{{ count }}` to get the number of published items in your elasticsearch index and `{{ publishers }}` to get a localized list of the publishers in the index.
+A sample text may look like
+
+```txt
+Willkommen auf der Homepage der mvdb.
+
+Die Musikverlagsdatenbank enthält {{ count }} Datensätze zu Ausgaben der Musikverlage {{ publishers }}. Die Daten wurden anhand der Geschäftsbücher der Verlage erschlossen, und enthalten neben Angaben zu Verlagsnummern und Druckauflagen auch bibliograhischen Normdateninformationen der GND.
+
+Nach welcher Ausgabe suchen Sie?
+(Achtung: Bitte beachten Sie die Hinweise zu Verlässlichkeit, Umfang und Interpretation der Daten in den Datenerfassungsrichtlinien.)
+```
+
+# Plugin configuration
+
+In order to get all links and redirects running, you need to provide your researchPage, teamPage, guidelinePage and abbrPage as constants in your Typoscript template as well as the storagePid.
+An example configuration is here:
+
+```txt
+config {
+ researchPage {
+ pid =
+ }
+ teamPage {
+ pid =
+ }
+ guidelinePage {
+ pid =
+ }
+ abbrPage {
+ pid =
+ }
+}
+plugin.tx_mpdbpresentation_mpdbresearch.persistence.storagePid =
+```
+
# Maintainer
If you have any questions or encounter any problems, please do not hesitate to contact me.
diff --git a/Resources/Private/Language/de.locallang.xlf b/Resources/Private/Language/de.locallang.xlf
new file mode 100644
index 0000000..b2b7f63
--- /dev/null
+++ b/Resources/Private/Language/de.locallang.xlf
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+ nächste Seite
+
+
+
+ vorherige Seite
+
+
+
+ bis
+
+
+
+ von
+
+
+
+ Ergebnistyp
+
+
+
+ Verlag
+
+
+
+ Seite
+
+
+
+ keine Ergebnisse gefunden
+
+
+
+ Suchen
+
+
+
+ Musikverlagsdatenbank Einstieg
+
+
+
+ Das Rechercheplugin der Musikverlagsdatenbank.
+
+
+
+ Musikverlagsdatenbank Willkommen
+
+
+
+ Das BegrĂĽĂźungsplugin der Musikverlagsdatenbank
+
+
+
+ Person
+
+
+
+ Werk
+
+
+
+ Verlagsartikel
+
+
+
+ Diese Daten stammen aus der Gemeinsamen Normdatei (GND).
+
+
+
+ Lebensdaten
+
+
+
+ Ergänzende Titelinformationen
+
+
+
+ gedruckt in
+
+
+
+ Teilwerke
+
+
+
+ Von diesem Werk sind keine Drucke in der Datenbank aufgezeichnet.
+
+
+
+ Es wurden keine Werke von %s gefunden.
+
+
+
+ verlegt von %s
+
+
+
+ Werke von %s in der Musikverlagsdatenbank
+
+
+
+ unbekannt
+
+
+
+
+ In der mvdb wird zwischen Drucken von Einzelwerken, Variationen bzw. Bearbeitungen und Sammlungen unterschieden.
+ Sammlungen werden als erschlossen bezeichnet, falls alle enthaltenen Werke rekonstruiert werden, als teilerschlossen, falls nur einige enthaltene Werke bekannt sind, und andernfalls als unerschlossen.
+ Daneben werden vereinzelt Schulwerke und theoretische Werke erfasst.
+
+
+
+
+ enthaltenes Werk
+
+
+
+ enthaltene Werke
+
+
+
+ bearbeitetes Werk
+
+
+
+ FĂĽr diesen Verlagsartikel konnten keine Werkdaten erschlossen werden.
+
+
+
+ fĂĽr
+
+
+
+ FĂĽr diesen Verlagsartikel konnten keine Werkdaten erschlossen werden.
+
+
+
+ Wirtschaftsdaten
+
+
+
+ Keine Wirtschaftsdaten
+
+
+
+ FĂĽr einige Verlagsartikel konnten keine Wirtschaftsdaten gefunden werden.
+
+
+
+ Der Typ des Verlagsartikels gibt an, ob es sich um einen einfachen Werkdruck, einen Sammeldruck, eine Bearbeitung oder etwas anderes handelt.
+
+
+
+ und
+
+
+
+
diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf
index b623321..a3bd08a 100644
--- a/Resources/Private/Language/locallang.xlf
+++ b/Resources/Private/Language/locallang.xlf
@@ -1,23 +1,116 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Resources/Private/Language/locallang_mpdbresearch.xlf b/Resources/Private/Language/locallang_mpdbresearch.xlf
new file mode 100644
index 0000000..c1f5dcf
--- /dev/null
+++ b/Resources/Private/Language/locallang_mpdbresearch.xlf
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/Resources/Private/Layouts/Research.html b/Resources/Private/Layouts/Research.html
index f25b550..0cbcf6d 100644
--- a/Resources/Private/Layouts/Research.html
+++ b/Resources/Private/Layouts/Research.html
@@ -3,7 +3,7 @@
-
+