* * @author Julius Härtl * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ namespace OCA\Deck\Db; use DateTime; class Card extends RelationalEntity { protected $title; protected $description; protected $descriptionPrev; protected $stackId; protected $type; protected $lastModified; protected $lastEditor; protected $createdAt; protected $labels; protected $assignedUsers; protected $attachments; protected $attachmentCount; protected $owner; protected $order; protected $archived = false; protected $duedate; protected $notified = false; protected $deletedAt = 0; protected $commentsUnread = 0; private $databaseType = 'sqlite'; public const DUEDATE_FUTURE = 0; public const DUEDATE_NEXT = 1; public const DUEDATE_NOW = 2; public const DUEDATE_OVERDUE = 3; public function __construct() { $this->addType('id', 'integer'); $this->addType('stackId', 'integer'); $this->addType('order', 'integer'); $this->addType('lastModified', 'integer'); $this->addType('createdAt', 'integer'); $this->addType('archived', 'boolean'); $this->addType('notified', 'boolean'); $this->addType('deletedAt', 'integer'); $this->addRelation('labels'); $this->addRelation('assignedUsers'); $this->addRelation('attachments'); $this->addRelation('attachmentCount'); $this->addRelation('participants'); $this->addRelation('commentsUnread'); $this->addResolvable('owner'); } public function setDatabaseType($type) { $this->databaseType = $type; } public function getDuedate($isoFormat = false) { if ($this->duedate === null) { return null; } $dt = new DateTime($this->duedate); if (!$isoFormat && $this->databaseType === 'mysql') { return $dt->format('Y-m-d H:i:s'); } return $dt->format('c'); } public function jsonSerialize() { $json = parent::jsonSerialize(); $json['overdue'] = self::DUEDATE_FUTURE; $due = strtotime($this->duedate); $today = new DateTime(); $today->setTime(0, 0); $match_date = new DateTime($this->duedate); $match_date->setTime(0, 0); $diff = $today->diff($match_date); $diffDays = (integer) $diff->format('%R%a'); // Extract days count in interval if ($due !== false) { if ($diffDays === 1) { $json['overdue'] = self::DUEDATE_NEXT; } if ($diffDays === 0) { $json['overdue'] = self::DUEDATE_NOW; } if ($diffDays < 0) { $json['overdue'] = self::DUEDATE_OVERDUE; } } $json['duedate'] = $this->getDuedate(true); unset($json['notified']); unset($json['descriptionPrev']); return $json; } }