You are here

nodewords_admin.admin.inc in Nodewords: D6 Meta Tags 6.2

Same filename and directory in other branches
  1. 6.3 nodewords_admin/nodewords_admin.admin.inc

Administration interface for nodewords.module.

File

nodewords_admin/nodewords_admin.admin.inc
View source
<?php

/**
* @file
* Administration interface for nodewords.module.
*/

/**
 * Menu callback: settings form.
 */
function nodewords_admin_settings_form() {
  $admin_pages = array(
    NODEWORDS_TYPE_ERRORPAGE,
    NODEWORDS_TYPE_PAGE,
    NODEWORDS_TYPE_TERM,
    NODEWORDS_TYPE_VOCABULARY,
  );
  $form = array();
  $enabled_options = array();
  $metatags_options = array(
    'admin' => TRUE,
    'fieldset' => TRUE,
    'last fields' => array(
      'operations' => array(
        'reset_metatags' => array(
          '#type' => 'submit',
          '#value' => t('Reset default meta tag values'),
          '#submit' => array(
            'nodewords_admin_settings_form_reset_metatags',
          ),
        ),
      ),
    ),
    'title' => t('Default meta tags'),
    'weight' => 0,
  );
  $options = array();
  $tags_info = nodewords_get_possible_tags();
  nodewords_load_all_includes('nodewords.tags.inc');
  if (!empty($tags_info)) {
    foreach ($tags_info as $name => $info) {
      $options[$name] = $info['label'];
      $bool = !empty($info['context']['allowed']) && is_array($info['context']['allowed']) && count(array_intersect($admin_pages, $info['context']['allowed'])) || !empty($info['context']['denied']) && is_array($info['context']['denied']) && count(array_intersect($admin_pages, $info['context']['denied'])) != count($admin_pages);
      if ($bool || empty($info['context']['allowed'])) {
        $enabled_options[$name] = '';
      }
    }
    $form['nodewords_head'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Enabled meta tags'),
      '#options' => $options,
      '#default_value' => variable_get('nodewords_head', array()),
      '#checkall' => TRUE ? 'nodewords-head-output' : FALSE,
    );
    $form['enabled'] = array(
      '#type' => 'fieldset',
      '#title' => t('Meta tag forms'),
      '#description' => t('These settings change which meta tags are shown in edit forms.'),
      '#collapsible' => TRUE,
      '#weight' => 0,
      '#group' => 'nodewords',
    );
    $form['enabled']['admin'] = array(
      '#type' => 'fieldset',
      '#title' => t('Meta tags enabled on administrative settings pages'),
      '#collapsible' => TRUE,
      '#theme' => 'nodewords_admin_enabled_metatags',
      '#weight' => 0,
    );
    $select_options = array(
      'never' => t('Never'),
      'empty' => t('When the meta tag is empty'),
    );
    $form['enabled']['admin']['nodewords_admin_edit'] = array(
      '#type' => 'checkboxes',
      '#options' => $enabled_options,
      '#default_value' => variable_get('nodewords_admin_edit', array()),
      '#checkall' => TRUE ? 'nodewords-enabled-metatags-admin-edit-form' : FALSE,
    );
    foreach ($tags_info as $name => $info) {
      if (isset($enabled_options[$name])) {
        $form['enabled']['admin']['nodewords_admin_use_default_value_' . $name] = array(
          '#type' => 'select',
          '#default_value' => variable_get('nodewords_admin_use_default_value_' . $name, 'empty'),
          '#options' => $select_options,
          '#multiple' => FALSE,
        );
      }
    }
  }
  else {
    $form['nodewords_head'] = array(
      '#type' => 'value',
      '#value' => variable_get('nodewords_head', array()),
    );
    $form['nodewords_admin_edit'] = array(
      '#type' => 'value',
      '#value' => variable_get('nodewords_admin_edit', array()),
    );
  }
  $form['metatags_creation'] = array(
    '#type' => 'fieldset',
    '#title' => t('Meta tags creation options'),
    '#description' => t('These options change the way the meta tags are generated.'),
    '#collapsible' => TRUE,
    '#weight' => 4,
    '#group' => 'nodewords',
  );
  $form['metatags_creation']['nodewords_list_repeat'] = array(
    '#type' => 'checkbox',
    '#title' => t('Repeat meta tags for lists'),
    '#description' => t('Some search engines punish sites that use the same meta tags on different pages. Uncheck this option if you want to suppress the repetition of the same meta tags on pages that use the pager - if unchecked, Drupal will only display the meta tags for the first page and not for subsequent pages. If unsure, select this option.'),
    '#default_value' => variable_get('nodewords_list_repeat', FALSE),
  );
  $form['metatags_creation']['nodewords_enable_tokens'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable tokens'),
    '#description' => t('This setting allows to use the tokens implemented in <a href="@token">token.module</a> in meta tags content.', array(
      '@token' => 'http://drupal.org/project/token',
    )),
    '#default_value' => variable_get('nodewords_enable_tokens', TRUE) && module_exists('token'),
    '#disabled' => !module_exists('token'),
  );
  $form['metatags_creation']['nodewords_max_size'] = array(
    '#type' => 'textfield',
    '#title' => t('Maximum meta tags length'),
    '#description' => t('The maximum length to use for the meta tags form fields.'),
    '#default_value' => variable_get('nodewords_max_size', 350),
    '#required' => TRUE,
    '#element_validate' => array(
      'nodewords_admin_max_size_validate',
    ),
    '#size' => 6,
    '#maxlength' => 6,
  );
  $form['metatags_creation']['nodewords_base_url'] = array(
    '#type' => 'textfield',
    '#title' => t('Base URL'),
    '#description' => t('Enter the base URL that will be used for any URL generated by the module.'),
    '#default_value' => variable_get('nodewords_base_url', ''),
    '#element_validate' => array(
      'nodewords_admin_base_url_validate',
    ),
  );
  foreach ($tags_info as $name => $info) {
    $function = $info['callback'] . '_settings_form';
    $options = array(
      'parameters' => !empty($info['callback arguments']) ? $info['callback arguments'] : array(),
    );
    if (function_exists($function)) {
      $function($form, 'nodewords_admin_settings_form', $options);
    }
  }
  $form['buttons']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save configuration'),
  );
  $form['buttons']['reset'] = array(
    '#type' => 'submit',
    '#value' => t('Reset to defaults'),
    '#submit' => array(
      'nodewords_admin_settings_form_reset',
    ),
  );
  $form['buttons']['#weight'] = 100;
  $form['#pre_render'][] = 'vertical_tabs_form_pre_render';
  $form['#submit'][] = 'nodewords_admin_settings_form_submit';
  $form['#theme'] = 'nodewords_admin_settings_form';
  return $form;
}

