<?php
/**
 * A small module to assign issues to users
 * Derived from Nedjo Rogers' module for 4.7
 * See http://drupal.org/node/4354 for the discussion
 *
 * @version $Id: project_issue_extend.module,v 1.1 2009-12-03 20:55:33 root Exp $
 * @license GPL 2.0
 *
 */

define(PROJECT_ISSUE_PERM_SETTER, 'assign project issues to others');
define(PROJECT_ISSUE_PERM_GETTER, 'be assigned project issues');

/**
 * Implementation of hook_help().
 */
function project_issue_extend_help($section) {
  switch ($section) {
    case 'admin/modules#description':
      return t('Allow assigning of issues to any member with appropriate permissions.');
  }
}

/**
 * Implementation of hook_perm().
 */
function project_issue_extend_perm() {
  return array(
    PROJECT_ISSUE_PERM_SETTER,
    PROJECT_ISSUE_PERM_GETTER,
  );
}

/**
 * Implementation of hook_form_alter().
 *
 * Add all users to select for assigning issues.
 */
function project_issue_extend_form_alter($form_id, &$form) {
  if (in_array($form_id, array('project_issue_node_form', 'comment_form', /* was 'project_comment_form' */))
    && user_access(PROJECT_ISSUE_PERM_SETTER)) {
    $options = array();
    $result = db_query(
        "SELECT DISTINCT u.uid, u.name "
      . "FROM {users} u "
      . "INNER JOIN {users_roles} ur ON u.uid  = ur.uid "
      . "INNER JOIN {role}        r  ON ur.rid = r.rid "
      . "INNER JOIN {permission}  p  ON p.rid  = r.rid "
      . "WHERE p.perm like '%%%s%%' "
      . "ORDER BY u.name",
      PROJECT_ISSUE_PERM_GETTER);
    while ($user = db_fetch_object($result)) {
      $options[$user->uid] = $user->name;
    }

    switch ($form_id) {
      case 'project_issue_node_form':
        if ($form['issue_info']['assigned']) {
          $form['issue_info']['assigned']['#options'] += $options;
        }
        break;
      case 'comment_form': // project_comment_form
        if ($form['original_issue']['issue_info']['assigned']) {
          $form['original_issue']['issue_info']['assigned']['#options'] += $options;
        }
        break;
    }
  }
}