Skip to content

Commit

Permalink
Merge pull request #40 from TYPO3GmbH/phpstan
Browse files Browse the repository at this point in the history
Add PHPStan
  • Loading branch information
mbrodala authored Mar 25, 2024
2 parents 15b8f51 + b98321b commit 2edc837
Showing 14 changed files with 133 additions and 181 deletions.
15 changes: 15 additions & 0 deletions Build/phpstan.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
parameters:
level: 5

paths:
- ../ext_emconf.php
- ../ext_localconf.php
- ../rector.php
- ../Classes
- ../Configuration
- ../Tests

ignoreErrors:
-
message: '#Variable \$_EXTKEY might not be defined#'
path: '../ext_emconf.php'
54 changes: 16 additions & 38 deletions Classes/Controller/FileVariantsController.php
Original file line number Diff line number Diff line change
@@ -35,6 +35,7 @@
use TYPO3\CMS\Core\Http\HtmlResponse;
use TYPO3\CMS\Core\Resource\DuplicationBehavior;
use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Resource\Folder;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;

@@ -50,7 +51,6 @@ public function ajaxResetFileVariant(ServerRequestInterface $request): ResponseI
$formDataGroup = GeneralUtility::makeInstance(TcaDatabaseRecord::class);
$formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
$nodeFactory = GeneralUtility::makeInstance(NodeFactory::class);
/** @var FormResultCompiler $formResultCompiler */
$formDataCompilerInput = [
'tableName' => 'sys_file_metadata',
'vanillaUid' => $uid,
@@ -60,48 +60,38 @@ public function ajaxResetFileVariant(ServerRequestInterface $request): ResponseI
$formData['renderType'] = 'fileInfo';

$fileUid = (int)$formData['databaseRow']['file'][0];
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file');
$queryBuilder->select('l10n_parent')->from('sys_file')->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT))
);
$fileRecord = $queryBuilder->select('l10n_parent')->from('sys_file')->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT)))->executeQuery()->fetchAssociative();

$fileRecord = $queryBuilder->execute()->fetch();
$defaultFileObject = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObject((int)$fileRecord['l10n_parent']);
$copy = $defaultFileObject->copyTo($defaultFileObject->getParentFolder());
/** @var Folder */
$parentFolder = $defaultFileObject->getParentFolder();
$copy = $defaultFileObject->copyTo($parentFolder);
// this record will be stale after the replace, remove it right away
$sysFileRecordToBeDeleted = $copy->getUid();
$path = $this->getAbsolutePathToFile($copy);

$file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObject($fileUid);
$file->getStorage()->replaceFile($file, $path);
$file->rename($defaultFileObject->getName(), DuplicationBehavior::RENAME);
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file');
$queryBuilder->delete('sys_file')->where(
$queryBuilder->expr()
->eq('uid', $queryBuilder->createNamedParameter($sysFileRecordToBeDeleted, \PDO::PARAM_INT))
)->execute();
$queryBuilder->delete('sys_file')->where($queryBuilder->expr()
->eq('uid', $queryBuilder->createNamedParameter($sysFileRecordToBeDeleted, \PDO::PARAM_INT)))->executeStatement();

// metadata records for copied file are not needed, either
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('sys_file_metadata');
$queryBuilder->select('uid')->from('sys_file_metadata')->where(
$queryBuilder->expr()->eq(
'file',
$queryBuilder->createNamedParameter($sysFileRecordToBeDeleted, \PDO::PARAM_INT)
)
);
$metadataRecordsToBeDeleted = $queryBuilder->execute()->fetchAll(\PDO::FETCH_COLUMN);
$metadataRecordsToBeDeleted = $queryBuilder->select('uid')->from('sys_file_metadata')->where($queryBuilder->expr()->eq(
'file',
$queryBuilder->createNamedParameter($sysFileRecordToBeDeleted, \PDO::PARAM_INT)
))->executeQuery()->fetchFirstColumn();
if (count($metadataRecordsToBeDeleted) > 0) {
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('sys_file_metadata');
$queryBuilder->delete('sys_file_metadata')->where(
$queryBuilder->expr()
->in('uid', $metadataRecordsToBeDeleted)
)->execute();
$queryBuilder->delete('sys_file_metadata')->where($queryBuilder->expr()
->in('uid', $metadataRecordsToBeDeleted))->executeStatement();
}

// /** @var $refIndexObj ReferenceIndex */
@@ -131,10 +121,7 @@ public function ajaxUploadFileVariant(ServerRequestInterface $request): Response
$metadataUid = (int)$request->getQueryParams()['uid'];

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_metadata');
$queryBuilder->select('file')->from('sys_file_metadata')->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($metadataUid, \PDO::PARAM_INT))
);
$currentFileUid = $queryBuilder->execute()->fetchColumn();
$currentFileUid = $queryBuilder->select('file')->from('sys_file_metadata')->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($metadataUid, \PDO::PARAM_INT)))->executeQuery()->fetchOne();

$currentFile = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObject($currentFileUid);
$uploadedFile = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObject($uploadedFileUid);
@@ -143,24 +130,15 @@ public function ajaxUploadFileVariant(ServerRequestInterface $request): Response

