admin_page_fieldsets.module in Util 7
Util contrib to collapse admin field sets.
File
contribs/admin_page_fieldsets/admin_page_fieldsets.moduleView source
<?php
/**
* @file
* Util contrib to collapse admin field sets.
*/
/**
* Implements hook_theme_registry_alter().
*/
function admin_page_fieldsets_theme_registry_alter(&$theme_registry) {
$path = drupal_get_path('module', 'admin_page_fieldsets');
if (!empty($theme_registry['system_modules_fieldset'])) {
// dsm(print_r($theme_registry['system_modules_fieldset'], true));
$theme_registry['system_modules_fieldset']['function'] = 'admin_page_fieldsets_theme_system_modules_fieldset';
$theme_registry['system_modules_fieldset']['theme path'] = $path;
$theme_registry['system_modules_fieldset']['file'] = 'admin_page_fieldsets.module';
// This could be better.
unset($theme_registry['system_modules_fieldset']['includes'][0]);
// dsm(print_r($theme_registry['system_modules_fieldset'], true));
}
if (!empty($theme_registry['user_admin_permissions'])) {
$theme_registry['user_admin_permissions']['function'] = 'admin_page_fieldsets_theme_user_admin_permissions';
}
}
/**
* Implements hook_form_FORM_ID_alter() for system_modules().
*/
function admin_page_fieldsets_form_system_modules_alter(&$form, $form_state) {
drupal_add_css(drupal_get_path('module', 'admin_page_fieldsets') . '/admin_page_fieldsets.css');
$packages = array();
$weights = array();
$result = db_select('system', 's')
->condition('type', 'module')
->fields('s', array(
'filename',
'name',
'weight',
'info',
))
->execute();
foreach ($result as $module) {
$info = unserialize($module->info);
$package_name = isset($info['package']) && $info['package'] ? $info['package'] : t('Other');
$packages[$package_name] = $package_name;
$weights[$module->name] = $module->weight;
}
ksort($packages);
$form['admin_page_fieldsets_module_weights'] = array(
'#type' => 'hidden',
// pass to submit()
'#value' => $weights,
);
$form['admin_page_fieldsets_list'] = array(
'#type' => 'fieldset',
'#title' => t('Package display'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#weight' => -9999,
);
$defaults = variable_get('admin_page_fieldsets_packages', array());
$form['admin_page_fieldsets_list']['admin_page_fieldsets_packages'] = array(
'#type' => 'checkboxes',
'#description' => t('Checked module packages will be displayed in an open (non-collapsed) fieldset.'),
'#default_value' => $defaults,
'#options' => $packages,
);
$display_weights = variable_get('admin_page_fieldsets_module_weight');
$form['admin_page_fieldsets_list']['admin_page_fieldsets_module_weight'] = array(
'#type' => 'checkbox',
'#title' => t('Display and edit module weight in tables'),
'#default_value' => $display_weights,
);
foreach ($packages as $package) {
// set collapsed state
$form['modules'][$package]['#collapsed'] = isset($defaults[$package]) ? $defaults[$package] === 0 : FALSE;
if ($display_weights) {
$header_array =& $form['modules'][$package]['#header'];
if (is_array($header_array)) {
// add weight column to table header
array_splice($header_array, 3, 0, t('Weight'));
foreach ($form['modules'][$package] as $module => $row_array) {
if ($module[0] != '#') {
// add weight column to table row
$form['modules'][$package][$module]['weight'] = array(
'#type' => 'textfield',
'#size' => 4,
'#default_value' => $weights[$module],
);
}
}
}
}
}
$form['#validate'][] = 'admin_page_fieldsets_system_modules_validate';
array_unshift($form['#submit'], 'admin_page_fieldsets_system_modules_submit');
}
function admin_page_fieldsets_system_modules_validate($form, &$form_state) {
if (variable_get('admin_page_fieldsets_module_weight')) {
foreach ($form_state['values']['modules'] as $package_name => $package) {
foreach ($package as $module_name => $module) {
if (!is_numeric($module['weight'])) {
form_set_error("modules][{$package_name}][{$module_name}][weight", t('The !module module weight must be numeric.', array(
'!module' => $module_name,
)));
}
}
}
}
}
function admin_page_fieldsets_system_modules_submit($form, &$form_state) {
variable_set('admin_page_fieldsets_packages', $form_state['values']['admin_page_fieldsets_packages']);
variable_set('admin_page_fieldsets_module_weight', $form_state['values']['admin_page_fieldsets_module_weight']);
if (variable_get('admin_page_fieldsets_module_weight')) {
$weights = $form_state['values']['admin_page_fieldsets_module_weights'];
foreach ($form_state['values']['modules'] as $package_name => $package) {
foreach ($package as $module_name => $module) {
if (isset($module['weight']) && $module['weight'] != $weights[$module_name]) {
db_update('system')
->fields(array(
'weight' => $module['weight'],
))
->condition('name', $module_name)
->execute();
}
}
}
}
}
/**
* Copied from system.admin.inc::theme_system_modules_fieldset. A single extra item added (see *** comments).
*/
function admin_page_fieldsets_theme_system_modules_fieldset($variables) {
$display_weights = variable_get('admin_page_fieldsets_module_weight');
//***
$form = $variables['form'];
// Individual table headers.
$rows = array();
// Iterate through all the modules, which are
// children of this fieldset.
foreach (element_children($form) as $key) {
// Stick it into $module for easier accessing.
$module = $form[$key];
$row = array();
unset($module['enable']['#title']);
$row[] = array(
'class' => array(
'checkbox',
),
'data' => drupal_render($module['enable']),
);
$label = '<label';
if (isset($module['enable']['#id'])) {
$label .= ' for="' . $module['enable']['#id'] . '"';
}
$row[] = $label . '><strong>' . drupal_render($module['name']) . '</strong></label>';
$row[] = drupal_render($module['version']);
if ($display_weights) {
$row[] = drupal_render($module['weight']);
}
// Add the description, along with any modules it requires.
$description = drupal_render($module['description']);
if ($module['#requires']) {
$description .= '<div class="admin-requirements">' . t('Requires: !module-list', array(
'!module-list' => implode(', ', $module['#requires']),
)) . '</div>';
}
if ($module['#required_by']) {
$description .= '<div class="admin-requirements">' . t('Required by: !module-list', array(
'!module-list' => implode(', ', $module['#required_by']),
)) . '</div>';
}
$row[] = array(
'data' => $description,
'class' => array(
'description',
),
);
// Display links (such as help or permissions) in their own columns.
foreach (array(
'help',
'permissions',
'configure',
) as $key) {
$row[] = array(
'data' => drupal_render($module['links'][$key]),
'class' => array(
$key,
),
);
}
$rows[] = $row;
}
return theme('table', array(
'header' => $form['#header'],
'rows' => $rows,
));
}
/**
* Implements hook_form_FORM_ID_alter() for user_admin_permissions().
*/
function admin_page_fieldsets_form_user_admin_permissions_alter(&$form, $form_state) {
drupal_add_css(drupal_get_path('module', 'admin_page_fieldsets') . '/admin_page_fieldsets.css');
$modules = array();
$module_info = system_get_info('module');
foreach (module_implements('permission') as $module) {
$modules[$module] = $module_info[$module]['name'];
}
asort($modules);
$form['admin_page_fieldsets_list'] = array(
'#type' => 'fieldset',
'#title' => t('Module display'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#weight' => -9999,
);
$defaults = variable_get('admin_page_fieldsets_modules', array());
$form['admin_page_fieldsets_list']['admin_page_fieldsets_modules'] = array(
'#type' => 'checkboxes',
'#description' => t('Permissions of checked modules will be displayed in an open (non-collapsed) fieldset.'),
'#default_value' => $defaults,
'#options' => $modules,
);
foreach ($modules as $id => $module) {
$form[$id] = array(
'#type' => 'fieldset',
'#title' => $module,
'#collapsible' => TRUE,
'#collapsed' => isset($defaults[$id]) ? $defaults[$id] === 0 : FALSE,
);
}
$form['#submit'][] = 'admin_page_fieldsets_user_admin_permissions_submit';
}
function admin_page_fieldsets_user_admin_permissions_submit($form, &$form_state) {
variable_set('admin_page_fieldsets_modules', $form_state['values']['admin_page_fieldsets_modules']);
}
/**
* Copied from user.admin.inc::theme_user_admin_permissions. Modified to display in fieldsets.
*/
function admin_page_fieldsets_theme_user_admin_permissions($variables) {
$form = $variables['form'];
$output = drupal_render($form['admin_page_fieldsets_list']);
unset($form['admin_page_fieldsets_list']);
$header = array();
$header[] = t('Permission');
foreach (element_children($form['role_names']) as $rid) {
$header[] = array(
'data' => drupal_render($form['role_names'][$rid]),
'class' => array(
'checkbox',
),
);
}
$roles = user_roles();
$tables = array();
foreach (element_children($form['permission']) as $key) {
if (is_numeric($key)) {
$module_id = $form['permission'][$key]['#id'];
$tables[$module_id] = array();
}
else {
$row = array();
$row[] = array(
'data' => drupal_render($form['permission'][$key]),
'class' => array(
'permission',
),
);
foreach (element_children($form['checkboxes']) as $rid) {
$row[] = array(
'data' => drupal_render($form['checkboxes'][$rid][$key]),
'class' => array(
'checkbox',
),
'title' => $roles[$rid] . ': ' . $form['permission'][$key]['#markup'],
);
}
$tables[$module_id][] = $row;
}
}
unset($form['permission']);
unset($form['checkboxes']);
$output .= theme('system_compact_link');
foreach ($tables as $module_id => $table) {
$form[$module_id]['#value'] = theme('table', array(
'header' => $header,
'rows' => $table,
'attributes' => array(
'id' => 'permissions',
),
));
$output .= drupal_render($form[$module_id]);
unset($form[$module_id]);
}
$output .= drupal_render_children($form);
return $output;
}
Functions
Name![]() |
Description |
---|---|
admin_page_fieldsets_form_system_modules_alter | Implements hook_form_FORM_ID_alter() for system_modules(). |
admin_page_fieldsets_form_user_admin_permissions_alter | Implements hook_form_FORM_ID_alter() for user_admin_permissions(). |
admin_page_fieldsets_system_modules_submit | |
admin_page_fieldsets_system_modules_validate | |
admin_page_fieldsets_theme_registry_alter | Implements hook_theme_registry_alter(). |
admin_page_fieldsets_theme_system_modules_fieldset | Copied from system.admin.inc::theme_system_modules_fieldset. A single extra item added (see *** comments). |
admin_page_fieldsets_theme_user_admin_permissions | Copied from user.admin.inc::theme_user_admin_permissions. Modified to display in fieldsets. |
admin_page_fieldsets_user_admin_permissions_submit |