View source
<?php
function perms_fieldsets_menu() {
$menu['admin/settings/util/apfm'] = array(
'title' => 'Manage Access Permissions Fieldsets',
'description' => 'Manage Access Permissions Fieldsets',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'perms_fieldsets_settings',
),
);
return $menu;
}
function perms_fieldsets_theme() {
return array(
'perms_fieldsets_theme' => array(
'arguments' => array(
'form' => null,
),
),
);
}
function perms_fieldsets_settings() {
$form['todo'] = array(
'#type' => 'fieldset',
'#title' => 'TODO list',
);
$form['todo']['item1'] = array(
'#type' => 'item',
'#value' => 'create settings for default module permission coppalsing / expanding',
);
$form['todo']['item2'] = array(
'#type' => 'item',
'#value' => 'Enable permission counter per role ( administrator[3/10] )',
);
return $form;
}
function perms_fieldsets_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'system_modules':
$form['description']['perms_fieldsets']['#value'] = t('Set default collapsed/expanded state for <a href="@url">Access Permissions</a>', array(
'@url' => url('admin/user/permissions'),
));
break;
case 'user_admin_perm':
$form['#theme'] = 'perms_fieldsets_theme';
break;
}
}
function theme_perms_fieldsets_theme($form) {
$header[] = array(
'data' => t('Permission'),
'width' => '100%',
);
foreach (element_children($form['role_names']) as $rid) {
if (is_array($form['role_names'][$rid])) {
$header[] = array(
'data' => drupal_render($form['role_names'][$rid]),
'class' => 'checkbox',
'nowrap' => 'nowrap',
);
}
}
$fieldset_form = array();
$roles = user_roles();
$fieldset_weight = 0;
$fieldset_module_watcher = '';
$fieldset_module_watcher_old = '';
foreach (element_children($form['permission']) as $key) {
if (is_array($form['permission'][$key])) {
$row = array();
if (is_numeric($key)) {
$fieldset_module_watcher = $form['permission'][$key]['#value'];
$fieldset_form[$fieldset_module_watcher] = array(
'#type' => 'fieldset',
'#title' => t('@module module', array(
'@module' => $fieldset_module_watcher,
)),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#weight' => $fieldset_weight++,
);
$row[] = array(
'data' => t('@module module', array(
'@module' => drupal_render($form['permission'][$key]),
)),
'class' => 'module',
'id' => 'module-' . $form['permission'][$key]['#value'],
'colspan' => count($form['role_names']) + 1,
);
}
else {
$row[] = array(
'data' => drupal_render($form['permission'][$key]),
'class' => 'permission',
);
foreach (element_children($form['checkboxes']) as $rid) {
if (is_array($form['checkboxes'][$rid])) {
$row[] = array(
'data' => drupal_render($form['checkboxes'][$rid][$key]),
'class' => 'checkbox',
'title' => $roles[$rid] . ' : ' . t($key),
);
}
}
$fieldset_rows[] = $row;
}
if ($fieldset_module_watcher != $fieldset_module_watcher_old) {
if (!empty($fieldset_module_watcher_old)) {
$fieldset_form[$fieldset_module_watcher_old][$fieldset_module_watcher_old . 'perms'] = array(
'#type' => 'item',
'#value' => theme('table', $header, $fieldset_rows, array(
'id' => 'permissions',
)),
);
unset($fieldset_rows);
$fieldset_module_watcher_old = $fieldset_module_watcher;
}
else {
$fieldset_module_watcher_old = $fieldset_module_watcher;
}
}
$rows[] = $row;
}
}
$fieldset_form[$fieldset_module_watcher_old][$fieldset_module_watcher_old . 'perms'] = array(
'#type' => 'item',
'#value' => theme('table', $header, $fieldset_rows, array(
'id' => 'permissions',
)),
);
$fieldset_output = drupal_render($fieldset_form);
$fieldset_output .= drupal_render($form);
return $fieldset_output;
}