You are here

function display_cache_view_mode_settings_form_submit in Display Cache 7

Custom submit handler for display cache settings form.

See also

display_cache_form_field_ui_display_overview_form_alter()

1 string reference to 'display_cache_view_mode_settings_form_submit'
display_cache_field_ui_form in ./display_cache.admin.inc
Display cache settings form.

File

./display_cache.admin.inc, line 310
Provides the Display Cache administrative interface.

Code

function display_cache_view_mode_settings_form_submit($form, $form_state) {
  $values = $form_state['values'];

  // Store display settings.
  $settings['default']['use'] = $values['display_cache_use'];
  $settings['default']['page_granularity'] = $values['display_cache_page_granularity'];
  $settings['default']['user_granularity'] = $values['display_cache_user_granularity'];
  $settings['default']['granularity'] = $values['display_cache_page_granularity'] | $values['display_cache_user_granularity'];

  // Store field settings.
  if (!empty($form_state['display_cache_field_settings'])) {
    foreach ($form_state['display_cache_field_settings'] as $field_name) {

      // Store override settings.
      $field_override = $values['display_cache_field_' . $field_name . '_override'];
      if ($settings['default']['use'] != DISPLAY_CACHE_FIELDS && $field_override == DISPLAY_CACHE_DISABLED) {
        $settings[$field_name]['override'] = DISPLAY_CACHE_FIELDS;
      }
      else {
        $settings[$field_name]['override'] = $field_override;
      }
      if ($settings[$field_name]['override'] == DISPLAY_CACHE_ENABLED) {

        // Store page granularity for this field.
        $field_page_granularity = $values['display_cache_field_' . $field_name . '_page_granularity'];
        if (!empty($settings['default']['page_granularity']) && $settings['default']['page_granularity'] <= $field_page_granularity) {
          $settings[$field_name]['page_granularity'] = $settings['default']['page_granularity'];
        }
        else {
          $settings[$field_name]['page_granularity'] = $field_page_granularity;
        }

        // Store user granularity for this field.
        $field_user_granularity = $values['display_cache_field_' . $field_name . '_user_granularity'];
        if (!empty($settings['default']['user_granularity']) && $settings['default']['user_granularity'] <= $field_user_granularity) {
          $settings[$field_name]['user_granularity'] = $settings['default']['user_granularity'];
        }
        else {
          $settings[$field_name]['user_granularity'] = $field_user_granularity;
        }
      }
      else {

        // Set default settings for this field if it is not overridden.
        $settings[$field_name]['page_granularity'] = $settings['default']['page_granularity'];
        $settings[$field_name]['user_granularity'] = $settings['default']['user_granularity'];
      }
      $settings[$field_name]['granularity'] = $settings[$field_name]['page_granularity'] | $settings[$field_name]['user_granularity'];
    }
  }
  $bundle = $form['#bundle'];
  $entity_type = $form['#entity_type'];
  $view_mode = $form['#view_mode'];
  $variable_name = 'display_cache_' . $entity_type . '_' . $bundle . '_' . $view_mode;
  variable_set($variable_name, $settings);
  $display_cache_variables = variable_get('display_cache_variables', array());
  if (!in_array($variable_name, $display_cache_variables)) {
    $display_cache_variables[] = $variable_name;
    variable_set('display_cache_variables', $display_cache_variables);
  }
  if ($entity_type === 'node') {
    $clear_on_comment_publication_settings = display_cache_get_comment_publication_clears_host_entity_cache_settings($entity_type, $bundle);
    $clear_on_comment_publication_settings[$view_mode] = $values['clear_on_comment_publication'];
    $variable_name = display_cache_get_comment_publication_clears_host_entity_cache_setting_name($entity_type, $bundle);
    variable_set($variable_name, $clear_on_comment_publication_settings);

    // Unset the global clearing for this node type, because else it would over-
    // write this setting.
    variable_del('display_cache_comment_publication_clears_host_entity_cache_' . $bundle);
    if (!in_array($variable_name, $display_cache_variables)) {
      $display_cache_variables[] = $variable_name;
      variable_set('display_cache_variables', $display_cache_variables);
    }
  }
}