admin_select.module in Administration Menu select 6
Same filename and directory in other branches
Core functionality for Administration Menu select module.
File
admin_select.moduleView source
<?php
/**
* @file
* Core functionality for Administration Menu select module.
*/
/**
* Include additional files.
*/
foreach (module_list() as $module) {
if (file_exists($file = dirname(__FILE__) . "/includes/{$module}.inc")) {
require_once $file;
}
}
/**
* Implements hook_init().
*/
function admin_select_init() {
$data = unserialize($GLOBALS['user']->data);
$current = isset($data) && isset($data['admin_select']) ? $data['admin_select'] : _admin_select_default();
$info = admin_select_get_admin_select_info();
foreach ($info as $key => $item) {
if ($key != $current) {
admin_select_suppress_item($item);
}
}
}
function _admin_select_default() {
$info = admin_select_get_admin_select_info();
$settings = variable_get('admin_select_defaults', array());
foreach ($settings as &$setting) {
$setting['#weight'] = $setting['weight'];
}
uasort($settings, "element_sort");
foreach ($settings as $rid => $setting) {
if (isset($GLOBALS['user']->roles[$rid]) && (isset($info[$setting['admin_select_default']]) || empty($setting['admin_select_default']))) {
return $setting['admin_select_default'];
}
}
return '';
}
/**
* Implements hook_perm().
*/
function admin_select_perm() {
return array(
'administer administration menu select',
'select administration menu',
);
}
/**
* Implements hook_theme().
*/
function admin_select_theme() {
$items = array();
$items['admin_select_defaults'] = array(
'arguments' => array(
'form' => array(),
),
);
return $items;
}
/**
* Administration Menu select deafults form.
*/
function admin_select_defaults(&$form_state) {
$settings = variable_get('admin_select_defaults', array());
$form = array();
$info = admin_select_get_admin_select_info();
foreach ($info as &$item) {
$item = $item['title'];
}
$form['roles']['#tree'] = TRUE;
foreach (user_roles(TRUE) as $rid => $role) {
$form['roles'][$rid]['#weight'] = isset($settings[$rid]) ? $settings[$rid]['weight'] : 0;
$form['roles'][$rid]["admin_select_default"] = array(
'#type' => 'select',
'#title' => ucwords($role),
'#options' => array(
'' => t('None'),
) + $info,
'#default_value' => isset($settings[$rid]) ? $settings[$rid]['admin_select_default'] : '',
);
$form['roles'][$rid]['weight'] = array(
'#type' => 'weight',
'#delta' => count(user_roles(TRUE)),
'#default_value' => isset($settings[$rid]) ? $settings[$rid]['weight'] : 0,
'#attributes' => array(
'class' => 'admin-select-weight',
),
);
}
uasort($form['roles'], "element_sort");
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save configuration'),
);
return $form;
}
/**
* Submit callback; Administration Menu select deafults form.
*/
function admin_select_defaults_submit($form, $form_state) {
drupal_set_message('The defaults have been saved.');
variable_set('admin_select_defaults', $form_state['values']['roles']);
}
/**
* Implements hook_user().
*/
function admin_select_user($op, &$edit, &$account, $category = NULL) {
if ($op == 'form' && $category == 'account' && user_access('select administration menu')) {
$form = array();
$data = unserialize($edit['data']);
$info = admin_select_get_admin_select_info();
$options = array();
foreach ($info as $key => $item) {
if (!empty($item['access'])) {
$options[$key] = $item['title'];
}
}
asort($options);
$form['admin_select'] = array(
'#type' => 'fieldset',
'#title' => t('Administration Menu select settings'),
'#collapsible' => TRUE,
'#weight' => 10,
'#access' => !empty($options),
);
$form['admin_select']['admin_select'] = array(
'#type' => 'select',
'#options' => array(
'' => t('None'),
) + $options,
'#default_value' => isset($data['admin_select']) ? $data['admin_select'] : '',
);
return $form;
}
}
/**
*
*/
function admin_select_get_admin_select_info($check_access = TRUE) {
$info = module_invoke_all('admin_select_info');
drupal_alter('admin_select_info', $info);
if ($check_access) {
$info = array_map('_admin_select_check_access', $info);
}
return $info;
}
/**
* Suppress and admin item.
*/
function admin_select_suppress_item($item) {
if (!empty($item['include'])) {
include_once $item['include'];
}
if (!empty($item['suppress callback']) && function_exists($item['suppress callback'])) {
$item['suppress callback']();
}
}
/**
* Check to see if the current user has access to an admin item.
*/
function _admin_select_check_access(&$item) {
// Determine access callback, which will decide whether or not the current
// user has access to this path.
$item += array(
'access callback' => 'user_access',
);
$callback = empty($item['access callback']) ? FALSE : trim($item['access callback']);
// Check for a TRUE or FALSE value.
if (is_bool($callback)) {
$item['access'] = $callback;
}
else {
$arguments = isset($item['access arguments']) ? $item['access arguments'] : array();
// As call_user_func_array is quite slow and user_access is a very common
// callback, it is worth making a special case for it.
if ($callback == 'user_access') {
$item['access'] = count($arguments) == 1 ? user_access($arguments[0]) : user_access($arguments[0], $arguments[1]);
}
elseif (function_exists($callback)) {
$item['access'] = call_user_func_array($callback, $arguments);
}
}
return $item;
}
/**
* Theme callback; Administration Menu select deafults form.
*/
function theme_admin_select_defaults($form) {
$header = array(
t('Role'),
t('Administration menu'),
t('Weight'),
);
$rows = array();
foreach (element_children($form['roles']) as $rid) {
$title = $form['roles'][$rid]['admin_select_default']['#title'];
unset($form['roles'][$rid]['admin_select_default']['#title']);
$rows[] = array(
'data' => array(
$title,
drupal_render($form['roles'][$rid]['admin_select_default']),
drupal_render($form['roles'][$rid]['weight']),
),
'class' => 'draggable',
);
}
drupal_add_tabledrag('admin-select', 'order', 'sibling', 'admin-select-weight');
$output = theme('table', $header, $rows, array(
'id' => 'admin-select',
));
$output .= drupal_render($form);
return $output;
}
Functions
Name![]() |
Description |
---|---|
admin_select_defaults | Administration Menu select deafults form. |
admin_select_defaults_submit | Submit callback; Administration Menu select deafults form. |
admin_select_get_admin_select_info | |
admin_select_init | Implements hook_init(). |
admin_select_perm | Implements hook_perm(). |
admin_select_suppress_item | Suppress and admin item. |
admin_select_theme | Implements hook_theme(). |
admin_select_user | Implements hook_user(). |
theme_admin_select_defaults | Theme callback; Administration Menu select deafults form. |
_admin_select_check_access | Check to see if the current user has access to an admin item. |
_admin_select_default |