announcements_feed.module
Same filename and directory in other branches
Used to create an announcements feed using the JSON data from drupal.org.
File
-
modules/
announcements_feed/ announcements_feed.module
View source
<?php
/**
* @file
* Used to create an announcements feed using the JSON data from drupal.org.
*/
/**
* Default maximum age of cached feed data in seconds.
*/
define('ANNOUNCEMENTS_FEED_DEFAULT_MAX_AGE', 86400);
/**
* Default cron interval for refreshing feed data in seconds.
*/
define('ANNOUNCEMENTS_FEED_DEFAULT_CRON_INTERVAL', 21600);
/**
* Default limit for number of feed items to fetch.
*/
define('ANNOUNCEMENTS_FEED_DEFAULT_LIMIT', 10);
/**
* Default URL for the announcements JSON feed.
*/
define('ANNOUNCEMENTS_FEED_DEFAULT_JSON_URL', 'https://www.drupal.org/announcements.json');
/**
* Default URL for the announcements feed at drupal.org.
*/
define('ANNOUNCEMENTS_FEED_DEFAULT_LINK', 'https://www.drupal.org/about/announcements');
/**
* Implements hook_help().
*/
function announcements_feed_help($path) {
if ($path == 'admin/help#announcements_feed') {
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$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>.', array(
'@documentation' => 'https://www.drupal.org/docs/core-modules-and-themes/core-modules/announcements-feed',
)) . '</p>';
$output .= '<h3>' . t('Uses') . '</h3>';
$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 menu, or access <a href="@link">Announcements</a>, to see all announcements relevant to the Drupal version of your site.', array(
'@link' => url('admin/announcements_feed'),
)) . '</dd>';
$output .= '</dl>';
return $output;
}
}
/**
* Implements hook_menu().
*/
function announcements_feed_menu() {
$items['admin/announcements_feed'] = array(
'title' => 'Announcements',
'description' => 'Announcements and updates posted by the drupal.org community.',
'page callback' => 'announcements_feed_get_announcements',
'access arguments' => array(
'access announcements',
),
'position' => 'left',
'weight' => 2,
'file' => 'announcements_feed.inc',
'options' => array(
'attributes' => array(
'class' => array(
'announcement-menu-class',
),
),
),
);
return $items;
}
/**
* Implements hook_permission().
*/
function announcements_feed_permission() {
return array(
'access announcements' => array(
'title' => t('View official announcements related to Drupal'),
),
);
}
/**
* Implements hook_theme().
*/
function announcements_feed_theme() {
return array(
'announcements_feed' => array(
'variables' => array(
'featured' => NULL,
'standard' => NULL,
'feed_link' => NULL,
'count' => 0,
),
'template' => 'announcements-feed',
'path' => drupal_get_path('module', 'announcements_feed'),
),
);
}
/**
* Processes variables for announcements-feed.tpl.php.
*
* @see announcements-feed.tpl.php
*/
function template_preprocess_announcements_feed(&$variables) {
if (!empty($variables['featured'])) {
foreach ($variables['featured'] as &$announcement) {
_announcements_feed_preprocess_item($announcement);
}
}
if (!empty($variables['standard'])) {
foreach ($variables['standard'] as &$announcement) {
_announcements_feed_preprocess_item($announcement);
}
}
if (isset($variables['feed_link'])) {
$variables['feed_link'] = check_url($variables['feed_link']);
}
}
/**
* Helper to preprocess individual announcement items.
*/
function _announcements_feed_preprocess_item(&$item) {
$item['title'] = filter_xss($item['title']);
$item['teaser'] = filter_xss($item['teaser']);
$item['link'] = check_url($item['link']);
$item['date_modified'] = check_plain($item['date_modified']);
$item['date_published'] = check_plain($item['date_published']);
$item['version'] = check_plain($item['version']);
}
/**
* Implements hook_page_alter().
*/
function announcements_feed_page_alter(&$page) {
if (isset($page['page_top']['toolbar'])) {
// If the toolbar is available, add a pre-render function to add the class.
$page['page_top']['toolbar']['#pre_render'][] = 'announcements_feed_toolbar_pre_render_alter';
}
}
/**
* Pre-render function for adding default class to announcement link.
*/
function announcements_feed_toolbar_pre_render_alter($toolbar) {
$path = drupal_get_path('module', 'announcements_feed');
$toolbar['#attached']['css'][] = $path . '/announcements_feed-toolbar.css';
module_load_include('inc', 'announcements_feed');
foreach ($toolbar['toolbar_menu']['#links'] as &$link) {
if ($link['href'] === 'admin/announcements_feed') {
$link['attributes']['class'][] = 'announcement-default';
}
}
return $toolbar;
}
/**
* Implements hook_cron().
*/
function announcements_feed_cron() {
module_load_include('inc', 'announcements_feed', 'announcements_feed');
$cron_interval = variable_get('announcements_feed_cron_interval', ANNOUNCEMENTS_FEED_DEFAULT_CRON_INTERVAL);
$last_check = variable_get('announcements_feed_last_fetch', 0);
$time = time();
if ($time - $last_check > $cron_interval) {
try {
announcements_feed_fetch(TRUE);
// Update the last_fetch variable to the current time.
variable_set('announcements_feed_last_fetch', $time);
} catch (Exception $e) {
watchdog('announcements_feed', 'Exception occurred: @message', array(
'@message' => $e->getMessage(),
), WATCHDOG_ERROR);
}
}
}
Functions
Title | Deprecated | Summary |
---|---|---|
announcements_feed_cron | Implements hook_cron(). | |
announcements_feed_help | Implements hook_help(). | |
announcements_feed_menu | Implements hook_menu(). | |
announcements_feed_page_alter | Implements hook_page_alter(). | |
announcements_feed_permission | Implements hook_permission(). | |
announcements_feed_theme | Implements hook_theme(). | |
announcements_feed_toolbar_pre_render_alter | Pre-render function for adding default class to announcement link. | |
template_preprocess_announcements_feed | Processes variables for announcements-feed.tpl.php. | |
_announcements_feed_preprocess_item | Helper to preprocess individual announcement items. |
Constants
Title | Deprecated | Summary |
---|---|---|
ANNOUNCEMENTS_FEED_DEFAULT_CRON_INTERVAL | Default cron interval for refreshing feed data in seconds. | |
ANNOUNCEMENTS_FEED_DEFAULT_JSON_URL | Default URL for the announcements JSON feed. | |
ANNOUNCEMENTS_FEED_DEFAULT_LIMIT | Default limit for number of feed items to fetch. | |
ANNOUNCEMENTS_FEED_DEFAULT_LINK | Default URL for the announcements feed at drupal.org. | |
ANNOUNCEMENTS_FEED_DEFAULT_MAX_AGE | Default maximum age of cached feed data in seconds. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.