123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <?php
- declare(strict_types=1);
- namespace OCA\UserStatus\Service;
- use OCP\IL10N;
- use OCP\UserStatus\IUserStatus;
- class PredefinedStatusService {
- private const MEETING = 'meeting';
- private const COMMUTING = 'commuting';
- private const SICK_LEAVE = 'sick-leave';
- private const VACATIONING = 'vacationing';
- private const REMOTE_WORK = 'remote-work';
-
- public const CALL = 'call';
- public const OUT_OF_OFFICE = 'out-of-office';
-
- private $l10n;
-
- public function __construct(IL10N $l10n) {
- $this->l10n = $l10n;
- }
-
- public function getDefaultStatuses(): array {
- return [
- [
- 'id' => self::MEETING,
- 'icon' => '📅',
- 'message' => $this->getTranslatedStatusForId(self::MEETING),
- 'clearAt' => [
- 'type' => 'period',
- 'time' => 3600,
- ],
- ],
- [
- 'id' => self::COMMUTING,
- 'icon' => '🚌',
- 'message' => $this->getTranslatedStatusForId(self::COMMUTING),
- 'clearAt' => [
- 'type' => 'period',
- 'time' => 1800,
- ],
- ],
- [
- 'id' => self::REMOTE_WORK,
- 'icon' => '🏡',
- 'message' => $this->getTranslatedStatusForId(self::REMOTE_WORK),
- 'clearAt' => [
- 'type' => 'end-of',
- 'time' => 'day',
- ],
- ],
- [
- 'id' => self::SICK_LEAVE,
- 'icon' => '🤒',
- 'message' => $this->getTranslatedStatusForId(self::SICK_LEAVE),
- 'clearAt' => [
- 'type' => 'end-of',
- 'time' => 'day',
- ],
- ],
- [
- 'id' => self::VACATIONING,
- 'icon' => '🌴',
- 'message' => $this->getTranslatedStatusForId(self::VACATIONING),
- 'clearAt' => null,
- ],
- [
- 'id' => self::CALL,
- 'icon' => '💬',
- 'message' => $this->getTranslatedStatusForId(self::CALL),
- 'clearAt' => null,
- 'visible' => false,
- ],
- [
- 'id' => self::OUT_OF_OFFICE,
- 'icon' => '🛑',
- 'message' => $this->getTranslatedStatusForId(self::OUT_OF_OFFICE),
- 'clearAt' => null,
- 'visible' => false,
- ],
- ];
- }
-
- public function getDefaultStatusById(string $id): ?array {
- foreach ($this->getDefaultStatuses() as $status) {
- if ($status['id'] === $id) {
- return $status;
- }
- }
- return null;
- }
-
- public function getIconForId(string $id): ?string {
- switch ($id) {
- case self::MEETING:
- return '📅';
- case self::COMMUTING:
- return '🚌';
- case self::SICK_LEAVE:
- return '🤒';
- case self::VACATIONING:
- return '🌴';
- case self::OUT_OF_OFFICE:
- return '🛑';
- case self::REMOTE_WORK:
- return '🏡';
- case self::CALL:
- return '💬';
- default:
- return null;
- }
- }
-
- public function getTranslatedStatusForId(string $id): ?string {
- switch ($id) {
- case self::MEETING:
- return $this->l10n->t('In a meeting');
- case self::COMMUTING:
- return $this->l10n->t('Commuting');
- case self::SICK_LEAVE:
- return $this->l10n->t('Out sick');
- case self::VACATIONING:
- return $this->l10n->t('Vacationing');
- case self::OUT_OF_OFFICE:
- return $this->l10n->t('Out of office');
- case self::REMOTE_WORK:
- return $this->l10n->t('Working remotely');
- case self::CALL:
- return $this->l10n->t('In a call');
- default:
- return null;
- }
- }
-
- public function isValidId(string $id): bool {
- return \in_array($id, [
- self::MEETING,
- self::COMMUTING,
- self::SICK_LEAVE,
- self::VACATIONING,
- self::OUT_OF_OFFICE,
- self::REMOTE_WORK,
- IUserStatus::MESSAGE_CALL,
- IUserStatus::MESSAGE_AVAILABILITY,
- IUserStatus::MESSAGE_VACATION,
- IUserStatus::MESSAGE_CALENDAR_BUSY,
- IUserStatus::MESSAGE_CALENDAR_BUSY_TENTATIVE,
- ], true);
- }
- }
|