[BUGFIX] Indexed Search mysql takes section settings into account 42/46042/2
authorTymoteusz Motylewski <t.motylewski@gmail.com>
Fri, 15 Jan 2016 20:51:39 +0000 (21:51 +0100)
committerFrank Nägler <frank.naegler@typo3.org>
Mon, 18 Jan 2016 08:48:08 +0000 (09:48 +0100)
Add section where clause to Indexed Search MySQL hook.
Before this patch, when using MySQL fulltext search, Indexed Search
returned results from all pages.
Now they are filtered taking correct section into account.

Releases: 7.6, master
Resolves: #45575
Change-Id: Ia5c2d2cbb2e866a4c4d56cc05ac97a85f491e6eb
Reviewed-on: https://review.typo3.org/46042
Reviewed-by: Frank Nägler <frank.naegler@typo3.org>
Tested-by: Frank Nägler <frank.naegler@typo3.org>
typo3/sysext/indexed_search/Classes/Domain/Repository/IndexSearchRepository.php
typo3/sysext/indexed_search_mysql/Classes/Hook/MysqlFulltextIndexHook.php

index 5e2432b..8b25fe1 100644 (file)
@@ -505,7 +505,7 @@ class IndexSearchRepository
      *
      * @return string AND clause for selection of section in database.
      */
-    protected function sectionTableWhere()
+    public function sectionTableWhere()
     {
         $whereClause = '';
         $match = false;
index fb43b7f..b101b3e 100644 (file)
@@ -183,11 +183,11 @@ class MysqlFulltextIndexHook
             'index_fulltext.*, ISEC.*, IP.*',
             'index_fulltext, index_section ISEC, index_phash IP' . $pageJoin,
             'MATCH (' . $searchData['fulltextIndex'] . ')
-                               AGAINST (' . $GLOBALS['TYPO3_DB']->fullQuoteStr($searchData['searchString'], 'index_fulltext') . $searchBoolean . ') ' .
+                AGAINST (' . $GLOBALS['TYPO3_DB']->fullQuoteStr($searchData['searchString'], 'index_fulltext') . $searchBoolean . ') ' .
                 $this->pObj->mediaTypeWhere() . ' ' . $this->pObj->languageWhere() . $freeIndexUidClause . '
-                               AND index_fulltext.phash = IP.phash
-                               AND ISEC.phash = IP.phash
-                               AND ' . $pageWhere,
+                AND index_fulltext.phash = IP.phash
+                AND ISEC.phash = IP.phash
+                AND ' . $pageWhere . $this->pObj->sectionTableWhere(),
             'IP.phash,ISEC.phash,ISEC.phash_t3,ISEC.rl0,ISEC.rl1,ISEC.rl2,ISEC.page_id,ISEC.uniqid,IP.phash_grouping,IP.data_filename ,IP.data_page_id ,IP.data_page_reg1,IP.data_page_type,IP.data_page_mp,IP.gr_list,IP.item_type,IP.item_title,IP.item_description,IP.item_mtime,IP.tstamp,IP.item_size,IP.contentHash,IP.crdate,IP.parsetime,IP.sys_language_uid,IP.item_crdate,IP.cHashParams,IP.externalUrl,IP.recordUid,IP.freeIndexUid,IP.freeIndexSetId'
         );
         return $resource;