3 * @author: Patrick Apel, tarent GmbH
8 * Retrieve group_project_id and group_id for a specific project_task_id,
9 * for URI construction and similar things.
11 * in: int project_task_id
12 * out: false, or an associative array with
13 * - int project_task_id (copy)
14 * - int group_project_id
17 function getGroupProjectIdGroupId($project_task_id) {
18 $res = db_query_params('SELECT project_task.group_project_id, project_group_list.group_id FROM project_task ' .
19 'INNER JOIN project_group_list ON project_task.group_project_id = project_group_list.group_project_id ' .
20 'WHERE project_task.project_task_id = $1',
21 array($project_task_id));
23 if (!$res || db_numrows($res) != 1) {
27 while ($arr = db_fetch_array($res)) {
29 'project_task_id' => (int)$project_task_id,
30 'group_project_id' => (int)$arr[0],
31 'group_id' => (int)$arr[1]
40 * Check if the task behind project_task_id is considered public.
42 * in: int project_task_id
43 * out: true, if it is; false otherwise
45 function isProjectTaskInfoPublic($project_task_id) {
46 $res = db_query_params('SELECT group_project_id FROM project_task WHERE project_task_id=$1',
47 array ($project_task_id)) ;
49 if (!$res || db_numrows($res) < 1) {
53 return RoleAnonymous::getInstance()->hasPermission('pm',
54 db_result ($res, 0, 'group_project_id'),
60 * Check whether the user has access to the project task by
61 * means of common group membership.
63 * in: int project_task_id
64 * str user_name (Unix user name)
65 * out: true, if he has; false otherwise
67 function isUserAndTaskinSameGroup($project_task_id, $user_name) {
68 $res = db_query_params('SELECT group_project_id FROM project_task WHERE project_task_id=$1',
69 array ($project_task_id)) ;
71 if (!$res || db_numrows($res) < 1) {
74 $arr = db_fetch_array($res) ;
76 return forge_check_perm_for_user(user_get_object_by_name ($user_name), 'pm', $arr['group_project_id'], 'read') ;
80 * Query for controlling the result. It gives back all user_names and
81 * project_task_ids that matches the groups above:
83 * SELECT users.user_name, project_task.project_task_id FROM users
84 * INNER JOIN user_group ON users.user_id = user_group.user_id
85 * INNER JOIN project_group_list ON user_group.group_id = project_group_list.group_id
86 * INNER JOIN project_task ON project_group_list.group_project_id = project_task.group_project_id;
88 * Query for controlling the result. It gives back all user_names that
89 * does not match a group above:
91 * SELECT users.user_name, project_task.project_task_id FROM users
92 * LEFT JOIN user_group ON users.user_id = user_group.user_id
93 * LEFT JOIN project_group_list ON user_group.group_id = project_group_list.group_id
94 * LEFT JOIN project_task ON project_group_list.group_project_id = project_task.group_project_id
95 * WHERE project_task_id isNull;
100 * Retrieve extended information about a project task.
102 * in: int project_task_id
103 * out: false (if an error occured) or an associative array with
104 * - int project_task_id (copy)
105 * - int group_project_id (for URI construction)
106 * - int group_id (for URI construction)
108 * - str summary (of the task)
110 * - int created_by (user ID)
111 * - str created_by_name (Unix user name)
115 * - str category_name (of the per-group category the task is in)
116 * - str project_name (of the per-group subproject the task is in)
118 function getAllFromProjectTask($project_task_id) {
119 $res = db_query_params('SELECT ' .
120 'project_task.project_task_id, project_task.group_project_id, project_task.summary, project_task.priority, ' .
121 'project_task.created_by, project_task.status_id, project_task.category_id, ' .
122 'users.user_name, ' .
123 'project_category.category_name, ' .
124 'project_group_list.project_name, ' .
125 'groups.group_name, ' .
126 'groups.group_id, ' .
127 'project_status.status_name ' .
128 'FROM project_status ' .
129 'INNER JOIN project_task ON ' .
130 'project_task.status_id = project_status.status_id ' .
131 'INNER JOIN users ON ' .
132 'users.user_id = project_task.created_by ' .
133 'INNER JOIN project_category ON ' .
134 'project_category.category_id = project_task.category_id ' .
135 'INNER JOIN project_group_list ON ' .
136 'project_group_list.group_project_id = project_task.group_project_id ' .
137 'INNER JOIN groups ON ' .
138 'groups.group_id = project_group_list.group_id ' .
139 'WHERE project_task.project_task_id = $1',
140 array($project_task_id));
142 if (!$res || db_numrows($res) != 1) {
146 while ($arr = db_fetch_array($res)) {
148 'project_task_id' => (int)$arr[0],
149 'group_project_id' => (int)$arr[1],
150 'group_id' => (int)$arr[11],
151 'summary' => $arr[2],
152 'priority' => (int)$arr[3],
153 'created_by' => (int)$arr[4],
154 'status_id' => (int)$arr[5],
155 'category_id' => (int)$arr[6],
156 'created_by_name' => $arr[7],
157 'category_name' => $arr[8],
158 'project_name' => $arr[9],
159 'group_name' => $arr[10],
160 'status_name' => $arr[12]