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 * FROM project_task ' .
47 'INNER JOIN project_group_list ON ' .
48 'project_task.group_project_id = project_group_list.group_project_id ' .
49 'INNER JOIN groups ON ' .
50 'project_group_list.group_id = groups.group_id ' .
51 'WHERE project_task.project_task_id = $1 ' .
52 'AND project_group_list.is_public = $2 AND groups.is_public = $3',
53 array($project_task_id, 1, 1));
55 if (!$res || db_numrows($res) < 1) {
64 * Check whether the user has access to the project task by
65 * means of common group membership.
67 * in: int project_task_id
68 * str user_name (Unix user name)
69 * out: true, if he has; false otherwise
71 function isUserAndTaskinSameGroup($project_task_id, $user_name) {
72 $res = db_query_params('SELECT * FROM user_group ' .
73 'INNER JOIN users ON ' .
74 'users.user_id = user_group.user_id ' .
75 'INNER JOIN project_group_list ON ' .
76 'project_group_list.group_id = user_group.group_id ' .
77 'INNER JOIN project_task ON ' .
78 'project_group_list.group_project_id = project_task.group_project_id ' .
79 'WHERE project_task.project_task_id = $1 AND users.user_name = $2',
80 array($project_task_id, $user_name));
82 if (!$res || db_numrows($res) < 1) {
90 * Query for controlling the result. It gives back all user_names and
91 * project_task_ids that matches the groups above:
93 * SELECT users.user_name, project_task.project_task_id FROM users
94 * INNER JOIN user_group ON users.user_id = user_group.user_id
95 * INNER JOIN project_group_list ON user_group.group_id = project_group_list.group_id
96 * INNER JOIN project_task ON project_group_list.group_project_id = project_task.group_project_id;
98 * Query for controlling the result. It gives back all user_names that
99 * does not match a group above:
101 * SELECT users.user_name, project_task.project_task_id FROM users
102 * LEFT JOIN user_group ON users.user_id = user_group.user_id
103 * LEFT JOIN project_group_list ON user_group.group_id = project_group_list.group_id
104 * LEFT JOIN project_task ON project_group_list.group_project_id = project_task.group_project_id
105 * WHERE project_task_id isNull;
110 * Retrieve extended information about a project task.
112 * in: int project_task_id
113 * out: false (if an error occured) or an associative array with
114 * - int project_task_id (copy)
115 * - int group_project_id (for URI construction)
116 * - int group_id (for URI construction)
118 * - str summary (of the task)
120 * - int created_by (user ID)
121 * - str created_by_name (Unix user name)
125 * - str category_name (of the per-group category the task is in)
126 * - str project_name (of the per-group subproject the task is in)
128 function getAllFromProjectTask($project_task_id) {
129 $res = db_query_params('SELECT ' .
130 'project_task.project_task_id, project_task.group_project_id, project_task.summary, project_task.priority, ' .
131 'project_task.created_by, project_task.status_id, project_task.category_id, ' .
132 'users.user_name, ' .
133 'project_category.category_name, ' .
134 'project_group_list.project_name, ' .
135 'groups.group_name, ' .
136 'groups.group_id, ' .
137 'project_status.status_name ' .
138 'FROM project_status ' .
139 'INNER JOIN project_task ON ' .
140 'project_task.status_id = project_status.status_id ' .
141 'INNER JOIN users ON ' .
142 'users.user_id = project_task.created_by ' .
143 'INNER JOIN project_category ON ' .
144 'project_category.category_id = project_task.category_id ' .
145 'INNER JOIN project_group_list ON ' .
146 'project_group_list.group_project_id = project_task.group_project_id ' .
147 'INNER JOIN groups ON ' .
148 'groups.group_id = project_group_list.group_id ' .
149 'WHERE project_task.project_task_id = $1',
150 array($project_task_id));
152 if (!$res || db_numrows($res) != 1) {
156 while ($arr = db_fetch_array($res)) {
158 'project_task_id' => (int)$arr[0],
159 'group_project_id' => (int)$arr[1],
160 'group_id' => (int)$arr[11],
161 'summary' => $arr[2],
162 'priority' => (int)$arr[3],
163 'created_by' => (int)$arr[4],
164 'status_id' => (int)$arr[5],
165 'category_id' => (int)$arr[6],
166 'created_by_name' => $arr[7],
167 'category_name' => $arr[8],
168 'project_name' => $arr[9],
169 'group_name' => $arr[10],
170 'status_name' => $arr[12]