diff --git a/sites/all/modules/unl/unl.module b/sites/all/modules/unl/unl.module index d3755df5585a69766c28837de1ebfde746645dbb..340a0002620f24672cd0fc0c26fea23b49265e21 100644 --- a/sites/all/modules/unl/unl.module +++ b/sites/all/modules/unl/unl.module @@ -55,37 +55,35 @@ function unl_wysiwyg_plugin($editor) { // Might need to be set later on; after retrieving customized editor // layout. //'theme_advanced_buttons1' => array(t('Button title (optional)') => 'myplugin'), - ); } } - function unl_permission() { return array( 'unl migration' => array( 'title' => t('Migration'), 'description' => t('Migrate UNL Template based sites to drupal'), - ), + ), 'unl site creation' => array( 'title' => t('Site Creation'), 'description' => t('Create new drupal sites using the UNL profile'), 'restrict access' => TRUE, ), - + 'unl grant all permissions' => array( 'title' => t('Grant All Permissions'), 'description' => t('If this is not checked, a user can only grant permissions that they themselves have. Requires the "Administer permissions" permission.'), 'restrict access' => TRUE, ), - + 'unl administer administrator permissions' => array( 'title' => t('Administer Administrator\'s Permissions'), 'description' => t('If this is not checked, a user can not change the permissions of the administrator role. Requires the "Administer permissions" permission.'), 'restrict access' => TRUE, ), - + 'unl theme settings' => array( 'title' => t('Change Theme Settings'), 'description' => t('Allow this role to change the current theme settings.'), @@ -107,7 +105,7 @@ function unl_menu() { 'type' => MENU_LOCAL_TASK, 'file' => 'unl_migration.php', ); - + $items['admin/themes'] = array( 'title' => 'Appearance', 'description' => 'Configure your theme.', @@ -117,7 +115,7 @@ function unl_menu() { 'position' => 'left', 'weight' => -6, ); - + if (conf_path() == 'sites/default') { $items['admin/sites/unl'] = array( 'title' => 'UNL Site Creation Tool', @@ -127,14 +125,14 @@ function unl_menu() { 'type' => MENU_LOCAL_TASK, 'file' => 'unl_site_creation.php', ); - + $items['admin/sites/unl/sites'] = array( 'title' => 'Sites', 'description' => 'Create and manage UNL Drupal sites.', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -8, ); - + $items['admin/sites/unl/aliases'] = array( 'title' => 'Aliases', 'description' => 'Manage aliases of UNL Drupal sites.', @@ -143,7 +141,7 @@ function unl_menu() { 'type' => MENU_LOCAL_TASK, 'file' => 'unl_site_creation.php', ); - + $items['admin/sites/unl/wdn_registry'] = array( 'title' => 'WDN Registry', 'description' => 'Settings for the connection to the WDN Registry.', @@ -154,12 +152,11 @@ function unl_menu() { 'file' => 'unl_site_creation.php', ); } - + return $items; } -function unl_menu_alter(&$items) -{ +function unl_menu_alter(&$items) { foreach (array('module', 'file', 'page arguments') as $key) { $items['admin/themes'][$key] = $items['admin/appearance/settings/' . variable_get('theme_default')][$key]; } @@ -180,89 +177,109 @@ function unl_form_alter(&$form, $form_state, $form_id) { ); $form['#submit'][] = 'unl_system_settings_form_submit'; } - - if ($form_id == 'user_admin_permissions' && !in_array(variable_get('user_admin_role', -1), array_keys($GLOBALS['user']->roles))) { - - if (!user_access('unl grant all permissions')) { - // Remove permissions this user doesn't have from the headings list. - foreach ($form['permission'] as $permission => $sub_form) { - if (is_int($permission)) { - continue; - } - if (!user_access($permission)) { - unset($form['permission'][$permission]); - } - } - - // Remove any empty permission section headings. - $permission_sections = array_keys($form['permission']); - foreach ($permission_sections as $index => $permission_section) { - if (!is_int($permission_section)) { - continue; - } - if (!isset($permission_sections[$index + 1]) || is_int($permission_sections[$index + 1])) { - unset($form['permission'][$permission_section]); + + /** + * Modify the Permissions and Roles forms for non-administrators + */ + $admin_role_id = variable_get('user_admin_role', -1); + if (!in_array($admin_role_id, array_keys($GLOBALS['user']->roles))) { + switch ($form_id) { + // Add additional validation on admin/people/permissions/roles/edit/% + case 'user_admin_role' : + $form['#validate'][] = 'unl_user_admin_role_validate'; + break; + // Hide administrator role on admin/people/permissions/roles + case 'user_admin_roles' : + foreach ($form['roles'] as $key => $role) { + if (isset($role['#role']->rid) && $role['#role']->rid == $admin_role_id) { + unset($form['roles'][$key]); + } } - } - - // Remove the permissions this user doesn't have from the checkboxes list. - foreach ($form['checkboxes'] as $role_id => $sub_form) { - foreach ($sub_form['#options'] as $permission => $value) { - if (!user_access($permission)) { - unset($form['checkboxes'][$role_id]['#options'][$permission]); + break; + // Hide administrator column on admin/people/permissions + case 'user_admin_permissions' : + if (!user_access('unl grant all permissions')) { + // Remove permissions this user doesn't have from the headings list. + foreach ($form['permission'] as $permission => $sub_form) { + if (is_int($permission)) { + continue; + } + if (!user_access($permission)) { + unset($form['permission'][$permission]); + } + } + + // Remove any empty permission section headings. + $permission_sections = array_keys($form['permission']); + foreach ($permission_sections as $index => $permission_section) { + if (!is_int($permission_section)) { + continue; + } + if (!isset($permission_sections[$index + 1]) || is_int($permission_sections[$index + 1])) { + unset($form['permission'][$permission_section]); + } + } + + // Remove the permissions this user doesn't have from the checkboxes list. + foreach ($form['checkboxes'] as $role_id => $sub_form) { + foreach ($sub_form['#options'] as $permission => $value) { + if (!user_access($permission)) { + unset($form['checkboxes'][$role_id]['#options'][$permission]); + } + } } } - } - } - - if (!user_access('unl administer administrator permissions')) { - $role_id = variable_get('user_admin_role', -1); - unset($form['role_names'][$role_id]); - unset($form['role_names']['#value'][$role_id]); - unset($form['checkboxes'][$role_id]); - } - - if (!in_array(variable_get('user_admin_role'), array_keys($GLOBALS['user']->roles))) { - $administrator_permissions = array( - 'unl administer administrator permissions', - 'unl site creation', - 'administer modules', - 'administer themes', - 'administer software updates', - 'administer imce', - 'administer filters', - ); - - foreach ($form['permission'] as $permission => $sub_form) { - if (in_array($permission, $administrator_permissions)) { - unset($form['permission'][$permission]); + + // Unset the administrator checkbox column if user can't administer administrator permissions + if (!user_access('unl administer administrator permissions')) { + unset($form['role_names'][$admin_role_id]); + unset($form['role_names']['#value'][$admin_role_id]); + unset($form['checkboxes'][$admin_role_id]); } - } - foreach ($form['checkboxes'] as $role_id => $sub_form) { - foreach ($sub_form['#options'] as $permission => $value) { + + // Make these settings unavailable even if they are enabled for the user + $administrator_permissions = array( + 'unl administer administrator permissions', + 'unl site creation', + 'administer modules', + 'administer themes', + 'administer software updates', + 'administer imce', + 'administer filters', + ); + foreach ($form['permission'] as $permission => $sub_form) { if (in_array($permission, $administrator_permissions)) { - unset($form['checkboxes'][$role_id]['#options'][$permission]); + unset($form['permission'][$permission]); } } - } + foreach ($form['checkboxes'] as $admin_role_id => $sub_form) { + foreach ($sub_form['#options'] as $permission => $value) { + if (in_array($permission, $administrator_permissions)) { + unset($form['checkboxes'][$admin_role_id]['#options'][$permission]); + } + } + } + break; + default : + break; } } - + /** * On the node edit form, hide the "Provide a menu link" checkbox since we'll * be using the menu to build a site hierarchy. Instead, add a button that will * determine whether or not the menu link is visible or not. - */ + */ if (substr($form_id, -10) == '_node_form') { $form['menu']['#title'] = 'Site hierachy'; - + $form['menu']['enabled']['#default_value'] = TRUE; $form['menu']['enabled']['#prefix'] = '<div style="display: none;">'; $form['menu']['enabled']['#suffix'] = '</div>'; - + $form['menu']['link']['link_title']['#required'] = TRUE; - - + + $mlid = $form['menu']['link']['mlid']['#value']; if ($mlid) { $menu_link = menu_link_load($mlid); @@ -277,17 +294,17 @@ function unl_form_alter(&$form, $form_state, $form_id) { '#default_value' => $default_visible, '#weight' => 0, ); - + $form['actions']['submit']['#submit'][] = 'unl_node_form_submit'; - + // Also turn on revisioning by default $form['revision_information']['revision']['#default_value'] = TRUE; unset($form['revision_information']['revision']['#states']); - + // Also hide the "Promoted to front page" option $form['options']['promote']['#prefix'] = '<div style="display:none;">'; $form['options']['promote']['#suffix'] = '</div>'; - + // Also hide the "Sticky at top of lists" option $form['options']['sticky']['#prefix'] = '<div style="display:none;">'; $form['options']['sticky']['#suffix'] = '</div>'; @@ -316,7 +333,7 @@ function unl_node_form_submit($form, &$form_state) { break; } } - + $menu_link['hidden'] = $menu_data['visible'] ? 0 : 1; menu_link_save($menu_link); } @@ -338,7 +355,7 @@ function unl_url_outbound_alter(&$path, &$options, $original_path) { if (isset($path_parts['scheme']) || $path == 'user/cas') { return; } - + $user = $GLOBALS['user']; $user_roles = array_keys($user->roles); $generic_user = TRUE; @@ -348,7 +365,7 @@ function unl_url_outbound_alter(&$path, &$options, $original_path) { } $generic_user = FALSE; } - + $options['https'] = (bool) (variable_get('https', 0) && !$generic_user); } @@ -361,21 +378,35 @@ function unl_user_access($permissions, $account = NULL) { else { $result = user_access($permission, $account); } - + if (!$result) { return FALSE; } } - + return TRUE; } -function unl_cron() -{ +/** + * Additional validation on the user_admin_role form (admin/people/permissions/roles/edit/%) + * to prevent a user from deleting the administrator role. + */ +function unl_user_admin_role_validate($form, &$form_state) { + $admin_role_id = variable_get('user_admin_role', -1); + + if ($form_state['values']['op'] == t('Delete role')) { + $role = user_role_load_by_name($form_state['values']['name']); + if ($role && $role->rid == $admin_role_id) { + form_set_error('name', t('The role name %name can not be deleted. Seriously dude. Seriously.', array('%name' => $form_state['values']['name']))); + } + } +} + +function unl_cron() { if (PHP_SAPI == 'cli') { return; } - + $queue = DrupalQueue::get('unl_migration'); if ($queue->numberOfItems() > 0) { require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'unl_migration.php'; @@ -383,9 +414,9 @@ function unl_cron() $queue->deleteItem($item); unl_migration_queue_step($item->data); } - + if (conf_path() == 'sites/default') { - + $wdn_registry_info = array( 'database' => variable_get('unl_wdn_registry_database'), 'username' => variable_get('unl_wdn_registry_username'), @@ -393,14 +424,14 @@ function unl_cron() 'host' => variable_get('unl_wdn_registry_host'), 'driver' => 'mysql', ); - + if (!$wdn_registry_info['database']) { return; } - + Database::addConnectionInfo('wdn_registry', 'default', $wdn_registry_info); db_set_active('wdn_registry'); - + try { $data = db_select('site_request', 'r') ->fields('r') @@ -412,19 +443,19 @@ function unl_cron() db_set_active(); return; } - + $sites_to_create = array(); foreach ($data as $site) { $path = $site->department . '/' . $site->site_name; $path = strtolower($path); $path = strtr($path, array(' ' => '')); - + $db_prefix = $site->site_name; $db_prefix = strtolower($db_prefix); $db_prefix = strtr($db_prefix, array(' ' => '')); - + $path = 'incubator/' . $path; - + $sites_to_create[] = array( 'site_path' => $path, 'uri' => url($path), @@ -434,7 +465,7 @@ function unl_cron() 'migration_url' => $site->migration_url, 'migration_path' => $site->migration_path, ); - + if (variable_get('unl_wdn_registry_production')) { db_update('site_request') ->fields(array('url' => url($path))) @@ -442,9 +473,9 @@ function unl_cron() ->execute(); } } - + db_set_active(); - + foreach ($sites_to_create as $site_to_create) { try { db_insert('unl_sites')->fields($site_to_create)->execute(); @@ -456,6 +487,6 @@ function unl_cron() } } } - + } }