115 lines
4.1 KiB
PHP
115 lines
4.1 KiB
PHP
<?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 (Drupal::moduleHandler()->moduleExists('block')) {
|
|
Drupal::service('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'])));
|
|
}
|
|
}
|