/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file');
$queryBuilder->delete('sys_file')->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uploadedFileUid, \PDO::PARAM_INT))
)->execute();
$queryBuilder->delete('sys_file')->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uploadedFileUid, \PDO::PARAM_INT)))->executeStatement();

/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_metadata');
$queryBuilder->delete('sys_file_metadata')->where(
$queryBuilder->expr()->eq('file', $queryBuilder->createNamedParameter($uploadedFileUid, \PDO::PARAM_INT))
)->execute();

/** @var $refIndexObj ReferenceIndex */
// $refIndexObj = GeneralUtility::makeInstance(ReferenceIndex::class);
// $refIndexObj->updateIndex(false);
$queryBuilder->delete('sys_file_metadata')->where($queryBuilder->expr()->eq('file', $queryBuilder->createNamedParameter($uploadedFileUid, \PDO::PARAM_INT)))->executeStatement();

$formDataGroup = GeneralUtility::makeInstance(TcaDatabaseRecord::class);
$formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
$nodeFactory = GeneralUtility::makeInstance(NodeFactory::class);
/** @var FormResultCompiler $formResultCompiler */
$formDataCompilerInput = [
'tableName' => 'sys_file_metadata',
'vanillaUid' => $metadataUid,
66 changes: 25 additions & 41 deletions Classes/DataHandler/DataHandlerHook.php
Original file line number Diff line number Diff line change
@@ -67,13 +67,11 @@ public function processDatamap_postProcessFieldArray(string $status, string $tab
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table);
$parentFile = (int)$queryBuilder
->select('uid_local')
->from('sys_file_reference')
->where($queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter((int)$fieldArray['l10n_parent'], \PDO::PARAM_INT)
))
->execute()
->fetchColumn();
->from('sys_file_reference')->where($queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter((int)$fieldArray['l10n_parent'], \PDO::PARAM_INT)
))->executeQuery()
->fetchOne();
$fileVariantUid = $this->findLanguageVariantForLanguageAndParentFile((int)$fieldArray['sys_language_uid'], $parentFile);
if ($fileVariantUid > 0) {
$fieldArray['uid_local'] = $fileVariantUid;
@@ -112,23 +110,18 @@ public function processCmdmap_postProcess(
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_reference');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
$queryBuilder->select('uid_local')->from('sys_file_reference')->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter((int)$reference, \PDO::PARAM_INT)
)
);
$currentFileId = (int)$queryBuilder->execute()->fetchColumn();
$currentFileId = (int)$queryBuilder->select('uid_local')->from('sys_file_reference')->where($queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter((int)$reference, \PDO::PARAM_INT)
))->executeQuery()->fetchOne();
$fileVariantUid = $this->findLanguageVariantForLanguageAndParentFile((int)$value, $currentFileId);

if ((int)$fileVariantUid > 0) {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_reference');
$queryBuilder->update('sys_file_reference')->set('uid_local', $fileVariantUid)->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter((int)$reference, \PDO::PARAM_INT)
)
)->execute();
$queryBuilder->update('sys_file_reference')->set('uid_local', $fileVariantUid)->where($queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter((int)$reference, \PDO::PARAM_INT)
))->executeStatement();
}
}
}
@@ -149,18 +142,13 @@ public function processCmdmap_postProcess(

/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_metadata');
$queryBuilder->select('uid', 'file')->from('sys_file_metadata')
->where(
$queryBuilder->expr()->eq(
'l10n_parent',
$queryBuilder->createNamedParameter((int)$id, \PDO::PARAM_INT)
),
$queryBuilder->expr()->eq(
'sys_language_uid',
$queryBuilder->createNamedParameter((int)$value, \PDO::PARAM_INT)
)
);
$handledMetaDataRecord = $queryBuilder->execute()->fetch();
$handledMetaDataRecord = $queryBuilder->select('uid', 'file')->from('sys_file_metadata')->where($queryBuilder->expr()->eq(
'l10n_parent',
$queryBuilder->createNamedParameter((int)$id, \PDO::PARAM_INT)
), $queryBuilder->expr()->eq(
'sys_language_uid',
$queryBuilder->createNamedParameter((int)$value, \PDO::PARAM_INT)
))->executeQuery()->fetchAssociative();
$resourcesService->copyOriginalFileAndUpdateAllConsumingReferencesToUseTheCopy($value, $handledMetaDataRecord, $folder);
}
}
@@ -185,15 +173,11 @@ protected function substNewWithId($id, DataHandler $pObj): int
*/
protected function findLanguageVariantForLanguageAndParentFile(int $sys_language_uid, int $currentFileId): int
{
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file');
$queryBuilder->select('sys_language_uid', 'l10n_parent')->from('sys_file')->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($currentFileId, \PDO::PARAM_INT)
)
);
$fileRecord = $queryBuilder->execute()->fetch();
$fileRecord = $queryBuilder->select('sys_language_uid', 'l10n_parent')->from('sys_file')->where($queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($currentFileId, \PDO::PARAM_INT)
))->executeQuery()->fetchAssociative();
if ((int)$fileRecord['sys_language_uid'] === 0) {
$queryBuilder->select('uid')->from('sys_file')->where(
$queryBuilder->expr()->eq(
@@ -218,6 +202,6 @@ protected function findLanguageVariantForLanguageAndParentFile(int $sys_language
);
}

return (int)$queryBuilder->execute()->fetchColumn();
return (int)$queryBuilder->executeQuery()->fetchOne();
}
}
10 changes: 3 additions & 7 deletions Classes/EventListener/AfterFileDeletedEventListener.php
Original file line number Diff line number Diff line change
@@ -41,17 +41,13 @@ public function __invoke(AfterFileDeletedEvent $event): void
$fileUid = $file->getUid();
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_metadata');
$queryBuilder->delete('sys_file_metadata')->where(
$queryBuilder->expr()->eq('file', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT))
)->execute();
$queryBuilder->delete('sys_file_metadata')->where($queryBuilder->expr()->eq('file', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT)))->executeStatement();

