Skip to content

Commit

Permalink
Add subentries for new metadata processing
Browse files Browse the repository at this point in the history
  • Loading branch information
chrizzor committed Jun 13, 2024
1 parent e4fe841 commit f93bee6
Showing 1 changed file with 27 additions and 10 deletions.
37 changes: 27 additions & 10 deletions Classes/Common/MetsDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -654,10 +654,15 @@ private function extractAndProcessMetadata(string $dmdId, string $mdSectionType,
*/
private function processAdditionalMetadata(array $additionalMetadata, \DOMXPath $domXPath, \DOMElement $domNode, array &$metadata): void
{
$subentries = [];
if (isset($additionalMetadata['subentries'])) {
$subentries = $additionalMetadata['subentries'];
unset($additionalMetadata['subentries']);
}
foreach ($additionalMetadata as $resArray) {
$this->setMetadataFieldValues($resArray, $domXPath, $domNode, $metadata);
$this->setMetadataFieldValues($resArray, $domXPath, $domNode, $metadata, $subentries);
$this->setDefaultMetadataValue($resArray, $metadata);
$this->setSortableMetadataValue($resArray, $domXPath, $domNode, $metadata);
$this->setSortableMetadataValue($resArray, $domXPath, $domNode, $metadata, $subentries);
}
}

Expand All @@ -673,14 +678,18 @@ private function processAdditionalMetadata(array $additionalMetadata, \DOMXPath
*
* @return void
*/
private function setMetadataFieldValues(array $resArray, \DOMXPath $domXPath, \DOMElement $domNode, array &$metadata): void
private function setMetadataFieldValues(array $resArray, \DOMXPath $domXPath, \DOMElement $domNode, array &$metadata, array $subentryResults): void

Check notice on line 681 in Classes/Common/MetsDocument.php

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Classes/Common/MetsDocument.php#L681

Avoid assigning values to variables in if clauses and the like (line '688', column '25').
{
if ($resArray['format'] > 0 && !empty($resArray['xpath'])) {
$values = $domXPath->evaluate($resArray['xpath'], $domNode);
if ($values instanceof \DOMNodeList && $values->length > 0) {
$metadata[$resArray['index_name']] = [];
foreach ($values as $value) {
$metadata[$resArray['index_name']][] = trim((string) $value->nodeValue);
if ($subentries = $this->getSubentries($subentryResults, $resArray['index_name'], $value)) {
$metadata[$resArray['index_name']][] = $subentries;
} else {
$metadata[$resArray['index_name']][] = trim((string) $value->nodeValue);
}
}
} elseif (!($values instanceof \DOMNodeList)) {
$metadata[$resArray['index_name']] = [trim((string) $values)];
Expand Down Expand Up @@ -717,19 +726,27 @@ private function setDefaultMetadataValue(array $resArray, array &$metadata): voi
*
* @return void
*/
private function setSortableMetadataValue(array $resArray, \DOMXPath $domXPath, \DOMElement $domNode, array &$metadata): void
private function setSortableMetadataValue(array $resArray, \DOMXPath $domXPath, \DOMElement $domNode, array &$metadata, array $subentryResults): void
{
if (!empty($metadata[$resArray['index_name']]) && $resArray['is_sortable']) {
$indexName = $resArray['index_name'];
$currentMetadata = $metadata[$indexName][0];

if (!empty($metadata[$indexName]) && $resArray['is_sortable']) {
if ($resArray['format'] > 0 && !empty($resArray['xpath_sorting'])) {
$values = $domXPath->evaluate($resArray['xpath_sorting'], $domNode);
if ($values instanceof \DOMNodeList && $values->length > 0) {
$metadata[$resArray['index_name'] . '_sorting'][0] = trim((string) $values->item(0)->nodeValue);
$metadata[$indexName . '_sorting'][0] = trim((string) $values->item(0)->nodeValue);
} elseif (!($values instanceof \DOMNodeList)) {
$metadata[$resArray['index_name'] . '_sorting'][0] = trim((string) $values);
$metadata[$indexName . '_sorting'][0] = trim((string) $values);
}
}
if (empty($metadata[$resArray['index_name'] . '_sorting'][0])) {
$metadata[$resArray['index_name'] . '_sorting'][0] = $metadata[$resArray['index_name']][0];
if (empty($metadata[$indexName . '_sorting'][0])) {
if (is_array($currentMetadata)) {
$sortingValue = implode(',', array_column($currentMetadata, 0));
$metadata[$indexName . '_sorting'][0] = $sortingValue;
} else {
$metadata[$indexName . '_sorting'][0] = $currentMetadata;
}
}
}
}
Expand Down

0 comments on commit f93bee6

Please sign in to comment.