243 lines
6.9 KiB
PHP
243 lines
6.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\Model;
|
||
|
|
||
|
use WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService;
|
||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||
|
use TYPO3\CMS\Extbase\Annotation as Extbase;
|
||
|
use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
|
||
|
use TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException;
|
||
|
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
|
||
|
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||
|
use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
|
||
|
|
||
|
/**
|
||
|
* Model for rating votes
|
||
|
*
|
||
|
* @copyright Copyright belongs to the respective authors
|
||
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
||
|
* @entity
|
||
|
*/
|
||
|
class Vote extends AbstractEntity
|
||
|
{
|
||
|
/**
|
||
|
* @Extbase\Validate("\WapplerSystems\BookmarksLikesRatings\Domain\Validator\RatingValidator")
|
||
|
* @Extbase\Validate("NotEmpty")
|
||
|
* @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating
|
||
|
*/
|
||
|
protected $rating;
|
||
|
|
||
|
/**
|
||
|
* The voter of this object
|
||
|
*
|
||
|
* @Extbase\Validate("NotEmpty")
|
||
|
* @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Voter
|
||
|
*/
|
||
|
protected $voter;
|
||
|
|
||
|
/**
|
||
|
* The actual voting of this object
|
||
|
*
|
||
|
* @Extbase\Validate("\WapplerSystems\BookmarksLikesRatings\Domain\Validator\StepconfValidator")
|
||
|
* @Extbase\Validate("NotEmpty")
|
||
|
* @var \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf
|
||
|
*/
|
||
|
protected $vote;
|
||
|
|
||
|
/**
|
||
|
* @var array
|
||
|
*/
|
||
|
protected $settings;
|
||
|
|
||
|
/**
|
||
|
* @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
|
||
|
*/
|
||
|
protected $objectManager;
|
||
|
|
||
|
/**
|
||
|
* @var \TYPO3\CMS\Core\Log\Logger
|
||
|
*/
|
||
|
protected $logger;
|
||
|
|
||
|
/**
|
||
|
* @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
|
||
|
*/
|
||
|
public function injectObjectManager(ObjectManagerInterface $objectManager)
|
||
|
{
|
||
|
$this->objectManager = $objectManager;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @var \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService
|
||
|
*/
|
||
|
protected $extensionHelperService;
|
||
|
/**
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService $extensionHelperService
|
||
|
*/
|
||
|
public function injectExtensionHelperService(ExtensionHelperService $extensionHelperService): void
|
||
|
{
|
||
|
$this->extensionHelperService = $extensionHelperService;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructs a new rating object
|
||
|
*
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating|null $rating
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Voter|null $voter
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf|null $vote
|
||
|
* @throws InvalidConfigurationTypeException
|
||
|
*/
|
||
|
/** @noinspection PhpUnused */
|
||
|
public function __construct(
|
||
|
Rating $rating = null,
|
||
|
Voter $voter = null,
|
||
|
Stepconf $vote = null
|
||
|
) {
|
||
|
if ($rating) {
|
||
|
$this->setRating($rating);
|
||
|
}
|
||
|
if ($voter) {
|
||
|
$this->setVoter($voter);
|
||
|
}
|
||
|
if ($vote) {
|
||
|
$this->setVote($vote);
|
||
|
}
|
||
|
$this->initializeObject();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initializes the new vote object
|
||
|
* @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
|
||
|
*/
|
||
|
public function initializeObject()
|
||
|
{
|
||
|
if (empty($this->objectManager)) {
|
||
|
$this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
|
||
|
}
|
||
|
if (empty($this->extensionHelperService)) {
|
||
|
$this->extensionHelperService = GeneralUtility::makeInstance(ExtensionHelperService::class);
|
||
|
}
|
||
|
$this->logger = $this->extensionHelperService->getLogger(__CLASS__);
|
||
|
$this->settings = $this->objectManager->get(ConfigurationManager::class)->getConfiguration(
|
||
|
'Settings',
|
||
|
'thRating',
|
||
|
'pi1'
|
||
|
);
|
||
|
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this,get_class($this).' initializeObject');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the rating this vote is part of
|
||
|
*
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating $rating The Rating
|
||
|
*/
|
||
|
public function setRating(Rating $rating)
|
||
|
{
|
||
|
$this->rating = $rating;
|
||
|
$this->setPid($rating->getPid());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the rating this vote is part of
|
||
|
*
|
||
|
* @return \WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating The rating this vote is part of
|
||
|
*/
|
||
|
public function getRating(): Rating
|
||
|
{
|
||
|
return $this->rating;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the frontenduser of this vote
|
||
|
*
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Voter $voter The frontenduser
|
||
|
*/
|
||
|
public function setVoter(Voter $voter)
|
||
|
{
|
||
|
$this->voter = $voter;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the frontenduser of this vote
|
||
|
*
|
||
|
* @return \WapplerSystems\BookmarksLikesRatings\Domain\Model\Voter|null
|
||
|
*/
|
||
|
public function getVoter(): ?Voter
|
||
|
{
|
||
|
return $this->voter;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the choosen stepconfig
|
||
|
*
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf $vote
|
||
|
*/
|
||
|
public function setVote($vote)
|
||
|
{
|
||
|
$this->vote = $vote;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the rating object uid
|
||
|
*
|
||
|
* @return \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf|null Reference to selected stepconfig
|
||
|
*/
|
||
|
public function getVote()
|
||
|
{
|
||
|
return $this->vote;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the rating this vote is part of
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
/** @noinspection PhpUnused */
|
||
|
public function hasRated()
|
||
|
{
|
||
|
return $this->getVote() !== null && ($this->getVote() instanceof Stepconf);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks if vote is done by anonymous user
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isAnonymous(): bool
|
||
|
{
|
||
|
return !empty($this->settings['mapAnonymous']) && !empty($this->getVoter()) &&
|
||
|
$this->getVoter()->getUid() === (int)$this->settings['mapAnonymous'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks cookie if anonymous vote is already done
|
||
|
* always false if cookie checks is deactivated
|
||
|
*
|
||
|
* @param string $prefixId Extension prefix to identify cookie
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function hasAnonymousVote($prefixId = 'DummyPrefix'): bool
|
||
|
{
|
||
|
$anonymousRating = GeneralUtility::makeInstance(\WapplerSystems\BookmarksLikesRatings\Service\JsonService::class)
|
||
|
->decodeJsonToArray($_COOKIE[$prefixId . '_AnonymousRating_' . $this->getRating()->getUid()]);
|
||
|
return !empty($anonymousRating['voteUid']);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to use Object as plain string
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function __toString(): string
|
||
|
{
|
||
|
return (string)$this->getVote();
|
||
|
}
|
||
|
}
|