announcements_feed.module

Same filename and directory in other branches
  1. 10 core/modules/announcements_feed/announcements_feed.module
  2. 11.x core/modules/announcements_feed/announcements_feed.module

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.