256 lines
8.9 KiB
PHP
256 lines
8.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the package thucke/th-rating.
|
|
*
|
|
* For the full copyright and license information, please read the
|
|
* LICENSE file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace WapplerSystems\BookmarksLikesRatings\Domain\Repository;
|
|
|
|
use InvalidArgumentException;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepname;
|
|
use WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService;
|
|
use TYPO3\CMS\Core\Site\Entity\Site;
|
|
use TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException;
|
|
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
|
|
use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
|
|
use TYPO3\CMS\Extbase\Persistence\Repository;
|
|
|
|
/**
|
|
* A repository for ratingstep configurations
|
|
*/
|
|
class StepnameRepository extends Repository
|
|
{
|
|
protected const TABLE_NAME = 'tx_thrating_domain_model_stepname';
|
|
protected const STEPCONF_NAME = 'stepconf';
|
|
|
|
/**
|
|
* @var string $syslangUidLiteral
|
|
*/
|
|
protected $syslangUidLiteral;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $defaultOrderings;
|
|
|
|
/**
|
|
* Initialize this repository
|
|
*/
|
|
public function initializeObject(): void
|
|
{
|
|
$this->syslangUidLiteral = $GLOBALS['TCA'][self::TABLE_NAME]['ctrl']['languageField'];
|
|
$this->defaultOrderings = [ $this->syslangUidLiteral => QueryInterface::ORDER_ASCENDING];
|
|
}
|
|
|
|
/**
|
|
* Checks if stepname got a valid language code
|
|
*
|
|
* @param Stepname $stepname The stepname object
|
|
* @return bool
|
|
*/
|
|
public function checkStepnameLanguage(Stepname $stepname): bool
|
|
{
|
|
$stepnameLang = $stepname->getSysLanguageUid();
|
|
if ($stepnameLang > 0) {
|
|
//check if given language exist
|
|
|
|
try {
|
|
// only get language and do not assign the result to check if it exists
|
|
$this->objectManager
|
|
->get(ExtensionHelperService::class)
|
|
->getStaticLanguageById($stepnameLang);
|
|
} catch (InvalidArgumentException $exception) {
|
|
//invalid language code -> NOK
|
|
return false;
|
|
}
|
|
}
|
|
//language code found -> OK
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Finds the given stepconf object in the repository
|
|
*
|
|
* @param Stepname $stepname The ratingname to look for
|
|
* @return Stepname|null
|
|
*/
|
|
public function findStepnameObject(Stepname $stepname): ?Stepname
|
|
{
|
|
$query = $this->createQuery();
|
|
$query->getQuerySettings()->setRespectSysLanguage(false);
|
|
$query->getQuerySettings()->setLanguageOverlayMode(false);
|
|
$query->matching(
|
|
$query->logicalAnd(
|
|
[
|
|
$query->equals(self::STEPCONF_NAME, $stepname->getStepconf()),
|
|
$query->equals($this->syslangUidLiteral, $stepname->getSysLanguageUid()),
|
|
]
|
|
)
|
|
)->setLimit(1);
|
|
|
|
/** @var \TYPO3\CMS\Extbase\Persistence\QueryResultInterface $queryResult */
|
|
$queryResult = $query->execute();
|
|
|
|
/*
|
|
$queryParser = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
|
|
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL(), get_class($this).' SQL');
|
|
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getParameters(), get_class($this).' SQL Parameter');
|
|
*/
|
|
|
|
/** @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepname $foundRow */
|
|
$foundRow = null;
|
|
|
|
if ($queryResult->count() > 0) {
|
|
$foundRow = $queryResult->getFirst();
|
|
}
|
|
return $foundRow;
|
|
}
|
|
|
|
/**
|
|
* Finds the given stepname object in the repository
|
|
*
|
|
* @param int $uid
|
|
* @return Stepname|null
|
|
*/
|
|
public function findStrictByUid(int $uid): ?Stepname
|
|
{
|
|
$query = $this->createQuery();
|
|
$query->getQuerySettings()->setRespectSysLanguage(false);
|
|
$query->getQuerySettings()->setRespectStoragePage(false);
|
|
$query->getQuerySettings()->setLanguageOverlayMode(false);
|
|
$query->matching(
|
|
$query->logicalAnd(
|
|
[$query->equals('uid', $uid)]
|
|
)
|
|
)->setLimit(1);
|
|
$queryResult = $query->execute();
|
|
|
|
/** @var Stepname $foundRow */
|
|
$foundRow = null;
|
|
if ($queryResult->count() > 0) {
|
|
$foundRow = $queryResult->getFirst();
|
|
}
|
|
return $foundRow;
|
|
}
|
|
|
|
/**
|
|
* Check on double language entries
|
|
*
|
|
* @param Stepname $stepname The ratingname to look for
|
|
* @return array return values false says OK
|
|
*/
|
|
public function checkConsistency(Stepname $stepname): array
|
|
{
|
|
$query = $this->createQuery();
|
|
$query ->getQuerySettings()->setRespectSysLanguage(false);
|
|
$query ->matching(
|
|
$query->equals(self::STEPCONF_NAME, $stepname->getStepconf()->getUid())
|
|
);
|
|
$queryResult = $query
|
|
->execute(true);
|
|
$checkConsistency = [];
|
|
if (count($queryResult) > 1) {
|
|
$websiteLanguagesArray = [];
|
|
$allWebsiteLanguages = $this->getCurrentSite()->getAllLanguages();
|
|
|
|
/** @var \TYPO3\CMS\Core\Site\Entity\SiteLanguage $language */
|
|
foreach (array_values($allWebsiteLanguages) as $language) {
|
|
$websiteLanguagesArray[] = $language->getLanguageId();
|
|
}
|
|
$languageCounter = [];
|
|
foreach (array_values($queryResult) as $value) {
|
|
$languageUid = $value[$this->syslangUidLiteral];
|
|
$languageCounter[$languageUid]++;
|
|
if ($languageCounter[$languageUid] > 1) {
|
|
$checkConsistency['doubleLang'] = true;
|
|
}
|
|
|
|
//check if language flag exists in current website
|
|
if (($languageUid > 0) && in_array($languageUid, $websiteLanguagesArray, true)) {
|
|
$checkConsistency['existLang'] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $checkConsistency;
|
|
}
|
|
|
|
/**
|
|
* Finds the default language stepconf by giving ratingobject and steporder
|
|
*
|
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepname $stepname The ratingname to look for
|
|
* @throws InvalidQueryException
|
|
* @return Stepname|null The stepname in default language
|
|
* @var Stepname $foundRow
|
|
*/
|
|
public function findDefaultStepname(Stepname $stepname): ?Stepname
|
|
{
|
|
$foundRow = $this->objectManager->get(Stepname::class);
|
|
|
|
$query = $this->createQuery();
|
|
$query->getQuerySettings()->setRespectSysLanguage(false);
|
|
$query->getQuerySettings()->setLanguageOverlayMode(false);
|
|
$query->matching(
|
|
$query->logicalAnd(
|
|
[
|
|
$query->equals(self::STEPCONF_NAME, $stepname->getStepconf()),
|
|
$query->in($this->syslangUidLiteral, [0, -1])
|
|
]
|
|
)
|
|
)->setLimit(1);
|
|
|
|
/** @var QueryResultInterface $queryResult */
|
|
$queryResult = $query->execute();
|
|
|
|
/*
|
|
$queryParser = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
|
|
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL(), get_class($this).' SQL');
|
|
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getParameters(), get_class($this).' SQL Parameter');
|
|
*/
|
|
|
|
/** @var Stepname $foundRow */
|
|
$foundRow = null;
|
|
if ($queryResult->count() > 0) {
|
|
$foundRow = $queryResult->getFirst();
|
|
}
|
|
return $foundRow;
|
|
}
|
|
|
|
/**
|
|
* Finds the localized ratingstep entry by giving ratingobjectUid
|
|
*
|
|
* @param Stepname $stepname The ratingname to look for
|
|
* @return bool true if stepconf having same steporder and _languageUid exists
|
|
*/
|
|
public function existStepname(Stepname $stepname): bool
|
|
{
|
|
$lookForStepname = $this->findStepnameObject($stepname);
|
|
return !is_null($lookForStepname);
|
|
}
|
|
|
|
/**
|
|
* Set default query settings to find ALL records
|
|
*/
|
|
public function clearQuerySettings(): void
|
|
{
|
|
$querySettings = $this->createQuery()->getQuerySettings();
|
|
$querySettings->setRespectSysLanguage(true);
|
|
$querySettings->setIgnoreEnableFields(true);
|
|
$querySettings->setLanguageOverlayMode(false);
|
|
$this->setDefaultQuerySettings($querySettings);
|
|
}
|
|
|
|
protected function getCurrentSite(): ?Site
|
|
{
|
|
if ($GLOBALS['TYPO3_REQUEST'] instanceof ServerRequestInterface
|
|
&& $GLOBALS['TYPO3_REQUEST']->getAttribute('site') instanceof Site) {
|
|
return $GLOBALS['TYPO3_REQUEST']->getAttribute('site');
|
|
}
|
|
return null;
|
|
}
|
|
}
|