diff --git a/core/modules/aggregator/src/Controller/AggregatorController.php b/core/modules/aggregator/src/Controller/AggregatorController.php index 13ff3d9ae131fb0f5770476c1e71b4e407a91455..1b3b99724001ea4dba15b48b1c5807656af350e9 100644 --- a/core/modules/aggregator/src/Controller/AggregatorController.php +++ b/core/modules/aggregator/src/Controller/AggregatorController.php @@ -127,8 +127,18 @@ public function adminOverview() { $row[] = $this->formatPlural($entity_manager->getStorage('aggregator_item')->getItemCount($feed), '1 item', '@count items'); $last_checked = $feed->getLastCheckedTime(); $refresh_rate = $feed->getRefreshRate(); - $row[] = ($last_checked ? $this->t('@time ago', array('@time' => $this->dateFormatter->formatTimeDiffSince($last_checked))) : $this->t('never')); - $row[] = ($last_checked && $refresh_rate ? $this->t('@time left', array('@time' => $this->dateFormatter->formatTimeDiffUntil($last_checked + $refresh_rate))) : $this->t('never')); + + $row[] = ($last_checked ? $this->t('@time ago', array('@time' => $this->dateFormatter->formatInterval(REQUEST_TIME - $last_checked))) : $this->t('never')); + if (!$last_checked && $refresh_rate) { + $next_update = $this->t('imminently'); + } + elseif ($last_checked && $refresh_rate) { + $next_update = $next = $this->t('%time left', array('%time' => $this->dateFormatter->formatInterval($last_checked + $refresh_rate - REQUEST_TIME))); + } + else { + $next_update = $this->t('never'); + } + $row[] = $next_update; $links['edit'] = [ 'title' => $this->t('Edit'), 'url' => Url::fromRoute('entity.aggregator_feed.edit_form', ['aggregator_feed' => $feed->id()]), diff --git a/core/modules/aggregator/src/Tests/FeedAdminDisplayTest.php b/core/modules/aggregator/src/Tests/FeedAdminDisplayTest.php new file mode 100644 index 0000000000000000000000000000000000000000..dee35eb06dc749e04e218b1517d8fecac885eb50 --- /dev/null +++ b/core/modules/aggregator/src/Tests/FeedAdminDisplayTest.php @@ -0,0 +1,67 @@ +createFeed(NULL, array('refresh' => '900')); + + $this->drupalGet('admin/config/services/aggregator'); + $this->assertResponse(200, 'Aggregator feed overview page exists.'); + + // The scheduled feed shows that it has not been updated yet and is + // scheduled. + $this->assertText('never', 'The scheduled feed has not been updated yet. Last update shows "never".'); + $this->assertText('imminently', 'The scheduled feed has not been updated yet. Next update shows "imminently".'); + $this->assertNoText('ago', 'The scheduled feed has not been updated yet. Last update does not show "x x ago".'); + $this->assertNoText('left', 'The scheduled feed has not been updated yet. Next update does not show "x x left".'); + + $this->updateFeedItems($scheduled_feed); + $this->drupalGet('admin/config/services/aggregator'); + + // After the update, an interval should be displayed on both last updated + // and next update. + $this->assertNoText('never', 'The scheduled feed has been updated. Last updated changed.'); + $this->assertNoText('imminently', 'The scheduled feed has been updated. Next update changed.'); + $this->assertText('ago', 'The scheduled feed been updated. Last update shows "x x ago".'); + $this->assertText('left', 'The scheduled feed has been updated. Next update shows "x x left".'); + + // Delete scheduled feed. + $this->deleteFeed($scheduled_feed); + + // Create non-scheduled feed. + $non_scheduled_feed = $this->createFeed(NULL, array('refresh' => '0')); + + $this->drupalGet('admin/config/services/aggregator'); + // The non scheduled feed shows that it has not been updated yet. + $this->assertText('never', 'The non scheduled feed has not been updated yet. Last update shows "never".'); + $this->assertNoText('imminently', 'The non scheduled feed does not show "imminently" as next update.'); + $this->assertNoText('ago', 'The non scheduled feed has not been updated. It does not show "x x ago" as last update.'); + $this->assertNoText('left', 'The feed is not scheduled. It does not show a timeframe "x x left" for next update.'); + + $this->updateFeedItems($non_scheduled_feed); + $this->drupalGet('admin/config/services/aggregator'); + + // After the feed update, we still need to see "never" as next update label. + // Last update will show an interval. + $this->assertNoText('imminently', 'The updated non scheduled feed does not show "imminently" as next update.'); + $this->assertText('never', 'The updated non scheduled feed still shows "never" as next update.'); + $this->assertText('ago', 'The non scheduled feed has been updated. It shows "x x ago" as last update.'); + $this->assertNoText('left', 'The feed is not scheduled. It does not show a timeframe "x x left" for next update.'); + } +}