1 | <?php
|
---|
2 | /*
|
---|
3 | $Id: task_add.php 2233 2009-05-22 22:13:55Z andrewsimpson $
|
---|
4 |
|
---|
5 | (c) 2002 - 2009 Andrew Simpson <andrew.simpson at paradise.net.nz>
|
---|
6 |
|
---|
7 | WebCollab
|
---|
8 | ---------------------------------------
|
---|
9 |
|
---|
10 | This program is free software; you can redistribute it and/or modify it under the
|
---|
11 | terms of the GNU General Public License as published by the Free Software Foundation;
|
---|
12 | either version 2 of the License, or (at your option) any later version.
|
---|
13 |
|
---|
14 | This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
---|
15 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
---|
16 | PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
---|
17 |
|
---|
18 | You should have received a copy of the GNU General Public License along with this
|
---|
19 | program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
---|
20 | Cambridge, MA 02139, USA.
|
---|
21 |
|
---|
22 | Function:
|
---|
23 | ---------
|
---|
24 |
|
---|
25 | Add a task or a project (parentless task) to the task-list
|
---|
26 |
|
---|
27 | */
|
---|
28 |
|
---|
29 | //security check
|
---|
30 | if(! defined('UID' ) ) {
|
---|
31 | die('Direct file access not permitted' );
|
---|
32 | }
|
---|
33 |
|
---|
34 | include_once(BASE.'includes/admin_config.php' );
|
---|
35 | include_once(BASE.'includes/time.php' );
|
---|
36 |
|
---|
37 | //secure vars
|
---|
38 | $content = '';
|
---|
39 | $javascript = '';
|
---|
40 | $allowed = array();
|
---|
41 |
|
---|
42 | if(GUEST ) {
|
---|
43 | warning($lang['access_denied'], $lang['not_owner'] );
|
---|
44 | }
|
---|
45 |
|
---|
46 | //get list of common users in private usergroups that this user can view
|
---|
47 | $q = db_query('SELECT '.PRE.'usergroups_users.usergroupid AS usergroupid,
|
---|
48 | '.PRE.'usergroups_users.userid AS userid
|
---|
49 | FROM '.PRE.'usergroups_users
|
---|
50 | LEFT JOIN '.PRE.'usergroups ON ('.PRE.'usergroups.id='.PRE.'usergroups_users.usergroupid)
|
---|
51 | WHERE '.PRE.'usergroups.private=1');
|
---|
52 |
|
---|
53 | for( $i=0 ; $row = @db_fetch_num($q, $i ) ; ++$i ) {
|
---|
54 | if(isset($GID[($row[0])] ) ) {
|
---|
55 | $allowed[($row[1])] = $row[1];
|
---|
56 | }
|
---|
57 | }
|
---|
58 |
|
---|
59 | //shows a priority-select box
|
---|
60 | $priority_select_box = "<tr><td>".$lang['priority'].":</td> <td>\n".
|
---|
61 | "<select name=\"priority\">\n".
|
---|
62 | "<option value=\"0\">".$task_state['dontdo']."</option>\n".
|
---|
63 | "<option value=\"1\">".$task_state['low']."</option>\n".
|
---|
64 | "<option value=\"2\" selected=\"selected\">".$task_state['normal']."</option>\n".
|
---|
65 | "<option value=\"3\">".$task_state['high']."</option>\n".
|
---|
66 | "<option value=\"4\">".$task_state['yesterday']."</option>\n".
|
---|
67 | "</select>\n</td></tr>\n";
|
---|
68 |
|
---|
69 | $content .= "<form method=\"post\" action=\"tasks.php\" onsubmit=\"return fieldCheck('name') && dateCheck();\" >\n".
|
---|
70 | "<fieldset><input type=\"hidden\" name=\"x\" value=\"".X."\" />\n".
|
---|
71 | "<input type=\"hidden\" name=\"action\" value=\"submit_insert\" />\n".
|
---|
72 | "<input type=\"hidden\" id=\"token\" name=\"token\" value=\"".TOKEN."\" />\n".
|
---|
73 | "<input type=\"hidden\" id=\"alert_field\" name=\"alert1\" value=\"".$lang['missing_field_javascript']."\" />\n".
|
---|
74 | "<input type=\"hidden\" id=\"alert_date\" name=\"alert2\" value=\"".$lang['invalid_date_javascript']."\" />\n".
|
---|
75 | "<input type=\"hidden\" id=\"alert_finish\" name=\"alert3\" value=\"".$lang['finish_date_javascript']."\" />\n";
|
---|
76 |
|
---|
77 | //this is split up in 2 parts for readabilities' sake
|
---|
78 |
|
---|
79 | // add a new TASK
|
---|
80 | if( @safe_integer($_GET['parentid']) ) {
|
---|
81 |
|
---|
82 | $parentid = $_GET['parentid'];
|
---|
83 |
|
---|
84 | //get info about the parent of this task
|
---|
85 | $q = db_query('SELECT name,
|
---|
86 | deadline,
|
---|
87 | '.$epoch.'deadline) AS epoch_deadline,
|
---|
88 | status,
|
---|
89 | owner,
|
---|
90 | parent,
|
---|
91 | projectid,
|
---|
92 | usergroupid,
|
---|
93 | globalaccess, taskgroupid
|
---|
94 | FROM '.PRE.'tasks WHERE id='.$parentid.' LIMIT 1' );
|
---|
95 |
|
---|
96 | if( ! $parent_row = db_fetch_array($q, 0 ) ) {
|
---|
97 | error('Task add', 'No parent for taskid' );
|
---|
98 | }
|
---|
99 |
|
---|
100 | switch ($parent_row['status'] ) {
|
---|
101 |
|
---|
102 | case 'created':
|
---|
103 | case 'active':
|
---|
104 | //add the project deadline (plus GMT offset) for the javascript
|
---|
105 | $project_deadline = $parent_row['epoch_deadline'] + TZ*60*60;
|
---|
106 | break;
|
---|
107 |
|
---|
108 | case 'notactive':
|
---|
109 | case 'cantcomplete':
|
---|
110 | case 'done':
|
---|
111 | case 'nolimit':
|
---|
112 | default:
|
---|
113 | //don't check project deadline with inactive parents
|
---|
114 | $project_deadline = -1;
|
---|
115 | break;
|
---|
116 | }
|
---|
117 |
|
---|
118 | $content .= "<input id=\"projectDate\" type=\"hidden\" name=\"projectDate\" value=\"".$project_deadline."\" />\n";
|
---|
119 |
|
---|
120 | $content .= "<input type=\"hidden\" name=\"parentid\" value=\"".$parentid."\" />\n".
|
---|
121 | "<input type=\"hidden\" name=\"projectid\" value=\"".$parent_row['projectid']."\" /></fieldset>\n".
|
---|
122 | "<table class=\"celldata\">\n";
|
---|
123 |
|
---|
124 | //show project name
|
---|
125 | if($parent_row['projectid'] == $parentid ) {
|
---|
126 | $project_name = $parent_row['name'];
|
---|
127 | }
|
---|
128 | else {
|
---|
129 | $project_name = db_result(db_query('SELECT name FROM '.PRE.'tasks WHERE id='.$parent_row['projectid'] ), 0, 0 );
|
---|
130 | }
|
---|
131 |
|
---|
132 | $content .= "<tr><td>".$lang['project'] .":</td> <td><a href=\"tasks.php?x=".X."&action=show&taskid=".$parent_row['projectid']."\">".$project_name."</a></td></tr>\n";
|
---|
133 |
|
---|
134 | //check if task has a parent task
|
---|
135 | if( $parent_row['parent'] != 0 ) {
|
---|
136 | $content .= "<tr><td>".$lang['parent_task'].":</td> <td><a href=\"tasks.php?x=".X."&action=show&taskid=".$parent_row['parent']."\">".$parent_row['name']."</a></td> </tr>\n";
|
---|
137 | }
|
---|
138 | $content .= "<tr><td>".$lang['creation_time'].":</td> <td>".nicetime(date('Y-m-d H:i:s', TIME_NOW - date('Z') + TZ*60*60 ) )."</td> </tr>\n".
|
---|
139 | "<tr><td>".$lang['task_name'].":</td> <td><input id=\"name\" type=\"text\" name=\"name\" size=\"60\" /></td> </tr>\n".
|
---|
140 | "<tr><td>".$lang['deadline'].":</td> <td>".date_select_from_timestamp( $parent_row['deadline'] ).
|
---|
141 | " <small><i>".$lang['taken_from_parent']."</i></small></td></tr>\n";
|
---|
142 |
|
---|
143 | //priority
|
---|
144 | $content .= $priority_select_box;
|
---|
145 |
|
---|
146 | //status
|
---|
147 | // tasks inherit status from parent
|
---|
148 | $s1=''; $s2=''; $s3=''; $s4='';
|
---|
149 | switch ($parent_row['status'] ) {
|
---|
150 |
|
---|
151 | case 'notactive':
|
---|
152 | $s2 = "selected=\"selected\" ";
|
---|
153 | break;
|
---|
154 |
|
---|
155 | case 'cantcomplete':
|
---|
156 | $s3 = "selected=\"selected\" ";
|
---|
157 | break;
|
---|
158 |
|
---|
159 | case 'done':
|
---|
160 | $s4 = "selected=\"selected\" ";
|
---|
161 | break;
|
---|
162 |
|
---|
163 | case 'created':
|
---|
164 | case 'nolimit':
|
---|
165 | case 'active':
|
---|
166 | default:
|
---|
167 | $s1 = "selected=\"selected\" ";
|
---|
168 | break;
|
---|
169 | }
|
---|
170 |
|
---|
171 | $content .= "<tr><td>".$lang['status'].":</td> <td>\n".
|
---|
172 | "<select id=\"projectStatus\" name=\"status\">\n".
|
---|
173 | "<option value=\"created\" ".$s1.">".$task_state['new']."</option>\n".
|
---|
174 | "<option value=\"notactive\" ".$s2.">".$task_state['planned']."</option>\n".
|
---|
175 | "<option value=\"active\" >".$task_state['active']."</option>\n".
|
---|
176 | "<option value=\"cantcomplete\" ".$s3.">".$task_state['cantcomplete']."</option>\n".
|
---|
177 | "<option value=\"done\" ".$s4.">".$task_state['completed']."</option>\n".
|
---|
178 | "</select></td></tr>";
|
---|
179 |
|
---|
180 |
|
---|
181 | //get all users in order to show a task owner
|
---|
182 | $q = db_query('SELECT id, fullname, private FROM '.PRE.'users WHERE deleted=\'f\' AND guest=0 ORDER BY fullname');
|
---|
183 |
|
---|
184 | //owner box
|
---|
185 | $content .= "<tr><td>".$lang['task_owner'].":</td><td><select name=\"owner\">\n".
|
---|
186 | "<option value=\"0\">".$lang['nobody']."</option>\n";
|
---|
187 | for( $i=0 ; $user_row = @db_fetch_array($q, $i ) ; ++$i) {
|
---|
188 |
|
---|
189 | //user test for privacy
|
---|
190 | if($user_row['private'] && ($user_row['id'] != UID ) && ( ! ADMIN ) && (! isset($allowed[($user_row['id'])] ) ) ) {
|
---|
191 | continue;
|
---|
192 | }
|
---|
193 |
|
---|
194 | $content .= "<option value=\"".$user_row['id']."\"";
|
---|
195 |
|
---|
196 | //default owner is present user
|
---|
197 | if($user_row['id'] == UID )
|
---|
198 | $content .= " selected=\"selected\"";
|
---|
199 |
|
---|
200 | $content .= ">".$user_row['fullname']."</option>\n";
|
---|
201 | }
|
---|
202 |
|
---|
203 | $content .= "</select></td></tr>\n";
|
---|
204 |
|
---|
205 | //get all taskgroups in order to show a task owner
|
---|
206 | $q = db_query('SELECT id, name FROM '.PRE.'taskgroups ORDER BY name');
|
---|
207 |
|
---|
208 | $content .= "<tr> <td><a href=\"help/help_language.php?item=taskgroup&type=help&lang=".LOCALE_USER."&lang=".LOCALE_USER."\" onclick=\"window.open('help/help_language.php?item=taskgroup&type=help&lang=".LOCALE_USER."&lang=".LOCALE_USER."'); return false\">".$lang['taskgroup']."</a>: </td> <td><select name=\"taskgroupid\">\n";
|
---|
209 | $content .= "<option value=\"0\">".$lang['no_group']."</option>\n";
|
---|
210 |
|
---|
211 | for( $i=0 ; $taskgroup_row = @db_fetch_array($q, $i ) ; ++$i) {
|
---|
212 |
|
---|
213 | //inherit taskgroup from parent
|
---|
214 | if($parent_row['taskgroupid'] == $taskgroup_row['id'] ) {
|
---|
215 | $content .= "<option value=\"".$taskgroup_row['id']."\" selected=\"selected\">".$taskgroup_row['name']."</option>\n";
|
---|
216 | }
|
---|
217 | else {
|
---|
218 | $content .= "<option value=\"".$taskgroup_row['id']."\">".$taskgroup_row['name']."</option>\n";
|
---|
219 | }
|
---|
220 | }
|
---|
221 | $content .= "</select></td></tr>\n";
|
---|
222 |
|
---|
223 | //show all the groups
|
---|
224 | $q = db_query( 'SELECT id, name, private FROM '.PRE.'usergroups ORDER BY name' );
|
---|
225 |
|
---|
226 | $content .= "<tr><td><a href=\"help/help_language.php?item=usergroup&type=help&lang=".LOCALE_USER."&lang=".LOCALE_USER."\" onclick=\"window.open('help/help_language.php?item=usergroup&type=help&lang=".LOCALE_USER."&lang=".LOCALE_USER."'); return false\">".$lang['usergroup']."</a>: </td> <td><select name=\"usergroupid\">\n";
|
---|
227 | $content .= "<option value=\"0\">".$lang['all_groups']."</option>\n";
|
---|
228 |
|
---|
229 | for( $i=0 ; $usergroup_row = @db_fetch_array($q, $i ) ; ++$i ) {
|
---|
230 |
|
---|
231 | //usergroup test for privacy
|
---|
232 | if( (! ADMIN ) && ($usergroup_row['private'] ) && ( ! isset($GID[($usergroup_row['id'])] ) ) ) {
|
---|
233 | continue;
|
---|
234 | }
|
---|
235 |
|
---|
236 | //inherit usergroup from parent, if parent is private
|
---|
237 | if(($parent_row['globalaccess'] == 'f' ) && ( $parent_row['usergroupid'] == $usergroup_row['id'] ) ) {
|
---|
238 | $content .= "<option value=\"".$usergroup_row['id']."\" selected=\"selected\">".$usergroup_row['name']."</option>\n";
|
---|
239 | }
|
---|
240 | else {
|
---|
241 | $content .= "<option value=\"".$usergroup_row['id']."\">".$usergroup_row['name']."</option>\n";
|
---|
242 | }
|
---|
243 | }
|
---|
244 |
|
---|
245 | //new task inherits globaccess from parent
|
---|
246 | if($parent_row['globalaccess'] == 'f' ) {
|
---|
247 | //set private
|
---|
248 | $globalaccess = "";
|
---|
249 | }
|
---|
250 | else {
|
---|
251 | //use defaults
|
---|
252 | $globalaccess = DEFAULT_ACCESS;
|
---|
253 | }
|
---|
254 |
|
---|
255 | $content .= "</select></td></tr>\n".
|
---|
256 | "<tr><td><a href=\"help/help_language.php?item=globalaccess&type=help&lang=".LOCALE_USER."\" onclick=\"window.open('help/help_language.php?item=globalaccess&type=help&lang=".LOCALE_USER."'); return false\">".$lang['all_users_view']."</a> </td><td><input type=\"checkbox\" name=\"globalaccess\" ".$globalaccess." /></td></tr>\n".
|
---|
257 | "<tr><td><a href=\"help/help_language.php?item=groupaccess&type=help&lang=".LOCALE_USER."&lang=".LOCALE_USER."\" onclick=\"window.open('help/help_language.php?item=groupaccess&type=help&lang=".LOCALE_USER."&lang=".LOCALE_USER."'); return false\">".$lang['group_edit']."</a> </td><td><input type=\"checkbox\" name=\"groupaccess\" ".DEFAULT_EDIT." /></td></tr>\n".
|
---|
258 |
|
---|
259 | "<tr> <td>".$lang['task_description']."</td> <td><textarea name=\"text\" rows=\"10\" cols=\"60\"></textarea></td> </tr>\n".
|
---|
260 |
|
---|
261 | //do we need to email ?
|
---|
262 | "<tr><td><label for=\"mailowner\">".$lang['email_owner']."</label></td><td><input type=\"checkbox\" name=\"mailowner\" id=\"mailowner\" ".DEFAULT_OWNER." /></td></tr>\n".
|
---|
263 | "<tr><td><label for=\"maillist\">".$lang['email_group']."</label></td><td><input type=\"checkbox\" name=\"maillist\" id=\"maillist\" ".DEFAULT_GROUP." /></td></tr>\n".
|
---|
264 |
|
---|
265 | "</table>\n".
|
---|
266 | "<p><input type=\"submit\" value=\"".$lang['add_task']."\" /></p>".
|
---|
267 | "</form>\n";
|
---|
268 |
|
---|
269 | new_box( $lang['add_task'], $content );
|
---|
270 |
|
---|
271 | }
|
---|
272 |
|
---|
273 | // ADD A NEW PROJECT
|
---|
274 | else {
|
---|
275 |
|
---|
276 | $content .= "<input type=\"hidden\" name=\"parentid\" value=\"0\" />\n".
|
---|
277 | "<input type=\"hidden\" name=\"projectid\" value=\"0\" />\n".
|
---|
278 | //disable project date check in javascript
|
---|
279 | "<input id=\"projectDate\" type=\"hidden\" name=\"projectDate\" value=\"-1\" />\n".
|
---|
280 | //taskgroup - we don't have this for projects
|
---|
281 | "<input type=\"hidden\" name=\"taskgroupid\" value=\"0\" /></fieldset>\n".
|
---|
282 | "<table class=\"celldata\">\n".
|
---|
283 | "<tr><td>".$lang['creation_time'].":</td><td>".nicetime(date('Y-m-d H:i:s',TIME_NOW - date('Z') + TZ*60*60 ) )."</td></tr>\n".
|
---|
284 | "<tr><td>".$lang['project_name'].":</td> <td><input id=\"name\" type=\"text\" name=\"name\" size=\"30\" /></td> </tr>\n".
|
---|
285 |
|
---|
286 | //deadline
|
---|
287 | "<tr><td>".$lang['deadline'].":</td> <td>".date_select()."</td></tr>\n";
|
---|
288 |
|
---|
289 | //priority
|
---|
290 | $content .= $priority_select_box;
|
---|
291 |
|
---|
292 | //status
|
---|
293 | $content .= "<tr> <td>".$lang['status'].":</td> <td>\n".
|
---|
294 | "<select name=\"status\">\n".
|
---|
295 | "<option value=\"notactive\" >".$task_state['planned_project']."</option>\n".
|
---|
296 | "<option value=\"nolimit\" >".$task_state['no_deadline_project']."</option>\n".
|
---|
297 | "<option value=\"active\" selected=\"selected\" >".$task_state['active_project']."</option>\n".
|
---|
298 | "<option value=\"cantcomplete\" >".$task_state['cantcomplete']."</option>\n".
|
---|
299 | "</select></td></tr>";
|
---|
300 |
|
---|
301 | //get all users in order to show a task owner
|
---|
302 | $q = db_query('SELECT id, fullname, private FROM '.PRE.'users WHERE deleted=\'f\' AND guest=0 ORDER BY fullname');
|
---|
303 |
|
---|
304 | //owner
|
---|
305 | $content .= "<tr><td>".$lang['project_owner'].":</td><td><select name=\"owner\">\n";
|
---|
306 | for( $i=0 ; $user_row = @db_fetch_array($q, $i) ; ++$i) {
|
---|
307 |
|
---|
308 | //user test for privacy
|
---|
309 | if($user_row['private'] && ($user_row['id'] != UID ) && ( ! ADMIN ) && ( ! isset($allowed[($user_row['id'])] ) ) ){
|
---|
310 | continue;
|
---|
311 | }
|
---|
312 |
|
---|
313 | $content .= "<option value=\"".$user_row['id']."\"";
|
---|
314 |
|
---|
315 | //owner is user
|
---|
316 | if( $user_row['id'] == UID ) {
|
---|
317 | $content .= " selected=\"selected\"";
|
---|
318 | }
|
---|
319 | $content .= ">".$user_row['fullname']."</option>\n";
|
---|
320 | }
|
---|
321 | $content .= "</select></td></tr>\n";
|
---|
322 |
|
---|
323 | //show all the groups
|
---|
324 | $q = db_query( 'SELECT id, name, private FROM '.PRE.'usergroups ORDER BY name' );
|
---|
325 | $content .= "<tr> <td><a href=\"help/help_language.php?item=usergroup&type=help&lang=".LOCALE_USER."\" onclick=\"window.open('help/help_language.php?item=usergroup&type=help&lang=".LOCALE_USER."'); return false\">".$lang['usergroup']."</a>: </td> <td><select name=\"usergroupid\">\n".
|
---|
326 | "<option value=\"0\">".$lang['all_groups']."</option>\n";
|
---|
327 |
|
---|
328 | for( $i=0 ; $usergroup_row = @db_fetch_array($q, $i ) ; ++$i ) {
|
---|
329 |
|
---|
330 | //usergroup test for privacy
|
---|
331 | if( (! ADMIN ) && ($usergroup_row['private'] ) && ( ! isset($GID[($usergroup_row['id'])] ) ) ) {
|
---|
332 | continue;
|
---|
333 | }
|
---|
334 |
|
---|
335 | $content .= "<option value=\"".$usergroup_row['id']."\">".$usergroup_row['name']."</option>\n";
|
---|
336 | }
|
---|
337 | $content .= "</select></td></tr>\n".
|
---|
338 | "<tr><td><a href=\"help/help_language.php?item=globalaccess&type=help&lang=".LOCALE_USER."\" onclick=\"window.open('help/help_language.php?item=globalaccess&type=help&lang=".LOCALE_USER."'); return false\">".$lang['all_users_view']."</a> </td><td><input type=\"checkbox\" name=\"globalaccess\" ".DEFAULT_ACCESS." /></td></tr>\n".
|
---|
339 | "<tr><td><a href=\"help/help_language.php?item=groupaccess&type=help&lang=".LOCALE_USER."\" onclick=\"window.open('help/help_language.php?item=groupaccess&type=help&lang=".LOCALE_USER."'); return false\">".$lang['group_edit']."</a> </td><td><input type=\"checkbox\" name=\"groupaccess\" ".DEFAULT_EDIT." /></td></tr>\n".
|
---|
340 |
|
---|
341 | "<tr> <td>".$lang['project_description']."</td> <td><textarea name=\"text\" rows=\"10\" cols=\"60\"></textarea></td> </tr>\n".
|
---|
342 |
|
---|
343 | //do we need to email ?
|
---|
344 | "<tr><td><label for=\"mailowner\">".$lang['email_owner']."</label></td><td><input type=\"checkbox\" name=\"mailowner\" id=\"mailowner\" ".DEFAULT_OWNER." /></td></tr>\n".
|
---|
345 | "<tr><td><label for=\"maillist\">".$lang['email_group']."</label></td><td><input type=\"checkbox\" name=\"maillist\" id=\"maillist\" ".DEFAULT_GROUP." /></td></tr>\n".
|
---|
346 |
|
---|
347 | "</table>\n".
|
---|
348 | "<p><input type=\"submit\" value=\"".$lang['add_project']."\" /></p>".
|
---|
349 | "</form>\n";
|
---|
350 |
|
---|
351 | new_box( $lang['add_new_project'], $content );
|
---|
352 |
|
---|
353 | }
|
---|
354 |
|
---|
355 | ?>
|
---|