186 lines
7.1 KiB
PHP
186 lines
7.1 KiB
PHP
|
<?php
|
||
|
declare(strict_types = 1);
|
||
|
|
||
|
/*
|
||
|
* 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\Service;
|
||
|
|
||
|
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Ratingobject;
|
||
|
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf;
|
||
|
use TYPO3\CMS\Core\Log\LogLevel;
|
||
|
|
||
|
/**
|
||
|
* Factory for model objects
|
||
|
*
|
||
|
* @version $Id:$
|
||
|
* @license http://opensource.org/licenses/gpl-license.php GNU protected License, version 2
|
||
|
*/
|
||
|
class ExtensionManagementService extends AbstractExtensionService
|
||
|
{
|
||
|
/**
|
||
|
* @var \WapplerSystems\BookmarksLikesRatings\Service\ExtensionConfigurationService
|
||
|
*/
|
||
|
protected $extensionConfigurationService;
|
||
|
/**
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Service\ExtensionConfigurationService $extensionConfigurationService
|
||
|
*/
|
||
|
public function injectExtensionConfigurationService(ExtensionConfigurationService $extensionConfigurationService): void
|
||
|
{
|
||
|
$this->extensionConfigurationService = $extensionConfigurationService;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @var \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService
|
||
|
*/
|
||
|
protected $extensionHelperService;
|
||
|
/**
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService $extensionHelperService
|
||
|
*/
|
||
|
public function injectExtensionHelperService(ExtensionHelperService $extensionHelperService)
|
||
|
{
|
||
|
$this->extensionHelperService = $extensionHelperService;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prepares an object for ratings
|
||
|
*
|
||
|
* @api
|
||
|
* @param string $tablename
|
||
|
* @param string $fieldname
|
||
|
* @param int $stepcount
|
||
|
* @return \WapplerSystems\BookmarksLikesRatings\Domain\Model\Ratingobject
|
||
|
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException
|
||
|
* @throws \WapplerSystems\BookmarksLikesRatings\Exception\RecordNotFoundException
|
||
|
*/
|
||
|
public function makeRatable(string $tablename, string $fieldname, int $stepcount): Ratingobject
|
||
|
{
|
||
|
$this->logger->log(
|
||
|
LogLevel::INFO,
|
||
|
'makeRatable called',
|
||
|
['tablename' => $tablename, 'fieldname' => $fieldname, 'stepcount' => $stepcount]
|
||
|
);
|
||
|
$this->extensionConfigurationService->prepareExtensionConfiguration();
|
||
|
|
||
|
$ratingobject = $this->extensionHelperService->getRatingobject(
|
||
|
['ratetable' => $tablename, 'ratefield' => $fieldname]
|
||
|
);
|
||
|
|
||
|
//create a new default stepconf having stepweight 1 for each step
|
||
|
for ($i = 1; $i <= $stepcount; $i++) {
|
||
|
$stepconfArray = ['ratingobject' => $ratingobject, 'steporder' => $i, 'stepweight' => 1];
|
||
|
$stepconf = $this->extensionHelperService->createStepconf($stepconfArray);
|
||
|
$ratingobject->addStepconf($stepconf);
|
||
|
}
|
||
|
|
||
|
//Full reload of newly created object
|
||
|
$ratingobject = $this->extensionHelperService->getRatingobject(
|
||
|
['ratetable' => $tablename, 'ratefield' => $fieldname]
|
||
|
);
|
||
|
|
||
|
// CREATE NEW DYNCSS FILE
|
||
|
$this->extensionHelperService->clearDynamicCssFile();
|
||
|
$this->extensionHelperService->renderDynCSS();
|
||
|
$this->extensionConfigurationService->restoreCallingExtensionConfiguration();
|
||
|
return $ratingobject;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prepares an object for ratings
|
||
|
*
|
||
|
* @api
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf $stepconf
|
||
|
* @param string $stepname
|
||
|
* @param string|null $twoLetterIsoCode
|
||
|
* @param bool $allStepconfs Take stepname for all steps and add steporder number at the end
|
||
|
* @return bool
|
||
|
* @throws \TYPO3\CMS\Core\Exception\SiteNotFoundException
|
||
|
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException
|
||
|
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
|
||
|
* @throws \WapplerSystems\BookmarksLikesRatings\Exception\Exception
|
||
|
*/
|
||
|
public function setStepname(
|
||
|
Stepconf $stepconf,
|
||
|
string $stepname,
|
||
|
string $twoLetterIsoCode=null,
|
||
|
bool $allStepconfs = false
|
||
|
): bool {
|
||
|
$this->logger->log(
|
||
|
LogLevel::INFO,
|
||
|
'setStepname called',
|
||
|
[
|
||
|
'stepconf' => $stepconf->getUid(),
|
||
|
'steporder' => $stepconf->getSteporder(),
|
||
|
'stepname' => $stepname,
|
||
|
'twoLetterIsoCode' => $twoLetterIsoCode,
|
||
|
'allStepconfs' => $allStepconfs
|
||
|
]
|
||
|
);
|
||
|
|
||
|
$this->extensionConfigurationService->prepareExtensionConfiguration();
|
||
|
|
||
|
/** @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Ratingobject $ratingobject */
|
||
|
$ratingobject = $stepconf->getRatingobject();
|
||
|
|
||
|
$success = true;
|
||
|
if (!$allStepconfs) {
|
||
|
//only add the one specific stepname
|
||
|
$stepnameArray = [
|
||
|
'stepname' => $stepname,
|
||
|
'twoLetterIsoCode' => $twoLetterIsoCode,
|
||
|
'pid' => $stepconf->getPid()
|
||
|
];
|
||
|
/** @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepname $stepname */
|
||
|
$stepnameObject = $this->extensionHelperService->createStepname($stepconf, $stepnameArray);
|
||
|
|
||
|
if (!$stepconf->addStepname($stepnameObject)) {
|
||
|
$this->logger->log(
|
||
|
LogLevel::WARNING,
|
||
|
'Stepname entry for language already exists',
|
||
|
[
|
||
|
'stepconf' => $stepconf->getUid(),
|
||
|
'steporder' => $stepconf->getSteporder(),
|
||
|
'stepname' => $stepnameObject,
|
||
|
'twoLetterIsoCode' => $twoLetterIsoCode,
|
||
|
'errorCode' => 1398972827
|
||
|
]
|
||
|
);
|
||
|
$success = false;
|
||
|
}
|
||
|
} else {
|
||
|
|
||
|
//add stepnames to every stepconf
|
||
|
foreach ($ratingobject->getStepconfs() as $loopStepConf) {
|
||
|
$stepnameArray = [
|
||
|
'stepname' => $stepname . $loopStepConf->getSteporder(),
|
||
|
'twoLetterIsoCode' => $twoLetterIsoCode,
|
||
|
'pid' => $ratingobject->getPid()
|
||
|
];
|
||
|
|
||
|
$stepnameObject = $this->extensionHelperService->createStepname($loopStepConf, $stepnameArray);
|
||
|
if ($success && !$loopStepConf->addStepname($stepnameObject)) {
|
||
|
$this->logger->log(
|
||
|
LogLevel::WARNING,
|
||
|
'Stepname entry for language already exists',
|
||
|
[
|
||
|
'stepconf' => $stepconf->getUid(),
|
||
|
'steporder' => $stepconf->getSteporder(),
|
||
|
'stepname' => $stepname,
|
||
|
'twoLetterIsoCode' => $twoLetterIsoCode,
|
||
|
'errorCode' => 1398972331
|
||
|
]
|
||
|
);
|
||
|
$success = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->extensionConfigurationService->restoreCallingExtensionConfiguration();
|
||
|
return $success;
|
||
|
}
|
||
|
}
|