<?php
namespace App\Entity;
use App\Enum\User\Permission;
use App\Enum\User\PermissionGroup;
use App\Library\Utils\DateUtils;
use App\Repository\UserSettingsRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=UserSettingsRepository::class)
*/
class UserSettings
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditCalendarEvents;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditStudents;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewCandidates;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditPayments;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canReviewCandidates;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewStudents;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewCalendarEvents;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewCalendarEventKinds;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditCalendarEventKinds;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewZoomReport;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewPaymentsReport;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewStudentsPersonalData;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewPayments;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditCandidates;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewCampaigns;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewPaymentRequisites;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canSendCampaigns;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canUseTestFeatures;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canRemovePayments;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canCompareTable;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditCandidateAccessByReceipt;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditAllCandidateParams;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isCurator;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewDelayedMessages;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewCallLists;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditCallLists;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canRegisterForCalendarEvents;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewInnerPayments;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditInnerPayments;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canViewCities;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $canEditCities;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $startCalendarEventsDate;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $endCalendarEventsDate;
/**
* @ORM\Column(type="string", length=20, nullable=true)
*/
private $calendarEventsDateRangeName;
public function __construct()
{
$this->startCalendarEventsDate = $this->getInitStartDate();
$this->endCalendarEventsDate = $this->getInitEndDate();
}
private function getInitStartDate(): \DateTimeInterface
{
return (new \DateTime())->modify("-1 month first day of this month");
}
private function getInitEndDate(): \DateTimeInterface
{
return (new \DateTime())->modify("+6 month last day of this month");
}
public function getId(): ?int
{
return $this->id;
}
public function isCanEditCalendarEvents(): ?bool
{
return $this->canEditCalendarEvents;
}
public function setCanEditCalendarEvents(?bool $canEditCalendarEvents): self
{
$this->canEditCalendarEvents = $canEditCalendarEvents;
return $this;
}
public function isCanEditStudents(): ?bool
{
return $this->canEditStudents;
}
public function setCanEditStudents(?bool $canEditStudents): self
{
$this->canEditStudents = $canEditStudents;
return $this;
}
public function isCanViewCandidates(): ?bool
{
return $this->canViewCandidates;
}
public function setCanViewCandidates(?bool $canViewCandidates): self
{
$this->canViewCandidates = $canViewCandidates;
return $this;
}
public function isCanEditPayments(): ?bool
{
return $this->canEditPayments;
}
public function setCanEditPayments(?bool $canEditPayments): self
{
$this->canEditPayments = $canEditPayments;
return $this;
}
public function isCanReviewCandidates(): ?bool
{
return $this->canReviewCandidates;
}
public function setCanReviewCandidates(?bool $canReviewCandidates): self
{
$this->canReviewCandidates = $canReviewCandidates;
return $this;
}
public function isCanViewStudents(): ?bool
{
return $this->canViewStudents;
}
public function setCanViewStudents(?bool $canViewStudents): self
{
$this->canViewStudents = $canViewStudents;
return $this;
}
public function isCanViewCalendarEvents(): ?bool
{
return $this->canViewCalendarEvents;
}
public function setCanViewCalendarEvents(?bool $canViewCalendarEvents): self
{
$this->canViewCalendarEvents = $canViewCalendarEvents;
return $this;
}
public function isCanViewCalendarEventKinds(): ?bool
{
return $this->canViewCalendarEventKinds;
}
public function setCanViewCalendarEventKinds(?bool $canViewCalendarEventKinds): self
{
$this->canViewCalendarEventKinds = $canViewCalendarEventKinds;
return $this;
}
public function isCanEditCalendarEventKinds(): ?bool
{
return $this->canEditCalendarEventKinds;
}
public function setCanEditCalendarEventKinds(?bool $canEditCalendarEventKinds): self
{
$this->canEditCalendarEventKinds = $canEditCalendarEventKinds;
return $this;
}
public function isCanViewZoomReport(): ?bool
{
return $this->canViewZoomReport;
}
public function setCanViewZoomReport(?bool $canViewZoomReport): self
{
$this->canViewZoomReport = $canViewZoomReport;
return $this;
}
public function isCanViewPaymentsReport(): ?bool
{
return $this->canViewPaymentsReport;
}
public function setCanViewPaymentsReport(?bool $canViewPaymentsReport): self
{
$this->canViewPaymentsReport = $canViewPaymentsReport;
return $this;
}
public function isCanViewStudentsPersonalData(): ?bool
{
return $this->canViewStudentsPersonalData;
}
public function setCanViewStudentsPersonalData(?bool $canViewStudentsPersonalData): self
{
$this->canViewStudentsPersonalData = $canViewStudentsPersonalData;
return $this;
}
public function isCanViewPayments(): ?bool
{
return $this->canViewPayments;
}
public function setCanViewPayments(?bool $canViewPayments): self
{
$this->canViewPayments = $canViewPayments;
return $this;
}
public function setPermission(string $key, bool $value): self
{
$this->$key = $value;
return $this;
}
public function getPermission(string $key): bool
{
return $this->$key ?? false;
}
public function getAllPermissionsGrouped(array $options = null): array
{
$options = array_merge([
'grantedOnly' => false,
], $options ?? []);
$data = [];
foreach (PermissionGroup::getAsArray() as $group) {
$data[$group] = [
"text" => PermissionGroup::getText($group),
"permissions" => [],
];
foreach (Permission::getAsArray() as $permission) {
if (PermissionGroup::getGroup($permission) === $group) {
if ($options['grantedOnly'] && !$this->getPermission($permission)) {
continue;
}
$data[$group]["permissions"][$permission] = [
"text" => Permission::getText($permission),
"value" => $this->getPermission($permission),
"shortText" => Permission::getShortText($permission),
];
}
}
}
return $data;
}
public function isCanEditCandidates(): ?bool
{
return $this->canEditCandidates;
}
public function setCanEditCandidates(?bool $canEditCandidates): self
{
$this->canEditCandidates = $canEditCandidates;
return $this;
}
public function isCanViewCampaigns(): ?bool
{
return $this->canViewCampaigns;
}
public function setCanViewCampaigns(?bool $canViewCampaigns): self
{
$this->canViewCampaigns = $canViewCampaigns;
return $this;
}
public function isCanViewPaymentRequisites(): ?bool
{
return $this->canViewPaymentRequisites;
}
public function setCanViewPaymentRequisites(?bool $canViewPaymentRequisites): self
{
$this->canViewPaymentRequisites = $canViewPaymentRequisites;
return $this;
}
public function isCanSendCampaigns(): ?bool
{
return $this->canSendCampaigns;
}
public function setCanSendCampaigns(?bool $canSendCampaigns): self
{
$this->canSendCampaigns = $canSendCampaigns;
return $this;
}
public function isCanUseTestFeatures(): ?bool
{
return $this->canUseTestFeatures;
}
public function setCanUseTestFeatures(?bool $canUseTestFeatures): self
{
$this->canUseTestFeatures = $canUseTestFeatures;
return $this;
}
public function isCanRemovePayments(): ?bool
{
return $this->canRemovePayments;
}
public function setCanRemovePayments(?bool $canRemovePayments): self
{
$this->canRemovePayments = $canRemovePayments;
return $this;
}
public function isCanCompareTable(): ?bool
{
return $this->canCompareTable;
}
public function setCanCompareTable(?bool $canCompareTable): self
{
$this->canCompareTable = $canCompareTable;
return $this;
}
public function isCanEditCandidateAccessByReceipt(): ?bool
{
return $this->isCanEditAllCandidateParams() || $this->canEditCandidateAccessByReceipt;
}
public function setCanEditCandidateAccessByReceipt(?bool $canEditCandidateAccessByReceipt): self
{
$this->canEditCandidateAccessByReceipt = $canEditCandidateAccessByReceipt;
return $this;
}
public function isCanEditAllCandidateParams(): ?bool
{
return $this->canEditAllCandidateParams;
}
public function setCanEditAllCandidateParams(?bool $canEditAllCandidateParams): self
{
$this->canEditAllCandidateParams = $canEditAllCandidateParams;
return $this;
}
public function isIsCurator(): ?bool
{
return $this->isCurator;
}
public function setIsCurator(?bool $isCurator): self
{
$this->isCurator = $isCurator;
return $this;
}
public function isCanViewDelayedMessages(): ?bool
{
return $this->canViewDelayedMessages;
}
public function setCanViewDelayedMessages(?bool $canViewDelayedMessages): self
{
$this->canViewDelayedMessages = $canViewDelayedMessages;
return $this;
}
public function isCanViewCallLists(): ?bool
{
return $this->canViewCallLists;
}
public function setCanViewCallLists(?bool $canViewCallLists): self
{
$this->canViewCallLists = $canViewCallLists;
return $this;
}
public function isCanEditCallLists(): ?bool
{
return $this->canEditCallLists;
}
public function setCanEditCallLists(?bool $canEditCallLists): self
{
$this->canEditCallLists = $canEditCallLists;
return $this;
}
public function isCanRegisterForCalendarEvents(): ?bool
{
return $this->canRegisterForCalendarEvents;
}
public function setCanRegisterForCalendarEvents(?bool $canRegisterForCalendarEvents): self
{
$this->canRegisterForCalendarEvents = $canRegisterForCalendarEvents;
return $this;
}
public function isCanViewInnerPayments(): ?bool
{
return $this->canViewInnerPayments;
}
public function setCanViewInnerPayments(?bool $canViewInnerPayments): self
{
$this->canViewInnerPayments = $canViewInnerPayments;
return $this;
}
public function isCanEditInnerPayments(): ?bool
{
return $this->canEditInnerPayments;
}
public function setCanEditInnerPayments(?bool $canEditInnerPayments): self
{
$this->canEditInnerPayments = $canEditInnerPayments;
return $this;
}
public function isCanViewCities(): ?bool
{
return $this->canViewCities;
}
public function setCanViewCities(?bool $canViewCities): self
{
$this->canViewCities = $canViewCities;
return $this;
}
public function isCanEditCities(): ?bool
{
return $this->canEditCities;
}
public function setCanEditCities(?bool $canEditCities): self
{
$this->canEditCities = $canEditCities;
return $this;
}
public function canViewRegistries(): bool
{
return $this->isCanViewCalendarEventKinds() || $this->isCanEditCalendarEventKinds()
|| $this->isCanViewStudents() || $this->isCanEditStudents()
|| $this->isCanViewCandidates() || $this->isCanEditCandidates()
|| $this->isCanViewCities() || $this->isCanEditCities();
}
public function getStartCalendarEventsDate(): ?\DateTimeInterface
{
if ($this->getCalendarEventsDateRangeName()) {
return DateUtils::getDateRangeByRangeName($this->getCalendarEventsDateRangeName())[0];
}
if (!$this->startCalendarEventsDate ||
$this->startCalendarEventsDate < new \DateTime("01.01.1999")) {
$this->startCalendarEventsDate = $this->getInitStartDate();
}
return $this->startCalendarEventsDate;
}
public function setStartCalendarEventsDate(?\DateTimeInterface $startCalendarEventsDate): self
{
$this->startCalendarEventsDate = $startCalendarEventsDate;
return $this;
}
public function getEndCalendarEventsDate(): ?\DateTimeInterface
{
if ($this->getCalendarEventsDateRangeName()) {
return DateUtils::getDateRangeByRangeName($this->getCalendarEventsDateRangeName())[1];
}
if (!$this->endCalendarEventsDate ||
$this->endCalendarEventsDate < new \DateTime("01.01.1999")) {
$this->endCalendarEventsDate = $this->getInitEndDate();
}
return $this->endCalendarEventsDate;
}
public function setEndCalendarEventsDate(?\DateTimeInterface $endCalendarEventsDate): self
{
$this->endCalendarEventsDate = $endCalendarEventsDate;
return $this;
}
public function getCalendarEventsDateRangeName(): ?string
{
return $this->calendarEventsDateRangeName;
}
public function setCalendarEventsDateRangeName(?string $calendarEventsDateRangeName): self
{
$this->calendarEventsDateRangeName = $calendarEventsDateRangeName;
return $this;
}
}