3 * SOAP Task Manager Include - this file contains wrapper functions for the SOAP interface
5 * Copyright 2004 (c) GForge, LLC
8 * This file is part of GForge.
10 * GForge is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * GForge is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with GForge; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US
25 require_once $gfcommon.'include/Error.class.php';
26 require_once $gfcommon.'pm/ProjectGroup.class.php';
27 require_once $gfcommon.'pm/ProjectGroupFactory.class.php';
28 require_once $gfcommon.'pm/ProjectTaskFactory.class.php';
29 require_once $gfcommon.'pm/ProjectTask.class.php';
30 require_once $gfcommon.'pm/ProjectCategory.class.php';
31 //require_once('common/pm/ProjectMessage.class.php');
36 $server->wsdl->addComplexType(
43 'group_project_id' => array('name'=>'group_project_id', 'type' => 'xsd:int'),
44 'group_id' => array('name'=>'group_id', 'type' => 'xsd:int'),
45 'name' => array('name'=>'name', 'type' => 'xsd:string'),
46 'description' => array('name'=>'description', 'type' => 'xsd:string'),
47 'is_public' => array('name'=>'is_public', 'type' => 'xsd:int'),
48 'send_all_posts_to' => array('name'=>'send_all_posts_to', 'type' => 'xsd:string')
52 $server->wsdl->addComplexType(
53 'ArrayOfProjectGroup',
59 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ProjectGroup[]')),
65 array('session_ser'=>'xsd:string','group_id'=>'xsd:int'),
66 array('getProjectGroupsResponse'=>'tns:ArrayOfProjectGroup'),
67 $uri,$uri.'#getProjectGroups','rpc','encoded'
71 $server->wsdl->addComplexType(
78 'task_id' => array('name'=>'task_id', 'type' => 'xsd:int'),
79 'link_type' => array('name'=>'link_type', 'type' => 'xsd:string')
83 $server->wsdl->addComplexType(
84 'ArrayOfTaskDependency',
90 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:TaskDependency[]')),
95 $server->wsdl->addComplexType(
102 'user_id' => array('name'=>'user_id', 'type' => 'xsd:int'),
103 'percent_effort' => array('name'=>'link_type', 'type' => 'xsd:int')
107 $server->wsdl->addComplexType(
108 'ArrayOfTaskAssignee',
114 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:TaskAssignee[]')),
123 $server->wsdl->addComplexType(
130 'project_task_id' => array('name'=>'project_task_id', 'type' => 'xsd:int'),
131 'group_project_id' => array('name'=>'group_project_id', 'type' => 'xsd:int'),
132 'summary' => array('name'=>'summary', 'type' => 'xsd:string'),
133 'details' => array('name'=>'details', 'type' => 'xsd:string'),
134 'percent_complete' => array('name'=>'percent_complete', 'type' => 'xsd:int'),
135 'priority' => array('name'=>'priority', 'type' => 'xsd:int'),
136 'hours' => array('name'=>'hours', 'type' => 'xsd:int'),
137 'start_date' => array('name'=>'start_date', 'type' => 'xsd:int'),
138 'end_date' => array('name'=>'end_date', 'type' => 'xsd:int'),
139 'status_id' => array('name'=>'status_id', 'type' => 'xsd:int'),
140 'category_id' => array('name'=>'category_id', 'type' => 'xsd:int'),
141 'dependent_on' => array('name'=>'dependent_on', 'type' => 'tns:ArrayOfTaskDependency'),
142 'assigned_to' => array('name'=>'assigned_to', 'type' => 'tns:ArrayOfTaskAssignee'),
143 'duration' => array('name'=>'duration', 'type' => 'xsd:int'),
144 'parent_id' => array('name'=>'parent_id', 'type' => 'xsd:int'),
145 'sort_id' => array('name'=>'sort_id', 'type' => 'xsd:int'),
149 $server->wsdl->addComplexType(
150 'ArrayOfProjectTask',
156 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ProjectTask[]')),
164 'session_ser'=>'xsd:string',
165 'group_id'=>'xsd:int',
166 'group_project_id'=>'xsd:int',
167 'assigned_to'=>'xsd:int',
169 'category'=>'xsd:int',
171 array('getProjectTasksResponse'=>'tns:ArrayOfProjectTask'),
172 $uri,$uri.'#getProjectTasks','rpc','encoded'
179 'session_ser'=>'xsd:string',
180 'group_id'=>'xsd:int',
181 'group_project_id'=>'xsd:int',
182 'summary'=>'xsd:string',
183 'details'=>'xsd:string',
184 'priority'=>'xsd:int',
186 'start_date'=>'xsd:int',
187 'end_date'=>'xsd:int',
188 'category_id'=>'xsd:int',
189 'percent_complete'=>'xsd:int',
190 'assigned_to'=>'tns:ArrayOfint',
191 'dependent_on'=>'tns:ArrayOfint',
192 'duration'=>'xsd:int',
193 'parent_id'=>'xsd:int'
195 array('addProjectTaskResponse'=>'xsd:int'),
196 $uri,$uri.'#addProjectTask','rpc','encoded'
203 'session_ser'=>'xsd:string',
204 'group_id'=>'xsd:int',
205 'group_project_id'=>'xsd:int',
206 'project_task_id'=>'xsd:int',
207 'summary'=>'xsd:string',
208 'details'=>'xsd:string',
209 'priority'=>'xsd:int',
211 'start_date'=>'xsd:int',
212 'end_date'=>'xsd:int',
213 'status_id'=>'xsd:int',
214 'category_id'=>'xsd:int',
215 'percent_complete'=>'xsd:int',
216 'assigned_to'=>'tns:ArrayOfint',
217 'dependent_on'=>'tns:ArrayOfint',
218 'new_group_project_id'=>'int',
219 'duration'=>'xsd:int',
220 'parent_id'=>'xsd:int'
222 array('updateProjectTaskResponse'=>'xsd:int'),
223 $uri,$uri.'#updateProjectTask','rpc','encoded'
229 $server->wsdl->addComplexType(
237 'id' => array('name'=>'id', 'type' => 'xsd:int'),
238 'group_project_id' => array('name'=>'group_project_id', 'type' => 'xsd:int'),
239 'category_name' => array('name'=>'category_name', 'type' => 'xsd:string')
241 'category_id' => array('name'=>'category_id', 'type' => 'xsd:int'),
242 'category_name' => array('name'=>'category_name', 'type' => 'xsd:string')
246 $server->wsdl->addComplexType(
247 'ArrayOfProjectCategory',
253 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ProjectCategory[]')),
254 'tns:ProjectCategory'
258 'getProjectTaskCategories',
259 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_project_id'=>'xsd:int'),
260 array('getProjectTaskCategoriesResponse'=>'tns:ArrayOfProjectCategory'),
261 $uri,$uri.'#getProjectTaskCategories','rpc','encoded'
267 $server->wsdl->addComplexType(
274 'project_message_id' => array('name'=>'project_message_id', 'type' => 'xsd:int'),
275 'project_task_id' => array('name'=>'project_task_id', 'type' => 'xsd:int'),
276 'body' => array('name'=>'body', 'type' => 'xsd:string'),
277 'postdate' => array('name'=>'postdate', 'type' => 'xsd:int'),
278 'posted_by' => array('name'=>'posted_by', 'type' => 'xsd:int')
282 $server->wsdl->addComplexType(
283 'ArrayOfProjectMessage',
289 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ProjectMessage[]')),
294 'getProjectMessages',
295 array('session_ser'=>'xsd:string',
296 'group_id'=>'xsd:int',
297 'group_project_id'=>'xsd:int',
298 'project_task_id'=>'xsd:int'
300 array('getProjectMessagesResponse'=>'tns:ArrayOfProjectMessage'),
301 $uri,$uri.'#getProjectMessages','rpc','encoded'
307 array('session_ser'=>'xsd:string',
308 'group_id'=>'xsd:int',
309 'group_project_id'=>'xsd:int',
310 'project_task_id'=>'xsd:int',
313 array('addProjectMessageResponse'=>'xsd:int'),
314 $uri,$uri.'#addProjectMessage','rpc','encoded'
318 // ProjectTaskTechnician
323 'getProjectTechnicians',
324 array('session_ser'=>'xsd:string',
325 'group_id'=>'xsd:int',
326 'group_project_id'=>'xsd:int'),
327 array('getProjectTechniciansResponse'=>'tns:ArrayOfUser'),
328 $uri,$uri.'#getProjectTechnicians','rpc','encoded'
335 function &getProjectGroups($session_ser,$group_id) {
336 continue_session($session_ser);
337 $grp =& group_get_object($group_id);
338 if (!$grp || !is_object($grp)) {
339 return new soap_fault ('','getProjectGroups','Could Not Get Group','Could Not Get Group');
340 } elseif ($grp->isError()) {
341 return new soap_fault ('','getProjectGroups',$grp->getErrorMessage(),$grp->getErrorMessage());
344 $atf = new ProjectGroupFactory($grp);
345 if (!$atf || !is_object($atf)) {
346 return new soap_fault ('','getProjectGroups','Could Not Get ProjectGroupFactory','Could Not Get ProjectGroupFactory');
347 } elseif ($atf->isError()) {
348 return new soap_fault ('','getProjectGroups',$atf->getErrorMessage(),$atf->getErrorMessage());
350 return projectgroups_to_soap($atf->getProjectGroups());
354 // convert array of artifact types to soap data structure
356 function projectgroups_to_soap($pg_arr) {
358 for ($i=0; $i<count($pg_arr); $i++) {
359 if ($pg_arr[$i]->isError()) {
363 'group_project_id'=>$pg_arr[$i]->data_array['group_project_id'],
364 'group_id'=>$pg_arr[$i]->data_array['group_id'],
365 'name'=>$pg_arr[$i]->data_array['project_name'],
366 'description'=>$pg_arr[$i]->data_array['description'],
367 'is_public'=>$pg_arr[$i]->data_array['is_public'],
368 'send_all_posts_to'=>$pg_arr[$i]->data_array['send_all_posts_to']
378 function &addProjectTask($session_ser,$group_id,$group_project_id,$summary,$details,$priority,
379 $hours,$start_date,$end_date,$category_id,$percent_complete,$assigned_arr,$depend_arr,$duration,$parent_id) {
380 continue_session($session_ser);
381 $grp =& group_get_object($group_id);
382 if (!$grp || !is_object($grp)) {
383 return new soap_fault ('','addProjectTask','Could Not Get Group','Could Not Get Group');
384 } elseif ($grp->isError()) {
385 return new soap_fault ('','addProjectTask',$grp->getErrorMessage(),$grp->getErrorMessage());
388 $at = new ProjectGroup($grp,$group_project_id);
389 if (!$at || !is_object($at)) {
390 return new soap_fault ('','addProjectTask','Could Not Get ProjectGroup','Could Not Get ProjectGroup');
391 } elseif ($at->isError()) {
392 return new soap_fault ('','addProjectTask',$at->getErrorMessage(),$at->getErrorMessage());
395 $a = new ProjectTask($at);
396 if (!$a || !is_object($a)) {
397 return new soap_fault ('','addProjectTask','Could Not Get ProjectTask','Could Not Get ProjectTask');
398 } elseif ($a->isError()) {
399 return new soap_fault ('','addProjectTask','$a->getErrorMessage()',$a->getErrorMessage());
402 // transform the $depend_arr (which is an array of ints) to include the link type
403 $depend_map = array();
404 foreach ($depend_arr as $depend_id) {
405 $depend_map[$depend_id] = PM_LINK_DEFAULT;
408 if (!$a->create($summary,$details,$priority,$hours,$start_date,$end_date,
409 $category_id,$percent_complete,$assigned_arr,$depend_map,$duration,$parent_id)) {
410 return new soap_fault ('','addProjectTask',$a->getErrorMessage(),$a->getErrorMessage());
417 // Update ProjectTask
419 function &updateProjectTask($session_ser,$group_id,$group_project_id,$project_task_id,
420 $summary,$details,$priority,$hours,$start_date,$end_date,$status_id,$category_id,
421 $percent_complete,$assigned_arr,$depend_arr,$new_group_project_id,$duration,$parent_id) {
422 continue_session($session_ser);
423 $grp =& group_get_object($group_id);
424 if (!$grp || !is_object($grp)) {
425 return new soap_fault ('','updateProjectTask','Could Not Get Group','Could Not Get Group');
426 } elseif ($grp->isError()) {
427 return new soap_fault ('','updateProjectTask',$grp->getErrorMessage(),$grp->getErrorMessage());
430 $at = new ProjectGroup($grp,$group_project_id);
431 if (!$at || !is_object($at)) {
432 return new soap_fault ('','updateProjectTask','Could Not Get ProjectGroup','Could Not Get ProjectGroup');
433 } elseif ($at->isError()) {
434 return new soap_fault ('','updateProjectTask',$at->getErrorMessage(),$at->getErrorMessage());
437 $a = new ProjectTask($at,$project_task_id);
438 if (!$a || !is_object($a)) {
439 return new soap_fault ('','updateProjectTask','Could Not Get ProjectTask','Could Not Get ProjectTask');
440 } elseif ($a->isError()) {
441 return new soap_fault ('','updateProjectTask',$a->getErrorMessage(),$a->getErrorMessage());
444 // transform the $depend_arr (which is an array of ints) to include the link type
445 $depend_map = array();
446 foreach ($depend_arr as $depend_id) {
447 $depend_map[$depend_id] = PM_LINK_DEFAULT;
450 if (!$a->update($summary,$details,$priority,$hours,$start_date,$end_date,$status_id,$category_id,
451 $percent_complete,$assigned_arr,$depend_map,$new_group_project_id,$duration,$parent_id)) {
452 return new soap_fault ('','updateProjectTask',$a->getErrorMessage(),$a->getErrorMessage());
459 // getProjectTaskCategories
461 function &getProjectTaskCategories($session_ser,$group_id,$group_project_id) {
462 continue_session($session_ser);
463 $grp =& group_get_object($group_id);
464 if (!$grp || !is_object($grp)) {
465 return new soap_fault ('','getProjectTaskCategories','Could Not Get Group','Could Not Get Group');
466 } elseif ($grp->isError()) {
467 return new soap_fault ('','getProjectTaskCategories',$grp->getErrorMessage(),$grp->getErrorMessage());
470 $at = new ProjectGroup($grp,$group_project_id);
471 if (!$at || !is_object($at)) {
472 return new soap_fault ('','getProjectTaskCategories','Could Not Get ProjectGroup','Could Not Get ProjectGroup');
473 } elseif ($at->isError()) {
474 return new soap_fault ('','getProjectTaskCategories',$at->getErrorMessage(),$at->getErrorMessage());
477 $cat_arr = $at->getCategoryObjects();
479 return projectcategories_to_soap($cat_arr);
483 // convert array of artifact categories to soap data structure
485 function projectcategories_to_soap($cat_arr) {
487 for ($i=0; $i<count($cat_arr); $i++) {
488 if ($cat_arr[$i]->isError()) {
492 'category_id'=>$cat_arr[$i]->data_array['category_id'],
493 'category_name'=>$cat_arr[$i]->data_array['category_name']
501 // getProjectTechnicians
503 function &getProjectTechnicians($session_ser,$group_id,$group_project_id) {
504 continue_session($session_ser);
505 $grp =& group_get_object($group_id);
506 if (!$grp || !is_object($grp)) {
507 return new soap_fault ('','getProjectTechnicians','Could Not Get Group','Could Not Get Group');
508 } elseif ($grp->isError()) {
509 return new soap_fault ('','getProjectTechnicians',$grp->getErrorMessage(),$grp->getErrorMessage());
512 $at = new ProjectGroup($grp,$group_project_id);
513 if (!$at || !is_object($at)) {
514 return new soap_fault ('','getProjectTechnicians','Could Not Get ProjectGroup','Could Not Get ProjectGroup');
515 } elseif ($at->isError()) {
516 return new soap_fault ('','getProjectTechnicians',$at->getErrorMessage(),$at->getErrorMessage());
519 return users_to_soap($at->getTechnicianObjects());
522 function &getProjectTasks($session_ser,$group_id,$group_project_id,$assigned_to,$status,$category,$group) {
523 continue_session($session_ser);
524 $grp =& group_get_object($group_id);
525 if (!$grp || !is_object($grp)) {
526 return new soap_fault ('','getProjectTasks','Could Not Get Group','Could Not Get Group');
527 } elseif ($grp->isError()) {
528 return new soap_fault ('','getProjectTasks',$grp->getErrorMessage(),$grp->getErrorMessage());
531 $pg = new ProjectGroup($grp,$group_project_id);
532 if (!$pg || !is_object($pg)) {
533 return new soap_fault ('','getProjectTasks','Could Not Get ProjectGroup','Could Not Get ProjectGroup');
534 } elseif ($pg->isError()) {
535 return new soap_fault ('','getProjectTasks',$pg->getErrorMessage(),$pg->getErrorMessage());
538 $ptf = new ProjectTaskFactory($pg);
539 if (!$ptf || !is_object($ptf)) {
540 return new soap_fault ('','getProjectTasks','Could Not Get ProjectTaskFactory','Could Not Get ProjectTaskFactory');
541 } elseif ($ptf->isError()) {
542 return new soap_fault ('','getProjectTasks',$ptf->getErrorMessage(),$ptf->getErrorMessage());
545 $ptf->setup(0,0,0,0,$assigned_to,$status,$category,$group);
546 $tasks_arr = $ptf->getTasks();
547 return projecttasks_to_soap($tasks_arr);
551 // convert array of projecttasks to soap data structure
553 function projecttasks_to_soap($pt_arr) {
556 for ($i=0; $i<count($pt_arr); $i++) {
557 if ($pt_arr[$i]->isError()) {
560 // create the dependent_on array
561 $dependent_on = array();
562 $dependent_on_tmp = $pt_arr[$i]->getDependentOn();
563 foreach ($dependent_on_tmp as $dependent_on_id => $link_type) {
564 $dependent_on[] = array("task_id" => $dependent_on_id,
565 "link_type" => $link_type);
568 //build the assigned_to array
569 $assigned_to = array();
570 $assigned_ids = $pt_arr[$i]->getAssignedTo();
571 foreach ($assigned_ids as $assigned_id) {
572 $assigned_to[] = array("user_id" => $assigned_id,
573 "percent_effort" => 0 // TODO: This should be implemented
577 $sort_id = $pt_arr[$i]->getExternalID();
578 if (!$sort_id) $sort_id=0;
581 'project_task_id'=>$pt_arr[$i]->data_array['project_task_id'],
582 'group_project_id'=>$pt_arr[$i]->data_array['group_project_id'],
583 'summary'=>$pt_arr[$i]->data_array['summary'],
584 'details'=>$pt_arr[$i]->data_array['details'],
585 'percent_complete'=>$pt_arr[$i]->data_array['percent_complete'],
586 'priority'=>$pt_arr[$i]->data_array['priority'],
587 'hours'=>$pt_arr[$i]->data_array['hours'],
588 'start_date'=>$pt_arr[$i]->data_array['start_date'],
589 'end_date'=>$pt_arr[$i]->data_array['end_date'],
590 'status_id'=>$pt_arr[$i]->data_array['status_id'],
591 'category_id'=>$pt_arr[$i]->data_array['category_id'],
592 'dependent_on'=>$dependent_on,
593 'assigned_to'=>$assigned_to,
594 'duration'=>$pt_arr[$i]->getDuration(),
595 'parent_id'=>$pt_arr[$i]->getParentID(),
604 // getProjectMessages
606 function &getProjectMessages($session_ser,$group_id,$group_project_id,$project_task_id) {
607 continue_session($session_ser);
608 $grp =& group_get_object($group_id);
609 if (!$grp || !is_object($grp)) {
610 return new soap_fault ('','getProjectMessages','Could Not Get Group','Could Not Get Group');
611 } elseif ($grp->isError()) {
612 return new soap_fault ('','getProjectMessages',$grp->getErrorMessage(),$grp->getErrorMessage());
615 $at = new ProjectGroup($grp,$group_project_id);
616 if (!$at || !is_object($at)) {
617 return new soap_fault ('','getProjectMessages','Could Not Get ProjectGroup','Could Not Get ProjectGroup');
618 } elseif ($at->isError()) {
619 return new soap_fault ('','getProjectMessages',$at->getErrorMessage(),$at->getErrorMessage());
622 $a = new ProjectTask($at,$project_task_id);
623 if (!$a || !is_object($a)) {
624 return new soap_fault ('','getProjectMessages','Could Not Get ProjectTask','Could Not Get ProjectTask');
625 } elseif ($a->isError()) {
626 return new soap_fault ('','getProjectMessages',$a->getErrorMessage(),$a->getErrorMessage());
628 return projectmessages_to_soap($a->getMessageObjects());
632 // convert array of project messages to soap data structure
634 function projectmessages_to_soap($at_arr) {
635 for ($i=0; $i<count($at_arr); $i++) {
636 if ($at_arr[$i]->isError()) {
640 'project_message_id'=>$at_arr->data_array['project_message_id'],
641 'project_task_id'=>$at_arr->data_array['project_task_id'],
642 'body'=>$at_arr->data_array['body'],
643 'postdate'=>$at_arr->data_array['postdate'],
644 'posted_by'=>$at_arr->data_array['posted_by']
654 function &addProjectMessage($session_ser,$group_id,$group_project_id,$project_task_id,$body) {
655 continue_session($session_ser);
656 $grp =& group_get_object($group_id);
657 if (!$grp || !is_object($grp)) {
658 return new soap_fault ('','addProjectMessage','Could Not Get Group','Could Not Get Group');
659 } elseif ($grp->isError()) {
660 return new soap_fault ('','addProjectMessage',$grp->getErrorMessage(),$grp->getErrorMessage());
663 $at = new ProjectGroup($grp,$group_project_id);
664 if (!$at || !is_object($at)) {
665 return new soap_fault ('','addProjectMessage','Could Not Get ProjectGroup','Could Not Get ProjectGroup');
666 } elseif ($at->isError()) {
667 return new soap_fault ('','addProjectMessage',$at->getErrorMessage(),$at->getErrorMessage());
670 $a = new ProjectTask($at,$project_task_id);
671 if (!$a || !is_object($a)) {
672 return new soap_fault ('','addProjectMessage','Could Not Get ProjectTask','Could Not Get ProjectTask');
673 } elseif ($a->isError()) {
674 return new soap_fault ('','addProjectMessage',$a->getErrorMessage(),$a->getErrorMessage());
677 $am = new ProjectMessage($a);
678 if (!$am || !is_object($am)) {
679 return new soap_fault ('','addProjectMessage','Could Not Get ProjectMessage','Could Not Get ProjectMessage');
680 } elseif ($am->isError()) {
681 return new soap_fault ('','addProjectMessage',$am->getErrorMessage(),$am->getErrorMessage());
684 if (!$am->create($body)) {
685 return new soap_fault ('','addProjectMessage',$am->getErrorMessage(),$am->getErrorMessage());