188 lines
6.0 KiB
PHP
188 lines
6.0 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.
|
||
|
*/
|
||
|
|
||
|
/** @noinspection PhpFullyQualifiedNameUsageInspection */
|
||
|
namespace WapplerSystems\BookmarksLikesRatings\Service;
|
||
|
|
||
|
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Voter;
|
||
|
use WapplerSystems\BookmarksLikesRatings\Exception\FeUserNotFoundException;
|
||
|
use TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository;
|
||
|
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||
|
|
||
|
/**
|
||
|
* An access control service
|
||
|
*
|
||
|
* @version $Id:$
|
||
|
* @license http://opensource.org/licenses/gpl-license.php GNU protected License, version 2
|
||
|
*/
|
||
|
class AccessControlService extends AbstractExtensionService
|
||
|
{
|
||
|
/**
|
||
|
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository $frontendUserRepository
|
||
|
*/
|
||
|
protected $frontendUserRepository;
|
||
|
|
||
|
/**
|
||
|
* @param \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository $frontendUserRepository
|
||
|
* @noinspection PhpUnused
|
||
|
*/
|
||
|
public function injectFrontendUserRepository(FrontendUserRepository $frontendUserRepository): void
|
||
|
{
|
||
|
$this->frontendUserRepository = $frontendUserRepository;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @var \WapplerSystems\BookmarksLikesRatings\Domain\Repository\VoterRepository $voterRepository
|
||
|
*/
|
||
|
protected $voterRepository;
|
||
|
|
||
|
/**
|
||
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Repository\VoterRepository $voterRepository
|
||
|
*/
|
||
|
public function injectVoterRepository(\WapplerSystems\BookmarksLikesRatings\Domain\Repository\VoterRepository $voterRepository): void
|
||
|
{
|
||
|
$this->voterRepository = $voterRepository;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @var \TYPO3\CMS\Core\Context\Context $context
|
||
|
*/
|
||
|
protected $context;
|
||
|
/**
|
||
|
* @param \TYPO3\CMS\Core\Context\Context $context
|
||
|
*/
|
||
|
public function injectContext(\TYPO3\CMS\Core\Context\Context $context): void
|
||
|
{
|
||
|
$this->context = $context;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Tests, if the given person is logged into the frontend
|
||
|
*
|
||
|
* @param \TYPO3\CMS\Extbase\Domain\Model\FrontendUser|null $person The person
|
||
|
* @return bool The result; true if the given person is logged in; otherwise false
|
||
|
* @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
|
||
|
*/
|
||
|
public function isLoggedIn(\TYPO3\CMS\Extbase\Domain\Model\FrontendUser $person = null): bool
|
||
|
{
|
||
|
if (is_object($person)) {
|
||
|
if ($person->getUid() &&
|
||
|
($person->getUid() === $this->getFrontendUserUid())) {
|
||
|
return true; //treat anonymous user also as logged in
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
* @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
|
||
|
*/
|
||
|
public function backendAdminIsLoggedIn(): bool
|
||
|
{
|
||
|
return $this->context->getPropertyFromAspect('backend.user', 'isLoggedIn');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
* @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
|
||
|
*/
|
||
|
public function hasLoggedInFrontendUser(): bool
|
||
|
{
|
||
|
return $this->context->getPropertyFromAspect('frontend.user', 'isLoggedIn');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
* @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
|
||
|
*/
|
||
|
public function getFrontendUserGroups(): array
|
||
|
{
|
||
|
if ($this->hasLoggedInFrontendUser()) {
|
||
|
return $this->context->getPropertyFromAspect('frontend.user', 'groupIds');
|
||
|
}
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return int|null
|
||
|
* @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
|
||
|
*/
|
||
|
public function getFrontendUserUid(): ?int
|
||
|
{
|
||
|
if ($this->hasLoggedInFrontendUser()) {
|
||
|
return $this->context->getPropertyFromAspect('frontend.user', 'id');
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Loads objects from repositories
|
||
|
*
|
||
|
* @param mixed $voter
|
||
|
* @return \TYPO3\CMS\Extbase\Domain\Model\FrontendUser
|
||
|
* @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
|
||
|
*/
|
||
|
public function getFrontendUser($voter = null): ?\TYPO3\CMS\Extbase\Domain\Model\FrontendUser
|
||
|
{
|
||
|
//set userobject
|
||
|
if (!$voter instanceof \TYPO3\CMS\Extbase\Domain\Model\FrontendUser) {
|
||
|
//TODO Errorhandling if no user is logged in
|
||
|
if ((int)$voter === 0) {
|
||
|
//get logged in fe-user
|
||
|
$voter = $this->frontendUserRepository->findByUid($this->getFrontendUserUid());
|
||
|
} else {
|
||
|
$voter = $this->frontendUserRepository->findByUid((int)$voter);
|
||
|
}
|
||
|
}
|
||
|
return $voter;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Loads objects from repositories
|
||
|
*
|
||
|
* @param int|null $voter
|
||
|
* @return \WapplerSystems\BookmarksLikesRatings\Domain\Model\Voter
|
||
|
* @throws FeUserNotFoundException
|
||
|
* @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
|
||
|
*/
|
||
|
public function getFrontendVoter(?int $voter = 0): Voter
|
||
|
{
|
||
|
$exceptionMessageArray = [];
|
||
|
|
||
|
/** @var Voter $voterObject */
|
||
|
$voterObject = null;
|
||
|
|
||
|
//TODO Errorhandling if no user is logged in
|
||
|
if ((int)$voter === 0) {
|
||
|
//get logged in fe-user
|
||
|
$voterObject = $this->voterRepository->findByUid($this->getFrontendUserUid());
|
||
|
$exceptionMessageArray = [$this->getFrontendUserUid()];
|
||
|
$exceptionMessageType = 'feUser';
|
||
|
} else {
|
||
|
$voterObject = $this->voterRepository->findByUid((int)$voter);
|
||
|
$exceptionMessageArray = [(int)$voter];
|
||
|
$exceptionMessageType = 'anonymousUser';
|
||
|
}
|
||
|
|
||
|
if (empty($voterObject)) {
|
||
|
throw new FeUserNotFoundException(
|
||
|
LocalizationUtility::translate(
|
||
|
'flash.pluginConfiguration.missing.' . $exceptionMessageType,
|
||
|
'ThRating',
|
||
|
$exceptionMessageArray
|
||
|
),
|
||
|
1602095329
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return $voterObject;
|
||
|
}
|
||
|
}
|