Seems that Full text search for calendarized pages does not work.
When i try to do a search with Calendarize search plugin, only the dates are taken into account but not the fullText input
namespace HDNET\CalendarizePages\Domain\Repository;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Extbase\Persistence\Repository;
use TYPO3\CMS\Extbase\Persistence\Generic\Query;
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
use TYPO3\CMS\Extbase\Persistence\Generic\Qom\OrInterface;
use TYPO3\CMS\Extbase\Persistence\Generic\Qom\AndInterface;
use TYPO3\CMS\Extbase\Persistence\Generic\Qom\Comparison;
/**
* Repository for Page models.
*/
class PageRepository extends Repository
{
/**
* Get the IDs of the given search term.
*
* @param string $searchTerm
*
* @return array
*/
public function getIdsBySearchTerm($searchTerm)
{
$query = $this->createQuery();
$constraint = $this->getConstraintForSearchWord($query, $searchTerm);
$query->matching($query->logicalOr($constraint));
$rows = $query->execute(true);
$ids = [];
foreach ($rows as $row) {
$ids[] = (int)$row['uid'];
}
return $ids;
}
protected function getConstraintForSearchWord(QueryInterface $query, string $searchWord): OrInterface
{
$logicalOrConstraints = [
$query->like('title', '%' . $searchWord . '%'),
$query->like('abstract', '%' . $searchWord . '%'),
$query->like('description', '%' . $searchWord . '%'),
];
return $query->logicalOr($logicalOrConstraints);
}
}
/**
* Event search service.
*/
declare(strict_types=1);
namespace HDNET\CalendarizePages\Slots;
use HDNET\CalendarizePages\Domain\Repository\PageRepository;
use HDNET\Autoloader\Annotation\SignalClass;
use HDNET\Autoloader\Annotation\SignalName;
use HDNET\Calendarize\Domain\Model\PluginConfiguration;
use HDNET\Calendarize\Domain\Repository\EventRepository;
use HDNET\Calendarize\Register;
use HDNET\Calendarize\Utility\HelperUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\MathUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
/**
* Event search service.
*/
class EventSearch
{
/**
* Check if we can reduce the amount of results.
*
* @SignalClass(value="HDNET\Calendarize\Domain\Repository\IndexRepository")
* @SignalName(value="findBySearchPre")
*
* @param array $indexIds
* @param \DateTime|null $startDate
* @param \DateTime|null $endDate
* @param array $customSearch
* @param array $indexTypes
* @param bool $emptyPreResult
* @param array $additionalSlotArguments
*
* @return array|void
*/
public function setIdsByCustomSearch(
array $indexIds,
\DateTime $startDate = null,
\DateTime $endDate = null,
array $customSearch = [],
array $indexTypes = [],
bool $emptyPreResult = false,
array $additionalSlotArguments = []
) {
if (!\in_array($this->getUniqueRegisterKey(), $indexTypes, true)) {
return;
}
if (!isset($customSearch['fullText']) || !$customSearch['fullText']) {
return;
}
$pageRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(PageRepository::class);
$searchTermHits = $pageRepository->getIdsBySearchTerm($customSearch['fullText']);
if ($searchTermHits && \count($searchTermHits)) {
$indexIds['pages'] = $searchTermHits;
}
return [
'indexIds' => $indexIds,
'startDate' => $startDate,
'endDate' => $endDate,
'customSearch' => $customSearch,
'indexTypes' => $indexTypes,
'emptyPreResult' => $emptyPreResult,
'additionalSlotArguments' => $additionalSlotArguments,
];
}
}