<?php
namespace App\Entity;
use App\Util\EsUtil;
use App\Annotation\EsUploadable;
use Doctrine\ORM\Mapping as ORM;
use App\Entity\Model\BulletPoint;
use App\Annotation\EsElasticIndex;
use App\Filter\SearchWithTagFilter;
use App\Filter\ConferenceArchiveFilter;
use App\Repository\ConferenceRepository;
use ApiPlatform\Core\Annotation\ApiFilter;
use App\Entity\Traits\TimestampableEntity;
use Doctrine\Common\Collections\Collection;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Interfaces\UploadMappedInterface;
use Doctrine\Common\Collections\ArrayCollection;
use App\Entity\Interfaces\ElasticMappedInterface;
use App\Entity\Interfaces\ContainerMappedInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use App\Entity\Interfaces\NewsfeedAssetCreatorInterface;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter;
use Symfony\Component\Serializer\Annotation\SerializedName;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;
use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
use Locastic\ApiPlatformTranslationBundle\Model\TranslationInterface;
/**
* @ApiResource(
* attributes={"filters"={"translation.groups"}},
* normalizationContext={"groups"={"Conference:Read"}, "skip_null_values"=false},
* denormalizationContext={"groups"={"Conference:Write", "translations"}},
* collectionOperations={
* "get"={"security"="is_granted('IS_AUTHENTICATED_FULLY')"},
* "get_for_event"={
* "path"="/conferences/get-for-event",
* "method"="GET",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')"
* },
* "get_for_event_all"={
* "path"="/conferences/get-for-event-all",
* "method"="GET",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')",
* "normalization_context"={"groups"={"Conference:PRead"}, "skip_null_values"=false}
* },
* "get_for_select"={
* "path"="/conferences/get-for-select",
* "method"="GET",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')",
* "normalization_context"={"groups"={"Conference:Select"}, "skip_null_values"=false},
* "pagination_enabled"=false
* },
* "get_for_public_page"={
* "route_name"="api_pub_conferences_get_for_public_page_collection",
* "method"="GET",
* "security"="is_granted('PUBLIC_ACCESS')",
* "normalization_context"={"groups"={"Conference:PRead"}, "skip_null_values"=false},
* "pagination_enabled"=true
* },
* "get_all"={
* "path"="/conferences/get-all",
* "method"="GET",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')",
* "pagination_enabled"=false
* },
* "post"={"security"="is_granted('ROLE_OPERATOR')"},
* "post_clone"={
* "route_name"="api_conferences_clone_collection",
* "method"="POST",
* "denormalization_context"={"groups"={"Conference:Clone"}},
* "security"="is_granted('ROLE_OPERATOR')"
* },
* "post_certificate_prepare"={
* "route_name"="api_conferences_certificate_prepare",
* "method"="POST",
* "denormalization_context"={"groups"={"Conference:Clone"}},
* "security"="is_granted('ROLE_OPERATOR')"
* },
* "post_certificate_send"={
* "route_name"="api_conferences_certificate_send",
* "method"="POST",
* "denormalization_context"={"groups"={"Conference:Clone"}},
* "security"="is_granted('ROLE_OPERATOR')"
* }
* },
* itemOperations={
* "get"={
* "security"="is_granted('IS_CO_ANY', object)",
* "normalization_context"={"groups"={"Conference:Read", "Conference:SessionDate"}, "skip_null_values"=false},
* },
* "get_for_public_item_page"={
* "route_name"="api_pub_conferences_get_for_public_page_item",
* "method"="GET",
* "security"="is_granted('PUBLIC_ACCESS')",
* "normalization_context"={"groups"={"Conference:PRead"}, "skip_null_values"=false}
* },
* "put"={"security"="is_granted('IS_CO_OPR', object)"},
* "patch"={"security"="is_granted('IS_CO_OPR', object)"},
* "patch_register"={
* "route_name"="api_conferences_register",
* "method"="PATCH",
* "denormalization_context"={"groups"={"Conference:Register"}},
* "security"="is_granted('IS_AUTHENTICATED_FULLY')"
* },
* "patch_unregister"={
* "route_name"="api_conferences_unregister",
* "method"="PATCH",
* "denormalization_context"={"groups"={"Conference:Unregister"}},
* "security"="is_granted('IS_AUTHENTICATED_FULLY')"
* },
* "delete"={"security"="is_granted('IS_CO_OPR', object)"}
* }
* )
* @ApiFilter(SearchFilter::class, properties={"container.id": "exact", "conferenceTags.id": "exact", "conferenceCategory.id": "exact", "certificateTemplate.id": "exact", "translations.title": "partial", "companies.id": "exact", "conferenceCredits.creditCategory.id": "exact", "conferenceLanguage": "exact", "speakers.id": "exact", "companies.id": "exact"})
* @ApiFilter(SearchWithTagFilter::class, properties={"search_with_tag": "partial"})
* @ApiFilter(DateFilter::class, properties={"startAt", "endAt"})
* @ApiFilter(BooleanFilter::class, properties={"isCertificate", "isRegisterEnable"})
* @ApiFilter(ConferenceArchiveFilter::class, properties={"is_archive"})
* @ApiFilter(OrderFilter::class, properties={"id", "startAt", "translations.title": "ASC", "ord"})
* @ORM\Entity(repositoryClass=ConferenceRepository::class)
* @EsElasticIndex("Conference:EL")
*/
class Conference extends AbstractTranslatable implements ContainerMappedInterface, UploadMappedInterface, NewsfeedAssetCreatorInterface, ElasticMappedInterface
{
/**
* Hook timestampable behavior
* updates createdAt, updatedAt fields
*/
use TimestampableEntity;
/**
* @ORM\OneToMany(targetEntity="ConferenceTranslation", mappedBy="translatable", fetch="EXTRA_LAZY", indexBy="locale", cascade={"PERSIST"}, orphanRemoval=true)
*
* @Groups({"Conference:EL", "Conference:Write", "translations", "Session:VideoLibrary", "Conference:PRead"})
* @Assert\Valid()
*/
protected $translations;
/**
* @Groups({"Conference:Select", "Conference:Read", "Conference:PRead", "Session:Read-Watched", "Session:Read", "Session:GetItemDetail", "Session:VideoGallery", "Session:VideoLibrary", "Certificate:Read"})
*/
private $title;
/**
* @Groups({"Conference:Read", "Conference:PRead"})
*/
private $description;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"Conference:EL", "Conference:Select", "Conference:Read", "Conference:PRead", "Session:Read", "Session:GetItemDetail", "VoteQuestion:Read", "Session:VideoGallery", "Certificate:Read"})
*/
private $id;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*
* @Groups({"Conference:EL", "Conference:Select", "Conference:Read", "Conference:PRead", "Conference:Write"})
*
* @Assert\Length(max=255, maxMessage="validation.conference:imageName.max")
* @EsUploadable()
*/
protected $imageName;
/**
* @ORM\Column(type="boolean")
*
* @Groups({"Conference:Read", "Conference:Write"})
*
* @Assert\Type(type="bool", message="validation.conference:isVisible.typeBool")
*/
private $isVisible;
/**
* @ORM\ManyToOne(targetEntity=Container::class)
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
*
* @Groups({"Conference:Read", "Conference:PRead", "Conference:Write"})
*/
private $container;
/**
* @ORM\OneToMany(targetEntity=Session::class, mappedBy="conference", orphanRemoval=true)
*/
private $sessions;
/**
* @ORM\ManyToMany(targetEntity=ConferenceTag::class, inversedBy="conferences", cascade={"persist"})
*
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $conferenceTags;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @Groups({"Conference:EL", "Conference:Read", "Conference:PRead", "Session:VideoGallery"})
*/
private $startAt;
/**
* @Groups({"Conference:Clone"})
*/
private int $cloneId;
private $sessionDates = false;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @Groups({"Conference:EL", "Conference:Read", "Conference:PRead", "Session:VideoGallery"})
*/
private $endAt;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"Conference:Write", "Conference:Read"})
*/
private $isReminderBeforeStart;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"Conference:Write", "Conference:Read"})
*/
private $reminderBeforeStart;
/**
* @ORM\ManyToMany(targetEntity=User::class)
* @ORM\JoinTable(name="rel_conference_speaker")
* @Groups({"Conference:EL", "Conference:Write", "Conference:Read", "Conference:PRead"})
* @ORM\OrderBy({"lastName" = "ASC"})
*/
private $speakers;
/**
* @ORM\ManyToMany(targetEntity=User::class)
* @ORM\JoinTable(name="rel_conference_moderator")
* @Groups({"Conference:EL", "Conference:Write", "Conference:Read", "Conference:PRead"})
* @ORM\OrderBy({"lastName" = "ASC"})
*/
private $moderators;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"Conference:Read", "Conference:Write"})
*/
private $ord;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"Conference:Read", "Conference:Write"})
*/
private $isShowPublic;
/**
* @ORM\ManyToOne(targetEntity=CommonCategory::class)
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $conferenceCategory;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"Conference:Read", "Conference:PRead"})
*/
private $isLive;
/**
* @ORM\ManyToMany(targetEntity=UserGroup::class, inversedBy="conferences")
* @Groups({"Conference:Read", "Conference:Write"})
*/
private $userGroups;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Session:Read"})
*/
private $isUseUserGroup;
/**
* @Groups({"Conference:Write"})
*/
private $isUserGroupChange;
/**
* @ORM\Column(type="array", nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $bulletPoints = [];
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $isCertificate;
/**
* @ORM\ManyToOne(targetEntity=CertificateTemplate::class)
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
* @Groups({"Conference:Read", "Conference:Write"})
*/
private $certificateTemplate;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"Conference:Read", "Conference:Write"})
*/
private $watchTime;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $oldId;
/**
* @ORM\Column(type="string", length=64, nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead", "Session:Read", "Session:GetItemDetail"})
*/
private $timezone;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead", "Session:GetItemDetail"})
*/
private $isRegisterEnable;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $totalSeats;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"Conference:Read", "Conference:PRead"})
*/
private $availableSeats;
/**
* @ORM\ManyToMany(targetEntity=User::class, inversedBy="registeredToConferences")
*/
private $registeredUsers;
/**
* @Groups({"Conference:Unregister"})
*/
private $unregisterUserId;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"Conference:Read", "Conference:Write"})
*/
private $isCertificateForReply;
/**
* @ORM\OneToMany(targetEntity=ConferenceCredit::class, mappedBy="conference", orphanRemoval=true, cascade={"persist"})
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $conferenceCredits;
/**
* @ORM\Column(type="string", length=64, nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $conferenceLanguage;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"Conference:Read", "Conference:Write", "Conference:PRead"})
*/
private $location;
/**
* @ORM\ManyToMany(targetEntity=Company::class)
* @Groups({"Conference:Write", "Conference:Read", "Conference:PRead", "Session:GetItemDetail"})
*/
private $companies;
public function __construct()
{
parent::__construct();
$this->sessions = new ArrayCollection();
$this->conferenceTags = new ArrayCollection();
$this->speakers = new ArrayCollection();
$this->moderators = new ArrayCollection();
$this->userGroups = new ArrayCollection();
$bulletPointModel = new BulletPoint();
$this->bulletPoints = $bulletPointModel->getProperties();
$this->registeredUsers = new ArrayCollection();
$this->conferenceCredits = new ArrayCollection();
$this->companies = new ArrayCollection();
}
protected function createTranslation(): TranslationInterface
{
return new ConferenceTranslation();
}
public function addTranslation(TranslationInterface $translation): void
{
$this->setUpdatedAt(new \DateTime());
parent::addTranslation($translation);
}
public function getTitle(): ?string
{
return $this->getTranslation()->getTitle();
}
public function setTitle(string $title): self
{
$this->getTranslation()->setTitle($title);
return $this;
}
public function getDescription(): ?string
{
return $this->getTranslation()->getDescription();
}
public function setDescription(string $description): self
{
$this->getTranslation()->setDescription($description);
return $this;
}
public function getId(): ?int
{
return $this->id;
}
public function getImageName(): ?string
{
return $this->imageName;
}
public function setImageName(?string $imageName): self
{
$this->imageName = $imageName;
return $this;
}
public function getIsVisible(): ?bool
{
return $this->isVisible;
}
public function setIsVisible(bool $isVisible): self
{
$this->isVisible = $isVisible;
return $this;
}
public function getContainer(): ?Container
{
return $this->container;
}
public function setContainer(?Container $container): self
{
$this->container = $container;
return $this;
}
/**
* @return Collection|Session[]
*/
public function getSessions()
{
return $this->sessions;
}
public function addSession(Session $session): self
{
if (!$this->sessions->contains($session)) {
$this->sessions[] = $session;
$session->setConference($this);
}
return $this;
}
public function removeSession(Session $session): self
{
if ($this->sessions->removeElement($session)) {
// set the owning side to null (unless already changed)
if ($session->getConference() === $this) {
$session->setConference(null);
}
}
return $this;
}
/**
* @return Collection|ConferenceTag[]
*/
public function getConferenceTags()
{
return $this->conferenceTags;
}
/**
* @Groups({"Conference:EL"})
* @SerializedName("tags")
*/
public function getTagsArray()
{
$tags = [];
foreach ($this->conferenceTags as $tag) {
$tags[] = $tag->getName();
}
return $tags;
}
public function addConferenceTag(ConferenceTag $conferenceTag): self
{
if (!$this->conferenceTags->contains($conferenceTag)) {
$this->conferenceTags[] = $conferenceTag;
}
return $this;
}
public function removeConferenceTag(ConferenceTag $conferenceTag): self
{
$this->conferenceTags->removeElement($conferenceTag);
return $this;
}
public function removeAllConferenceTags(): self
{
foreach ($this->conferenceTags as $tag) {
$this->removeConferenceTag($tag);
}
return $this;
}
public function reAttachTags(): self
{
$tags = $this->conferenceTags;
foreach ($tags as $tag) {
$nt = clone $tag;
$nt->setContainer($this->getContainer());
$this->removeConferenceTag($tag);
$this->addConferenceTag($nt);
}
return $this;
}
public function getStartAt(): ?\DateTimeInterface
{
return $this->startAt;
}
public function setStartAt(?\DateTimeInterface $startAt): self
{
$this->startAt = $startAt;
return $this;
}
public function getCloneId()
{
return $this->cloneId;
}
public function setCloneId($cloneId)
{
$this->cloneId = $cloneId;
return $this;
}
/**
* @Groups({"Conference:SessionDate"})
*/
public function getSessionDates(): array
{
if (is_array($this->sessionDates) && count($this->sessionDates) > 0) {
return $this->sessionDates;
}
return [];
/*
$dates = [];
$sessions = $this->getSessions();
foreach ($sessions as $session) {
$start = clone $session->getStart();
//$start->setTimezone(new \DateTimeZone('UTC'));
//$start->setTime(0, 0, 0);
if (!isset($dates[$start->format('Ymd')])) {
$dates[$start->format('Ymd')] = $start;
}
}
return $dates;
*/
}
public function setSessionDates($sessionDates)
{
$this->sessionDates = $sessionDates;
}
public function getEndAt(): ?\DateTimeInterface
{
return $this->endAt;
}
public function setEndAt(?\DateTimeInterface $endAt): self
{
$this->endAt = $endAt;
return $this;
}
/**
* @Groups({"Conference:Read"})
*/
public function getCurrentTime()
{
return new \DateTime();
}
/**
* @Groups({"Conference:Read", "Conference:PRead"})
*/
/*
public function getIsLive()
{
if (!$this->startAt || !$this->endAt) {
return false;
}
$ct = EsUtil::convertToUTCTime(new \DateTime());
$s = EsUtil::convertToUTCTime(clone $this->startAt);
$e = EsUtil::convertToUTCTime(clone $this->endAt);
return ($s && $e && $ct >= $s && $ct < $e);
}
*/
/**
* @Groups({"Conference:Read", "Session:GetItemDetail"})
*/
public function getIsArchive()
{
if ($this->getEndAt() && $this->getCurrentTime() > $this->getEndAt()) {
return true;
}
return false;
}
public function getIsReminderBeforeStart(): ?bool
{
return $this->isReminderBeforeStart;
}
public function setIsReminderBeforeStart(?bool $isReminderBeforeStart): self
{
$this->isReminderBeforeStart = $isReminderBeforeStart;
return $this;
}
public function getReminderBeforeStart(): ?int
{
return $this->reminderBeforeStart;
}
public function setReminderBeforeStart(?int $reminderBeforeStart): self
{
$this->reminderBeforeStart = $reminderBeforeStart;
return $this;
}
/**
* @return Collection|User[]
*/
public function getSpeakers(): Collection
{
return $this->speakers;
}
public function addSpeaker(User $speaker): self
{
if (!$this->speakers->contains($speaker)) {
$this->speakers[] = $speaker;
}
return $this;
}
public function removeSpeaker(User $speaker): self
{
$this->speakers->removeElement($speaker);
return $this;
}
public function removeAllSpeakers(): self
{
foreach ($this->speakers as $speaker) {
$this->speakers->removeElement($speaker);
}
return $this;
}
/**
* @return Collection|User[]
*/
public function getModerators(): Collection
{
return $this->moderators;
}
public function addModerator(User $moderator): self
{
if (!$this->moderators->contains($moderator)) {
$this->moderators[] = $moderator;
}
return $this;
}
public function removeModerator(User $moderator): self
{
$this->moderators->removeElement($moderator);
return $this;
}
public function removeAllModerators(): self
{
foreach ($this->moderators as $moderator) {
$this->moderators->removeElement($moderator);
}
return $this;
}
public function getClone(Conference $source = null): self
{
if (empty($source)) {
$source = $this;
}
$target = new Conference();
$target
->setStartAt($source->getStartAt())
->setEndAt($source->getEndAt())
->setImageName($source->getImageName())
->setIsVisible($source->getIsVisible())
->setIsReminderBeforeStart($source->getIsReminderBeforeStart())
->setReminderBeforeStart($source->getReminderBeforeStart())
->setContainer($source->getContainer())
->setConferenceCategory($source->getConferenceCategory())
->setIsLive($source->getIsLive())
->setBulletPoints($source->getBulletPoints())
->setTimezone($source->getTimezone())
;
foreach ($source->getTranslations() as $s) {
$newT = new ConferenceTranslation();
$newT
->setTitle($s->getTitle().' (copy)')
->setDescription($s->getDescription())
->setLocale($s->getLocale())
;
$target->addTranslation($newT);
}
foreach ($source->getSpeakers() as $s) {
$target->addSpeaker($s);
}
foreach ($source->getModerators() as $s) {
$target->addModerator($s);
}
foreach ($source->getConferenceTags() as $s) {
$target->addConferenceTag($s);
}
$target->setIsUseUserGroup($source->getIsUseUserGroup());
foreach ($source->getUserGroups() as $s) {
$target->addUserGroup($s);
}
return $target;
}
public function getOrd(): ?int
{
return $this->ord;
}
public function setOrd(?int $ord): self
{
$this->ord = $ord;
return $this;
}
public function getIsShowPublic(): ?bool
{
return $this->isShowPublic;
}
public function setIsShowPublic(?bool $isShowPublic): self
{
$this->isShowPublic = $isShowPublic;
return $this;
}
public function getConferenceCategory(): ?CommonCategory
{
return $this->conferenceCategory;
}
public function setConferenceCategory(?CommonCategory $conferenceCategory): self
{
$this->conferenceCategory = $conferenceCategory;
return $this;
}
public function getIsLive(): ?bool
{
return $this->isLive;
}
public function setIsLive(?bool $isLive): self
{
$this->isLive = $isLive;
return $this;
}
/**
* @return Collection<int, UserGroup>
*/
public function getUserGroups(): Collection
{
return $this->userGroups;
}
/**
* @Groups({"Conference:EL"})
* @SerializedName("groups")
*/
public function getUserGroupsArray()
{
$groups = [];
foreach ($this->userGroups as $group) {
if (!$group->getIsGenerated()) {
$groups[] = $group->getId();
}
}
return $groups;
}
public function addUserGroup(UserGroup $userGroup): self
{
if (!$this->userGroups->contains($userGroup)) {
$this->userGroups[] = $userGroup;
}
return $this;
}
public function removeUserGroup(UserGroup $userGroup): self
{
$this->userGroups->removeElement($userGroup);
return $this;
}
public function removeAllUserGroups(): self
{
foreach ($this->userGroups as $userGroup) {
$this->removeUserGroup($userGroup);
}
return $this;
}
public function getIsUseUserGroup(): ?bool
{
return $this->isUseUserGroup;
}
public function setIsUseUserGroup(?bool $isUseUserGroup): self
{
$this->isUseUserGroup = $isUseUserGroup;
return $this;
}
public function getIsUserGroupChange()
{
return $this->isUserGroupChange;
}
public function setIsUserGroupChange($isUserGroupChange)
{
$this->isUserGroupChange = $isUserGroupChange;
return $this;
}
public function getBulletPoints(): ?array
{
if ($this->bulletPoints === null) {
$this->bulletPoints = [];
}
return $this->bulletPoints;
}
public function setBulletPoints(?array $bulletPoints): self
{
if (!is_array($bulletPoints)) {
return $this;
}
$this->bulletPoints = $bulletPoints;
return $this;
}
public function getAllBulletPoints($locale = 'en')
{
$bp = [];
foreach ($this->bulletPoints as $c) {
if (isset($c['translations'])) {
foreach ($c['translations'] as $t) {
if ($t['locale'] === $locale) {
$bp[] = $t['info'];
}
}
}
}
return implode('</br>', $bp);
}
public function getIsCertificate(): ?bool
{
return $this->isCertificate;
}
public function setIsCertificate(?bool $isCertificate): self
{
$this->isCertificate = $isCertificate;
return $this;
}
public function getCertificateTemplate(): ?CertificateTemplate
{
return $this->certificateTemplate;
}
public function setCertificateTemplate(?CertificateTemplate $certificateTemplate): self
{
$this->certificateTemplate = $certificateTemplate;
return $this;
}
public function getWatchTime(): ?int
{
return $this->watchTime;
}
public function setWatchTime(?int $watchTime): self
{
$this->watchTime = $watchTime;
return $this;
}
public function getIsPostEnable()
{
return true;
}
public function getPostPoster()
{
return $this->getImageName();
}
public function getMetadataTranslation()
{
$translations = [];
foreach ($this->getTranslations() as $translation) {
$translations[] = [
$translation->getLocale() => [
'title' => $translation->getTitle(),
'description' => $translation->getDescription()
]
];
}
return $translations;
}
public function getPostMetadata()
{
return [
'conference' => [
'id' => $this->getId(),
'translations' => $this->getMetadataTranslation(),
'tags' => $this->getTagsArray(),
'conferenceCategory' => $this->getConferenceCategory() ? $this->getConferenceCategory()->getMeta() : null
]
];
}
public function getPostUserGroups()
{
return $this->getUserGroups();
}
public function getPostSubSource()
{
return Newsfeed::POSTSUBTYPE_CONFERENCE;
}
public function getOldId(): ?int
{
return $this->oldId;
}
public function setOldId(?int $oldId): self
{
$this->oldId = $oldId;
return $this;
}
public function getTimezone(): ?string
{
return $this->timezone;
}
public function setTimezone(?string $timezone): self
{
$this->timezone = $timezone;
return $this;
}
public function getIsRegisterEnable(): ?bool
{
return $this->isRegisterEnable;
}
public function setIsRegisterEnable(?bool $isRegisterEnable): self
{
$this->isRegisterEnable = $isRegisterEnable;
return $this;
}
public function getTotalSeats(): ?int
{
return $this->totalSeats;
}
public function setTotalSeats(?int $totalSeats): self
{
$this->totalSeats = $totalSeats;
$this->calculateAvailableSeats();
return $this;
}
public function getAvailableSeats(): ?int
{
return $this->availableSeats;
}
public function setAvailableSeats(?int $availableSeats): self
{
$this->availableSeats = $availableSeats;
return $this;
}
/**
* @return Collection<int, User>
*/
public function getRegisteredUsers(): Collection
{
return $this->registeredUsers;
}
public function addRegisteredUser(User $registeredUser): self
{
if (!$this->registeredUsers->contains($registeredUser)) {
$this->registeredUsers[] = $registeredUser;
}
$this->calculateAvailableSeats();
return $this;
}
public function removeRegisteredUser(User $registeredUser): self
{
$this->registeredUsers->removeElement($registeredUser);
$this->calculateAvailableSeats();
return $this;
}
public function hasRegisteredUser(User $registeredUser): bool
{
return $this->registeredUsers->contains($registeredUser);
}
public function calculateAvailableSeats()
{
$totalRegistered = $this->registeredUsers?->count();
$this->setAvailableSeats($this->totalSeats - $totalRegistered);
}
public function getUnregisterUserId()
{
return $this->unregisterUserId;
}
public function setUnregisterUserId($unregisterUserId): self
{
$this->unregisterUserId = $unregisterUserId;
return $this;
}
public function getIsCertificateForReply(): ?bool
{
return $this->isCertificateForReply;
}
public function setIsCertificateForReply(?bool $isCertificateForReply): self
{
$this->isCertificateForReply = $isCertificateForReply;
return $this;
}
/**
* @Groups({"Conference:EL"})
*/
public function getCntId()
{
return $this->container->getId();
}
/**
* @Groups({"Conference:EL"})
*/
public function getCategory()
{
return $this->getConferenceCategory();
}
/**
* @return Collection<int, ConferenceCredit>
*/
public function getConferenceCredits(): Collection
{
return $this->conferenceCredits;
}
public function addConferenceCredit(ConferenceCredit $conferenceCredit): self
{
if (!$this->conferenceCredits->contains($conferenceCredit)) {
$this->conferenceCredits[] = $conferenceCredit;
$conferenceCredit->setConference($this);
}
return $this;
}
public function removeConferenceCredit(ConferenceCredit $conferenceCredit): self
{
// if ($this->conferenceCredits->removeElement($conferenceCredit)) {
// // set the owning side to null (unless already changed)
// if ($conferenceCredit->getConference() === $this) {
// $conferenceCredit->setConference(null);
// }
// }
$this->conferenceCredits->removeElement($conferenceCredit);
return $this;
}
public function getTotalCredit()
{
$total = 0.0;
foreach ($this->conferenceCredits as $c) {
$total += (float) $c->getCreditPoint();
}
return $total;
}
public function getAllCredit()
{
$allCredit = [];
foreach ($this->conferenceCredits as $c) {
$allCredit[] = $c->getCreditCategory()->getName().': '.$c->getCreditPoint();
}
return implode('</br>', $allCredit);
}
public function getConferenceLanguage(): ?string
{
return $this->conferenceLanguage;
}
public function setConferenceLanguage(?string $conferenceLanguage): self
{
$this->conferenceLanguage = $conferenceLanguage;
return $this;
}
public function getLocation(): ?string
{
return $this->location;
}
public function setLocation(?string $location): self
{
$this->location = $location;
return $this;
}
/**
* @return Collection<int, Company>
*/
public function getCompanies(): Collection
{
return $this->companies;
}
public function addCompany(Company $company): self
{
if (!$this->companies->contains($company)) {
$this->companies[] = $company;
}
return $this;
}
public function removeCompany(Company $company): self
{
$this->companies->removeElement($company);
return $this;
}
}