You are here

function _menu_position_form_menu_edit_item_alter in Menu Position 7

Same name and namespace in other branches
  1. 6 menu_position.admin.inc \_menu_position_form_menu_edit_item_alter()
  2. 7.2 menu_position.admin.inc \_menu_position_form_menu_edit_item_alter()

Implements hook_form_menu_edit_item_alter().

This handles the edge case of another module accidentally exposing (or of a user hacking the URL to) the standard "menu link edit" form for a menu position rule's hidden menu link. We alter the form so that it is not posible for the link to be edited.

1 call to _menu_position_form_menu_edit_item_alter()
menu_position_form_menu_edit_item_alter in ./menu_position.module
Implements hook_form_FORM_ID_alter().

File

./menu_position.admin.inc, line 75
Provides infrequently used functions and hooks for menu_position.

Code

function _menu_position_form_menu_edit_item_alter(&$form, &$form_state) {
  if ($form['mlid']['#value'] == 0) {
    return;
  }

  // Retrieve all of the rules' mlids.
  $mlids = db_query('SELECT mlid FROM {menu_position_rules} WHERE mlid = :mlid ORDER BY weight, rid', array(
    ':mlid' => (int) $form['mlid']['#value'],
  ))
    ->fetchAll();
  if (!empty($mlids)) {

    // If the form hasn't been submitted, display a warning.
    if (empty($form_state['input'])) {
      drupal_set_message(t('This menu item cannot be edited.'), 'warning');
    }

    // Disable all the normal form elements.
    $keys = array(
      'link_title',
      'description',
      'enabled',
      'expanded',
      'parent',
      'weight',
    );
    foreach ($keys as $key) {
      $form[$key]['#disabled'] = TRUE;
    }

    // Remove the validator.
    $key = array_search('menu_edit_item_validate', $form['#validate']);
    if ($key !== FALSE) {
      unset($form['#validate'][$key]);
    }

    // Replace the standard submit handler with our own.
    $key = array_search('menu_edit_item_submit', $form['#submit']);
    if ($key !== FALSE) {
      $form['#submit'][$key] = 'menu_position_edit_item_submit';
    }

    // Replace the Save button with a Cancel button.
    unset($form['actions']['submit']);
    $form['actions']['cancel'] = array(
      '#type' => 'submit',
      '#value' => t('Cancel'),
    );
  }
}