diff -u project.module project.module --- project.module 12 Aug 2010 18:30:38 -0000 +++ project.module 12 Aug 2010 18:49:03 -0000 @@ -522,11 +522,19 @@ 'title' => 'Maintainers', 'page callback' => 'drupal_get_form', 'page arguments' => array('project_maintainers_form', 1), - 'file' => 'includes/project_maintainers.inc', 'access callback' => 'project_check_admin_access', 'access arguments' => array(1, 'administer project maintainers'), + 'file' => 'includes/project_maintainers.inc', 'type' => MENU_LOCAL_TASK, ); + $items['node/%project_node/maintainers/delete/%user'] = array( + 'page callback' => 'drupal_get_form', + 'page arguments' => array('project_maintainer_delete_confirm', 1, 4), + 'access callback' => 'project_check_admin_access', + 'access arguments' => array(1, 'administer project maintainers'), + 'file' => 'includes/project_maintainers.inc', + 'type' => MENU_CALLBACK, + ); $items['node/%project_edit_project/edit/project'] = array( 'title' => 'Project', diff -u includes/project_maintainers.inc includes/project_maintainers.inc --- includes/project_maintainers.inc 12 Aug 2010 18:17:12 -0000 +++ includes/project_maintainers.inc 12 Aug 2010 19:01:38 -0000 @@ -21,6 +21,8 @@ foreach ($project_perms as $perm_name => $perm_info) { $form['#header'][$perm_name] = array('data' => $perm_info['title']); } + $form['#header']['operations'] = array('data' => t('Operations')); + if (!empty($project->project['maintainers'])) { foreach ($project->project['maintainers'] as $uid => $maintainer) { $form['maintainers'][$uid] = array(); @@ -34,6 +36,19 @@ '#default_value' => !empty($maintainer['permissions'][$perm_name]), ); } + $form['maintainers'][$uid]['operations'] = array(); + if ($uid == $project->uid) { + $form['maintainers'][$uid]['operations']['delete'] = array( + '#prefix' => '', + '#value' => t('locked'), + '#suffix' => '', + ); + } + else { + $form['maintainers'][$uid]['operations']['delete'] = array( + '#value' => l(t('delete'), "node/$project->nid/maintainers/delete/$uid"), + ); + } } } @@ -77,6 +92,7 @@ foreach (element_children($form['maintainers'][$uid]['permissions']) as $perm) { $row[] = drupal_render($form['maintainers'][$uid]['permissions'][$perm]); } + $row[] = drupal_render($form['maintainers'][$uid]['operations']); $rows[] = $row; } } @@ -87,6 +103,7 @@ foreach (element_children($form['new_maintainer']['permissions']) as $perm) { $row[] = drupal_render($form['new_maintainer']['permissions'][$perm]); } + $row[] = ''; // Empty cell for the 'Operations' column on new maintainers. $rows[] = $row; $output .= theme('table', $header, $rows); @@ -142,0 +160,40 @@ + +/** + * Confirm form for removing a uid as a cvs maintainer from a given project. + */ +function project_maintainer_delete_confirm($form_state, $project, $user) { + if ($user->uid == $project->uid) { + drupal_set_message(t('You can not delete the project owner (!user) as a maintainer.', array('!user' => theme('username', $user))), 'error'); + return drupal_goto("node/$project->nid/maintainers/"); + } + + $form['nid'] = array('#type' => 'value', '#value' => $project->nid); + $form['uid'] = array('#type' => 'value', '#value' => $user->uid); + + return confirm_form($form, + t('Are you sure you want to delete !user as a maintainer of !project?', + array( + '!user' => theme('username', $user), + '!project' => l($project->title, "node/$project->nid"), + )), + "node/$project->nid/maintainers", + t('This action cannot be undone.'), + t('Delete'), + t('Cancel')); +} + +/** + * Delete the requested user as a maintainer. + * + * Invoked when the delete button on the confirm_form() page is pressed. + */ +function project_maintainer_delete_confirm_submit($form, &$form_state) { + $nid = $form_state['values']['nid']; + $uid = $form_state['values']['uid']; + $user = user_load(array('uid' => $uid)); + + project_maintainer_remove($nid, $uid); + + drupal_set_message(t('Removed !user as a maintainer.', array('!user' => theme('username', $user)))); + $form_state['redirect'] = "node/$nid/maintainers"; +}