$module_obj) {
$module_options[$name] = $module_obj->info['name'];
}
if ($_SESSION['patterns_generate_rolesandperms_state']) {
$default_options = unserialize($_SESSION['patterns_generate_rolesandperms_state']);
// dpm($default_options);
unset($_SESSION['patterns_generate_rolesandperms_state']);
} else {
$default_options['roles'] = array_combine( array_keys($user_roles) , array_keys($user_roles) );
$default_options['modules']= array_combine( array_keys($module_options) , array_keys($module_options) );
$default_options['overwrite'] = array();
}
if ($_SESSION['patterns_generate_pattern']) {
$form['patterns_generate'] = array(
'#type' => 'fieldset',
'#title' => t('Pattern Result'),
'#collapsible' => TRUE,
);
$form['patterns_generate']['pattern'] = array(
'#type' => 'textarea',
'#title' => t('Pattern'),
'#rows' => 20,
'#default_value' => $_SESSION['patterns_generate_pattern'],
'#description' => "Cut and paste this where you want to.
Maybe eyeball it to see if its what you want."
);
unset($_SESSION['patterns_generate_pattern']);
}
$form['rolesandperms'] = array(
'#type' => 'fieldset',
'#title' => t('Generate Role and Permission Pattern'),
'#tree' => TRUE,
'#collapsible' => TRUE,
'#description' => "Check the roles and module permissions you want emulate in the generated pattern.
For every role and module selected, a pattern to reflect current permissions
and roles on this site will be generated."
);
$form['rolesandperms']['roles'] = array(
'#type' => 'checkboxes',
'#title' => t('Roles to Include in Pattern'),
'#required' => True,
'#options' => user_roles(),
'#default_value' => $default_options['roles'],
);
$form['rolesandperms']['overwrite'] = array(
'#type' => 'checkboxes',
'#title' => t('Overwrite Permissions'),
'#required' => FALSE,
'#default_value' => $default_options['overwrite'],
'#description' => "overwrite will cause all other permissions for each role
to be reset/disabled",
'#options' => array('1' => 'Overwrite'),
);
$form['rolesandperms']['modules'] = array(
'#type' => 'checkboxes',
'#title' => t('Module Permissions to Include in Pattern'),
'#required' => True,
'#default_value' => $default_options['modules'],
'#options' => $module_options,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Generate Permission Pattern')
);
$form['#validate'][] = 'patterns_generate_rolesandperm_validate';
$form['#submit'][] = 'patterns_generate_rolesandperm_submit';
return $form;
}
function patterns_generate_rolesandperm_validate($form, &$form_state) {
}
function patterns_generate_rolesandperm_submit($form, &$form_state) {
$rids = $form_state['values']['rolesandperms']['roles']; // rid => 1 || 0
foreach ($rids as $rid => $use_rid) {
if ($use_rid) {
$rids_requested[] = $rid;
}
}
$result = db_query('SELECT r.rid, p.perm FROM {role} r LEFT JOIN {permission} p ON r.rid = p.rid WHERE r.rid in (%s)',
join(',',$rids_requested) );
while ($role = db_fetch_object($result)) {
$role_permissions[$role->rid] = $role->perm .',';
}
$modules = $form_state['values']['rolesandperms']['modules'];
/* snipped below modified from user_admin_perm from modules/user/user.admin.inc */
foreach ($modules as $module => $use_module) {
if ($use_module && $permissions = module_invoke($module, 'perm')) {
asort($permissions);
foreach (array_values($permissions) as $perm) {
foreach ($rids_requested as $rid) {
if (strpos($role_permissions[$rid], $perm .',') !== FALSE) {
$perms_filtered_by_requested_rid[$rid][] = $perm;
}
}
}
}
}
$roles = user_roles();
$overwrite = $form_state['values']['rolesandperms']['overwrite'][1]; // overwrite = 1 || 0
$pattern = patterns_generate_rolesandperms_template($perms_filtered_by_requested_rid,$roles,$overwrite);
$_SESSION['patterns_generate_pattern'] = $pattern;
$_SESSION['patterns_generate_rolesandperms_state'] = serialize($form_state['values']['rolesandperms']);
$form_state['redirect'] = 'admin/build/patterns/generate/rolesandperms';
return;
}
function patterns_generate_rolesandperms_template($perms_filtered_by_requested_rid,$roles,$overwrite) {
// could be themeable but not sure of utility of that
foreach ($perms_filtered_by_requested_rid as $rid => $perms) {
$role_name = $roles[$rid];
if (count($perms) > 0) {
$perm_items = " ". join("\n ",$perms) ."\n";
$perms_xml .= " \n$perm_items \n\n";
}
}
$roles_names = array_flip($roles);
unset($roles_names['anonymous user']);
unset($roles_names['authenticated user']);
$roles_xml = " ". join("\n ",array_keys($roles_names) ) ."\n";
return <<
6.x
$roles_xml
$perms_xml
EOF;
}
?>