getEvent()) { throw new \RuntimeException('The event is not linked with this instance. You should initialize the event with a valid center before.'); } return $this->getEvent()->getCenter(); } /** * Get event. */ public function getEvent(): Event|null { return $this->event; } /** * Get id. * * @return int */ public function getId() { return $this->id; } /** * Get lastUpdate. * * @return \DateTime */ public function getLastUpdate() { return $this->lastUpdate; } /** * Get person. * * @return Person */ public function getPerson() { return $this->person; } /** * Get role. */ public function getRole(): Role|null { return $this->role; } /** * @return Scope */ public function getScope() { if (null === $this->getEvent()) { throw new \RuntimeException('The event is not linked with this instance. You should initialize the event with a valid center before.'); } return $this->getEvent()->getCircle(); } /** * Get status. */ public function getStatus(): Status|null { return $this->status; } /** * Check that :. * * - the role can be associated with this event type * - the status can be associated with this event type */ public function isConsistent(ExecutionContextInterface $context) { if (null === $this->getEvent() || null === $this->getRole() || null === $this->getStatus()) { return; } if ( $this->getRole()->getType()->getId() !== $this->getEvent()->getType()->getId() ) { $context->buildViolation('The role is not allowed with this event type') ->atPath('role') ->addViolation(); } if ( $this->getStatus()->getType()->getId() !== $this->getEvent()->getType()->getId() ) { $context->buildViolation('The status is not allowed with this event type') ->atPath('status') ->addViolation(); } } public function offsetExists(mixed $offset): bool { return \in_array($offset, [ 'person', 'role', 'status', 'event', ], true); } /** * @return Event|Person|Role|Status */ public function offsetGet(mixed $offset): mixed { return match ($offset) { 'person' => $this->getPerson(), 'role' => $this->getRole(), 'status' => $this->getStatus(), 'event' => $this->getEvent(), default => throw new \LogicException('this offset does not exists : '.$offset), }; } public function offsetSet(mixed $offset, mixed $value): void { switch ($offset) { case 'person': $this->setPerson($value); break; case 'role': $this->setRole($value); break; case 'status': $this->setStatus($value); break; case 'event': $this->setEvent($value); break; } } public function offsetUnset(mixed $offset): void { $this->offsetSet($offset, null); } /** * Set event. * * @return Participation */ public function setEvent(?Event $event = null) { if ($this->event !== $event) { $this->update(); } $this->event = $event; return $this; } /** * Set person. * * @return Participation */ public function setPerson(?Person $person = null) { if ($person !== $this->person) { $this->update(); } $this->person = $person; return $this; } /** * Set role. * * @return Participation */ public function setRole(?Role $role = null) { if ($role !== $this->role) { $this->update(); } $this->role = $role; return $this; } /** * Set status. * * @return Participation */ public function setStatus(?Status $status = null) { if ($this->status !== $status) { $this->update(); } $this->status = $status; return $this; } /** * Set lastUpdate. * * @return Participation */ protected function update() { $this->lastUpdate = new \DateTime('now'); return $this; } }