$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; } ?>