Skip to content

Commit 7a3d715

Browse files
committed
[RELEASE] Version 9.5.1 with support for TSconfig markers in FlexForms
Releases: https://projekte.in2code.de/issues/46784 Releases: https://projekte.in2code.de/issues/47056 Related: https://projekte.in2code.de/issues/46859 Resolves: https://projekte.in2code.de/issues/47199
2 parents a2859dc + 36197af commit 7a3d715

File tree

13 files changed

+248
-41
lines changed

13 files changed

+248
-41
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# In2publish Core Change Log
22

3+
9.5.1:
4+
5+
[META] Set the EM conf version number to 9.5.1
6+
[BUGFIX] Ignore missing slashes which some drivers omit (mistakenly)
7+
[DOCS] Add missing condition for folderFileLimit setting
8+
[BUGFIX] Support TSconfig markers in FlexForm additional_where_clause
9+
[BUGFIX] Catch exceptions from the ForeignEnvironmentService before they appear in actions
10+
[RELEASE] Version 9.5.0 with performance improvements, sorting publishing, and more features and fixes
11+
312
9.5.0:
413

514
- [META] Set the branch alias version number to 9.5.x-dev

Classes/Controller/AbstractController.php

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
use In2code\In2publishCore\Communication\RemoteCommandExecution\RemoteCommandDispatcher;
3434
use In2code\In2publishCore\Communication\RemoteCommandExecution\RemoteCommandRequest;
3535
use In2code\In2publishCore\Utility\DatabaseUtility;
36+
use Throwable;
3637
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
3738
use TYPO3\CMS\Core\Messaging\AbstractMessage;
3839
use TYPO3\CMS\Core\Utility\GeneralUtility;
@@ -78,15 +79,26 @@ public function __construct()
7879
protected function initializeAction()
7980
{
8081
parent::initializeAction();
81-
82-
if (static::class !== ToolsController::class && null === DatabaseUtility::buildForeignDatabaseConnection()) {
82+
if (static::class !== ToolsController::class) {
83+
try {
84+
if (null !== DatabaseUtility::buildForeignDatabaseConnection()) {
85+
return;
86+
}
87+
$this->addFlashMessage(
88+
LocalizationUtility::translate('error_not_connected', 'in2publish_core'),
89+
'',
90+
AbstractMessage::ERROR
91+
);
92+
} catch (Throwable $exception) {
93+
$this->addFlashMessage(
94+
(string)$exception,
95+
LocalizationUtility::translate('error_connecting', 'in2publish_core')
96+
. ': ' . $exception->getMessage(),
97+
AbstractMessage::ERROR
98+
);
99+
}
83100
$this->actionMethodName = static::BLANK_ACTION;
84101
$this->arguments = $this->objectManager->get(Arguments::class);
85-
$this->addFlashMessage(
86-
LocalizationUtility::translate('error_not_connected', 'in2publish_core'),
87-
'',
88-
AbstractMessage::ERROR
89-
);
90102
}
91103
}
92104

@@ -97,7 +109,12 @@ protected function initializeView(ViewInterface $view)
97109
{
98110
parent::initializeView($view);
99111
$localDbAvailable = null !== DatabaseUtility::buildLocalDatabaseConnection();
100-
$foreignDbAvailable = null !== DatabaseUtility::buildForeignDatabaseConnection();
112+
try {
113+
$foreignDbAvailable = null !== DatabaseUtility::buildForeignDatabaseConnection();
114+
} catch (Throwable $exception) {
115+
// Exception is already caught and processed in the initializeAction
116+
$foreignDbAvailable = false;
117+
}
101118
$this->view->assign('localDatabaseConnectionAvailable', $localDbAvailable);
102119
$this->view->assign('foreignDatabaseConnectionAvailable', $foreignDbAvailable);
103120
$this->view->assign('publishingAvailable', $localDbAvailable && $foreignDbAvailable);

Classes/Domain/Repository/CommonRepository.php

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -584,11 +584,22 @@ public function enrichRecordWithRelatedRecords(RecordInterface $record, array $e
584584
$this->identifierFieldName = 'uid';
585585
switch ($columnConfiguration['type']) {
586586
case 'select':
587+
$whereClause = '';
588+
if (!empty($columnConfiguration['foreign_table_where'])) {
589+
/** @var ReplaceMarkersService $replaceMarkers */
590+
$whereClause = $columnConfiguration['foreign_table_where'];
591+
if (false !== strpos($whereClause, '#')) {
592+
$replaceMarkers = GeneralUtility::makeInstance(ReplaceMarkersService::class);
593+
$whereClause = QueryHelper::quoteDatabaseIdentifiers($this->localDatabase, $whereClause);
594+
$whereClause = $replaceMarkers->replaceMarkers($record, $whereClause, $propertyName);
595+
}
596+
}
587597
$relatedRecords = $this->fetchRelatedRecordsBySelect(
588598
$columnConfiguration,
589599
$record,
590600
$propertyName,
591-
$excludedTableNames
601+
$excludedTableNames,
602+
$whereClause
592603
);
593604
break;
594605
case 'inline':
@@ -1107,7 +1118,8 @@ protected function fetchRelatedRecordsByFlexForm(
11071118
$column,
11081119
$excludedTableNames,
11091120
$config,
1110-
$currentFlexFormDatum
1121+
$currentFlexFormDatum,
1122+
$key
11111123
);
11121124
$records = array_merge($records, $newRecords);
11131125
}
@@ -1122,6 +1134,7 @@ protected function fetchRelatedRecordsByFlexForm(
11221134
* @param array $exclTables
11231135
* @param $config
11241136
* @param mixed $flexFormData
1137+
* @param string $key
11251138
*
11261139
* @return array
11271140
* @throws Exception
@@ -1131,7 +1144,8 @@ protected function getRecordsByFlexFormRelation(
11311144
$column,
11321145
array $exclTables,
11331146
$config,
1134-
$flexFormData
1147+
$flexFormData,
1148+
string $key
11351149
): array {
11361150
if ($this->shouldSkipSearchingForRelatedRecordsByFlexFormProperty($record, $config, $flexFormData)) {
11371151
return [];
@@ -1142,7 +1156,27 @@ protected function getRecordsByFlexFormRelation(
11421156
$recordId = $record->getIdentifier();
11431157
switch ($config['type']) {
11441158
case 'select':
1145-
$records = $this->fetchRelatedRecordsBySelect($config, $record, $flexFormData, $exclTables, true);
1159+
$whereClause = '';
1160+
if (!empty($config['foreign_table_where'])) {
1161+
/** @var ReplaceMarkersService $replaceMarkers */
1162+
$whereClause = $config['foreign_table_where'];
1163+
if (false !== strpos($whereClause, '{#')) {
1164+
$whereClause = QueryHelper::quoteDatabaseIdentifiers($this->localDatabase, $whereClause);
1165+
}
1166+
if (false !== strpos($whereClause, '###')) {
1167+
$replaceMarkers = GeneralUtility::makeInstance(ReplaceMarkersService::class);
1168+
$whereClause = $replaceMarkers->replaceFlexFormMarkers($record, $whereClause, $column, $key);
1169+
}
1170+
}
1171+
1172+
$records = $this->fetchRelatedRecordsBySelect(
1173+
$config,
1174+
$record,
1175+
$column,
1176+
$exclTables,
1177+
$whereClause,
1178+
$flexFormData
1179+
);
11461180
break;
11471181
case 'inline':
11481182
$records = $this->fetchRelatedRecordsByInline(
@@ -1501,16 +1535,18 @@ protected function getFileAndPathNames(
15011535
* @param RecordInterface $record
15021536
* @param string $propertyName
15031537
* @param array $excludedTableNames
1504-
* @param bool $overrideIdByRecord
1538+
* @param string $whereClause
1539+
* @param mixed $recordIdentifierOverride
15051540
*
15061541
* @return array
15071542
*/
15081543
protected function fetchRelatedRecordsBySelect(
15091544
array $columnConfiguration,
15101545
RecordInterface $record,
1511-
$propertyName,
1546+
string $propertyName,
15121547
array $excludedTableNames,
1513-
$overrideIdByRecord = false
1548+
string $whereClause,
1549+
$recordIdentifierOverride = null
15141550
): array {
15151551
$tableName = $columnConfiguration['foreign_table'];
15161552
$isL10nPointer = $propertyName === $this->tcaService->getTransOrigPointerField($record->getTableName());
@@ -1520,8 +1556,8 @@ protected function fetchRelatedRecordsBySelect(
15201556
}
15211557
$records = [];
15221558

1523-
if ($overrideIdByRecord) {
1524-
$recordIdentifier = $propertyName;
1559+
if (null !== $recordIdentifierOverride) {
1560+
$recordIdentifier = $recordIdentifierOverride;
15251561
} else {
15261562
$recordIdentifier = $record->getMergedProperty($propertyName);
15271563
}
@@ -1531,15 +1567,6 @@ protected function fetchRelatedRecordsBySelect(
15311567
if (!empty($columnConfiguration['MM'])) {
15321568
$records = $this->fetchRelatedRecordsBySelectMm($columnConfiguration, $record, $excludedTableNames);
15331569
} else {
1534-
$whereClause = '';
1535-
if (!empty($columnConfiguration['foreign_table_where'])) {
1536-
/** @var ReplaceMarkersService $replaceMarkers */
1537-
$replaceMarkers = GeneralUtility::makeInstance(ReplaceMarkersService::class);
1538-
$foreignTblWhere = $columnConfiguration['foreign_table_where'];
1539-
$foreignTblWhere = QueryHelper::quoteDatabaseIdentifiers($this->localDatabase, $foreignTblWhere);
1540-
$whereClause = $replaceMarkers->replaceMarkers($record, $foreignTblWhere, $propertyName);
1541-
}
1542-
15431570
$uidArray = [];
15441571

15451572
if (MathUtility::canBeInterpretedAsInteger($recordIdentifier)) {

Classes/Domain/Service/Publishing/FilePublisherService.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ public function addFileToForeign($storage, $fileIdentifier): bool
112112
basename($fileIdentifier),
113113
true
114114
);
115-
return $fileIdentifier === $newFileIdentifier;
115+
// Ignore slashes because of drivers which do not return the
116+
// leading or trailing slashes (like fal_s3/aus_driver_amazon_s3)
117+
return trim($fileIdentifier, '/') === trim($newFileIdentifier, '/');
116118
}
117119

118120
/**

Classes/Domain/Service/Publishing/FolderPublisherService.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ public function publish($combinedIdentifier): bool
6565
dirname($folderIdentifier),
6666
true
6767
);
68-
$success = $folderIdentifier === $createdFolder;
68+
// Ignore slashes because of drivers which do not return the
69+
// leading or trailing slashes (like fal_s3/aus_driver_amazon_s3)
70+
$success = trim($folderIdentifier, '/') === trim($createdFolder, '/');
6971
} else {
7072
$success = $remoteFalDriver->deleteFolder($folderIdentifier, true);
7173
}

0 commit comments

Comments
 (0)