You are here

function smart_paging_form_alter in Smart Paging 7.2

Same name and namespace in other branches
  1. 7 smart_paging.module \smart_paging_form_alter()

Implements hook_form_alter()

File

./smart_paging.module, line 50
Provides smart paging capability to Drupal contents.

Code

function smart_paging_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'field_ui_display_overview_form') {

    // Modified part copy from field_ui_display_overview_form() at /modules/field_ui/field_ui.admin.inc
    // Base button element for the various formatter settings actions.
    $base_button = array(
      '#submit' => array(
        'field_ui_display_overview_multistep_submit',
      ),
      '#ajax' => array(
        'callback' => 'field_ui_display_overview_multistep_js',
        'wrapper' => 'field-display-overview-wrapper',
        'effect' => 'fade',
      ),
      '#field_name' => 'smart_paging',
    );
    $summary = isset($form_state['formatter_settings']['smart_paging']) ? $form_state['formatter_settings']['smart_paging'] : NULL;
    if ($form_state['formatter_settings_edit'] == 'smart_paging') {
      $form['fields']['smart_paging']['#region_callback'] = 'field_ui_display_overview_row_region';
      $form['fields']['smart_paging']['format']['#cell_attributes'] = array(
        'colspan' => 3,
      );
      $form['fields']['smart_paging']['format']['settings_edit_form'] = array(
        '#type' => 'container',
        '#attributes' => array(
          'class' => array(
            'field-formatter-settings-edit-form',
          ),
        ),
        '#parents' => array(
          'fields',
          'smart_paging',
          'settings_edit_form',
        ),
        'label' => array(
          '#markup' => t('Format settings:') . ' <span class="formatter-name">' . t('Smart Paging') . '</span>',
        ),
        'settings' => smart_paging_field_formatter_settings_form($form, $summary),
        'actions' => array(
          '#type' => 'actions',
          'save_settings' => $base_button + array(
            '#type' => 'submit',
            '#name' => 'smart_paging_formatter_settings_update',
            '#value' => t('Update'),
            '#op' => 'update',
          ),
          'cancel_settings' => $base_button + array(
            '#type' => 'submit',
            '#name' => 'smart_paging_formatter_settings_cancel',
            '#value' => t('Cancel'),
            '#op' => 'cancel',
            // Do not check errors for the 'Cancel' button, but make sure we
            // get the value of the 'formatter type' select.
            '#limit_validation_errors' => array(
              array(
                'fields',
                'smart_paging',
                'type',
              ),
            ),
          ),
        ),
      );
      $form['fields']['smart_paging']['#attributes']['class'][] = 'field-formatter-settings-editing';
    }
    elseif (isset($form['#entity_type']) && in_array($form['#entity_type'], smart_paging_entities())) {
      $form['fields']['smart_paging']['#region_callback'] = 'field_ui_display_overview_row_region';
      $form['fields']['smart_paging']['settings_summary'] = array(
        '#markup' => '<div class="field-formatter-summary">' . smart_paging_field_formatter_settings_summary($form, $summary) . '</div>',
        '#cell_attributes' => array(
          'class' => array(
            'field-formatter-summary-cell',
          ),
        ),
      );
      $form['fields']['smart_paging']['settings_edit'] = $base_button + array(
        '#type' => 'image_button',
        '#name' => 'smart_paging_formatter_settings_edit',
        '#src' => 'misc/configure.png',
        '#attributes' => array(
          'class' => array(
            'field-formatter-settings-edit',
          ),
          'alt' => t('Edit'),
        ),
        '#op' => 'edit',
        // Do not check errors for the 'Edit' button, but make sure we get
        // the value of the 'formatter type' select.
        '#limit_validation_errors' => array(
          array(
            'fields',
            'smart_paging',
            'type',
          ),
        ),
        '#prefix' => '<div class="field-formatter-settings-edit-wrapper">',
        '#suffix' => '</div>',
      );
    }
    if (!isset($form_state['formatter_settings']['smart_paging']) || isset($form_state['formatter_settings']['smart_paging']) && empty($form_state['formatter_settings']['smart_paging'])) {
      $bundle_settings = field_bundle_settings($form['#entity_type'], $form['#bundle']);
      if (isset($bundle_settings['extra_fields']['display']['smart_paging'][$form['#view_mode']]['settings'])) {
        $form_state['formatter_settings']['smart_paging'] = $bundle_settings['extra_fields']['display']['smart_paging'][$form['#view_mode']]['settings'];
      }
      else {
        $display_defaults = smart_paging_field_extra_fields(TRUE);
        $form_state['formatter_settings']['smart_paging'] = $display_defaults['extra_fields']['display']['smart_paging']['settings'];
      }
    }
    $form['#submit'][] = '_smart_paging_display_overview_form_submit';
  }
  if (isset($form_state['field']) && isset($form['#entity_type']) && (strpos($form_id, '_node_form') !== FALSE || $form_id == 'user_profile_form' || $form_id == 'taxonomy_form_term')) {

    // Get smart_paging_settings_context at display settings
    $display_stored = field_bundle_settings($form['#entity_type'], $form['#bundle']);
    $display_defaults = smart_paging_field_extra_fields(TRUE);
    if (isset($display_stored['extra_fields']['display']['smart_paging']['default'])) {
      $display_settings = $display_stored['extra_fields']['display']['smart_paging']['default']['settings'];
    }
    else {
      $display_settings = $display_defaults['extra_fields']['display']['smart_paging']['settings'];
    }
    if ($display_settings['smart_paging_settings_context'] == 'content') {
      $filter_html_name = array();
      $supported_filters = array();
      foreach ($form_state['field'] as $field_name => $field) {
        if (isset($form[$field_name]['#language'])) {
          $lang = $form[$field_name]['#language'];
          if (isset($field[$lang]['instance']['settings']['text_processing'])) {
            foreach ($form[$field_name][$lang] as $delta => $properties) {
              if (is_numeric($delta)) {
                global $user;
                $formats = filter_formats($user);
                if (array_key_exists('#format', $properties)) {
                  $filter_html_name[] = $field_name . "[{$lang}][{$delta}][format]";
                  if (is_null($properties['#format'])) {
                    $format = $formats[filter_default_format($user)];
                    $filter = _filter_tips($format->format, FALSE);
                    if (isset($filter[$format->name]['smart_paging_filter'])) {
                      $text_processing = TRUE;
                    }
                    break;
                  }
                  else {
                    $format = $formats[$properties['#format']];
                    $filter = _filter_tips($properties['#format'], FALSE);
                    if (isset($filter[$format->name]['smart_paging_filter'])) {
                      $text_processing = TRUE;
                    }
                    break;
                  }
                }
              }
            }
          }
        }
      }
      foreach ($formats as $filter_name => $filter) {
        $format = _filter_tips($filter_name, FALSE);
        if (isset($format[$filter->name]['smart_paging_filter'])) {
          $supported_filters[$filter_name] = TRUE;
        }
      }
      $smart_paging_js = array(
        'smart_paging' => array(
          'filter_html_name' => $filter_html_name,
          'smart_paging_filter' => $supported_filters,
          'text_processing' => isset($text_processing),
        ),
      );
      drupal_add_js($smart_paging_js, 'setting');
      drupal_add_js(drupal_get_path('module', 'smart_paging') . '/js/smart_paging-config.js');
      $entity_type = $form['#entity_type'];
      $entity_info = entity_get_info($entity_type);
      if (isset($form_state['term']->{$entity_info['entity keys']['id']})) {
        $entity_id = $form_state['term']->{$entity_info['entity keys']['id']};
      }
      elseif (isset($form_state["{$entity_type}"]->{$entity_info['entity keys']['id']})) {
        $entity_id = $form_state["{$entity_type}"]->{$entity_info['entity keys']['id']};
      }
      if (isset($entity_id)) {

        // Retrieve the stored Smart Paging settings
        $query = db_select('smart_paging', 'sp')
          ->condition('sp.entity_id', $entity_id)
          ->condition('sp.entity_type', $entity_type)
          ->fields('sp', array(
          'configuration',
        ))
          ->execute();
        $smart_paging_config = unserialize($query
          ->fetchField(0));
        $form_state['storage']['smart_paging_entity_id'] = $entity_id;
        $form_state['storage']['smart_paging_entity_type'] = $entity_type;
      }
      $fieldset_label = t('Smart Paging settings');
      $form['smart_paging_settings'] = array(
        '#type' => 'fieldset',
        '#title' => $fieldset_label,
        '#description' => t('Remember to enable the Smart Paging input filter at !formats to be able to use this feature at your selected text format of filtered text field(s).', array(
          '!formats' => l(t('Text formats settings page'), 'admin/config/content/formats'),
        )),
        '#attributes' => array(
          'class' => array(
            'smart-paging-settings',
          ),
        ),
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,
        '#weight' => 100,
      );
      $method_options = _smart_paging_method_list();

      // Only node entity do have Additional settings aesthetics
      if (isset($form_state['node'])) {
        if (variable_get('smart_paging_method', SMART_PAGING_PLACEHOLDER_METHOD) == SMART_PAGING_PLACEHOLDER_METHOD) {
          $value = ' ' . t('(placeholder="!value")', array(
            '!value' => variable_get('smart_paging_pagebreak', '<!--pagebreak-->'),
          ));
          $default_method = $method_options[SMART_PAGING_PLACEHOLDER_METHOD] . $value;
        }
        elseif (variable_get('smart_paging_method', SMART_PAGING_PLACEHOLDER_METHOD) == SMART_PAGING_CHARACTER_LIMIT_METHOD) {
          $value = ' ' . t('(!value characters)', array(
            '!value' => variable_get('smart_paging_character_count', SMART_PAGING_MAX_CHAR_LIMIT),
          ));
          $default_method = $method_options[SMART_PAGING_CHARACTER_LIMIT_METHOD] . $value;
        }
        elseif (variable_get('smart_paging_method', SMART_PAGING_PLACEHOLDER_METHOD) == SMART_PAGING_WORD_LIMIT_METHOD) {
          $value = ' ' . t('(!value words)', array(
            '!value' => variable_get('smart_paging_word_count', SMART_PAGING_MAX_WORD_LIMIT),
          ));
          $default_method = $method_options[SMART_PAGING_WORD_LIMIT_METHOD] . $value;
        }
        else {
          $default_method = $method_options[SMART_PAGING_NO_METHOD];
        }
        if (variable_get('smart_paging_title_display_suffix', TRUE)) {
          $default_method .= t(', Title suffix="') . variable_get('smart_paging_title_suffix', t(': Page ')) . '"';
        }
        else {
          $default_method .= t(', No title suffix');
        }
        $smart_paging_js['smart_paging']['fieldset_label'] = $fieldset_label;
        $smart_paging_js['smart_paging']['default_method'] = $default_method;
        drupal_add_js($smart_paging_js, 'setting');
        $form['smart_paging_settings'] += array(
          '#attached' => array(
            'js' => array(
              drupal_get_path('module', 'smart_paging') . '/js/smart_paging-admin.js',
            ),
          ),
          '#group' => 'additional_settings',
        );
      }
      $form['smart_paging_settings']['smart_paging_use_default'] = array(
        '#type' => 'checkbox',
        '#title' => t('Use default values'),
        '#default_value' => isset($smart_paging_config['use_default']) ? $smart_paging_config['use_default'] : TRUE,
      );
      $form['smart_paging_settings']['smart_paging_method'] = array(
        '#type' => 'select',
        '#title' => t('Page break method'),
        '#default_value' => isset($smart_paging_config['method']) ? $smart_paging_config['method'] : variable_get('smart_paging_method', SMART_PAGING_PLACEHOLDER_METHOD),
        '#options' => $method_options,
        '#states' => array(
          'disabled' => array(
            ':input[name="smart_paging_use_default"]' => array(
              'checked' => TRUE,
            ),
          ),
        ),
      );
      $form['smart_paging_settings']['smart_paging_pagebreak'] = array(
        '#type' => 'textfield',
        '#title' => t('Page break placeholder'),
        '#default_value' => isset($smart_paging_config['pagebreak']) ? $smart_paging_config['pagebreak'] : variable_get('smart_paging_pagebreak', '<!--pagebreak-->'),
        '#description' => t('HTML comment or valid HTML tag with unique identifier, eg. &lt;hr class="pagebreak" /&gt;.'),
        '#size' => 50,
        '#states' => array(
          'visible' => array(
            ':input[name="smart_paging_method"]' => array(
              'value' => (string) SMART_PAGING_PLACEHOLDER_METHOD,
              'enabled' => TRUE,
            ),
          ),
        ),
      );
      $form['smart_paging_settings']['smart_paging_character_count'] = array(
        '#type' => 'textfield',
        '#title' => t('Character limit'),
        '#description' => t('Number of characters that will be shown for each page when "Automatic page break by character limit" is selected.'),
        '#default_value' => isset($smart_paging_config['character_count']) ? $smart_paging_config['character_count'] : variable_get('smart_paging_character_count', SMART_PAGING_MAX_CHAR_LIMIT),
        '#size' => 50,
        '#states' => array(
          'visible' => array(
            ':input[name="smart_paging_method"]' => array(
              'enabled' => TRUE,
              'value' => (string) SMART_PAGING_CHARACTER_LIMIT_METHOD,
            ),
          ),
        ),
      );
      $form['smart_paging_settings']['smart_paging_word_count'] = array(
        '#type' => 'textfield',
        '#title' => t('Word limit'),
        '#description' => t('Number of words that will be shown for each page when "Automatic page break by word limit" is selected.'),
        '#default_value' => isset($smart_paging_config['word_count']) ? $smart_paging_config['word_count'] : variable_get('smart_paging_word_count', SMART_PAGING_MAX_WORD_LIMIT),
        '#size' => 50,
        '#states' => array(
          'visible' => array(
            ':input[name="smart_paging_method"]' => array(
              'enabled' => TRUE,
              'value' => (string) SMART_PAGING_WORD_LIMIT_METHOD,
            ),
          ),
        ),
      );
      $form['smart_paging_settings']['smart_paging_title_display_suffix'] = array(
        '#type' => 'checkbox',
        '#title' => t('Display content title suffix'),
        '#description' => t("Unchecking this option will stop display of content title suffix on web pages"),
        '#default_value' => isset($smart_paging_config['title_display_suffix']) ? $smart_paging_config['title_display_suffix'] : variable_get('smart_paging_title_display_suffix', TRUE),
        '#size' => 50,
        '#states' => array(
          'invisible' => array(
            ':input[name="smart_paging_method"]' => array(
              'value' => (string) SMART_PAGING_NO_METHOD,
            ),
          ),
          'disabled' => array(
            ':input[name="smart_paging_use_default"]' => array(
              'checked' => TRUE,
            ),
          ),
        ),
      );
      $form['smart_paging_settings']['smart_paging_title_suffix'] = array(
        '#type' => 'textfield',
        '#title' => t('Content title suffix'),
        '#description' => t("Text that will appear next to content's sub pages title (default is %suffix), eg. Title%suffix 2, Title%suffix 3 and so on...", array(
          '%suffix' => t(': Page '),
        )),
        '#default_value' => isset($smart_paging_config['title_suffix']) ? $smart_paging_config['title_suffix'] : variable_get('smart_paging_title_suffix', t(': Page ')),
        '#size' => 50,
        '#states' => array(
          'invisible' => array(
            ':input[name="smart_paging_method"]' => array(
              'value' => (string) SMART_PAGING_NO_METHOD,
            ),
          ),
          'visible' => array(
            ':input[name="smart_paging_title_display_suffix"]' => array(
              'checked' => TRUE,
            ),
          ),
          'disabled' => array(
            ':input[name="smart_paging_use_default"]' => array(
              'checked' => TRUE,
            ),
          ),
        ),
      );
      $form['#validate'][] = '_smart_paging_settings_validate';
      $form['#submit'][] = '_smart_paging_settings_submit';
    }
  }
}