3 * SOAP Tracker 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.'tracker/ArtifactType.class.php';
27 require_once $gfcommon.'tracker/Artifact.class.php';
28 require_once $gfcommon.'tracker/ArtifactFactory.class.php';
29 require_once $gfcommon.'tracker/ArtifactTypeFactory.class.php';
30 require_once $gfcommon.'tracker/Artifacts.class.php';
31 require_once $gfcommon.'tracker/ArtifactFile.class.php';
32 require_once $gfcommon.'tracker/ArtifactMessage.class.php';
37 $server->wsdl->addComplexType(
38 'ArtifactExtraFieldAvailableValue',
44 'element_id' => array('name' => 'element_id', 'type' => 'xsd:int'),
45 'element_name' => array('name' => 'element_name', 'type' => 'xsd:string'),
46 'status_id' => array('name' => 'status_id', 'type' => 'xsd:int')
50 $server->wsdl->addComplexType(
51 'ArrayOfArtifactExtraFieldAvailableValues',
58 array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactExtraFieldAvailableValue[]')
60 'tns:ArtifactExtraFieldAvailableValue'
62 $server->wsdl->addComplexType(
69 'extra_field_id' => array('name' => 'extra_field_id', 'type' => 'xsd:int'),
70 'field_name' => array('name' => 'field_name', 'type' => 'xsd:string'),
71 'field_type' => array('name' => 'field_type', 'type' => 'xsd:int'),
72 'attribute1' => array('name' => 'attribute1', 'type' => 'xsd:int'),
73 'attribute2' => array('name' => 'attribute2', 'type' => 'xsd:int'),
74 'is_required' => array('name' => 'is_required', 'type' => 'xsd:int'),
75 'alias' => array('name' => 'alias', 'type' => 'xsd:string'),
76 'available_values' => array('name' => 'available_values', 'type' => 'tns:ArrayOfArtifactExtraFieldAvailableValues'),
77 'default_selected_id' => array('name' => 'default_selected', 'type' => 'xsd:int')
81 $server->wsdl->addComplexType(
82 'ArrayOfArtifactExtraField',
89 array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactExtraField[]')
91 'tns:ArtifactExtraField'
97 $server->wsdl->addComplexType(
104 'group_artifact_id' => array('name'=>'group_artifact_id', 'type' => 'xsd:int'),
105 'group_id' => array('name'=>'group_id', 'type' => 'xsd:int'),
106 'name' => array('name'=>'name', 'type' => 'xsd:string'),
107 'description' => array('name'=>'description', 'type' => 'xsd:string'),
108 'is_public' => array('name'=>'is_public', 'type' => 'xsd:int'),
109 'allow_anon' => array('name'=>'allow_anon', 'type' => 'xsd:int'),
110 'due_period' => array('name'=>'due_period', 'type' => 'xsd:int'),
111 'datatype' => array('name'=>'datatype', 'type' => 'xsd:int'),
112 'status_timeout' => array('name'=>'status_timeout', 'type' => 'xsd:int'),
113 'extra_fields' => array('name' => 'extra_fields', 'type' => 'tns:ArrayOfArtifactExtraField'),
114 'custom_status_field' => array('name' => 'custom_status_field', 'type' => 'xsd:int'),
118 $server->wsdl->addComplexType(
119 'ArrayOfArtifactType',
125 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactType[]')),
130 array('session_ser'=>'xsd:string','group_id'=>'xsd:int'),
131 array('getArtifactTypesResponse'=>'tns:ArrayOfArtifactType'),
133 $uri.'#getArtifactTypes','rpc','encoded'
136 // Artifact Extra Fields
137 // By remo on 08-Mar-2005
139 $server->wsdl->addComplexType(
140 'ArtifactExtraFieldsData',
146 'extra_field_id' => array('name'=>'extra_field_id', 'type' => 'xsd:int'),
147 'field_data' => array('name'=>'field_data', 'type' => 'xsd:string')
151 $server->wsdl->addComplexType(
152 'ArrayOfArtifactExtraFieldsData',
158 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactExtraFieldsData[]')),
159 'tns:ArtifactExtraFieldsData'
166 $server->wsdl->addComplexType(
173 'artifact_id' => array('name'=>'artifact_id', 'type' => 'xsd:int'),
174 'group_artifact_id' => array('name'=>'group_artifact_id', 'type' => 'xsd:int'),
175 'status_id' => array('name'=>'status_id', 'type' => 'xsd:int'),
176 'priority' => array('name'=>'priority', 'type' => 'xsd:int'),
177 'submitted_by' => array('name'=>'submitted_by', 'type' => 'xsd:int'),
178 'assigned_to' => array('name'=>'assigned_to', 'type' => 'xsd:int'),
179 'open_date' => array('name'=>'open_date', 'type' => 'xsd:int'),
180 'close_date' => array('name'=>'close_date', 'type' => 'xsd:int'),
181 'summary' => array('name'=>'summary', 'type' => 'xsd:string'),
182 'details' => array('name'=>'details', 'type' => 'xsd:string'),
183 'extra_fields'=>array('name'=>'extra_fields', 'type' => 'tns:ArrayOfArtifactExtraFieldsData')
186 //ArrayOfArtifactExtraFieldsData
187 $server->wsdl->addComplexType(
194 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Artifact[]')),
202 'session_ser'=>'xsd:string',
203 'group_id'=>'xsd:int',
204 'group_artifact_id'=>'xsd:int',
205 'assigned_to'=>'xsd:int',
206 'status'=>'xsd:int'),
207 array('getArtifactsResponse'=>'tns:ArrayOfArtifact'),
208 $uri,$uri.'#getArtifacts','rpc','encoded');
215 'session_ser'=>'xsd:string',
216 'group_id'=>'xsd:int',
217 'group_artifact_id'=>'xsd:int',
218 'status_id'=>'xsd:int',
219 'priority'=>'xsd:int',
220 'assigned_to'=>'xsd:int',
221 'summary'=>'xsd:string',
222 'details'=>'xsd:string',
223 'extra_fields'=>'tns:ArrayOfArtifactExtraFieldsData'
225 array('addArtifactResponse'=>'xsd:int'),
226 $uri,$uri.'#addArtifact','rpc','encoded'
234 'session_ser'=>'xsd:string',
235 'group_id'=>'xsd:int',
236 'group_artifact_id'=>'xsd:int',
237 'artifact_id'=>'xsd:int',
238 'status_id'=>'xsd:int',
239 'priority'=>'xsd:int',
240 'assigned_to'=>'xsd:int',
241 'summary'=>'xsd:string',
242 'details'=>'xsd:string',
243 'new_artifact_type_id'=>'xsd:int',
244 'extra_fields_data'=>'tns:ArrayOfArtifactExtraFieldsData'
246 array('addArtifactResponse'=>'xsd:int'),
247 $uri,$uri.'#updateArtifact','rpc','encoded'
253 $server->wsdl->addComplexType(
260 'id' => array('name'=>'id', 'type' => 'xsd:int'),
261 'artifact_id' => array('name'=>'artifact_id', 'type' => 'xsd:int'),
262 'name' => array('name'=>'name', 'type' => 'xsd:string'),
263 'description' => array('name'=>'description', 'type' => 'xsd:string'),
264 'filesize' => array('name'=>'filesize', 'type' => 'xsd:int'),
265 'filetype' => array('name'=>'filetype', 'type' => 'xsd:string'),
266 'adddate' => array('name'=>'adddate', 'type' => 'xsd:int'),
267 'submitted_by' => array('name'=>'submitted_by', 'type' => 'xsd:int')
271 $server->wsdl->addComplexType(
272 'ArrayOfArtifactFile',
278 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactFile[]')),
284 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
285 array('getArtifactFilesResponse'=>'tns:ArrayOfArtifactFile'),
286 $uri,$uri.'#getArtifactFiles','rpc','encoded'
289 // This is for retrieving a single file base64-encoded
291 'getArtifactFileData',
292 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int','file_id'=>'xsd:int'),
293 array('getArtifactFileDataResponse'=>'xsd:string'),
294 $uri,$uri.'#getArtifactFileData','rpc','encoded'
299 array( 'session_ser'=>'xsd:string',
300 'group_id'=>'xsd:int',
301 'group_artifact_id'=>'xsd:int',
302 'artifact_id'=>'xsd:int',
303 'base64_contents'=>'xsd:string',
304 'description'=>'xsd:string',
305 'filename'=>'xsd:string',
306 'filetype'=>'xsd:string'
308 array('addArtifactFileResponse'=>'xsd:int'),
309 $uri,$uri.'#addArtifactFile','rpc','encoded'
312 //ARTIFACT QUERY DEFINITIONS
313 //insertElements($id,$status,$assignee,$changed_since,$sort_col,$sort_ord,$extra_fields)
316 // ArtifactFile Delete
319 'artifactFileDelete',
320 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int','file_id'=>'xsd:int'),
321 array('artifactFileDeleteResponse'=>'xsd:boolean'),
322 $uri,$uri.'#artifactFileDeleteResponse','rpc','encoded'
325 function artifactFileDelete($session_ser,$group_id,$group_artifact_id,$artifact_id,$file_id) {
326 continue_session($session_ser);
327 $a =& artifactfile_get_object($file_id);
328 if (!$a || !is_object($a)) {
329 return new soap_fault ('','artifactFileDelete','Could Not Get ArtifactFile','Could Not Get ArtifactFile');
330 } elseif ($a->isError()) {
331 return new soap_fault ('','artifactFileDelete','$a->getErrorMessage()',$a->getErrorMessage());
334 return new soap_fault ('','artifactFileDelete','$a->getErrorMessage()',$a->getErrorMessage());
344 $server->wsdl->addComplexType(
351 'id' => array('name'=>'id', 'type' => 'xsd:int'),
352 'artifact_id' => array('name'=>'artifact_id', 'type' => 'xsd:int'),
353 'body' => array('name'=>'body', 'type' => 'xsd:string'),
354 'adddate' => array('name'=>'adddate', 'type' => 'xsd:int'),
355 'user_id' => array('name'=>'user_id', 'type' => 'xsd:int')
359 $server->wsdl->addComplexType(
360 'ArrayOfArtifactMessage',
366 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactMessage[]')),
367 'tns:ArtifactMessage'
371 'getArtifactMessages',
372 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
373 array('getArtifactMessagesResponse'=>'tns:ArrayOfArtifactMessage'),
374 $uri,$uri.'#getArtifactMessages','rpc','encoded'
379 'addArtifactMessage',
380 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int','body'=>'xsd:string'),
381 array('addArtifactMessageResponse'=>'xsd:int'),
382 $uri,$uri.'#addArtifactMessage','rpc','encoded'
386 // ArtifactTechnician
391 'getArtifactTechnicians',
392 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int'),
393 array('getArtifactTechniciansResponse'=>'tns:ArrayOfUser'),
394 $uri,$uri.'#getArtifactTechnicians','rpc','encoded'
398 // Artifact Monitoring
401 'artifactSetMonitor',
402 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
403 array('artifactSetMonitorResponse'=>'xsd:boolean'),
404 $uri,$uri.'#artifactSetMonitorResponse','rpc','encoded'
408 'artifactIsMonitoring',
409 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
410 array('artifactIsMonitoringResponse'=>'xsd:boolean'),
411 $uri,$uri.'#artifactIsMonitoringResponse','rpc','encoded'
414 function artifactSetMonitor($session_ser,$group_id,$group_artifact_id,$artifact_id) {
415 continue_session($session_ser);
416 $a =& artifact_get_object($artifact_id);
417 if (!$a || !is_object($a)) {
418 return new soap_fault ('','artifactSetMonitor','Could Not Get Artifact','Could Not Get Artifact');
419 } elseif ($a->isError()) {
420 return new soap_fault ('','artifactSetMonitor','$a->getErrorMessage()',$a->getErrorMessage());
426 function artifactIsMonitoring($session_ser,$group_id,$group_artifact_id,$artifact_id) {
427 continue_session($session_ser);
428 $a =& artifact_get_object($artifact_id);
429 if (!$a || !is_object($a)) {
430 return new soap_fault ('','artifactIsMonitoring','Could Not Get Artifact','Could Not Get Artifact');
431 } elseif ($a->isError()) {
432 return new soap_fault ('','artifactIsMonitoring','$a->getErrorMessage()',$a->getErrorMessage());
434 return $a->isMonitoring();
442 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
443 array('artifactDeleteResponse'=>'xsd:boolean'),
444 $uri,$uri.'#artifactDeleteResponse','rpc','encoded'
447 function artifactDelete($session_ser,$group_id,$group_artifact_id,$artifact_id) {
448 continue_session($session_ser);
449 $a =& artifact_get_object($artifact_id);
450 if (!$a || !is_object($a)) {
451 return new soap_fault ('','artifactDelete','Could Not Get Artifact','Could Not Get Artifact');
452 } elseif ($a->isError()) {
453 return new soap_fault ('','artifactDelete','$a->getErrorMessage()',$a->getErrorMessage());
455 if (!$a->delete(1)) {
456 return new soap_fault ('','artifactDelete','$a->getErrorMessage()',$a->getErrorMessage());
463 'artifactTypeIsMonitoring',
464 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int'),
465 array('artifactTypeIsMonitoringResponse'=>'xsd:boolean'),
466 $uri,$uri.'#artifactTypeIsMonitoringResponse','rpc','encoded'
469 function artifactTypeSetMonitor($session_ser,$group_id,$group_artifact_id) {
470 continue_session($session_ser);
471 $a =& artifacttype_get_object($group_artifact_id);
472 if (!$a || !is_object($a)) {
473 return new soap_fault ('','artifactTypeSetMonitor','Could Not Get ArtifactType','Could Not Get ArtifactType');
474 } elseif ($a->isError()) {
475 return new soap_fault ('','artifactTypeSetMonitor','$a->getErrorMessage()',$a->getErrorMessage());
481 function artifactTypeIsMonitoring($session_ser,$group_id,$group_artifact_id) {
482 continue_session($session_ser);
483 $a =& artifacttype_get_object($group_artifact_id);
484 if (!$a || !is_object($a)) {
485 return new soap_fault ('','artifactTypeIsMonitoring','Could Not Get ArtifactType','Could Not Get ArtifactType');
486 } elseif ($a->isError()) {
487 return new soap_fault ('','artifactTypeIsMonitoring','$a->getErrorMessage()',$a->getErrorMessage());
489 return $a->isMonitoring();
495 function &getArtifactTypes($session_ser,$group_id) {
496 continue_session($session_ser);
497 $grp =& group_get_object($group_id);
498 if (!$grp || !is_object($grp)) {
499 return new soap_fault ('','getArtifactTypes','Could Not Get Project','Could Not Get Project');
500 } elseif ($grp->isError()) {
501 return new soap_fault ('','getArtifactTypes','$grp->getErrorMessage()',$grp->getErrorMessage());
504 $atf = new ArtifactTypeFactory($grp);
505 if (!$atf || !is_object($atf)) {
506 return new soap_fault ('','getArtifactTypes','Could Not Get ArtifactTypeFactory','Could Not Get ArtifactTypeFactory');
507 } elseif ($atf->isError()) {
508 return new soap_fault ('','getArtifactTypes',$atf->getErrorMessage(),$atf->getErrorMessage());
511 return artifacttype_to_soap($atf->getArtifactTypes());
515 // convert array of artifact types to soap data structure
517 function artifacttype_to_soap($at_arr) {
520 if (is_array($at_arr) && count($at_arr) > 0) {
521 for ($i=0; $i<count($at_arr); $i++) {
522 if ($at_arr[$i]->isError()) {
525 // Get list of extra fields for this artifact
526 $extrafields = array();
527 $tmpextrafields = $at_arr[$i]->getExtraFields();
528 foreach ($tmpextrafields as $extrafield) {
529 $aefobj = new ArtifactExtraField($at_arr[$i], $extrafield["extra_field_id"]);
531 // array of available values
532 $avtmp = $aefobj->getAvailableValues();
534 for ($j=0; $j < count($avtmp); $j++) {
535 $avs[$j]["element_id"] = $avtmp[$j]["element_id"];
536 $avs[$j]["element_name"] = $avtmp[$j]["element_name"];
537 $avs[$j]["status_id"] = $avtmp[$j]["status_id"];
540 $extrafields[] = array(
541 "extra_field_id"=> $aefobj->getID(),
542 "field_name" => $aefobj->getName(),
543 "field_type" => $aefobj->getType(),
544 "attribute1" => $aefobj->getAttribute1(),
545 "attribute2" => $aefobj->getAttribute2(),
546 "is_required" => $aefobj->isRequired(),
547 "alias" => $aefobj->getAlias(),
548 "available_values" => $avs,
549 "default_selected_id" => 0 //TODO (not implemented yet)
554 'group_artifact_id'=>$at_arr[$i]->data_array['group_artifact_id'],
555 'group_id'=>$at_arr[$i]->data_array['group_id'],
556 'name'=>$at_arr[$i]->data_array['name'],
557 'description'=>$at_arr[$i]->data_array['description'],
558 'is_public'=>$at_arr[$i]->data_array['is_public'],
559 'allow_anon'=>$at_arr[$i]->data_array['allow_anon'],
560 'due_period'=>$at_arr[$i]->data_array['due_period'],
561 'datatype'=>$at_arr[$i]->data_array['datatype'],
562 'status_timeout'=>$at_arr[$i]->data_array['status_timeout'],
563 'extra_fields' => $extrafields,
564 'custom_status_field' => $at_arr[$i]->data_array['custom_status_field']
572 //Arrange the ExtraFields
573 function arrangeExtraFields($extra_fields, $extra_field_info) {
576 if (is_array($extra_fields)) {
577 while(list($eky,)=each($extra_fields)) {
578 $efields=$extra_fields[$eky];
579 $efid = $efields['extra_field_id'];
580 $data = $efields['field_data'];
582 // if the extra field is of type CHECKBOX or MULTISELECT we must
583 // convert the value passed by the user from a comma separated list
584 // of ids to an array
585 if (array_key_exists($efid, $extra_field_info)) {
586 if ($extra_field_info[$efid]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_CHECKBOX ||
587 $extra_field_info[$efid]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_MULTISELECT) {
588 $data = split(",", $data);
592 $fieldsdata[$efid]=$data;
602 function &addArtifact($session_ser,$group_id,$group_artifact_id,$status_id,
603 $priority,$assigned_to,$summary,$details,$extra_fields) {
605 continue_session($session_ser);
606 $grp =& group_get_object($group_id);
607 if (!$grp || !is_object($grp)) {
608 return new soap_fault ('','addArtifact','Could Not Get Project','Could Not Get Project');
609 } elseif ($grp->isError()) {
610 return new soap_fault ('','addArtifact',$grp->getErrorMessage(),$grp->getErrorMessage());
613 $at = new ArtifactType($grp,$group_artifact_id);
614 if (!$at || !is_object($at)) {
615 return new soap_fault ('','addArtifact','Could Not Get ArtifactType','Could Not Get ArtifactType');
616 } elseif ($at->isError()) {
617 return new soap_fault ('','addArtifact',$at->getErrorMessage(),$at->getErrorMessage());
620 $a = new Artifact($at);
621 if (!$a || !is_object($a)) {
622 return new soap_fault ('','addArtifact','Could Not Get Artifact','Could Not Get Artifact');
623 } elseif ($a->isError()) {
624 return new soap_fault ('','addArtifact',$a->getErrorMessage(),$a->getErrorMessage());
627 $aef = $a->ArtifactType->getExtraFields();
628 $extra_flds=arrangeExtraFields($extra_fields,$aef);
629 if (!$a->create($summary,$details,$assigned_to,$priority,$extra_flds)) {
630 return new soap_fault ('','addArtifact',$a->getErrorMessage(),$a->getErrorMessage());
639 function &updateArtifact($session_ser,$group_id,$group_artifact_id,$artifact_id,$status_id,
640 $priority,$assigned_to,$summary,$details,$new_artifact_type_id,$extra_fields_data) {
641 continue_session($session_ser);
642 $grp =& group_get_object($group_id);
643 if (!$grp || !is_object($grp)) {
644 return new soap_fault ('','updateArtifact','Could Not Get Project','Could Not Get Project');
645 } elseif ($grp->isError()) {
646 return new soap_fault ('','updateArtifact',$grp->getErrorMessage(),$grp->getErrorMessage());
649 $at = new ArtifactType($grp,$group_artifact_id);
650 if (!$at || !is_object($at)) {
651 return new soap_fault ('','updateArtifact','Could Not Get ArtifactType','Could Not Get ArtifactType');
652 } elseif ($at->isError()) {
653 return new soap_fault ('','updateArtifact',$at->getErrorMessage(),$at->getErrorMessage());
656 $a = new Artifact($at,$artifact_id);
657 if (!$a || !is_object($a)) {
658 return new soap_fault ('','updateArtifact','Could Not Get Artifact','Could Not Get Artifact');
659 } elseif ($a->isError()) {
660 return new soap_fault ('','updateArtifact',$a->getErrorMessage(),$a->getErrorMessage());
662 //NOT DONE - $new_artifact_type_id missing, extra_fields missing, canned response missing
663 $canned_response = 100;
664 $aef = $at->getExtraFields();
665 $extra_flds=arrangeExtraFields($extra_fields_data, $aef);
666 if (!$a->update($priority,$status_id,$assigned_to,
667 $summary,$canned_response,$details,$new_artifact_type_id,$extra_flds)) {
668 return new soap_fault ('','updateArtifact',$a->getErrorMessage(),$a->getErrorMessage());
675 // getArtifactTechnicians
677 function &getArtifactTechnicians($session_ser,$group_id,$group_artifact_id) {
678 continue_session($session_ser);
679 $grp =& group_get_object($group_id);
680 if (!$grp || !is_object($grp)) {
681 return new soap_fault ('','getArtifactTechnicians','Could Not Get Project','Could Not Get Project');
682 } elseif ($grp->isError()) {
683 return new soap_fault ('','getArtifactTechnicians',$grp->getErrorMessage(),$grp->getErrorMessage());
686 $at = new ArtifactType($grp,$group_artifact_id);
687 if (!$at || !is_object($at)) {
688 return new soap_fault ('','getArtifactTechnicians','Could Not Get ArtifactType','Could Not Get ArtifactType');
689 } elseif ($at->isError()) {
690 return new soap_fault ('','getArtifactTechnicians',$at->getErrorMessage(),$at->getErrorMessage());
693 $engine = RBACEngine::getInstance () ;
694 $techs = $engine->getUsersByAllowedAction ('tracker', $at->getID(), 'tech') ;
696 return users_to_soap ($techs);
702 function &getArtifacts($session_ser,$group_id,$group_artifact_id,$assigned_to,$status) {
703 continue_session($session_ser);
704 $grp =& group_get_object($group_id);
705 if (!$grp || !is_object($grp)) {
706 return new soap_fault ('','getArtifacts','Could Not Get Project','Could Not Get Project');
707 } elseif ($grp->isError()) {
708 return new soap_fault ('','getArtifacts',$grp->getErrorMessage(),$grp->getErrorMessage());
711 $at = new ArtifactType($grp,$group_artifact_id);
712 if (!$at || !is_object($at)) {
713 return new soap_fault ('','getArtifacts','Could Not Get ArtifactType','Could Not Get ArtifactType');
714 } elseif ($at->isError()) {
715 return new soap_fault ('','getArtifacts',$at->getErrorMessage(),$at->getErrorMessage());
718 $af = new ArtifactFactory($at);
719 if (!$af || !is_object($af)) {
720 return new soap_fault ('','getArtifacts','Could Not Get ArtifactFactory','Could Not Get ArtifactFactory');
721 } elseif ($af->isError()) {
722 return new soap_fault ('','getArtifacts',$af->getErrorMessage(),$af->getErrorMessage());
725 // this is a bit hacky...
726 if ($assigned_to || $status) {
732 $af->setup(0,'','',0,$set,$assigned_to,$status);
733 $artifacts = $af->getArtifacts();
734 if ($artifacts === false) {
735 return new soap_fault ('','getArtifacts',$af->getErrorMessage(),$af->getErrorMessage());
737 return artifacts_to_soap($artifacts);
742 // Get artifact by ID
744 function getArtifact($session_ser,$group_id,$group_artifact_id,$artifact_id) {
749 // convert array of artifacts to soap data structure
751 function artifacts_to_soap($at_arr) {
753 if (is_array($at_arr) && count($at_arr) > 0) {
754 for ($i=0; $i<count($at_arr); $i++) {
755 if ($at_arr[$i]->isError()) {
758 //NEEDS THOROUGH COMMENTS AND EXPLANATION
760 // Retrieving the artifact details
761 //**checks whether there is any artifact details exists for this object, if not continue with next loop
763 if(count($at_arr[$i]) < 1) { continue; }
765 $fldelementdata=array();
766 $extrafieldsdata=array();
767 $extrafieldsdata=$at_arr[$i]->getExtraFieldData();
770 //** Retrieving the extra field data and the element data
771 //** checks whether there is any extra fields data available for this artifact
772 //** and checks for the extra element data for the multiselect and checkbox type
773 if(is_array($extrafieldsdata) && count($extrafieldsdata)>0) {
774 while(list($ky,$vl)=each($extrafieldsdata)) {
776 if(is_array($extrafieldsdata[$ky])) {
777 //** Retrieving the multiselect and checkbox type data element
778 $fldarr=array('extra_field_id'=>$ky,'field_data'=>implode(",",$extrafieldsdata[$ky]));
780 //** Retrieving the extra field data
781 $fldarr=array('extra_field_id'=>$ky,'field_data'=>$vl);
788 'artifact_id'=>$at_arr[$i]->data_array['artifact_id'],
789 'group_artifact_id'=>$at_arr[$i]->data_array['group_artifact_id'],
790 'status_id'=>$at_arr[$i]->data_array['status_id'],
791 'priority'=>$at_arr[$i]->data_array['priority'],
792 'submitted_by'=>$at_arr[$i]->data_array['submitted_by'],
793 'assigned_to'=>$at_arr[$i]->data_array['assigned_to'],
794 'open_date'=>$at_arr[$i]->data_array['open_date'],
795 'close_date'=>$at_arr[$i]->data_array['close_date'],
796 'summary'=>$at_arr[$i]->data_array['summary'],
797 'details'=>$at_arr[$i]->data_array['details'],
798 'extra_fields'=>$flddata
809 function &getArtifactFiles($session_ser,$group_id,$group_artifact_id,$artifact_id) {
810 continue_session($session_ser);
811 $grp =& group_get_object($group_id);
812 if (!$grp || !is_object($grp)) {
813 return new soap_fault ('','getArtifactFiles','Could Not Get Project','Could Not Get Project');
814 } elseif ($grp->isError()) {
815 return new soap_fault ('','getArtifactFiles',$grp->getErrorMessage(),$grp->getErrorMessage());
818 $at = new ArtifactType($grp,$group_artifact_id);
819 if (!$at || !is_object($at)) {
820 return new soap_fault ('','getArtifactFiles','Could Not Get ArtifactType','Could Not Get ArtifactType');
821 } elseif ($at->isError()) {
822 return new soap_fault ('','getArtifactFiles',$at->getErrorMessage(),$at->getErrorMessage());
825 $a = new Artifact($at,$artifact_id);
826 if (!$a || !is_object($a)) {
827 return new soap_fault ('','getArtifactFiles','Could Not Get Artifact','Could Not Get Artifact');
828 } elseif ($a->isError()) {
829 return new soap_fault ('','getArtifactFiles',$a->getErrorMessage(),$a->getErrorMessage());
832 $files_arr = $a->getFiles();
833 $return = artifactfiles_to_soap($files_arr);
839 // convert array of artifact files to soap data structure
841 function artifactfiles_to_soap($files_arr) {
844 for ($i=0; $i<count($files_arr); $i++) {
845 if ($files_arr[$i]->isError()) {
849 'id' => $files_arr[$i]->getID(),
850 'artifact_id' => $files_arr[$i]->Artifact->getID(),
851 'name' => $files_arr[$i]->getName(),
852 'description' => $files_arr[$i]->getDescription(),
853 'filesize' => $files_arr[$i]->getSize(),
854 'filetype' => $files_arr[$i]->getType(),
855 'adddate' => $files_arr[$i]->getDate(),
856 'submitted_by' => $files_arr[$i]->getSubmittedBy()
863 function getArtifactFileData($session_ser,$group_id,$group_artifact_id,$artifact_id,$file_id) {
864 continue_session($session_ser);
865 $grp =& group_get_object($group_id);
866 if (!$grp || !is_object($grp)) {
867 return new soap_fault ('','getArtifactFileData','Could Not Get Project','Could Not Get Project');
868 } elseif ($grp->isError()) {
869 return new soap_fault ('','getArtifactFileData',$grp->getErrorMessage(),$grp->getErrorMessage());
872 $at = new ArtifactType($grp,$group_artifact_id);
873 if (!$at || !is_object($at)) {
874 return new soap_fault ('','getArtifactFileData','Could Not Get ArtifactType','Could Not Get ArtifactType');
875 } elseif ($at->isError()) {
876 return new soap_fault ('','getArtifactFileData',$at->getErrorMessage(),$at->getErrorMessage());
879 $a = new Artifact($at,$artifact_id);
880 if (!$a || !is_object($a)) {
881 return new soap_fault ('','getArtifactFileData','Could Not Get Artifact','Could Not Get Artifact');
882 } elseif ($a->isError()) {
883 return new soap_fault ('','getArtifactFileData',$a->getErrorMessage(),$a->getErrorMessage());
886 $af=new ArtifactFile($a,$file_id);
887 if (!$af || !is_object($af)) {
888 return new soap_fault ('','getArtifactFileData','ArtifactFile Could Not Be Created','ArtifactFile Could Not Be Created');
889 } else if ($af->isError()) {
890 return new soap_fault ('','getArtifactFileData',$af->getErrorMessage(),$af->getErrorMessage());
893 //send file encoded in base64
894 return base64_encode($af->getData());
904 'session_ser'=>'xsd:string',
905 'group_id'=>'xsd:int',
906 'group_artifact_id'=>'xsd:int',
907 'artifact_id'=>'xsd:int',
908 'base64_contents'=>'xsd:string',
909 'description'=>'xsd:string',
910 'filename'=>'xsd:string',
911 'filetype'=>'xsd:string'
913 function addArtifactFile($session_ser,$group_id,$group_artifact_id,$artifact_id,$base64_contents,$description,$filename,$filetype) {
914 continue_session($session_ser);
916 $grp =& group_get_object($group_id);
917 if (!$grp || !is_object($grp)) {
918 return new soap_fault ('','addArtifactFile','Could Not Get Project','Could Not Get Project');
919 } elseif ($grp->isError()) {
920 return new soap_fault ('','addArtifactFile',$grp->getErrorMessage(),$grp->getErrorMessage());
923 $at = new ArtifactType($grp,$group_artifact_id);
924 if (!$at || !is_object($at)) {
925 return new soap_fault ('','addArtifactFile','Could Not Get ArtifactType','Could Not Get ArtifactType');
926 } elseif ($at->isError()) {
927 return new soap_fault ('','addArtifactFile',$at->getErrorMessage(),$at->getErrorMessage());
930 $a = new Artifact($at,$artifact_id);
931 if (!$a || !is_object($a)) {
932 return new soap_fault ('','addArtifactFile','Could Not Get Artifact','Could Not Get Artifact');
933 } elseif ($a->isError()) {
934 return new soap_fault ('','addArtifactFile',$a->getErrorMessage(),$a->getErrorMessage());
937 $af = new ArtifactFile($a);
938 if (!$af || !is_object($af)) {
939 return new soap_fault ('','addArtifactFile','Could Not Create ArtifactFile object','Could Not Create ArtifactFile object');
940 } else if ($af->isError()) {
941 return new soap_fault ('','addArtifactFile',$af->getErrorMessage(),$af->getErrorMessage());
944 $bin_data = base64_decode($base64_contents);
945 $filesize = strlen($bin_data);
947 $res = $af->create($filename,$filetype,$filesize,$bin_data,$description);
950 return new soap_fault ('','addArtifactFile',$af->getErrorMessage(),$af->getErrorMessage());
958 // getArtifactMessages
960 function &getArtifactMessages($session_ser,$group_id,$group_artifact_id,$artifact_id) {
961 continue_session($session_ser);
962 $grp =& group_get_object($group_id);
963 if (!$grp || !is_object($grp)) {
964 return new soap_fault ('','getArtifactMessages','Could Not Get Project','Could Not Get Project');
965 } elseif ($grp->isError()) {
966 return new soap_fault ('','getArtifactMessages',$grp->getErrorMessage(),$grp->getErrorMessage());
969 $at = new ArtifactType($grp,$group_artifact_id);
970 if (!$at || !is_object($at)) {
971 return new soap_fault ('','getArtifactMessages','Could Not Get ArtifactType','Could Not Get ArtifactType');
972 } elseif ($at->isError()) {
973 return new soap_fault ('','getArtifactMessages',$at->getErrorMessage(),$at->getErrorMessage());
976 $a = new Artifact($at,$artifact_id);
977 if (!$a || !is_object($a)) {
978 return new soap_fault ('','getArtifactMessages','Could Not Get Artifact','Could Not Get Artifact');
979 } elseif ($a->isError()) {
980 return new soap_fault ('','getArtifactMessages',$a->getErrorMessage(),$a->getErrorMessage());
983 return artifactmessages_to_soap($a->getMessageObjects());
987 // convert array of artifact messages to soap data structure
989 function artifactmessages_to_soap($at_arr) {
991 for ($i=0; $i<count($at_arr); $i++) {
992 if ($at_arr[$i]->isError()) {
996 'id'=>$at_arr[$i]->data_array['id'],
997 'artifact_id'=>$at_arr[$i]->data_array['artifact_id'],
998 'body'=>$at_arr[$i]->data_array['body'],
999 'adddate'=>$at_arr[$i]->data_array['adddate'],
1000 'user_id'=>$at_arr[$i]->data_array['user_id']
1008 // addArtifactMessage
1010 function &addArtifactMessage($session_ser,$group_id,$group_artifact_id,$artifact_id,$body) {
1011 continue_session($session_ser);
1012 $grp =& group_get_object($group_id);
1013 if (!$grp || !is_object($grp)) {
1014 return new soap_fault ('','addArtifactMessage','Could Not Get Project','Could Not Get Project');
1015 } elseif ($grp->isError()) {
1016 return new soap_fault ('','addArtifactMessage',$grp->getErrorMessage(),$grp->getErrorMessage());
1019 $at = new ArtifactType($grp,$group_artifact_id);
1020 if (!$at || !is_object($at)) {
1021 return new soap_fault ('','addArtifactMessage','Could Not Get ArtifactType','Could Not Get ArtifactType');
1022 } elseif ($at->isError()) {
1023 return new soap_fault ('','addArtifactMessage',$at->getErrorMessage(),$at->getErrorMessage());
1026 $a = new Artifact($at,$artifact_id);
1027 if (!$a || !is_object($a)) {
1028 return new soap_fault ('','addArtifactMessage','Could Not Get Artifact','Could Not Get Artifact');
1029 } elseif ($a->isError()) {
1030 return new soap_fault ('','addArtifactMessage',$a->getErrorMessage(),$a->getErrorMessage());
1033 $am = new ArtifactMessage($a);
1034 if (!$am || !is_object($am)) {
1035 return new soap_fault ('','addArtifactMessage','Could Not Get ArtifactMessage','Could Not Get ArtifactMessage');
1036 } elseif ($am->isError()) {
1037 return new soap_fault ('','addArtifactMessage',$am->getErrorMessage(),$am->getErrorMessage());
1040 if (!$am->create($body)) {
1041 return new soap_fault ('','addArtifactMessage',$am->getErrorMessage(),$am->getErrorMessage());
1043 return $am->getID();
1048 * artifactGetChangeLog
1050 $server->wsdl->addComplexType(
1051 'ArtifactChangeLog',
1057 'field_name' => array('name' => 'field_name', 'type' => 'xsd:string'),
1058 'old_value' => array('name' => 'old_value', 'type' => 'xsd:string'),
1059 'date' => array('name' => 'date', 'type' => 'xsd:int'),
1060 'user_name' => array('name' => 'user_name', 'type' => 'xsd:string')
1064 $server->wsdl->addComplexType(
1065 'ArrayOfArtifactChangeLog',
1072 array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactChangeLog[]')
1074 'tns:ArtifactChangeLog'
1078 'artifactGetChangeLog',
1080 'session_ser'=>'xsd:string',
1081 'group_id'=>'xsd:int',
1082 'group_artifact_id'=>'xsd:int',
1083 'artifact_id' => 'xsd:int'
1085 array('artifactGetChangeLogResponse'=>'tns:ArrayOfArtifactChangeLog'),
1087 $uri.'#artifactGetChangeLog','rpc','encoded'
1090 function artifactGetChangeLog($session_ser, $group_id, $group_artifact_id, $artifact_id) {
1091 continue_session($session_ser);
1092 $grp =& group_get_object($group_id);
1093 if (!$grp || !is_object($grp)) {
1094 return new soap_fault ('','artifactGetChangeLog','Could Not Get Project','Could Not Get Project');
1095 } elseif ($grp->isError()) {
1096 return new soap_fault ('','artifactGetChangeLog',$grp->getErrorMessage(),$grp->getErrorMessage());
1099 $at = new ArtifactType($grp,$group_artifact_id);
1100 if (!$at || !is_object($at)) {
1101 return new soap_fault ('','artifactGetChangeLog','Could Not Get ArtifactType','Could Not Get ArtifactType');
1102 } elseif ($at->isError()) {
1103 return new soap_fault ('','artifactGetChangeLog',$at->getErrorMessage(),$at->getErrorMessage());
1106 $artifact = new Artifact($at,$artifact_id);
1107 if (!$artifact || !is_object($artifact)) {
1108 return new soap_fault ('','artifactGetChangeLog','Could Not Get Artifact','Could Not Get Artifact');
1109 } elseif ($artifact->isError()) {
1110 return new soap_fault ('','artifactGetChangeLog',$artifact->getErrorMessage(),$artifact->getErrorMessage());
1113 // note that Artifact::getHistory returns a DB result handler
1114 $result = $artifact->getHistory();
1115 return artifact_history_to_soap($result, $at);
1118 function artifact_history_to_soap($db_result, &$artifactType) {
1120 while ($entry = db_fetch_array($db_result)) {
1121 $field_name = $entry["field_name"];
1122 $old_value = $entry["old_value"];
1123 $date = $entry["entrydate"];
1124 $user_name = $entry["user_name"];
1126 if ($field_name == 'status_id') {
1127 $old_value = $artifactType->getStatusName($old_value);
1128 } else if ($field_name == 'assigned_to') {
1129 $old_value = user_getname($old_value);
1130 } else if ($field == 'close_date') {
1131 $old_value = date(_('Y-m-d H:i'), $old_value);
1134 //$date = date(_('Y-m-d H:i'), $date);
1137 "field_name" => $field_name,
1138 "old_value" => $old_value,
1140 "user_name" => $user_name