You are here

admin_menu_source.admin.inc in Administration Menu Source 7

Menu callbacks for admin_menu_source module

File

admin_menu_source.admin.inc
View source
<?php

/**
 * @file
 * Menu callbacks for admin_menu_source module
 */
function admin_menu_source_settings() {
  $roles = user_roles(TRUE, 'access administration menu');
  $menus = menu_get_menus();
  $default_values = _admin_menu_source_get_settings();
  $form['#theme'] = 'admin_menu_source_settings_form';
  $form['admin_menu_source_description'] = array(
    '#markup' => t('Note: only roles with permission to access the administration menu are shown here.'),
  );
  $form['admin_menu_source_settings'] = array(
    '#tree' => TRUE,
    '#title' => t('Menu source per role'),
    '#sorted' => FALSE,
  );
  foreach ($default_values as $rid => $setting) {
    if (empty($roles[$rid])) {
      continue;
    }
    $form['admin_menu_source_settings'][$rid]['role'] = array(
      '#markup' => check_plain($roles[$rid]),
    );
    $form['admin_menu_source_settings'][$rid]['rid'] = array(
      '#type' => 'hidden',
      '#value' => $rid,
    );
    $form['admin_menu_source_settings'][$rid]['source'] = array(
      '#type' => 'select',
      '#options' => array(
        '' => t('Default'),
      ) + $menus,
      '#default_value' => isset($setting['source']) ? $setting['source'] : '',
    );
    $form['admin_menu_source_settings'][$rid]['weight'] = array(
      '#type' => 'weight',
      '#title' => t('Weight'),
      '#default_value' => isset($setting['weight']) ? $setting['weight'] : 0,
      '#title_display' => 'invisible',
    );
    $form['admin_menu_source_settings'][$rid]['#weight'] = isset($setting['weight']) ? $setting['weight'] : 0;
  }
  $form = system_settings_form($form);

  // Add a custom submit handler.
  $form['#submit'][] = 'admin_menu_source_settings_submit';
  return $form;
}
function admin_menu_source_settings_submit() {
  $settings = _admin_menu_source_get_settings();

  // Sort the settings based on their weight.
  uasort($settings, '_admin_menu_source_sort_by_roles');

  // normalize weights
  $weight = 0;
  foreach ($settings as $key => $setting) {
    $settings[$key]['weight'] = $weight;
    $weight++;
  }

  // re-save
  variable_set('admin_menu_source_settings', $settings);

  // Flush admin_menu's cache.
  admin_menu_flush_caches();
}

/**
 * Implementation of a uasort compatible sorter function.
 * Helper function to sort roles based on their weight
 */
function _admin_menu_source_sort_by_roles($a, $b) {
  if ($a['weight'] == $b['weight']) {
    return 0;
  }
  return $a['weight'] < $b['weight'] ? -1 : 1;
}

Functions

Namesort descending Description
admin_menu_source_settings @file Menu callbacks for admin_menu_source module
admin_menu_source_settings_submit
_admin_menu_source_sort_by_roles Implementation of a uasort compatible sorter function. Helper function to sort roles based on their weight