scs.module in Simplenews Content Selection 8
Same filename and directory in other branches
General hooks and commonly-used functions
File
scs.moduleView source
<?php
/**
* @file
* General hooks and commonly-used functions
*/
/**
* Implements hook_menu()
*/
function scs_menu() {
$items = array();
$items['admin/config/services/simplenews/settings/scs'] = array(
'title' => 'Simplenews Content Selection',
'description' => 'Configure what node types could be used for SCS',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'scs_admin_settings_form',
),
'access arguments' => array(
'administer scs',
),
'file' => 'scs.admin.inc',
'type' => MENU_LOCAL_TASK,
);
return $items;
}
/**
* Implements hook_permission()
*/
function scs_permission() {
return array(
'administer scs' => array(
'title' => t('Administer Simplenews Content Selection'),
'description' => t('User can perform administrative tasks like changing view mode and newsletter content type.'),
),
);
}
/**
* Implements hook_theme()
*/
function scs_theme() {
return array(
'scs_sortable_table' => array(
'render element' => 'form',
'file' => 'scs.theme.inc',
),
'scs_newsletter' => array(
'variables' => array(
'nodes' => array(),
'toc' => FALSE,
),
'template' => 'scs-newsletter',
'file' => 'scs.theme.inc',
),
'scs_toc' => array(
'variables' => array(
'nodes' => array(),
),
'file' => 'scs.theme.inc',
),
);
}
/**
* Implements hook_node_operations().
*/
function scs_node_operations() {
$operations = array(
'scs_create' => array(
'label' => t('Create newsletter'),
'callback' => NULL,
),
);
return $operations;
}
/**
* Implements hook_entity_info().
*/
function scs_entity_info() {
$return = array(
'node' => array(
'view modes' => array(
'scs' => array(
'label' => t('Simplenews Content Selection'),
'custom settings' => TRUE,
),
),
),
);
return $return;
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function scs_form_node_admin_content_alter(&$form, &$form_state) {
// Add an extra multistep operation to admin/content/node
if (isset($form_state['values']['operation']) && $form_state['values']['operation'] == 'scs_create') {
unset($form['filter']);
unset($form['admin']);
drupal_set_title(t('Sort nodes'));
// Show the sorting form + ToC checkbox
$form = array_merge($form, scs_node_sort_form($form, $form_state));
$form['#submit'][] = 'scs_node_sort_submit';
// Redirect to the simplenews node form
$type = strtr(variable_get('scs_node_type', 'simplenews'), '_', '-');
$form['#action'] = url('node/add/' . $type);
}
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function scs_form_node_form_alter(&$form, &$form_state) {
// Check that we are creating a newsletter and that we come from the
// admin/content/node
if (!empty($form['#node_edit_form']) && in_array($form['type']['#value'], simplenews_get_content_types()) && ($form_state['input']['op'] = t('Create newsletter') && isset($form_state['input']['nodes']))) {
$nodes = \Drupal::entityTypeManager()
->getStorage('node')
->loadMultiple(array_keys($form_state['input']['nodes']));
foreach ($nodes as $node) {
$node->scs_view_mode = $form_state['input']['nodes'][$node->nid]['view_mode'];
}
$form['body'][LANGUAGE_NONE][0]['#default_value'] = theme('scs_newsletter', array(
'nodes' => $nodes,
'toc' => empty($form_state['input']['scs_toc']) ? FALSE : TRUE,
));
}
}
/**
* Form callback: second step of the selection form, sorting nodes
*/
function scs_node_sort_form($form, &$form_state) {
$nodes = array_filter($form_state['values']['nodes']);
// Checkbox for Table of contents
$form['scs_toc'] = array(
'#type' => 'checkbox',
'#title' => t('Create a table of contents'),
'#description' => t('Create a table of contents at top of the newsletter with the titles of the selected nodes. If newsletter is HTML format, these table of contents will be bookmarks.'),
);
// Create elements for the tablesort
$form['nodes']['#tree'] = TRUE;
foreach ($nodes as $nid) {
$form['nodes'][$nid]['weight'] = array(
'#type' => 'weight',
'#attributes' => array(
'class' => array(
'node-weight',
),
),
);
$form['nodes'][$nid]['view_mode'] = array(
'#type' => 'select',
'#options' => scs_view_mode_options(),
);
}
$form['#theme'] = 'scs_sortable_table';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Create newsletter'),
);
return $form;
}
/**
* Form callback: submit handler for sorting nodes
*/
function scs_node_sort_submit(&$form, &$form_state) {
uasort($form_state['values']['nodes'], 'drupal_sort_weight');
}
/**
* Put together a option list based on selected view modes
*/
function scs_view_mode_options() {
$entity_info = entity_get_info();
$view_modes = array_filter(variable_get('scs_view_mode', array(
'scs' => 1,
)));
$options = array();
foreach ($view_modes as $machine_name => $status) {
if ($status) {
$options[$machine_name] = $entity_info['node']['view modes'][$machine_name]['label'];
}
}
return $options;
}
Functions
Name | Description |
---|---|
scs_entity_info | Implements hook_entity_info(). |
scs_form_node_admin_content_alter | Implements hook_form_FORM_ID_alter(). |
scs_form_node_form_alter | Implements hook_form_FORM_ID_alter(). |
scs_menu | Implements hook_menu() |
scs_node_operations | Implements hook_node_operations(). |
scs_node_sort_form | Form callback: second step of the selection form, sorting nodes |
scs_node_sort_submit | Form callback: submit handler for sorting nodes |
scs_permission | Implements hook_permission() |
scs_theme | Implements hook_theme() |
scs_view_mode_options | Put together a option list based on selected view modes |