// delete all file variants
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file');
$fileVariants = $queryBuilder->select('uid')->from('sys_file')->where(
$queryBuilder->expr()->eq('l10n_parent', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT))
)->execute();
foreach ($fileVariants->fetchAll(\PDO::FETCH_COLUMN) as $variantUid) {
$fileVariants = $queryBuilder->select('uid')->from('sys_file')->where($queryBuilder->expr()->eq('l10n_parent', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT)))->executeQuery();
foreach ($fileVariants->fetchFirstColumn() as $variantUid) {
/** @var File $variantFile */
$variantFile = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObject($variantUid);
$variantFile->getStorage()->deleteFile($variantFile);
14 changes: 4 additions & 10 deletions Classes/EventListener/BeforeFileDeletedEventListener.php
Original file line number Diff line number Diff line change
@@ -39,21 +39,15 @@ public function __invoke(BeforeFileDeletedEvent $event): void
$fileUid = $file->getUid();
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file');
$parentFileUid = (int)$queryBuilder->select('l10n_parent')->from('sys_file')->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT))
)->execute()->fetchColumn();
$parentFileUid = (int)$queryBuilder->select('l10n_parent')->from('sys_file')->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT)))->executeQuery()->fetchOne();

/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_reference');
$references = $queryBuilder->select('uid')->from('sys_file_reference')->where(
$queryBuilder->expr()->eq('uid_local', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT))
)->execute();
foreach ($references->fetchAll(\PDO::FETCH_COLUMN) as $referenceUid) {
$references = $queryBuilder->select('uid')->from('sys_file_reference')->where($queryBuilder->expr()->eq('uid_local', $queryBuilder->createNamedParameter($fileUid, \PDO::PARAM_INT)))->executeQuery();
foreach ($references->fetchFirstColumn() as $referenceUid) {
/** @var QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_reference');
$queryBuilder->update('sys_file_reference')->set('uid_local', $parentFileUid)->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($referenceUid, \PDO::PARAM_INT))
)->execute();
$queryBuilder->update('sys_file_reference')->set('uid_local', $parentFileUid)->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($referenceUid, \PDO::PARAM_INT)))->executeStatement();
}
}
}
16 changes: 7 additions & 9 deletions Classes/FormEngine/FieldWizard/FileVariantsOverviewWizard.php
Original file line number Diff line number Diff line change
@@ -44,8 +44,8 @@ public function render(): array

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_language');
$languages = [];
$languageRecords = $queryBuilder->select('uid', 'title', 'language_isocode')->from('sys_language')->execute();
while ($language = $languageRecords->fetch()) {
$languageRecords = $queryBuilder->select('uid', 'title', 'language_isocode')->from('sys_language')->executeQuery();
while ($language = $languageRecords->fetchAssociative()) {
$languages[(int)$language['uid']] = $language['title'] . ' (' . $language['language_isocode'] . ')';
}

@@ -55,13 +55,11 @@ public function render(): array
$result['html'] .= '<div class="variants-preview">';
$resourcesService = GeneralUtility::makeInstance(ResourcesService::class);
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_metadata');
$translations = $queryBuilder->select('file', 'sys_language_uid')->from('sys_file_metadata')->where(
$queryBuilder->expr()->eq(
'l10n_parent',
$queryBuilder->createNamedParameter((int)$this->data['databaseRow']['uid'], \PDO::PARAM_INT)
)
)->execute();
while ($translation = $translations->fetch()) {
$translations = $queryBuilder->select('file', 'sys_language_uid')->from('sys_file_metadata')->where($queryBuilder->expr()->eq(
'l10n_parent',
$queryBuilder->createNamedParameter((int)$this->data['databaseRow']['uid'], \PDO::PARAM_INT)
))->executeQuery();
while ($translation = $translations->fetchAssociative()) {
$result['html'] .= '<p class="t3-sysfile-translation">';
$result['html'] .= '<span>' . $languages[(int)$translation['sys_language_uid']] . '</span>';
$result['html'] .= $resourcesService->generatePreviewImageHtml((int)$translation['file'], 't3-tceforms-sysfile-translation-imagepreview');
Loading

0 comments on commit 2edc837

Please sign in to comment.