diff --git a/ChangeLog b/ChangeLog index ef6d2f100..5841e18d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,7 @@ Upcoming version for TYPO3 13 [TASK] Migrate registration of status dashboard widget, https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/12.0/Breaking-96812-NoFrontendTypoScriptBasedTemplateOverridesInTheBackend.html#widget-registration-using-services-yaml [TASK] Don't use QueryBuilder->add() anymore because it has been removed, https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/13.0/Breaking-102875-QueryBuilderChanges.html [TASK] Remove language-related function from AbstractPlugin and use custom translate function instead +[TASK] Migrate database queries to use type constants from Connection instead of PDO, https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Database/QueryBuilder/Index.html#database-query-builder-create-named-parameter Version 5.5.2, 23 August 2024 [BUGFIX] Fix cropping if "resultChars" is empty. Thanks to Andreas Kießling. https://github.com/tpwd/ke_search/issues/242 diff --git a/Classes/Controller/BackendModuleController.php b/Classes/Controller/BackendModuleController.php index 226b5f599..309680533 100644 --- a/Classes/Controller/BackendModuleController.php +++ b/Classes/Controller/BackendModuleController.php @@ -37,6 +37,7 @@ use TYPO3\CMS\Backend\Template\ModuleTemplateFactory; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Authentication\BackendUserAuthentication; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Http\HtmlResponse; use TYPO3\CMS\Core\Information\Typo3Version; use TYPO3\CMS\Core\Page\PageRenderer; @@ -469,7 +470,7 @@ public function getLastIndexingReport() ->where( $queryBuilder->expr()->like( 'details', - $queryBuilder->quote('[ke_search]%', \PDO::PARAM_STR) + $queryBuilder->createNamedParameter('[ke_search]%', Connection::PARAM_STR) ) ) ->orderBy('tstamp', 'DESC') @@ -690,11 +691,11 @@ public function getSearchwordStatistics($pageUid, $days) ->where( $queryBuilder->expr()->gt( 'tstamp', - $queryBuilder->quote($timestampStart, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($timestampStart, Connection::PARAM_INT) ), $queryBuilder->expr()->eq( $isSysFolder ? 'pid' : 'pageid', - $queryBuilder->quote($pageUid, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($pageUid, Connection::PARAM_INT) ) ) ->groupBy('language') @@ -777,7 +778,7 @@ public function checkSysfolder() ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->quote($this->pageId, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($this->pageId, Connection::PARAM_INT) ) ) ->setMaxResults(1) diff --git a/Classes/Domain/Repository/BaseRepository.php b/Classes/Domain/Repository/BaseRepository.php index 0a00f0d51..2379e45c9 100644 --- a/Classes/Domain/Repository/BaseRepository.php +++ b/Classes/Domain/Repository/BaseRepository.php @@ -4,7 +4,6 @@ namespace Tpwd\KeSearch\Domain\Repository; -use PDO; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\Query\QueryBuilder; @@ -84,7 +83,7 @@ public function findByUid($uid, bool $includeHiddenAndTimeRestricted = false) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -111,7 +110,7 @@ public function findAllDeletedAndHiddenByPidListAndTimestampInAllLanguages(array ) ->andWhere( $queryBuilder->expr()->in('pid', $queryBuilder->createNamedParameter($pidList, Connection::PARAM_INT_ARRAY)), - $queryBuilder->expr()->gte('tstamp', $queryBuilder->createNamedParameter($tstamp, PDO::PARAM_INT)) + $queryBuilder->expr()->gte('tstamp', $queryBuilder->createNamedParameter($tstamp, Connection::PARAM_INT)) ) ->executeQuery() ->fetchAllAssociative(); diff --git a/Classes/Domain/Repository/CategoryRepository.php b/Classes/Domain/Repository/CategoryRepository.php index 481439274..6785d01f7 100644 --- a/Classes/Domain/Repository/CategoryRepository.php +++ b/Classes/Domain/Repository/CategoryRepository.php @@ -2,8 +2,8 @@ namespace Tpwd\KeSearch\Domain\Repository; -use PDO; use Tpwd\KeSearch\Lib\SearchHelper; +use TYPO3\CMS\Core\Database\Connection; /*************************************************************** * Copyright notice @@ -47,7 +47,7 @@ public function findAllSubcategoriesByParentUid($categoryUid, bool $includeHidde ->where( $queryBuilder->expr()->eq( 'parent', - $queryBuilder->createNamedParameter($categoryUid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($categoryUid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -92,7 +92,7 @@ public function findAssignedToRecord(string $tableName, int $uid, bool $includeH ), $queryBuilder->expr()->eq( $tableName . '.uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ), $queryBuilder->expr()->eq( 'sys_category_record_mm.tablenames', diff --git a/Classes/Domain/Repository/ContentRepository.php b/Classes/Domain/Repository/ContentRepository.php index 874a93487..8056814f0 100644 --- a/Classes/Domain/Repository/ContentRepository.php +++ b/Classes/Domain/Repository/ContentRepository.php @@ -4,7 +4,7 @@ namespace Tpwd\KeSearch\Domain\Repository; -use PDO; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -66,7 +66,7 @@ public function findOneByUid($uid) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -94,7 +94,7 @@ public function findNewestByPid($pid, $removeRestrictions = false) ->where( $queryBuilder->expr()->eq( 'pid', - $queryBuilder->createNamedParameter($pid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($pid, Connection::PARAM_INT) ) ) ->orderBy('tstamp', 'DESC') diff --git a/Classes/Domain/Repository/FileMetaDataRepository.php b/Classes/Domain/Repository/FileMetaDataRepository.php index cb290b054..1fe32a83c 100644 --- a/Classes/Domain/Repository/FileMetaDataRepository.php +++ b/Classes/Domain/Repository/FileMetaDataRepository.php @@ -5,7 +5,7 @@ namespace Tpwd\KeSearch\Domain\Repository; use Doctrine\DBAL\Driver\Exception; -use PDO; +use TYPO3\CMS\Core\Database\Connection; /*************************************************************** * Copyright notice @@ -49,11 +49,11 @@ public function findByFileUidAndLanguageUid(int $fileUid, $languageUid) ->where( $queryBuilder->expr()->eq( 'file', - $queryBuilder->createNamedParameter($fileUid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($fileUid, Connection::PARAM_INT) ), $queryBuilder->expr()->eq( 'sys_language_uid', - $queryBuilder->createNamedParameter($languageUid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($languageUid, Connection::PARAM_INT) ) ) ->executeQuery() diff --git a/Classes/Domain/Repository/FileReferenceRepository.php b/Classes/Domain/Repository/FileReferenceRepository.php index 570433e53..4898b53cc 100644 --- a/Classes/Domain/Repository/FileReferenceRepository.php +++ b/Classes/Domain/Repository/FileReferenceRepository.php @@ -4,8 +4,7 @@ namespace Tpwd\KeSearch\Domain\Repository; -use Doctrine\DBAL\Connection as DoctrineDbalConnection; -use PDO; +use TYPO3\CMS\Core\Database\Connection; /*************************************************************** * Copyright notice @@ -56,19 +55,19 @@ public function findOneByTableAndFieldnameAndUidForeignAndLanguage( ), $queryBuilder->expr()->eq( 'uid_foreign', - $queryBuilder->createNamedParameter($uid_foreign, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid_foreign, Connection::PARAM_INT) ), $queryBuilder->expr()->in( 'sys_language_uid', - $queryBuilder->createNamedParameter($languageIds, DoctrineDbalConnection::PARAM_INT_ARRAY) + $queryBuilder->createNamedParameter($languageIds, Connection::PARAM_INT_ARRAY) ), $queryBuilder->expr()->eq( 't3ver_state', - $queryBuilder->createNamedParameter(0, PDO::PARAM_INT) + $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ), $queryBuilder->expr()->eq( 't3ver_wsid', - $queryBuilder->createNamedParameter(0, PDO::PARAM_INT) + $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ) ) ->orderBy('sorting_foreign', 'asc') diff --git a/Classes/Domain/Repository/FilterOptionRepository.php b/Classes/Domain/Repository/FilterOptionRepository.php index fae894044..93a506928 100644 --- a/Classes/Domain/Repository/FilterOptionRepository.php +++ b/Classes/Domain/Repository/FilterOptionRepository.php @@ -3,7 +3,6 @@ namespace Tpwd\KeSearch\Domain\Repository; use Doctrine\DBAL\Driver\Statement; -use PDO; use Tpwd\KeSearch\Lib\SearchHelper; use TYPO3\CMS\Core\Context\Context; use TYPO3\CMS\Core\Database\Connection; @@ -64,7 +63,7 @@ public function findByTagPrefix(string $tagPrefix, bool $includeHiddenAndTimeRes ->where( $queryBuilder->expr()->like( 'tag', - $queryBuilder->createNamedParameter($tagPrefix . '%', PDO::PARAM_STR) + $queryBuilder->createNamedParameter($tagPrefix . '%', Connection::PARAM_STR) ) ) ->executeQuery() @@ -89,11 +88,11 @@ public function findByTagPrefixAndLanguage( ->where( $queryBuilder->expr()->like( 'tag', - $queryBuilder->createNamedParameter($tagPrefix . '%', PDO::PARAM_STR) + $queryBuilder->createNamedParameter($tagPrefix . '%', Connection::PARAM_STR) ), $queryBuilder->expr()->eq( 'sys_language_uid', - $queryBuilder->createNamedParameter($sys_language_uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($sys_language_uid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -148,7 +147,7 @@ public function findByL10nParent(int $l10n_parent, bool $includeHiddenAndTimeRes ->where( $queryBuilder->expr()->eq( 'l10n_parent', - $queryBuilder->createNamedParameter($l10n_parent, PDO::PARAM_STR) + $queryBuilder->createNamedParameter($l10n_parent, Connection::PARAM_STR) ) ) ->executeQuery() @@ -169,7 +168,7 @@ public function findByTag(string $tag, bool $includeHiddenAndTimeRestricted = fa ->where( $queryBuilder->expr()->eq( 'tag', - $queryBuilder->createNamedParameter($tag, PDO::PARAM_STR) + $queryBuilder->createNamedParameter($tag, Connection::PARAM_STR) ) ) ->executeQuery() @@ -194,11 +193,11 @@ public function findByTagAndLanguage( ->where( $queryBuilder->expr()->eq( 'tag', - $queryBuilder->createNamedParameter($tag, PDO::PARAM_STR) + $queryBuilder->createNamedParameter($tag, Connection::PARAM_STR) ), $queryBuilder->expr()->eq( 'sys_language_uid', - $queryBuilder->createNamedParameter($sys_language_uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($sys_language_uid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -294,7 +293,7 @@ public function deleteByUid(int $filterOptionUid) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($filterOptionUid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($filterOptionUid, Connection::PARAM_INT) ) ) ->executeStatement(); @@ -344,7 +343,7 @@ public function update(int $uid, array $updateFields) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ); foreach ($updateFields as $key => $value) { diff --git a/Classes/Domain/Repository/FilterRepository.php b/Classes/Domain/Repository/FilterRepository.php index 1dd66d26d..9752ae245 100644 --- a/Classes/Domain/Repository/FilterRepository.php +++ b/Classes/Domain/Repository/FilterRepository.php @@ -3,6 +3,7 @@ namespace Tpwd\KeSearch\Domain\Repository; use Tpwd\KeSearch\Lib\SearchHelper; +use TYPO3\CMS\Core\Database\Connection; /*************************************************************** * Copyright notice @@ -46,7 +47,7 @@ public function findByL10nParent(int $l10n_parent, bool $includeHiddenAndTimeRes ->where( $queryBuilder->expr()->eq( 'l10n_parent', - $queryBuilder->createNamedParameter($l10n_parent, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($l10n_parent, Connection::PARAM_INT) ) ) ->executeQuery() @@ -66,7 +67,7 @@ public function update(int $uid, array $updateFields) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ); foreach ($updateFields as $key => $value) { diff --git a/Classes/Domain/Repository/GenericRepository.php b/Classes/Domain/Repository/GenericRepository.php index 463851fe9..9bd825f8a 100644 --- a/Classes/Domain/Repository/GenericRepository.php +++ b/Classes/Domain/Repository/GenericRepository.php @@ -2,7 +2,7 @@ namespace Tpwd\KeSearch\Domain\Repository; -use PDO; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Core\Database\Query\Restriction\EndTimeRestriction; @@ -84,7 +84,7 @@ public function findByUidAndType($uid, string $type) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -113,11 +113,11 @@ public function findLangaugeOverlayByUidAndLanguage(string $table, int $uid, int ->where( $queryBuilder->expr()->eq( $transOrigPointerField, - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ), $queryBuilder->expr()->eq( $languageField, - $queryBuilder->createNamedParameter($languageId, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($languageId, Connection::PARAM_INT) ) ) ->executeQuery() @@ -154,7 +154,7 @@ public function findByReferenceField( ->where( $queryBuilder->expr()->eq( $fieldName, - $queryBuilder->createNamedParameter($value, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($value, Connection::PARAM_INT) ) ) ->executeQuery() diff --git a/Classes/Domain/Repository/IndexRepository.php b/Classes/Domain/Repository/IndexRepository.php index 5c66ea6e3..f9064469c 100644 --- a/Classes/Domain/Repository/IndexRepository.php +++ b/Classes/Domain/Repository/IndexRepository.php @@ -3,7 +3,6 @@ namespace Tpwd\KeSearch\Domain\Repository; use Doctrine\DBAL\Driver\Statement; -use PDO; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -56,7 +55,7 @@ public function findByUid(int $uid) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -76,11 +75,11 @@ public function findOneByHashAndModificationTime(string $hash, $mtime) ->where( $queryBuilder->expr()->eq( 'hash', - $queryBuilder->quote($hash, \PDO::PARAM_STR) + $queryBuilder->createNamedParameter($hash, Connection::PARAM_STR) ), $queryBuilder->expr()->eq( 'sortdate', - $queryBuilder->quote($mtime, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($mtime, Connection::PARAM_INT) ) ) ->setMaxResults(1) @@ -101,7 +100,7 @@ public function update(int $uid, array $updateFields) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ); foreach ($updateFields as $key => $value) { @@ -159,7 +158,7 @@ public function deleteByUid(int $uid) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ) ->executeStatement(); @@ -181,10 +180,10 @@ public function deleteByUniqueProperties(int $origUid, int $pid, string $type, i return $queryBuilder ->delete($this->tableName) ->where( - $queryBuilder->expr()->eq('orig_uid', $queryBuilder->createNamedParameter($origUid, PDO::PARAM_INT)), - $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($pid, PDO::PARAM_INT)), + $queryBuilder->expr()->eq('orig_uid', $queryBuilder->createNamedParameter($origUid, Connection::PARAM_INT)), + $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($pid, Connection::PARAM_INT)), $queryBuilder->expr()->eq('type', $queryBuilder->createNamedParameter($type)), - $queryBuilder->expr()->eq('language', $queryBuilder->createNamedParameter($language, PDO::PARAM_INT)) + $queryBuilder->expr()->eq('language', $queryBuilder->createNamedParameter($language, Connection::PARAM_INT)) ) ->executeStatement(); } @@ -243,11 +242,11 @@ public function findOutdatedFileRecordsByPidAndTimestamp(int $pid, int $timestam ), $queryBuilder->expr()->eq( 'pid', - $queryBuilder->createNamedParameter($pid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($pid, Connection::PARAM_INT) ), $queryBuilder->expr()->lt( 'tstamp', - $queryBuilder->createNamedParameter($timestamp, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($timestamp, Connection::PARAM_INT) ) ) ->executeQuery() diff --git a/Classes/Domain/Repository/PageRepository.php b/Classes/Domain/Repository/PageRepository.php index 39e59ee72..79ffa3a51 100644 --- a/Classes/Domain/Repository/PageRepository.php +++ b/Classes/Domain/Repository/PageRepository.php @@ -4,7 +4,6 @@ namespace Tpwd\KeSearch\Domain\Repository; -use PDO; use TYPO3\CMS\Core\Database\Connection; /*************************************************************** @@ -59,7 +58,7 @@ public function findAllDeletedAndHiddenByUidListAndTimestampInAllLanguages(array . ' OR ' . $queryBuilder->expr()->eq('hidden', 1) . ')', - $queryBuilder->expr()->gte('tstamp', $queryBuilder->createNamedParameter($tstamp, PDO::PARAM_INT)) + $queryBuilder->expr()->gte('tstamp', $queryBuilder->createNamedParameter($tstamp, Connection::PARAM_INT)) ) ->executeQuery() ->fetchAllAssociative(); diff --git a/Classes/Domain/Repository/SearchPhraseStatisticsRepository.php b/Classes/Domain/Repository/SearchPhraseStatisticsRepository.php index c81f677a2..d145a82f4 100644 --- a/Classes/Domain/Repository/SearchPhraseStatisticsRepository.php +++ b/Classes/Domain/Repository/SearchPhraseStatisticsRepository.php @@ -2,7 +2,7 @@ namespace Tpwd\KeSearch\Domain\Repository; -use PDO; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -50,7 +50,7 @@ public function findByUid(int $uid) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ) ->executeQuery() @@ -72,7 +72,7 @@ public function update(int $uid, array $updateFields) ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ); foreach ($updateFields as $key => $value) { diff --git a/Classes/Indexer/IndexerBase.php b/Classes/Indexer/IndexerBase.php index 6c04c6991..fb37c1ebb 100644 --- a/Classes/Indexer/IndexerBase.php +++ b/Classes/Indexer/IndexerBase.php @@ -20,7 +20,6 @@ * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ -use PDO; use Tpwd\KeSearch\Domain\Repository\IndexRepository; use Tpwd\KeSearch\Indexer\Types\File; use Tpwd\KeSearch\Lib\Db; @@ -28,10 +27,12 @@ use Tpwd\KeSearch\Service\IndexerStatusService; use Tpwd\KeSearch\Utility\FileUtility; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Core\Database\Query\QueryHelper; use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction; use TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction; +use TYPO3\CMS\Core\Information\Typo3Version; use TYPO3\CMS\Core\Resource\FileReference; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Site\Entity\Site; @@ -127,7 +128,7 @@ public function getPagelist($startingPointsRecursive = '', $singlePages = '', $i $pageList = ''; foreach ($pidsRecursive as $pid) { // @extensionScannerIgnoreLine - $pageList .= $this->getTreeList((int)$pid, 99, 0, '1=1', $includeDeletedPages) . ','; + $pageList .= $this->getTreeList((int)$pid, 99, 0, '', $includeDeletedPages) . ','; } // add non-recursive pids @@ -165,15 +166,15 @@ public function getPageRecords(array $uids, $whereClause = '', $table = 'pages', // index only page which are not hidden $where[] = $queryBuilder->expr()->neq( 'pages.no_search', - $queryBuilder->createNamedParameter(1, PDO::PARAM_INT) + $queryBuilder->createNamedParameter(1, Connection::PARAM_INT) ); $where[] = $queryBuilder->expr()->eq( 'pages.hidden', - $queryBuilder->createNamedParameter(0, PDO::PARAM_INT) + $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ); $where[] = $queryBuilder->expr()->eq( 'pages.deleted', - $queryBuilder->createNamedParameter(0, PDO::PARAM_INT) + $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ); // add additional where clause @@ -233,7 +234,7 @@ public function getPidList($startingPointsRecursive = '', $singlePages = '', $ta * @param array $uids Simple array with uids of pages * @param string $pageWhere additional where-clause */ - public function addTagsToRecords($uids, $pageWhere = '1=1') + public function addTagsToRecords($uids, $pageWhere = '') { if (empty($uids)) { $this->pObj->logger->warning('No pages/sysfolders given to add tags for.'); @@ -259,13 +260,23 @@ public function addTagsToRecords($uids, $pageWhere = '1=1') $where .= ' AND pages.tx_kesearch_tags <> "" '; $where .= ' AND FIND_IN_SET(tx_kesearch_filteroptions.uid, pages.tx_kesearch_tags)'; - $tagQuery = $queryBuilder - ->add('select', $fields) - ->from('pages') - ->from('tx_kesearch_filteroptions') - ->add('where', $where) - ->groupBy('pages.uid') - ->executeQuery(); + if (GeneralUtility::makeInstance(Typo3Version::class)->getMajorVersion() < 13) { + $tagQuery = $queryBuilder + ->add('select', $fields) + ->from('pages') + ->from('tx_kesearch_filteroptions') + ->add('where', $where) + ->groupBy('pages.uid') + ->executeQuery(); + } else { + $tagQuery = $queryBuilder + ->selectLiteral($fields) + ->from('pages') + ->from('tx_kesearch_filteroptions') + ->where($where) + ->groupBy('pages.uid') + ->executeQuery(); + } while ($row = $tagQuery->fetchAssociative()) { if (isset($this->pageRecords[$row['uid']])) { @@ -289,13 +300,18 @@ public function addTagsToRecords($uids, $pageWhere = '1=1') ->where( $queryBuilder->expr()->neq( 'automated_tagging', - $queryBuilder->quote('', PDO::PARAM_STR) + $queryBuilder->createNamedParameter('', Connection::PARAM_STR) ) ) ->executeQuery() ->fetchAllAssociative(); - $where = $pageWhere . ' AND no_search <> 1 '; + if (!empty($pageWhere)) { + $where = $pageWhere . ' AND '; + } else { + $where = ''; + } + $where .= 'no_search <> 1 '; foreach ($filterOptionsRows as $row) { if ($row['automated_tagging_exclude'] > '') { @@ -420,7 +436,7 @@ public function getSelectedCategoriesUidList(int $indexerConfigUid): array ->select('uid_local') ->from('sys_category_record_mm') ->where( - $queryBuilder->expr()->eq('uid_foreign', $queryBuilder->createNamedParameter($indexerConfigUid, PDO::PARAM_INT)), + $queryBuilder->expr()->eq('uid_foreign', $queryBuilder->createNamedParameter($indexerConfigUid, Connection::PARAM_INT)), $queryBuilder->expr()->eq('tablenames', $queryBuilder->createNamedParameter('tx_kesearch_indexerconfig')) ) ->executeQuery() @@ -474,7 +490,7 @@ protected function getFilesToIndex($table, $fieldname, $uid, $language): array ), $queryBuilder->expr()->eq( 'ref.uid_foreign', - $queryBuilder->createNamedParameter($uid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ), $queryBuilder->expr()->eq( 'ref.uid_local', @@ -482,7 +498,7 @@ protected function getFilesToIndex($table, $fieldname, $uid, $language): array ), $queryBuilder->expr()->eq( 'ref.sys_language_uid', - $queryBuilder->createNamedParameter($language, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($language, Connection::PARAM_INT) ) ) ->orderBy('ref.sorting_foreign') @@ -724,8 +740,8 @@ public function getTreeList($id, $depth, $begin = 0, $permClause = '', $includeD $queryBuilder->select('uid') ->from('pages') ->where( - $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($id, \PDO::PARAM_INT)), - $queryBuilder->expr()->eq('sys_language_uid', 0) + $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($id, Connection::PARAM_INT)), + $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter(0, Connection::PARAM_INT)) ) ->orderBy('uid'); if ($permClause !== '') { diff --git a/Classes/Indexer/IndexerRunner.php b/Classes/Indexer/IndexerRunner.php index b0a0dc1a6..af740fe44 100644 --- a/Classes/Indexer/IndexerRunner.php +++ b/Classes/Indexer/IndexerRunner.php @@ -33,6 +33,7 @@ use Tpwd\KeSearch\Service\IndexerStatusService; use Tpwd\KeSearch\Utility\AdditionalWordCharactersUtility; use Tpwd\KeSearch\Utility\TimeUtility; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Log\Logger; use TYPO3\CMS\Core\Log\LogManager; use TYPO3\CMS\Core\Mail\MailMessage; @@ -575,7 +576,7 @@ public function cleanUpIndex(int $indexingMode) $queryBuilder = Db::getQueryBuilder('tx_kesearch_index'); $where = $queryBuilder->expr()->lt( 'tstamp', - $queryBuilder->quote($this->indexerStatusService->getIndexerStartTime(), PDO::PARAM_INT) + $queryBuilder->createNamedParameter($this->indexerStatusService->getIndexerStartTime(), Connection::PARAM_INT) ); // hook for cleanup @@ -716,7 +717,7 @@ public function rotateSphinxIndex() * @param string $fe_group * @param bool $debugOnly * @param array $additionalFields - * @return bool|int + * @return bool */ public function storeInIndex( $storagePid, @@ -733,7 +734,8 @@ public function storeInIndex( $fe_group = '', $debugOnly = false, $additionalFields = [] - ) { + ): bool + { // if there are errors found in current record return false and break processing if (!$this->checkIfRecordHasErrorsBeforeIndexing($storagePid, $title, $type, $targetPid)) { return false; @@ -823,17 +825,16 @@ public function storeInIndex( ); } - if ($recordExists) { // update existing record + // update existing record + if ($recordExists) { unset($fieldValues['crdate']); $this->updateRecordInIndex($fieldValues, $debugOnly); return true; - } // insert new record - $this->insertRecordIntoIndex($fieldValues, $debugOnly); - if (!$debugOnly) { - return (int)Db::getDatabaseConnection('tx_kesearch_index')->lastInsertId($table); } - return 0; + // insert new record + $this->insertRecordIntoIndex($fieldValues, $debugOnly); + return true; } /** @@ -996,10 +997,10 @@ public function checkIfRecordWasIndexed($uid, $pid, $type, $language) ->select('*') ->from('tx_kesearch_index') ->where( - $queryBuilder->expr()->eq('orig_uid', $queryBuilder->quote($uid, PDO::PARAM_INT)), - $queryBuilder->expr()->eq('pid', $queryBuilder->quote($pid, PDO::PARAM_INT)), - $queryBuilder->expr()->eq('type', $queryBuilder->quote($type, PDO::PARAM_STR)), - $queryBuilder->expr()->eq('language', $queryBuilder->quote($language, PDO::PARAM_INT)) + $queryBuilder->expr()->eq('orig_uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)), + $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($pid, Connection::PARAM_INT)), + $queryBuilder->expr()->eq('type', $queryBuilder->createNamedParameter($type, Connection::PARAM_STR)), + $queryBuilder->expr()->eq('language', $queryBuilder->createNamedParameter($language, Connection::PARAM_INT)) ) ->setMaxResults(1) ->executeQuery() @@ -1037,19 +1038,19 @@ public function checkIfFileWasIndexed(string $type, string $hash, int $pid, int ->where( $queryBuilder->expr()->eq( 'type', - $queryBuilder->quote($type, PDO::PARAM_STR) + $queryBuilder->createNamedParameter($type, Connection::PARAM_STR) ), $queryBuilder->expr()->eq( 'hash', - $queryBuilder->quote($hash, PDO::PARAM_STR) + $queryBuilder->createNamedParameter($hash, Connection::PARAM_STR) ), $queryBuilder->expr()->eq( 'pid', - $queryBuilder->quote($pid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($pid, Connection::PARAM_INT) ), $queryBuilder->expr()->eq( 'sortdate', - $queryBuilder->quote($sortdate, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($sortdate, Connection::PARAM_INT) ) ) ->executeQuery(); @@ -1193,7 +1194,7 @@ public function getTag($tagUid, $clearText = false) $table = 'tx_kesearch_filteroptions'; $where = $queryBuilder->expr()->eq( 'uid', - $queryBuilder->quote($tagUid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($tagUid, Connection::PARAM_INT) ); $row = $queryBuilder diff --git a/Classes/Indexer/Types/News.php b/Classes/Indexer/Types/News.php index 12d22a8f1..e2d6ac256 100644 --- a/Classes/Indexer/Types/News.php +++ b/Classes/Indexer/Types/News.php @@ -28,6 +28,7 @@ use Tpwd\KeSearch\Lib\Db; use Tpwd\KeSearch\Lib\SearchHelper; use Tpwd\KeSearch\Utility\ContentUtility; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Utility\GeneralUtility; /** @@ -92,22 +93,22 @@ public function startIndexing() $where[] = $queryBuilder->expr()->or( $queryBuilder->expr()->eq( 'archive', - $queryBuilder->quote(0, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ), $queryBuilder->expr()->gt( 'archive', - $queryBuilder->quote(time(), \PDO::PARAM_INT) + $queryBuilder->createNamedParameter(time(), Connection::PARAM_INT) ) ); } elseif ($this->indexerConfig['index_news_archived'] == 2) { $where[] = $queryBuilder->expr()->and( $queryBuilder->expr()->gt( 'archive', - $queryBuilder->quote(0, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ), $queryBuilder->expr()->lt( 'archive', - $queryBuilder->quote(time(), \PDO::PARAM_INT) + $queryBuilder->createNamedParameter(time(), Connection::PARAM_INT) ) ); } @@ -479,7 +480,7 @@ private function addTagsFromNewsTags($tags, $newsRecord) ), $queryBuilder->expr()->eq( 'news.uid', - $queryBuilder->createNamedParameter($newsRecord['uid'], \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($newsRecord['uid'], Connection::PARAM_INT) ) ) ->executeQuery(); @@ -523,7 +524,7 @@ public function getAttachedContentElements($newsRecord) ->where( $queryBuilder->expr()->eq( 'tx_news_related_news', - $queryBuilder->createNamedParameter($newsRecord['uid'], \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($newsRecord['uid'], Connection::PARAM_INT) ) ) ->executeQuery(); diff --git a/Classes/Indexer/Types/Page.php b/Classes/Indexer/Types/Page.php index b88a5e958..11c9265eb 100644 --- a/Classes/Indexer/Types/Page.php +++ b/Classes/Indexer/Types/Page.php @@ -39,6 +39,7 @@ use Tpwd\KeSearch\Utility\FileUtility; use TYPO3\CMS\Backend\Configuration\TranslationConfigurationProvider; use TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Domain\Repository\PageRepository as CorePageRepository; use TYPO3\CMS\Core\Resource\FileInterface; use TYPO3\CMS\Core\Resource\FileReference; @@ -401,11 +402,11 @@ public function addLocalizedPagesToCache($pageRow, $removeRestrictions = false) ->where( $queryBuilder->expr()->eq( 'l10n_parent', - $queryBuilder->quote($pageRow['uid'], \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($pageRow['uid'], Connection::PARAM_INT) ), $queryBuilder->expr()->eq( 'sys_language_uid', - $queryBuilder->quote($sysLang['uid'], \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($sysLang['uid'], Connection::PARAM_INT) ) ) ->executeQuery() @@ -562,7 +563,7 @@ private function processShortcuts($rows, $fields, $depth = 99) $where = []; $where[] = $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ); $where[] = $this->whereClauseForCType; @@ -624,7 +625,7 @@ public function getPageContent($uid) 'pid', $queryBuilder->createNamedParameter( $uid, - \PDO::PARAM_INT + Connection::PARAM_INT ) ); $where[] = $this->whereClauseForCType; diff --git a/Classes/Indexer/Types/TtContent.php b/Classes/Indexer/Types/TtContent.php index 6250cf668..457106be9 100644 --- a/Classes/Indexer/Types/TtContent.php +++ b/Classes/Indexer/Types/TtContent.php @@ -6,6 +6,7 @@ use Tpwd\KeSearch\Domain\Repository\TtContentRepository; use Tpwd\KeSearch\Lib\Db; use Tpwd\KeSearch\Lib\SearchHelper; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\Query\Restriction\EndTimeRestriction; use TYPO3\CMS\Core\Database\Query\Restriction\StartTimeRestriction; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; @@ -64,7 +65,7 @@ public function getPageContent($uid) 'pid', $queryBuilder->createNamedParameter( $uid, - \PDO::PARAM_INT + Connection::PARAM_INT ) ); $where[] = $this->whereClauseForCType; @@ -80,7 +81,7 @@ public function getPageContent($uid) 'colPos', $queryBuilder->createNamedParameter( -2, - \PDO::PARAM_INT + Connection::PARAM_INT ) ); } diff --git a/Classes/Indexer/Types/TtNews.php b/Classes/Indexer/Types/TtNews.php index 2658188f0..1291f7793 100644 --- a/Classes/Indexer/Types/TtNews.php +++ b/Classes/Indexer/Types/TtNews.php @@ -9,6 +9,7 @@ use Tpwd\KeSearch\Indexer\IndexerRunner; use Tpwd\KeSearch\Lib\Db; use Tpwd\KeSearch\Lib\SearchHelper; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -292,7 +293,7 @@ private function getCategoryData($newsRecord) ); $where[] = $queryBuilder->expr()->eq( 'tt_news.uid', - $queryBuilder->createNamedParameter($newsRecord['uid'], \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($newsRecord['uid'], Connection::PARAM_INT) ); $catRes = $queryBuilder diff --git a/Classes/Lib/Db.php b/Classes/Lib/Db.php index 76f702a17..cb61c97a1 100644 --- a/Classes/Lib/Db.php +++ b/Classes/Lib/Db.php @@ -17,6 +17,7 @@ use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Core\Domain\Repository\PageRepository; +use TYPO3\CMS\Core\Information\Typo3Version; use TYPO3\CMS\Core\Log\Logger; use TYPO3\CMS\Core\Log\LogManager; use TYPO3\CMS\Core\SingletonInterface; @@ -115,15 +116,30 @@ public function getSearchResultByMySQL() // build query $queryBuilder = self::getQueryBuilder('tx_kesearch_index'); $queryBuilder->getRestrictions()->removeAll(); - $resultQuery = $queryBuilder - ->add('select', $queryParts['SELECT']) - ->from($queryParts['FROM']) - ->add('where', $queryParts['WHERE']); - if (!empty($queryParts['GROUPBY'])) { - $resultQuery->add('groupBy', $queryParts['GROUPBY']); - } - if (!empty($queryParts['ORDERBY'])) { - $resultQuery->add('orderBy', $queryParts['ORDERBY']); + if (GeneralUtility::makeInstance(Typo3Version::class)->getMajorVersion() < 13) { + $resultQuery = $queryBuilder + ->add('select', $queryParts['SELECT']) + ->from($queryParts['FROM']) + ->add('where', $queryParts['WHERE']); + if (!empty($queryParts['GROUPBY'])) { + $resultQuery->add('groupBy', $queryParts['GROUPBY']); + } + if (!empty($queryParts['ORDERBY'])) { + $resultQuery->add('orderBy', $queryParts['ORDERBY']); + } + } else { + $resultQuery = $queryBuilder + ->selectLiteral($queryParts['SELECT']) + ->from($queryParts['FROM']) + ->where($queryParts['WHERE']); + if (!empty($queryParts['GROUPBY'])) { + $groupParts = explode(',', $queryParts['GROUPBY']); + $resultQuery->groupBy($groupParts[0], $groupParts[1]); + } + if (!empty($queryParts['ORDERBY'])) { + $orderParts = explode(' ', $queryParts['ORDERBY']); + $resultQuery->orderBy($orderParts[0], $orderParts[1]); + } } $limit = $this->getLimit(); @@ -151,10 +167,17 @@ public function getSearchResultByMySQL() if (!empty($this->searchResults)) { $queryBuilder = self::getQueryBuilder('tx_kesearch_index'); $queryBuilder->getRestrictions()->removeAll(); - $numRows = $queryBuilder - ->add('select', 'FOUND_ROWS()') - ->executeQuery() - ->fetchNumeric()[0]; + if (GeneralUtility::makeInstance(Typo3Version::class)->getMajorVersion() < 13) { + $numRows = $queryBuilder + ->add('select', 'FOUND_ROWS()') + ->executeQuery() + ->fetchNumeric()[0]; + } else { + $numRows = $queryBuilder + ->selectLiteral('FOUND_ROWS()') + ->executeQuery() + ->fetchNumeric()[0]; + } $this->numberOfResults = $numRows; } } diff --git a/Classes/Lib/Filters.php b/Classes/Lib/Filters.php index 25c529b8f..95d8d8ebf 100644 --- a/Classes/Lib/Filters.php +++ b/Classes/Lib/Filters.php @@ -200,7 +200,6 @@ public function getFiltersFromUidList($filterUids) return []; } - // @Todo quotes ($this->startingPoints, filterUids) $table = 'tx_kesearch_filters'; $where = 'pid in (' . $this->startingPoints . ')'; $where .= ' AND find_in_set(uid, "' . $filterUids . '")'; @@ -233,7 +232,6 @@ public function getOptionsFromUidList($optionUids) return []; } - // @Todo quotes ($optionsUids, $this->startingPoints) $table = 'tx_kesearch_filteroptions'; $where = 'FIND_IN_SET(uid, "' . $optionUids . '")'; $where .= ' AND pid in (' . $this->startingPoints . ')'; diff --git a/Classes/Lib/PluginBaseHelper.php b/Classes/Lib/PluginBaseHelper.php index f071e5c02..70c6c84b1 100644 --- a/Classes/Lib/PluginBaseHelper.php +++ b/Classes/Lib/PluginBaseHelper.php @@ -3,6 +3,7 @@ namespace Tpwd\KeSearch\Lib; use Tpwd\KeSearch\Plugins\PluginBase; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; /*************************************************************** @@ -55,7 +56,7 @@ public function getStartingPoint(): string ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT) + $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT) ) ) ->executeQuery() diff --git a/Classes/Plugins/PluginBase.php b/Classes/Plugins/PluginBase.php index a08943738..1ef03b584 100644 --- a/Classes/Plugins/PluginBase.php +++ b/Classes/Plugins/PluginBase.php @@ -25,7 +25,6 @@ ***************************************************************/ use Exception; -use PDO; use Psr\Http\Message\ServerRequestInterface; use Tpwd\KeSearch\Domain\Repository\FileMetaDataRepository; use Tpwd\KeSearch\Domain\Repository\FileReferenceRepository; @@ -40,6 +39,7 @@ use Tpwd\KeSearch\Utility\RequestUtility; use TYPO3\CMS\Core\Context\Context; use TYPO3\CMS\Core\Context\LanguageAspect; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Domain\Repository\PageRepository; use TYPO3\CMS\Core\Page\PageRenderer; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -1168,7 +1168,7 @@ public function getCalEventEnddate(string $eventUid): array ->where( $queryBuilder->expr()->eq( 'uid', - $queryBuilder->createNamedParameter($eventUid, PDO::PARAM_INT) + $queryBuilder->createNamedParameter($eventUid, Connection::PARAM_INT) ) ) ->setMaxResults(1) diff --git a/Classes/Updates/MakeTagsAlphanumericUpgradeWizard.php b/Classes/Updates/MakeTagsAlphanumericUpgradeWizard.php index 169a1852c..e0ac5c4f7 100644 --- a/Classes/Updates/MakeTagsAlphanumericUpgradeWizard.php +++ b/Classes/Updates/MakeTagsAlphanumericUpgradeWizard.php @@ -22,6 +22,7 @@ namespace Tpwd\KeSearch\Updates; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Install\Attribute\UpgradeWizard; @@ -78,7 +79,7 @@ public function executeUpdate(): bool $query = $connectionPool->getQueryBuilderForTable('tx_kesearch_filteroptions'); $query ->update('tx_kesearch_filteroptions') - ->where($query->expr()->eq('uid', $query->createNamedParameter($filterOptionRow['uid'], \PDO::PARAM_INT))) + ->where($query->expr()->eq('uid', $query->createNamedParameter($filterOptionRow['uid'], Connection::PARAM_INT))) ->set('tag', preg_replace('/[^A-Za-z0-9]/', '', $filterOptionRow['tag'])) ->executeStatement(); }