3 * @author: Patrick Apel, tarent GmbH
7 * Retrieve group_project_id and group_id for a specific project_task_id,
8 * for URI construction and similar things.
10 * in: int project_task_id
11 * out: false, or an associative array with
12 * - int project_task_id (copy)
13 * - int group_project_id
16 function getGroupProjectIdGroupId($project_task_id) {
17 $res = db_query_params('SELECT project_task.group_project_id, project_group_list.group_id FROM project_task ' .
18 'INNER JOIN project_group_list ON project_task.group_project_id = project_group_list.group_project_id ' .
19 'WHERE project_task.project_task_id = $1',
20 array($project_task_id));
22 if (!$res || db_numrows($res) != 1) {
26 while ($arr = db_fetch_array($res)) {
28 'project_task_id' => (int)$project_task_id,
29 'group_project_id' => (int)$arr[0],
30 'group_id' => (int)$arr[1]
38 * Check if the task behind project_task_id is considered public.
40 * in: int project_task_id
41 * out: true, if it is; false otherwise
43 function isProjectTaskInfoPublic($project_task_id) {
44 $res = db_query_params('SELECT group_project_id FROM project_task WHERE project_task_id=$1',
45 array ($project_task_id)) ;
47 if (!$res || db_numrows($res) < 1) {
51 return RoleAnonymous::getInstance()->hasPermission('pm',
52 db_result ($res, 0, 'group_project_id'),
57 * Check whether the user has access to the project task by
58 * means of common group membership.
60 * in: int project_task_id
61 * str user_name (Unix user name)
62 * out: true, if he has; false otherwise
64 function isUserAndTaskinSameGroup($project_task_id, $user_name) {
65 $res = db_query_params('SELECT group_project_id FROM project_task WHERE project_task_id=$1',
66 array ($project_task_id)) ;
68 if (!$res || db_numrows($res) < 1) {
71 $arr = db_fetch_array($res) ;
73 return forge_check_perm_for_user(user_get_object_by_name ($user_name), 'pm', $arr['group_project_id'], 'read') ;
77 * Query for controlling the result. It gives back all user_names and
78 * project_task_ids that matches the groups above:
80 * SELECT users.user_name, project_task.project_task_id FROM users
81 * INNER JOIN user_group ON users.user_id = user_group.user_id
82 * INNER JOIN project_group_list ON user_group.group_id = project_group_list.group_id
83 * INNER JOIN project_task ON project_group_list.group_project_id = project_task.group_project_id;
85 * Query for controlling the result. It gives back all user_names that
86 * does not match a group above:
88 * SELECT users.user_name, project_task.project_task_id FROM users
89 * LEFT JOIN user_group ON users.user_id = user_group.user_id
90 * LEFT JOIN project_group_list ON user_group.group_id = project_group_list.group_id
91 * LEFT JOIN project_task ON project_group_list.group_project_id = project_task.group_project_id
92 * WHERE project_task_id isNull;
96 * Retrieve extended information about a project task.
98 * in: int project_task_id
99 * out: false (if an error occured) or an associative array with
100 * - int project_task_id (copy)
101 * - int group_project_id (for URI construction)
102 * - int group_id (for URI construction)
104 * - str summary (of the task)
106 * - int created_by (user ID)
107 * - str created_by_name (Unix user name)
111 * - str category_name (of the per-group category the task is in)
112 * - str project_name (of the per-group subproject the task is in)
114 function getAllFromProjectTask($project_task_id) {
115 $res = db_query_params('SELECT ' .
116 'project_task.project_task_id, project_task.group_project_id, project_task.summary, project_task.priority, ' .
117 'project_task.created_by, project_task.status_id, project_task.category_id, ' .
118 'users.user_name, ' .
119 'project_category.category_name, ' .
120 'project_group_list.project_name, ' .
121 'groups.group_name, ' .
122 'groups.group_id, ' .
123 'project_status.status_name ' .
124 'FROM project_status ' .
125 'INNER JOIN project_task ON ' .
126 'project_task.status_id = project_status.status_id ' .
127 'INNER JOIN users ON ' .
128 'users.user_id = project_task.created_by ' .
129 'INNER JOIN project_category ON ' .
130 'project_category.category_id = project_task.category_id ' .
131 'INNER JOIN project_group_list ON ' .
132 'project_group_list.group_project_id = project_task.group_project_id ' .
133 'INNER JOIN groups ON ' .
134 'groups.group_id = project_group_list.group_id ' .
135 'WHERE project_task.project_task_id = $1',
136 array($project_task_id));
138 if (!$res || db_numrows($res) != 1) {
142 while ($arr = db_fetch_array($res)) {
144 'project_task_id' => (int)$arr[0],
145 'group_project_id' => (int)$arr[1],
146 'group_id' => (int)$arr[11],
147 'summary' => $arr[2],
148 'priority' => (int)$arr[3],
149 'created_by' => (int)$arr[4],
150 'status_id' => (int)$arr[5],
151 'category_id' => (int)$arr[6],
152 'created_by_name' => $arr[7],
153 'category_name' => $arr[8],
154 'project_name' => $arr[9],
155 'group_name' => $arr[10],
156 'status_name' => $arr[12]