3 * GForge Project Management Facility
5 * Copyright 2002 GForge, LLC
12 By Tim Perdue, Sourceforge, 11/99
13 Heavy rewrite by Tim Perdue April 2000
15 Total rewrite in OO and GForge coding guidelines 12/2002 by Tim Perdue
18 require_once('../env.inc.php');
19 require_once $gfwww.'include/pre.php';
20 require_once $gfwww.'pm/include/ProjectGroupHTML.class.php';
21 require_once $gfwww.'pm/include/ProjectTaskHTML.class.php';
22 require_once $gfcommon.'pm/ProjectGroupFactory.class.php';
24 $group_id = getIntFromRequest('group_id');
25 $group_project_id = getIntFromRequest('group_project_id');
26 $project_task_id = getIntFromRequest('project_task_id');
27 $start_hour = getStringFromRequest('start_hour');
28 $start_minute = getStringFromRequest('start_minute');
29 $start_month = getStringFromRequest('start_month');
30 $start_day = getStringFromRequest('start_day');
31 $start_year = getStringFromRequest('start_year');
32 $end_hour = getStringFromRequest('end_hour');
33 $end_minute = getStringFromRequest('end_minute');
34 $end_month = getStringFromRequest('end_month');
35 $end_day = getStringFromRequest('end_day');
36 $end_year = getStringFromRequest('end_year');
37 $summary = getStringFromRequest('summary');
38 $details = getStringFromRequest('details');
39 $priority = getStringFromRequest('priority');
40 $hours = getStringFromRequest('hours');
41 $start_date = getStringFromRequest('start_date');
42 $end_date = getStringFromRequest('end_date');
43 $status_id = getStringFromRequest('status_id');
44 $category_id = getStringFromRequest('category_id');
45 $percent_complete = getStringFromRequest('percent_complete');
46 $assigned_to = getStringFromRequest('assigned_to');
47 $new_group_project_id = getIntFromRequest('new_group_project_id');
48 $dependent_on = getStringFromRequest('dependent_on');
49 $duration = getStringFromRequest('duration');
50 $parent_id = getIntFromRequest('parent_id');
54 if (!$group_id || !$group_project_id) {
58 $g =& group_get_object($group_id);
59 if (!$g || !is_object($g)) {
61 } elseif ($g->isError()) {
62 exit_error('Error',$g->getErrorMessage());
65 $pg = new ProjectGroupHTML($g,$group_project_id);
66 if (!$pg || !is_object($pg)) {
67 exit_error('Error','Could Not Get Factory');
68 } elseif ($pg->isError()) {
69 exit_error('Error',$pg->getErrorMessage());
73 Figure out which function we're dealing with here
75 switch (getStringFromRequest('func')) {
78 // Show blank form to add new task
81 if ($pg->userIsAdmin()) {
82 $pt=new ProjectTaskHTML($pg);
83 if (!$pt || !is_object($pt)) {
84 exit_error('Error','Could Not Get ProjectTask');
85 } elseif ($pt->isError()) {
86 exit_error('Error',$pt->getErrorMessage());
88 include $gfwww.'pm/add_task.php';
90 exit_permission_denied();
96 // Insert the task into the database
98 case 'postaddtask' : {
99 if ($pg->userIsAdmin()) {
101 $add_artifact_id = getStringFromRequest('add_artifact_id');
103 $pt = new ProjectTask($pg);
104 if (!$pt || !is_object($pt)) {
105 exit_error('Error','Could Not Get Empty ProjectTask');
106 } elseif ($pt->isError()) {
107 exit_error('Error',$pt->getErrorMessage());
110 $saved_hours = $hours;
111 $hours = (float) $hours;
112 if ( $saved_hours !== (string)$hours ) {
113 exit_error('Error', "Illegal format for hours: must be an integer or a float number.");
118 $dependent_on=array();
120 $start_date=mktime($start_hour,$start_minute,0,$start_month,$start_day,$start_year);
121 $end_date=mktime($end_hour,$end_minute,0,$end_month,$end_day,$end_year);
124 if (!$pt->create($summary,$details,$priority,$hours,$start_date,$end_date,$category_id,$percent_complete,$assigned_to,$pt->convertDependentOn($dependent_on),$duration,$parent_id)) {
125 exit_error('ERROR',$pt->getErrorMessage());
127 if (count($add_artifact_id) > 0) {
128 if (!$pt->addRelatedArtifacts($add_artifact_id)) {
129 exit_error('ERROR','addRelatedArtifacts():: '.$pt->getErrorMessage());
132 $feedback=_('Task Created Successfully');
133 include $gfwww.'pm/browse_task.php';
136 exit_permission_denied();
142 // Modify an existing task
144 case 'postmodtask' : {
145 if ($pg->userIsAdmin()) {
146 $rem_artifact_id = getStringFromRequest('rem_artifact_id');
148 if(!$rem_artifact_id){
149 $rem_artifact_id=array();
152 $pt = new ProjectTask($pg,$project_task_id);
153 if (!$pt || !is_object($pt)) {
154 exit_error('Error','Could Not Get ProjectTask');
155 } elseif ($pt->isError()) {
156 exit_error('Error',$pt->getErrorMessage());
159 $saved_hours = $hours;
160 $hours = (float) $hours;
161 if ( $saved_hours !== (string)$hours ) {
162 exit_error('Error', "Illegal format for hours: must be an integer or a float number.");
165 if (!$dependent_on) {
166 $dependent_on=array();
168 $start_date=mktime($start_hour,$start_minute,0,$start_month,$start_day,$start_year);
169 $end_date=mktime($end_hour,$end_minute,0,$end_month,$end_day,$end_year);
170 if (!$pt->update($summary,$details,$priority,$hours,$start_date,$end_date,
171 $status_id,$category_id,$percent_complete,$assigned_to,$pt->convertDependentOn($dependent_on),$new_group_project_id,$duration,$parent_id)) {
172 exit_error('ERROR','update():: '.$pt->getErrorMessage());
174 if (count($rem_artifact_id) > 0) {
175 if (!$pt->removeRelatedArtifacts($rem_artifact_id)) {
176 exit_error('ERROR','removeRelatedArtifacts():: '.$pt->getErrorMessage());
179 $feedback=_('Task Updated Successfully');
180 include $gfwww.'pm/browse_task.php';
183 exit_permission_denied();
189 include $gfwww.'pm/csv.php';
194 include $gfwww.'pm/format_csv.php';
198 case 'downloadcsv': {
200 if ($pg->userIsAdmin()) {
201 include $gfwww.'pm/downloadcsv.php';
204 exit_permission_denied();
211 if ($pg->userIsAdmin()) {
212 include $gfwww.'pm/uploadcsv.php';
215 exit_permission_denied();
220 case 'postuploadcsv': {
222 if ($pg->userIsAdmin()) {
223 include $gfwww.'pm/postuploadcsv.php';
224 include $gfwww.'pm/browse_task.php';
226 exit_permission_denied();
231 case 'massupdate' : {
232 $project_task_id_list = getArrayFromRequest('project_task_id_list');
233 $count=count($project_task_id_list);
235 if ($pg->userIsAdmin()) {
237 for ($i=0; $i < $count; $i++) {
238 $pt=new ProjectTask($pg,$project_task_id_list[$i]);
239 if (!$pt || !is_object($pt)) {
240 $feedback .= ' ID: '.$project_task_id_list[$i].'::ProjectTask Could Not Be Created';
241 } else if ($pt->isError()) {
242 $feedback .= ' ID: '.$project_task_id_list[$i].'::'.$pt->getErrorMessage();
245 $mass_summary=addslashes(util_unconvert_htmlspecialchars($pt->getSummary()));
247 $mass_priority=(($priority != 100) ? $priority : $pt->getPriority());
248 $mass_hours=$pt->getHours();
249 $mass_start_date=$pt->getStartDate();
250 $mass_end_date=$pt->getEndDate();
251 $mass_status_id=(($status_id != 100) ? $status_id : $pt->getStatusID());
252 $mass_category_id=(($category_id != 100) ? $category_id : $pt->getCategoryID());
253 $mass_percent_complete=$pt->getPercentComplete();
255 //yikes, we want the ability to mass-update to "un-assigned", which is the ID=100, which
256 //conflicts with the "no change" ID! Sorry for messy use of 100.1
257 // 100 means => no change
258 // 100.1 means non assigned
259 // other means assigned to ...
261 if ($assigned_to == '100') {
262 $mass_assigned_to = $pt->getAssignedTo();
263 } else if ($assigned_to == '100.1') {
264 $mass_assigned_to = array('100');
266 $mass_assigned_to = array($assigned_to);
269 $mass_dependent_on=$pt->getDependentOn();
270 $mass_new_group_project_id=(($new_group_project_id != 100) ? $new_group_project_id : $pt->ProjectGroup->getID() );
271 $mass_duration=$pt->getDuration();
272 $mass_parent_id=$pt->getParentID();
274 if (!$pt->update($mass_summary,$mass_details,$mass_priority,$mass_hours,$mass_start_date,$mass_end_date,
275 $mass_status_id,$mass_category_id,$mass_percent_complete,$mass_assigned_to,$mass_dependent_on,$mass_new_group_project_id,$mass_duration,$mass_parent_id)) {
277 $feedback .= ' ID: '.$project_task_id_list[$i].'::'.$pt->getErrorMessage();
284 $warning_msg = _('No task selected');
286 elseif (!$was_error) {
287 $feedback = _('Task Updated Successfully');
289 include $gfwww.'pm/browse_task.php';
292 exit_permission_denied();
298 // Add an artifact relationship to an existing task
300 case 'addartifact' : {
301 if ($pg->userIsAdmin()) {
302 $add_artifact_id = getStringFromRequest('add_artifact_id');
304 $pt = new ProjectTask($pg,$project_task_id);
305 if (!$pt || !is_object($pt)) {
306 exit_error('Error','Could Not Get ProjectTask');
307 } elseif ($pt->isError()) {
308 exit_error('Error',$pt->getErrorMessage());
310 if (!$pt->addRelatedArtifacts($add_artifact_id)) {
311 exit_error('ERROR','addRelatedArtifacts():: '.$pt->getErrorMessage());
313 $feedback=_('Successfully Added Tracker Relationship');
314 include $gfwww.'pm/browse_task.php';
318 exit_permission_denied();
326 case 'deletetask' : {
327 if ($pg->userIsAdmin()) {
328 $pt= new ProjectTask($pg,$project_task_id);
329 if (!$pt || !is_object($pt)) {
330 exit_error('Error','Could Not Get ProjectTask');
331 } elseif ($pt->isError()) {
332 exit_error('Error',$pt->getErrorMessage());
334 include $gfwww.'pm/deletetask.php';
336 exit_permission_denied();
342 // Handle the actual delete
345 case 'postdeletetask' : {
346 if ($pg->userIsAdmin()) {
347 $pt= new ProjectTask($pg, $project_task_id);
348 if (!$pt || !is_object($pt)) {
349 exit_error('Error','Could Not Get ProjectTask');
350 } elseif ($pt->isError()) {
351 exit_error('Error', $pt->getErrorMessage());
353 if (!getStringFromRequest('confirm_delete')) {
354 $feedback .= _('Confirmation failed. Task not deleted');
356 $deletion = $pt->delete(true);
358 $feedback .= _('Delete failed') . ': '.$pt->getErrorMessage();
360 $feedback .= _('Task Successfully Deleted');
363 include $gfwww.'pm/browse_task.php';
365 exit_permission_denied();
371 // Show the page surrounding the gantt chart
374 include $gfwww.'pm/ganttpage.php';
379 // Show a gantt chart
381 case 'ganttchart' : {
382 include $gfwww.'pm/gantt.php';
387 // View a specific existing task
389 case 'detailtask' : {
390 $pt=new ProjectTaskHTML($pg,$project_task_id);
391 if (!$pt || !is_object($pt)) {
392 exit_error('Error','Could Not Get ProjectTask');
393 } elseif ($pt->isError()) {
394 exit_error('Error',$pt->getErrorMessage());
396 if (session_loggedin() && $pg->userIsAdmin()) {
397 include $gfwww.'pm/mod_task.php';
399 include $gfwww.'pm/detail_task.php';
405 include $gfwww.'pm/browse_task.php';