<?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\Model; use WapplerSystems\BookmarksLikesRatings\Domain\Repository\StepconfRepository; use WapplerSystems\BookmarksLikesRatings\Domain\Repository\StepnameRepository; use WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService; use TYPO3\CMS\Extbase\Annotation as Extbase; use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; use TYPO3\CMS\Extbase\Object\ObjectManagerInterface; use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; /** * Model for ratingstep configuration * * @copyright Copyright belongs to the respective authors * @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2 * @entity */ class Stepconf extends AbstractEntity { /** * @Extbase\Validate("\WapplerSystems\BookmarksLikesRatings\Domain\Validator\RatingobjectValidator") * @Extbase\Validate("NotEmpty") * @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Ratingobject */ protected $ratingobject; /** * The order of this config entry * * @Extbase\Validate("NumberRange", options={"minimum": 1}) * @Extbase\Validate("NotEmpty") * @var int discrete order of ratingsteps */ protected $steporder; /** * The weight of this config entry * * @Extbase\Validate("Integer") * @Extbase\Validate("NumberRange", options={"minimum": 1}) * @var int default is 1 which is equal weight */ protected $stepweight; /** * The value of this config entry * * @Extbase\ORM\Lazy * @Extbase\ORM\Cascade("remove") * @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepname */ protected $stepname; /** * The ratings of this object * * @Extbase\ORM\Lazy * @Extbase\ORM\Cascade("remove") * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Vote> */ protected $votes; /** * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager */ protected $objectManager; /** * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager */ public function injectObjectManager(ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } /** * @var \WapplerSystems\BookmarksLikesRatings\Domain\Repository\StepnameRepository $stepnameRepository */ protected $stepnameRepository; /** * @param \WapplerSystems\BookmarksLikesRatings\Domain\Repository\StepnameRepository $stepnameRepository */ public function injectStepnameRepository(StepnameRepository $stepnameRepository) { $this->stepnameRepository = $stepnameRepository; } /** * @var \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService */ protected $extensionHelperService; /** * @param \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService $extensionHelperService */ public function injectExtensionHelperService(ExtensionHelperService $extensionHelperService) { $this->extensionHelperService = $extensionHelperService; } /** * Constructs a new stepconfig object * @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Ratingobject|null $ratingobject * @param int|null $steporder */ public function __construct(Ratingobject $ratingobject = null, $steporder = null) { if ($ratingobject) { $this->setRatingobject($ratingobject); } if ($steporder) { $this->setSteporder($steporder); } $this->initializeObject(); } /** * Initializes a new stepconf object */ public function initializeObject() { //Initialize vote storage if rating is new if (!is_object($this->votes)) { $this->votes = new ObjectStorage(); } } /** * Sets the ratingobject this rating is part of * * @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Ratingobject $ratingobject The Rating */ public function setRatingobject(Ratingobject $ratingobject) { $this->ratingobject = $ratingobject; $this->setPid($ratingobject->getPid()); } /** * Returns the ratingobject this rating is part of * * @return \WapplerSystems\BookmarksLikesRatings\Domain\Model\Ratingobject|null */ public function getRatingobject() { return $this->ratingobject; } /** * Sets the stepconfig order * * @param int $steporder */ public function setSteporder($steporder) { $this->steporder = $steporder; } /** * Gets the stepconfig order * * @return int stepconfig position */ public function getSteporder(): int { return $this->steporder; } /** * Sets the stepconfig value * * @param int $stepweight */ public function setStepweight($stepweight) { $this->stepweight = $stepweight; } /** * Gets the stepconfig value * If not set steporder is copied * * @return int Stepconfig value */ public function getStepweight() { empty($this->stepweight) && $this->stepweight = $this->steporder; return $this->stepweight; } /** * Adds a localized stepname to this stepconf * * @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepname $stepname * @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException * @return bool */ public function addStepname(Stepname $stepname): bool { $success = true; $stepname->setStepconf($this); if (!$this->stepnameRepository->existStepname($stepname)) { $defaultLanguageObject = $this->stepnameRepository->findDefaultStepname($stepname); if (is_object($defaultLanguageObject)) { //handle localization if an entry for the default language exists $stepname->setL18nParent($defaultLanguageObject->getUid()); } $this->stepnameRepository->add($stepname); $this->extensionHelperService->persistRepository(StepnameRepository::class, $stepname); $stepname->getStepconf()->getStepname(); $this->extensionHelperService->persistRepository(StepconfRepository::class, $this); $this->extensionHelperService->clearDynamicCssFile(); $this->stepname = $stepname; } else { //warning - existing stepname entry for a language will not be overwritten $success = false; } return $success; } /** * Returns the localized stepname object of this stepconf * * @return \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepname|null */ public function getStepname(): ?Stepname { /* @phpstan-ignore-next-line */ if ($this->stepname instanceof LazyLoadingProxy) { $this->stepname = $this->stepname->_loadRealInstance(); } return $this->stepname; } /** * Returns all votes in this rating * * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Vote> */ public function getVotes() { return clone $this->votes; } /** * Method to use Object as plain string * * @return string */ public function __toString() { $stepnameText = $this->getStepname(); if (!$stepnameText) { $stepnameText = $this->getSteporder(); } return (string)$stepnameText; } }