124 lines
4.1 KiB
PHP
124 lines
4.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Fetch community announcements from www.drupal.org feed.
|
|
*/
|
|
|
|
use Drupal\announcements_feed\RenderCallbacks;
|
|
use Drupal\Core\Link;
|
|
use Drupal\Core\Routing\RouteMatchInterface;
|
|
|
|
/**
|
|
* Implements hook_help().
|
|
*/
|
|
function announcements_feed_help($route_name, RouteMatchInterface $route_match) {
|
|
switch ($route_name) {
|
|
case 'help.page.announcements_feed':
|
|
$output = '';
|
|
$output .= '<h2>' . t('About') . '</h2>';
|
|
$output .= '<p>' . t('The Announcements module displays announcements from the Drupal community. For more information, see the <a href=":documentation">online documentation for the Announcements module</a>.', [':documentation' => 'https://www.drupal.org/docs/core-modules-and-themes/core-modules/announcements-feed']) . '</p>';
|
|
$output .= '<h2>' . t('Uses') . '</h2>';
|
|
$output .= '<dl><dt>' . t('Accessing announcements') . '</dt>';
|
|
$output .= '<dd>' . t('Users with the "View drupal.org announcements" permission may click on the "Announcements" item in the administration toolbar, or access @link, to see all announcements relevant to the Drupal version of your site.', [
|
|
'@link' => Link::createFromRoute(t('Announcements'), 'announcements_feed.announcement')->toString(),
|
|
]) . '</dd>';
|
|
$output .= '</dl>';
|
|
return $output;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Implements hook_toolbar().
|
|
*/
|
|
function announcements_feed_toolbar() {
|
|
if (!\Drupal::currentUser()->hasPermission('access announcements')) {
|
|
return [
|
|
'#cache' => ['contexts' => ['user.permissions']],
|
|
];
|
|
}
|
|
$items['announcement'] = [
|
|
'#type' => 'toolbar_item',
|
|
'tab' => [
|
|
'#lazy_builder' => [
|
|
'announcements_feed.lazy_builders:renderAnnouncements',
|
|
[],
|
|
],
|
|
'#create_placeholder' => TRUE,
|
|
'#cache' => [
|
|
'tags' => [
|
|
'announcements_feed:feed',
|
|
],
|
|
],
|
|
],
|
|
'#wrapper_attributes' => [
|
|
'class' => ['announce-toolbar-tab'],
|
|
],
|
|
'#cache' => ['contexts' => ['user.permissions']],
|
|
'#weight' => 3399,
|
|
];
|
|
|
|
// \Drupal\toolbar\Element\ToolbarItem::preRenderToolbarItem adds an
|
|
// #attributes property to each toolbar item's tab child automatically.
|
|
// Lazy builders don't support an #attributes property so we need to
|
|
// add another render callback to remove the #attributes property. We start by
|
|
// adding the defaults, and then we append our own pre render callback.
|
|
$items['announcement'] += \Drupal::service('plugin.manager.element_info')->getInfo('toolbar_item');
|
|
$items['announcement']['#pre_render'][] = [RenderCallbacks::class, 'removeTabAttributes'];
|
|
return $items;
|
|
}
|
|
|
|
/**
|
|
* Implements hook_toolbar_alter().
|
|
*/
|
|
function announcements_feed_toolbar_alter(&$items) {
|
|
// As the "Announcements" link is shown already in the top toolbar bar, we
|
|
// don't need it again in the administration menu tray, so hide it.
|
|
if (!empty($items['administration']['tray'])) {
|
|
$callable = function (array $element) {
|
|
unset($element['administration_menu']['#items']['announcements_feed.announcement']);
|
|
return $element;
|
|
};
|
|
|
|
$items['administration']['tray']['toolbar_administration']['#pre_render'][] = $callable;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Implements hook_theme().
|
|
*/
|
|
function announcements_feed_theme($existing, $type, $theme, $path) {
|
|
return [
|
|
'announcements_feed' => [
|
|
'variables' => [
|
|
'featured' => NULL,
|
|
'standard' => NULL,
|
|
'count' => 0,
|
|
'feed_link' => '',
|
|
],
|
|
],
|
|
'announcements_feed_admin' => [
|
|
'variables' => [
|
|
'featured' => NULL,
|
|
'standard' => NULL,
|
|
'count' => 0,
|
|
'feed_link' => '',
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Implements hook_cron().
|
|
*/
|
|
function announcements_feed_cron() {
|
|
$config = \Drupal::config('announcements_feed.settings');
|
|
$interval = $config->get('cron_interval');
|
|
$last_check = \Drupal::state()->get('announcements_feed.last_fetch', 0);
|
|
$time = \Drupal::time()->getRequestTime();
|
|
if (($time - $last_check) > $interval) {
|
|
\Drupal::service('announcements_feed.fetcher')->fetch(TRUE);
|
|
\Drupal::state()->set('announcements_feed.last_fetch', $time);
|
|
}
|
|
}
|