--- project_issue.module.orig 2008-01-04 17:18:04.000000000 +0200 +++ project_issue.module 2008-01-29 13:28:29.000000000 +0200 @@ -62,7 +62,9 @@ function project_issue_perm() { 'create project issues', 'access project issues', 'edit own project issues', - 'access own project issues' + 'access own project issues', + 'assign project issues to others', + 'be assigned project issues', ); $states = project_issue_state(); foreach($states as $key => $value) { @@ -921,3 +923,45 @@ function project_issue_set_breadcrumb($n function project_issue_is_followup() { return arg(0) == 'project' && arg(1) == 'comments' && arg(2) == 'add' && is_numeric(arg(3)); } + +function _project_issue_additional_assignees() { + if (user_access('assign project issues to others')) { + $options = array(); + $result = db_query( + "SELECT u.uid, u.name " + . "FROM {users} u " + . "INNER JOIN {users_roles} ur ON u.uid = ur.uid " + . "INNER JOIN {permission} p ON ur.rid = p.rid " + . "WHERE p.perm like '%%be assigned project issues%%' " + . "ORDER BY u.name" + ); + while ($user = db_fetch_object($result)) { + $options[$user->uid] = $user->name; + } + } + else { + $options = NULL; + } + return $options; +} + +function project_issue_form_alter($form_id, &$form) { + if (in_array($form_id, array('project_issue_node_form', 'project_comment_form'))) { + $options = _project_issue_additional_assignees(); + } + + if (!empty($options)) { + switch ($form_id) { + case 'project_issue_node_form': + if ($form['issue_info']['assigned']) { + $form['issue_info']['assigned']['#options'] += $options; + } + break; + case 'project_comment_form': + if ($form['project_issue_form']['issue_info']['assigned']) { + $form['project_issue_form']['issue_info']['assigned']['#options'] += $options; + } + break; + } + } +}