/**
 * Function to validate the base URL.
 */
function nodewords_admin_base_url_validate($element, &$form_state) {
  if (!empty($element['#value']) && !($base_url = rtrim($element['#value'], '/'))) {
    form_error($element, t('Invalid base URL.'));
  }
  elseif (!empty($base_url) && !valid_url($base_url, TRUE)) {
    form_error($element, t('Invalid base URL.'));
  }
}

/**
 * Function to validate the meta tags length.
 *
 */
function nodewords_admin_max_size_validate($element, &$form_state) {
  if (!empty($element['#value'])) {
    $value = trim($element['#value']);
    if (empty($value) || !empty($value) && (!is_numeric($value) || $value <= 0)) {
      form_error($element, t('The maximum length must be a positive integer.'));
    }
  }
}

/**
 * Submission function for the settings page.
 */
function nodewords_admin_settings_form_submit($form, &$form_state) {

  // Exclude unnecessary elements.
  unset($form_state['values']['form_build_id'], $form_state['values']['form_id'], $form_state['values']['form_token'], $form_state['values']['op'], $form_state['values']['reset'], $form_state['values']['submit']);
  foreach ($form_state['values'] as $key => $value) {
    if (is_array($value) && isset($form_state['values']['array_filter'])) {
      $value = array_keys(array_filter($value));
    }
    variable_set($key, $value);
  }
  drupal_set_message(t('The configuration options have been saved.'));
  cache_clear_all();
  drupal_rebuild_theme_registry();
}

/**
 * Submission function for the reset button of the settings page.
 */
function nodewords_admin_settings_form_reset($form, &$form_state) {
  nodewords_delete_tags();

  // Exclude unnecessary elements.
  unset($form_state['values']['form_build_id'], $form_state['values']['form_id'], $form_state['values']['form_token'], $form_state['values']['op'], $form_state['values']['reset'], $form_state['values']['submit']);
  foreach ($form_state['values'] as $key => $value) {
    variable_del($key);
  }
  drupal_set_message(t('The configuration options have been reset to their default values.'));
  cache_clear_all();
  drupal_rebuild_theme_registry();
}

/**
 * Front page settings form.
 */
