function smart_paging_form_alter in Smart Paging 7.2
Same name and namespace in other branches
- 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. <hr class="pagebreak" />.'),
'#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';
}
}
}