meilisearch/Classes/Util.php
2021-04-17 00:26:33 +02:00

173 lines
5.3 KiB
PHP

<?php
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
namespace WapplerSystems\Meilisearch;
use WapplerSystems\Meilisearch\Domain\Site\SiteRepository;
use WapplerSystems\Meilisearch\System\Configuration\ConfigurationManager;
use WapplerSystems\Meilisearch\System\Configuration\TypoScriptConfiguration;
use TYPO3\CMS\Core\Context\Context;
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
/**
* Utility class for tx_meilisearch
*
* @author Ingo Renner <ingo@typo3.org>
* (c) 2009-2015 Ingo Renner <ingo@typo3.org>
*/
class Util
{
/**
* Generates a document id for documents representing page records.
*
* @param int $uid The page's uid
* @param int $typeNum The page's typeNum
* @param int $language the language id, defaults to 0
* @param string $accessGroups comma separated list of uids of groups that have access to that page
* @param string $mountPointParameter The mount point parameter that is used to access the page.
* @return string The document id for that page
*/
public static function getPageDocumentId($uid, $typeNum = 0, $language = 0, $accessGroups = '0,-1', $mountPointParameter = '')
{
$additionalParameters = $typeNum . '/' . $language . '/' . $accessGroups;
if ((string)$mountPointParameter !== '') {
$additionalParameters = $mountPointParameter . '/' . $additionalParameters;
}
$documentId = self::getDocumentId('pages', $uid, $uid, $additionalParameters);
return $documentId;
}
/**
* Generates a document id in the form $siteHash/$type/$uid.
*
* @param string $table The records table name
* @param int $rootPageId The record's site root id
* @param int $uid The record's uid
* @param string $additionalIdParameters Additional ID parameters
* @return string A document id
*/
public static function getDocumentId($table, $rootPageId, $uid, $additionalIdParameters = '')
{
/** @var SiteRepository $siteRepository */
$siteRepository = GeneralUtility::makeInstance(SiteRepository::class);
$site = $siteRepository->getSiteByPageId($rootPageId);
$siteHash = $site->getSiteHash();
$documentId = $siteHash . '/' . $table . '/' . $uid;
if (!empty($additionalIdParameters)) {
$documentId .= '/' . $additionalIdParameters;
}
return $documentId;
}
/**
* Shortcut to retrieve the TypoScript configuration for EXT:meilisearch
*
* @return TypoScriptConfiguration
*/
public static function getSolrConfiguration()
{
$configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
return $configurationManager->getTypoScriptConfiguration();
}
/**
* Check if record ($table, $uid) is a workspace record
*
* @param string $table The table the record belongs to
* @param int $uid The record's uid
* @return bool TRUE if the record is in a draft workspace, FALSE if it's a LIVE record
*/
public static function isDraftRecord($table, $uid)
{
$isWorkspaceRecord = false;
if ((ExtensionManagementUtility::isLoaded('workspaces')) && (BackendUtility::isTableWorkspaceEnabled($table))) {
$record = BackendUtility::getRecord($table, $uid, 'pid, t3ver_state');
if ($record['pid'] == '-1' || $record['t3ver_state'] > 0) {
$isWorkspaceRecord = true;
}
}
return $isWorkspaceRecord;
}
/**
* This function can be used to check if one of the strings in needles is
* contained in the haystack.
*
*
* Example:
*
* haystack: the brown fox
* needles: ['hello', 'world']
* result: false
*
* haystack: the brown fox
* needles: ['is', 'fox']
* result: true
*
* @param string $haystack
* @param array $needles
* @return bool
*/
public static function containsOneOfTheStrings($haystack, array $needles)
{
foreach ($needles as $needle) {
$position = strpos($haystack, $needle);
if ($position !== false) {
return true;
}
}
return false;
}
/**
* Returns the current language ID from the active context.
* @return int
*/
public static function getLanguageUid(): int
{
$context = GeneralUtility::makeInstance(Context::class);
return (int)$context->getPropertyFromAspect('language', 'id');
}
/**
* @return string
*/
public static function getFrontendUserGroupsList(): string
{
return implode(',', self::getFrontendUserGroups());
}
/**
* @return array
*/
public static function getFrontendUserGroups(): array
{
$context = GeneralUtility::makeInstance(Context::class);
return $context->getPropertyFromAspect('frontend.user', 'groupIds');
}
}