From 1dc68f97c500084ee8c34d4229a6bd38a0da9d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Fri, 7 Dec 2018 16:33:49 +0100 Subject: [PATCH] Use proper timezone and locale format for due date activities MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- js/controller/ActivityController.js | 10 +++++++-- lib/Activity/DeckProvider.php | 28 +++++++++++++++++++++++- templates/part.card.activity.html | 2 +- tests/unit/Activity/DeckProviderTest.php | 6 ++++- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/js/controller/ActivityController.js b/js/controller/ActivityController.js index cfb348cc5..4740bd4d1 100644 --- a/js/controller/ActivityController.js +++ b/js/controller/ActivityController.js @@ -20,7 +20,7 @@ * */ -/* global OC OCA OCP t escapeHTML Handlebars */ +/* global OC OCA OCP t escapeHTML Handlebars moment */ import CommentCollection from '../legacy/commentcollection'; import CommentModel from '../legacy/commentmodel'; @@ -279,7 +279,13 @@ class ActivityController { return this.activityservice.getData(this.type, id); } - parseMessage(subject, parameters) { + parseMessage(activity) { + let subject = activity.subject_rich[0]; + let parameters = activity.subject_rich[1]; + if (parameters.after && parameters.after.id && parameters.after.id.startsWith('dt:')) { + let dateTime = parameters.after.id.substr(3); + parameters.after.name = moment(dateTime).format('L LTS'); + } return OCA.Activity.RichObjectStringParser.parseMessage(subject, parameters); } diff --git a/lib/Activity/DeckProvider.php b/lib/Activity/DeckProvider.php index c99bbe468..fff6c9a7e 100644 --- a/lib/Activity/DeckProvider.php +++ b/lib/Activity/DeckProvider.php @@ -31,8 +31,10 @@ use OCP\Activity\IProvider; use OCP\Comments\IComment; use OCP\Comments\ICommentsManager; use OCP\Comments\NotFoundException; +use OCP\IConfig; use OCP\IURLGenerator; use OCP\IUserManager; +use OCP\L10N\IFactory; class DeckProvider implements IProvider { @@ -46,13 +48,19 @@ class DeckProvider implements IProvider { private $userManager; /** @var ICommentsManager */ private $commentsManager; + /** @var IFactory */ + private $l10nFactory; + /** @var IConfig */ + private $config; - public function __construct(IURLGenerator $urlGenerator, ActivityManager $activityManager, IUserManager $userManager, ICommentsManager $commentsManager, $userId) { + public function __construct(IURLGenerator $urlGenerator, ActivityManager $activityManager, IUserManager $userManager, ICommentsManager $commentsManager, IFactory $l10n, IConfig $config, $userId) { $this->userId = $userId; $this->urlGenerator = $urlGenerator; $this->activityManager = $activityManager; $this->commentsManager = $commentsManager; $this->userManager = $userManager; + $this->l10nFactory = $l10n; + $this->config = $config; } /** @@ -94,6 +102,7 @@ class DeckProvider implements IProvider { 'name' => $user !== null ? $user->getDisplayName() : $author ], ]; + $event->setAuthor($author); if ($event->getObjectType() === ActivityManager::DECK_OBJECT_BOARD) { if ($event->getObjectName() === '') { $event->setObject($event->getObjectType(), $event->getObjectId(), $subjectParams['board']['title']); @@ -133,6 +142,7 @@ class DeckProvider implements IProvider { $params = $this->parseParamForAcl($subjectParams, $params); $params = $this->parseParamForChanges($subjectParams, $params, $event); $params = $this->parseParamForComment($subjectParams, $params, $event); + $params = $this->parseParamForDuedate($subjectParams, $params, $event); try { $subject = $this->activityManager->getActivityFormat($subjectIdentifier, $subjectParams, $ownActivity); @@ -279,6 +289,22 @@ class DeckProvider implements IProvider { return $params; } + private function parseParamForDuedate($subjectParams, $params, IEvent $event) { + if (array_key_exists('after', $subjectParams) && $event->getSubject() === ActivityManager::SUBJECT_CARD_UPDATE_DUEDATE) { + $userLanguage = $this->config->getUserValue($event->getAuthor(), 'core', 'lang', $this->l10nFactory->findLanguage()); + $userLocale = $this->config->getUserValue($event->getAuthor(), 'core', 'locale', $this->l10nFactory->findLocale()); + $l10n = $this->l10nFactory->get('deck', $userLanguage, $userLocale); + $date = new \DateTime($subjectParams['after']); + $date->setTimezone(new \DateTimeZone(\date_default_timezone_get())); + $params['after'] = [ + 'type' => 'highlight', + 'id' => 'dt:' . $subjectParams['after'], + 'name' => $l10n->l('datetime', $date) + ]; + } + return $params; + } + /** * Add diff to message if the subject parameter 'diff' is set, otherwise * the changed values are added to before/after diff --git a/templates/part.card.activity.html b/templates/part.card.activity.html index be0163b11..a4db25167 100644 --- a/templates/part.card.activity.html +++ b/templates/part.card.activity.html @@ -20,7 +20,7 @@ {{ activity.timestamp/1000 | relativeDateFilter }} -
+
{{ activity.subject_rich[1].user.name }}
diff --git a/tests/unit/Activity/DeckProviderTest.php b/tests/unit/Activity/DeckProviderTest.php index 2c405ff1f..746764ff6 100644 --- a/tests/unit/Activity/DeckProviderTest.php +++ b/tests/unit/Activity/DeckProviderTest.php @@ -28,10 +28,12 @@ use OCA\Deck\Db\Acl; use OCP\Activity\IEvent; use OCP\Comments\IComment; use OCP\Comments\ICommentsManager; +use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; +use OCP\L10N\IFactory; use OCP\RichObjectStrings\IValidator; use PHPUnit\Framework\TestCase; use PHPUnit_Framework_MockObject_MockObject as MockObject; @@ -62,7 +64,9 @@ class DeckProviderTest extends TestCase { $this->activityManager = $this->createMock(ActivityManager::class); $this->userManager = $this->createMock(IUserManager::class); $this->commentsManager = $this->createMock(ICommentsManager::class); - $this->provider = new DeckProvider($this->urlGenerator, $this->activityManager, $this->userManager, $this->commentsManager, $this->userId); + $this->l10nFactory = $this->createMock(IFactory::class); + $this->config = $this->createMock(IConfig::class); + $this->provider = new DeckProvider($this->urlGenerator, $this->activityManager, $this->userManager, $this->commentsManager, $this->l10nFactory, $this->config, $this->userId); } private function mockEvent($objectType, $objectId, $objectName, $subject, $subjectParameters = []) {