function nodewords_admin_tags_edit_form(&$form_state, $options = array()) {
  $form = array();
  $options += _nodewords_get_default_metatags_type();
  $form['#nodewords_options'] = $options;
  $form['nodewords'] = nodewords_tags_edit_fields($options, nodewords_load_tags($options), array(
    'admin' => TRUE,
    'fieldset' => FALSE,
  ));
  if (empty($form['nodewords'])) {
    $form['warning'] = array(
      '#value' => t('You have not yet enabled any <a href="@url">meta tags for administrative settings pages</a>.', array(
        '@url' => url('admin/content/nodewords'),
      )),
      '#prefix' => '<div class="messages warning">',
      '#suffix' => '</div>',
    );
  }
  else {
    $form['nodewords']['#tree'] = TRUE;
    $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Save configuration'),
      '#submit' => array(
        'nodewords_admin_tags_edit_form_submit',
      ),
      '#weight' => 40,
    );
    $form['reset'] = array(
      '#type' => 'submit',
      '#value' => t('Reset to defaults'),
      '#submit' => array(
        'nodewords_admin_tags_edit_form_reset',
      ),
      '#weight' => 42,
    );
  }
  return $form;
}

/**
 * Submission function for the meta tags edit page (reset button).
 */
function nodewords_admin_tags_edit_form_reset($form, &$form_state) {
  nodewords_delete_tags($form['#nodewords_options']);
  drupal_set_message(t('The configuration options have been reset to their default values.'));
}

/**
 * Submission function for the meta tags edit page.
 */
function nodewords_admin_tags_edit_form_submit($form, &$form_state) {
  nodewords_save_tags($form_state['values']['nodewords']['metatags'], $form['#nodewords_options']);
  drupal_set_message(t('The configuration options have been saved.'));
}

/**
 * Render the list of enabled meta tags in administration forms.
 */
function theme_nodewords_admin_enabled_metatags($form) {
  foreach (nodewords_get_possible_tags() as $name => $info) {
    $row = array();
    if (isset($form['nodewords_admin_edit'][$name])) {
      $row[] = $info['label'];
      $row[] = drupal_render($form['nodewords_admin_edit'][$name]);
      $row[] = drupal_render($form['nodewords_admin_use_default_value_' . $name]);
      $rows[] = $row;
    }
  }
  $header[] = t('Meta tag');
  $header[] = array(
    'data' => t('Show in edit form'),
    'class' => TRUE && count($rows) > 1 ? 'nodewords-enabled-metatags-admin-edit-form' : '',
  );
  $header[] = t('Use the default value');
  return theme('table', $header, $rows) . drupal_render($form);
}
function _nodewords_admin_mass_delete_batch_process($ids, $type, &$context) {
  if (!isset($context['sandbox']['progress'])) {
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['max'] = count($ids);
    $context['sandbox']['ids'] = $ids;
  }
  $count = min(5, count($context['sandbox']['ids']));
  if (!isset($context['results']['count'])) {
    $context['results']['count'] = 0;
  }
  for ($i = 1; $i <= $count; $i++) {
    $id = array_shift($context['sandbox']['ids']);
    db_query("DELETE FROM {nodewords} WHERE type = %d AND id = %d", $type, $id);
    module_invoke_all('nodewords_delete_tags', array(
      'type' => $type,
      'id' => $id,
    ));
    $context['results']['count']++;
    $context['sandbox']['progress']++;
  }
  if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
}
function _nodewords_admin_mass_update_batch_finished($success, $results, $operations) {
  if ($success) {
    drupal_set_message(t('The update has been performed.'));
  }
  else {
    drupal_set_message(t('An error occurred and processing did not complete.'), 'error');
    $message = format_plural($results['count'], '1 item successfully processed.', '@count items successfully processed.');
    drupal_set_message($message);
  }
}

Functions

Namesort descending Description
nodewords_admin_base_url_validate Function to validate the base URL.
nodewords_admin_max_size_validate Function to validate the meta tags length.
nodewords_admin_settings_form Menu callback: settings form.
nodewords_admin_settings_form_reset Submission function for the reset button of the settings page.
nodewords_admin_settings_form_submit Submission function for the settings page.
nodewords_admin_tags_edit_form Front page settings form.
nodewords_admin_tags_edit_form_reset Submission function for the meta tags edit page (reset button).
nodewords_admin_tags_edit_form_submit Submission function for the meta tags edit page.
theme_nodewords_admin_enabled_metatags Render the list of enabled meta tags in administration forms.
_nodewords_admin_mass_delete_batch_process
_nodewords_admin_mass_update_batch_finished