You are here

spaces_customtext.admin.inc in Spaces 7

File

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

/**
 * System settings form for custom text strings.
 */
function spaces_customtext_settings_form($form, $form_state, $feature) {
  global $language;
  $langcode = $language->language;
  $custom_strings = variable_get("locale_custom_strings_{$langcode}", array());
  $strings = spaces_customtext_feature_strings($feature);
  if (!empty($strings)) {
    foreach ($strings as $original) {

      // Start with the feature name.
      $form[$original] = array(
        '#type' => 'textfield',
        '#title' => check_plain($original),
        '#default_value' => isset($custom_strings[$original]) ? $custom_strings[$original] : '',
      );
    }
    $master["locale_custom_strings_{$langcode}"] = $form;
    $master["locale_custom_strings_{$langcode}"]['#tree'] = TRUE;
    $master["locale_custom_strings_{$langcode}"]['#theme'] = 'spaces_customtext_settings_form';
    $master["locale_custom_strings_{$langcode}"]['#element_validate'] = array(
      'spaces_customtext_settings_validate',
    );
    $master["locale_custom_strings_{$langcode}"]['#custom_strings'] = $custom_strings;
    $master = system_settings_form($master);
    return $master;
  }
  drupal_not_found();
  exit;
}

/**
 * Validation handler for custom strings. Actually acts as a form processor.
 */
function spaces_customtext_settings_validate(&$element, &$form_state) {
  $name = end($element['#parents']);

  // If "Reset" was hit, we only want to reset values for this particular
  // feature. Yank this feature's strings and preserve the rest by switching
  // $op to 'Save configuration'.
  $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : '';
  if ($op == t('Reset to defaults')) {
    $form_state['values'][$name] = array_diff_key($element['#custom_strings'], $form_state['values'][$name]);
    $form_state['values']['op'] = t('Save configuration');
  }
  else {
    $form_state['values'][$name] = array_merge($element['#custom_strings'], $form_state['values'][$name]);
    $form_state['values'][$name] = array_filter($form_state['values'][$name], 'trim');
  }
}

/**
 * Theme function for customtext fields.
 */
function theme_spaces_customtext_settings_form() {

  // TODO Number of parameters in this theme funcion does not match number of parameters found in hook_theme.
  drupal_add_css(drupal_get_path('module', 'spaces_customtext') . '/spaces_customtext.css');
  $rows = array();
  foreach (element_children($element) as $key) {
    $label = $element[$key]['#title'];
    unset($element[$key]['#title']);
    $rows[] = array(
      $label,
      drupal_render($element[$key]),
    );
  }
  $output = theme('table', array(
    'header' => array(
      t('Original'),
      t('Customized'),
    ),
    'rows' => $rows,
    'attributes' => array(
      'class' => 'spaces-customtext',
    ),
  ));
  $output .= drupal_render($element);
  return $output;
}

/**
 * Retrieve strings related to the given feature.
 */
function spaces_customtext_feature_strings($feature) {
  global $language;
  $langcode = $language->language;
  $features = spaces_features(spaces_get_space() ? spaces_get_space()->type : 'site');
  $strings = array();
  if (isset($features[$feature])) {

    // We want to get the original string values for any object retrieval we
    // do, so use a fake language code temporarily. Note that any
    // retrieval must clear any caches (static or db) that may have t()'d
    // the original source string.
    $language->language = 'spaces_customtext';
    $feature = $features[$feature];

    // Feature name.
    $strings[] = $feature->info['name'];

    // Node types.
    if ($map = features_get_component_map('node')) {
      foreach ($map as $node_type => $component_features) {
        if (in_array($feature->name, $component_features)) {
          node_types_clear();
          $strings[] = node_type_get_name($node_type);
        }
      }
    }

    // Views.
    if ($map = features_get_component_map('views')) {
      foreach ($map as $view_name => $component_features) {
        if (in_array($feature->name, $component_features) && ($view = views_get_view($view_name, TRUE))) {
          foreach (array_keys($view->display) as $display_id) {
            $view
              ->set_display($display_id);
            $strings[] = $view->display_handler
              ->get_option('title');
          }
          $view
            ->destroy();
        }
      }
    }

    // hook_menu().
    if (module_hook($feature->name, 'menu')) {
      $items = module_invoke($feature->name, 'menu');
      foreach ($items as $path => $item) {

        // Don't pollute options with administrative page strings.
        if (isset($item['title']) && strpos($path, 'features/') === FALSE && strpos($path, 'admin/') === FALSE) {
          $strings[] = $item['title'];
        }
      }
    }

    // Localize the original strings. This will use translations of the
    // original strings if available.
    $localized = array();
    foreach ($strings as $string) {
      $localized[] = module_exists('locale') ? locale($string, $langcode) : $string;
    }

    // Put the actual language code back.
    $language->language = $langcode;
  }
  return $strings;
}

Functions

Namesort descending Description
spaces_customtext_feature_strings Retrieve strings related to the given feature.
spaces_customtext_settings_form System settings form for custom text strings.
spaces_customtext_settings_validate Validation handler for custom strings. Actually acts as a form processor.
theme_spaces_customtext_settings_form Theme function for customtext fields.