<?php
namespace App\Security\Api\Authorization\Voter\WorkplaceConfigurator;
use App\Helper\Api\Entity\RequestDataContainer;
use App\Security\Api\Authorization\Voter\AbstractCrudValidationVoter;
use App\Security\Api\Authorization\VoterAttribute\WorkplaceConfigurator\WorkplaceVoterAttribute;
use App\Validator\Api\Data\CoreModule\OrgUnitDataValidator;
use App\Validator\Api\Data\JobLab\MatchingDataValidator;
use App\Validator\Api\Data\JobLab\MatchingRejectionDataValidator;
use App\Validator\Api\Data\WorkplaceConfigurator\WorkplaceDataValidator;
/**
* Validation voter.
*
* @package API
* @internal
*/
class WorkplaceValidationVoter extends AbstractCrudValidationVoter
{
/**
* Organizational unit validator interface.
*
* @var OrgUnitDataValidator
*/
protected OrgUnitDataValidator $orgUnitDataValidator;
/**
* Matching validator interface.
*
* @var MatchingDataValidator
*/
protected MatchingDataValidator $matchingDataValidator;
/**
* Matching rejection validator interface.
*
* @var MatchingRejectionDataValidator
*/
protected MatchingRejectionDataValidator $matchingRejectionDataValidator;
/**
* Constructor.
*
* @param WorkplaceDataValidator $validator The standard validator.
* @param MatchingDataValidator $matchingDataValidator The matching validator.
* @param MatchingRejectionDataValidator $matchingRejectionDataValidator The matching rejection validator.
*/
public function __construct(
WorkplaceDataValidator $validator,
OrgUnitDataValidator $orgUnitDataValidator,
MatchingDataValidator $matchingDataValidator,
MatchingRejectionDataValidator $matchingRejectionDataValidator)
{
// prevent false-positive php:S1185
$this->validator = $validator;
parent::__construct($validator);
$this->orgUnitDataValidator = $orgUnitDataValidator;
$this->matchingDataValidator = $matchingDataValidator;
$this->matchingRejectionDataValidator = $matchingRejectionDataValidator;
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function copy(RequestDataContainer $subject): void
{
$this->validator->validateInputCopy($subject->getInput());
}
/**
* Returns list of supported attributes.
*
* @return array
* @noinspection PhpClassConstantAccessedViaChildClassInspection
*/
protected function getSupportedAttributes(): array
{
return [
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_COPY),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_CREATE),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_DELETE),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_LIST),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_LIST_ORG_UNIT),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_READ),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_READ_ORG_UNIT),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_UPDATE),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_UPDATE_ACTIVE_STATUS),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_HOMEPAGE),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_MATCH),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_MATCHING_REJECTION_CREATE),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_MATCHING_REJECTION_DELETE),
WorkplaceVoterAttribute::getAttribute(WorkplaceVoterAttribute::METHOD_ID_MATCHING_REJECTION_SET_DIRTY),
];
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function listOrgUnit(RequestDataContainer $subject): void
{
$this->orgUnitDataValidator->validateInputList($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function readOrgUnit(RequestDataContainer $subject): void
{
$this->orgUnitDataValidator->validateInputRead($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function updateActiveStatus(RequestDataContainer $subject): void
{
$this->validator->validateInputUpdateActiveStatus($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function homepage(RequestDataContainer $subject): void
{
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function match(RequestDataContainer $subject): void
{
$this->matchingDataValidator->validateWorkplaceInputList($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function matchingRejectionCreate(RequestDataContainer $subject): void
{
$this->matchingRejectionDataValidator->validateInputCreate($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function matchingRejectionDelete(RequestDataContainer $subject): void
{
$this->matchingRejectionDataValidator->validateInputDelete($subject->getInput());
}
}