aggregator.admin.inc

Administration page callbacks for the Aggregator module.

File

drupal/core/modules/aggregator/aggregator.admin.inc
View source
<?php

/**
 * @file
 * Administration page callbacks for the Aggregator module.
 */
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Drupal\aggregator\Plugin\Core\Entity\Feed;

/**
 * Form constructor to add/edit/delete aggregator categories.
 *
 * @param $edit
 *   An object containing:
 *   - title: A string to use for the category title.
 *   - description: A string to use for the category description.
 *   - cid: The category ID.
 *
 * @ingroup forms
 * @see aggregator_menu()
 * @see aggregator_form_category_validate()
 * @see aggregator_form_category_submit()
 */
function aggregator_form_category($form, &$form_state, $edit = NULL) {
  $form['title'] = array(
    '#type' => 'textfield',
    '#title' => t('Title'),
    '#default_value' => isset($edit->title) ? $edit->title : '',
    '#maxlength' => 64,
    '#required' => TRUE,
  );
  $form['description'] = array(
    '#type' => 'textarea',
    '#title' => t('Description'),
    '#default_value' => isset($edit->description) ? $edit->description : '',
  );
  $form['actions'] = array(
    '#type' => 'actions',
  );
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  if (!empty($edit->cid)) {
    $form['actions']['delete'] = array(
      '#type' => 'submit',
      '#value' => t('Delete'),
    );
    $form['cid'] = array(
      '#type' => 'hidden',
      '#value' => $edit->cid,
    );
  }
  return $form;
}

/**
 * Form validation handler for aggregator_form_category().
 *
 * @see aggregator_form_category_submit()
 */
function aggregator_form_category_validate($form, &$form_state) {
  if ($form_state['values']['op'] == t('Save')) {

    // Check for duplicate titles
    if (isset($form_state['values']['cid'])) {
      $category = db_query("SELECT cid FROM {aggregator_category} WHERE title = :title AND cid <> :cid", array(
        ':title' => $form_state['values']['title'],
        ':cid' => $form_state['values']['cid'],
      ))
        ->fetchObject();
    }
    else {
      $category = db_query("SELECT cid FROM {aggregator_category} WHERE title = :title", array(
        ':title' => $form_state['values']['title'],
      ))
        ->fetchObject();
    }
    if ($category) {
      form_set_error('title', t('A category named %category already exists. Enter a unique title.', array(
        '%category' => $form_state['values']['title'],
      )));
    }
  }
}

/**
 * Form submission handler for aggregator_form_category().
 *
 * @see aggregator_form_category_validate()
 *
 * @todo Add delete confirmation dialog.
 */
function aggregator_form_category_submit($form, &$form_state) {

  // @todo Replicate this cache invalidation when these ops are separated.
  // Invalidate the block cache to update aggregator category-based derivatives.
  if (module_exists('block')) {
    drupal_container()
      ->get('plugin.manager.block')
      ->clearCachedDefinitions();
  }
  if ($form_state['values']['op'] == t('Delete')) {
    $title = $form_state['values']['title'];

    // Unset the title.
    unset($form_state['values']['title']);
  }
  aggregator_save_category($form_state['values']);
  if (isset($form_state['values']['cid'])) {
    if (isset($form_state['values']['title'])) {
      drupal_set_message(t('The category %category has been updated.', array(
        '%category' => $form_state['values']['title'],
      )));
      if (arg(0) == 'admin') {
        $form_state['redirect'] = 'admin/config/services/aggregator/';
        return;
      }
      else {
        $form_state['redirect'] = 'aggregator/categories/' . $form_state['values']['cid'];
        return;
      }
    }
    else {
      watchdog('aggregator', 'Category %category deleted.', array(
        '%category' => $title,
      ));
      drupal_set_message(t('The category %category has been deleted.', array(
        '%category' => $title,
      )));
      if (arg(0) == 'admin') {
        $form_state['redirect'] = 'admin/config/services/aggregator/';
        return;
      }
      else {
        $form_state['redirect'] = 'aggregator/categories/';
        return;
      }
    }
  }
  else {
    watchdog('aggregator', 'Category %category added.', array(
      '%category' => $form_state['values']['title'],
    ), WATCHDOG_NOTICE, l(t('view'), 'admin/config/services/aggregator'));
    drupal_set_message(t('The category %category has been added.', array(
      '%category' => $form_state['values']['title'],
    )));
  }
}

Functions

Namesort descending Description
aggregator_form_category Form constructor to add/edit/delete aggregator categories.
aggregator_form_category_submit Form submission handler for aggregator_form_category().
aggregator_form_category_validate Form validation handler for aggregator_form_category().