You are here

function taxonomy_menu_vocab_submit in Taxonomy menu 8

Same name and namespace in other branches
  1. 6.2 taxonomy_menu.module \taxonomy_menu_vocab_submit()
  2. 7.2 taxonomy_menu.admin.inc \taxonomy_menu_vocab_submit()
  3. 7 taxonomy_menu.module \taxonomy_menu_vocab_submit()

Form submission handler for taxonomy_form_vocabulary().

Check to see if the user has selected a different menu, and only rebuild if this is the case.

See also

taxonomy_menu_form_taxonomy_form_vocabulary()

1 string reference to 'taxonomy_menu_vocab_submit'
taxonomy_menu_form_taxonomy_form_vocabulary in ./taxonomy_menu.admin.inc
Form constructor for the vocabulary editing form. We add our taxonomy_menu settings in here on a per-vocabulary basis.

File

./taxonomy_menu.admin.inc, line 177
Administrative page callbacks for the Taxonomy menu module.

Code

function taxonomy_menu_vocab_submit($form, &$form_state) {

  // Initialize flag variables for updating/rebuilding the taxonomy menu.
  $update = $insert = FALSE;
  $menu_disabled = $form_state['values']['taxonomy_menu']['vocab_parent'] == '0';
  $vid = $form_state['values']['vid'];

  // Flatten array of submitted settings so we can save them more easily.
  $flatten_settings = _taxonomy_menu_flatten_form_settings($form_state['values']['taxonomy_menu']);

  // If menu location has been set to disabled, don't throw notices by trying to
  // explode 0 with ':'.
  $vocab_parent = $flatten_settings['vocab_parent'];
  $menu_location = $vocab_parent == '0' ? '0:0' : $vocab_parent;
  list($flatten_settings['vocab_menu'], $flatten_settings['vocab_parent']) = explode(':', $menu_location);

  // Get all the settings that have changed since the last submit. If some of
  // them have changed, then update the taxonomy menu.
  $changed_settings = _taxonomy_menu_get_changed_settings($flatten_settings, $vid);
  if (!empty($changed_settings)) {
    $update = TRUE;

    // Options have changed, save/update the menu.
    $menu_change = in_array('vocab_parent', $changed_settings) || in_array('vocab_menu', $changed_settings);
    if ($menu_change) {

      // Menu location has changed.
      if ($menu_disabled) {

        // Menu was disabled, delete all existing menu links.
        taxonomy_menu_menu_links_delete($vid);
      }
      else {

        // Menu location has been changed and is not disabled.
        $old_vocab_parent = taxonomy_menu_variable_get('vocab_parent', $vid, 0);
        $old_vocab_menu = taxonomy_menu_variable_get('vocab_menu', $vid, 0);
        if ($old_vocab_menu == 0 && $old_vocab_parent == 0) {

          // Menu was disabled before, create new links.
          $insert = TRUE;
        }
      }

      // Do a full menu rebuild in case we have removed or moved the menu.
      \Drupal::state()
        ->set('menu_rebuild_needed', TRUE);
    }
  }
  elseif (!$flatten_settings['rebuild']) {

    // Display a notification message. Nothing to update.
    drupal_set_message(t('The Taxonomy menu was not updated. Nothing to update.'), 'status');
  }

  // Save all the submitted values.
  _taxonomy_menu_save_form_settings($flatten_settings, $vid);

  // We don't need to check for the disabled menu location because the rebuild
  // function will delete the taxonomy menu in all cases.
  if ($flatten_settings['rebuild']) {
    taxonomy_menu_items_rebuild($vid);
  }
  elseif ($insert) {

    // Update only menu links that are available in taxonomy_menu table.
    taxonomy_menu_menu_links_insert($vid);
  }
  elseif ($update) {

    // Update only menu links that are available in taxonomy_menu table.
    taxonomy_menu_menu_links_update($vid);
  }
}