You are here

function skinr_context_ui_form_skinr_ui_form_alter in Skinr 8.2

Same name and namespace in other branches
  1. 7.2 skinr_context/skinr_context_ui.module \skinr_context_ui_form_skinr_ui_form_alter()

Implements hook_form_alter().

File

skinr_context/skinr_context_ui.module, line 220
Administrative interface for Skinr Context. Without this module, you cannot edit your skins with context.

Code

function skinr_context_ui_form_skinr_ui_form_alter(&$form, $form_state, $form_id) {
  $group = skinr_context_group_load($form_state['build_info']['args'][0]['gid']);
  $form['skinr']['gid'] = array(
    '#type' => 'hidden',
    '#value' => $group->gid,
  );
  $form['skinr_group'] = array(
    '#tree' => TRUE,
    '#type' => 'container',
    // Move group settings to top.
    '#weight' => -1,
  );
  $form['skinr_group']['title'] = array(
    '#type' => 'textfield',
    '#title' => t('Group title'),
    '#required' => TRUE,
    '#default_value' => $group->title,
    '#description' => t('Descriptive title for this skin settings group.'),
  );
  $machine_name_prefix = $group->module . ':' . $group->element . ':';
  $form['skinr_group']['gid'] = array(
    '#type' => 'machine_name',
    '#title' => t('Group name'),
    '#default_value' => strpos($group->gid, $machine_name_prefix) === 0 ? substr($group->gid, strlen($machine_name_prefix)) : $group->gid,
    // '#maxlength' => MENU_MAX_MENU_NAME_LENGTH_UI,
    '#description' => t('A unique name to identify this group. It must only contain lowercase letters, numbers, hyphens and underscores.'),
    '#field_prefix' => $machine_name_prefix,
    '#machine_name' => array(
      'exists' => 'skinr_context_ui_group_name_exists',
      'source' => array(
        'skinr_group',
        'title',
      ),
      'replace_pattern' => '[^a-z0-9-_]+',
    ),
    // A group's machine name cannot be changed.
    '#disabled' => TRUE,
  );
  $form['skinr_group']['description'] = array(
    '#type' => 'textfield',
    '#title' => t('Description'),
    '#default_value' => $group->description,
    '#description' => t('A description for this group.'),
  );

  // Context form elements.
  $context = skinr_context_group_to_context($group);

  // Condition mode
  $form['condition_mode'] = array(
    '#type' => 'checkbox',
    '#default_value' => isset($context->condition_mode) ? $context->condition_mode : FALSE,
    '#title' => t('Require all conditions'),
    '#description' => t('If checked, all conditions must be met for this context to be active. Otherwise, the first condition that is met will activate this context.'),
  );

  // Condition plugin forms
  $form['conditions'] = array(
    '#theme' => 'context_ui_plugins',
    '#title' => t('Conditions'),
    '#description' => t('Trigger the activation of this context'),
    '#tree' => TRUE,
    'selector' => array(
      '#type' => 'select',
      '#options' => array(
        0 => '<' . t('Add a condition') . '>',
      ),
      '#default_value' => 0,
    ),
    'state' => array(
      '#attributes' => array(
        'class' => array(
          'context-plugins-state',
        ),
      ),
      '#type' => 'hidden',
    ),
    'plugins' => array(
      '#tree' => TRUE,
    ),
  );
  $conditions = array_keys(context_conditions());
  sort($conditions);
  foreach ($conditions as $condition) {
    if ($plugin = context_get_plugin('condition', $condition)) {
      $form['conditions']['plugins'][$condition] = array(
        '#tree' => TRUE,
        '#plugin' => $plugin,
        '#context_enabled' => isset($context->conditions[$condition]),
        // This flag is used at the theme layer.
        'values' => $plugin
          ->condition_form($context),
        'options' => $plugin
          ->options_form($context),
      );
      $form['conditions']['selector']['#options'][$condition] = $plugin->title;
    }
  }

  // Only add submit handler once.
  if (isset($form['#submit']) && in_array('skinr_ui_form_submit', $form['#submit'])) {
    foreach ($form['#submit'] as $key => $submit_handler) {
      if ($submit_handler == 'skinr_ui_form_submit') {
        $form['#submit'][$key] = 'skinr_context_ui_form_submit';
      }
    }
  }
}