addType('userId', 'string'); $this->addType('firstDay', 'string'); $this->addType('lastDay', 'string'); $this->addType('status', 'string'); $this->addType('message', 'string'); $this->addType('replacementUserId', 'string'); $this->addType('replacementUserDisplayName', 'string'); } public function toOutOufOfficeData(IUser $user, string $timezone): IOutOfOfficeData { if ($user->getUID() !== $this->getUserId()) { throw new InvalidArgumentException("The user doesn't match the user id of this absence! Expected " . $this->getUserId() . ", got " . $user->getUID()); } if ($this->getId() === null) { throw new Exception('Creating out-of-office data without ID'); } $tz = new \DateTimeZone($timezone); $startDate = new DateTime($this->getFirstDay(), $tz); $endDate = new DateTime($this->getLastDay(), $tz); $endDate->setTime(23, 59); return new OutOfOfficeData( (string)$this->getId(), $user, $startDate->getTimestamp(), $endDate->getTimestamp(), $this->getStatus(), $this->getMessage(), $this->getReplacementUserId(), $this->getReplacementUserDisplayName(), ); } public function jsonSerialize(): array { return [ 'userId' => $this->userId, 'firstDay' => $this->firstDay, 'lastDay' => $this->lastDay, 'status' => $this->status, 'message' => $this->message, 'replacementUserId' => $this->replacementUserId, 'replacementUserDisplayName' => $this->replacementUserDisplayName, ]; } }