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 Group','Could Not Get Group');
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 Group','Could Not Get Group');
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 Group','Could Not Get Group');
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 Group','Could Not Get Group');
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 return users_to_soap($at->getTechnicianObjects());
699 function &getArtifacts($session_ser,$group_id,$group_artifact_id,$assigned_to,$status) {
700 continue_session($session_ser);
701 $grp =& group_get_object($group_id);
702 if (!$grp || !is_object($grp)) {
703 return new soap_fault ('','getArtifacts','Could Not Get Group','Could Not Get Group');
704 } elseif ($grp->isError()) {
705 return new soap_fault ('','getArtifacts',$grp->getErrorMessage(),$grp->getErrorMessage());
708 $at = new ArtifactType($grp,$group_artifact_id);
709 if (!$at || !is_object($at)) {
710 return new soap_fault ('','getArtifacts','Could Not Get ArtifactType','Could Not Get ArtifactType');
711 } elseif ($at->isError()) {
712 return new soap_fault ('','getArtifacts',$at->getErrorMessage(),$at->getErrorMessage());
715 $af = new ArtifactFactory($at);
716 if (!$af || !is_object($af)) {
717 return new soap_fault ('','getArtifacts','Could Not Get ArtifactFactory','Could Not Get ArtifactFactory');
718 } elseif ($af->isError()) {
719 return new soap_fault ('','getArtifacts',$af->getErrorMessage(),$af->getErrorMessage());
722 //MAY HAVE TO CHANGE PARAMS TO FORCE RETRIEVAL OF RIGHT RECORDS - FOR INSTANCE $set='Custom'
724 // $af->setup(0,'','',0,false,$assigned_to,$status);
726 // this is a bit hacky...
727 if ($assigned_to || $status) {
733 $af->setup(0,'','',0,$set,$assigned_to,$status);
734 $artifacts = $af->getArtifacts();
735 if ($artifacts === false) {
736 return new soap_fault ('','getArtifacts',$af->getErrorMessage(),$af->getErrorMessage());
738 return artifacts_to_soap($artifacts);
743 // Get artifact by ID
745 function getArtifact($session_ser,$group_id,$group_artifact_id,$artifact_id) {
750 // convert array of artifacts to soap data structure
752 function artifacts_to_soap($at_arr) {
754 if (is_array($at_arr) && count($at_arr) > 0) {
755 for ($i=0; $i<count($at_arr); $i++) {
756 if ($at_arr[$i]->isError()) {
759 //NEEDS THOROUGH COMMENTS AND EXPLANATION
761 // Retrieving the artifact details
762 //**checks whether there is any artifact details exists for this object, if not continue with next loop
764 if(count($at_arr[$i]) < 1) { continue; }
766 $fldelementdata=array();
767 $extrafieldsdata=array();
768 $extrafieldsdata=$at_arr[$i]->getExtraFieldData();
771 //** Retrieving the extra field data and the element data
772 //** checks whether there is any extra fields data available for this artifact
773 //** and checks for the extra element data for the multiselect and checkbox type
774 if(is_array($extrafieldsdata) && count($extrafieldsdata)>0) {
775 while(list($ky,$vl)=each($extrafieldsdata)) {
777 if(is_array($extrafieldsdata[$ky])) {
778 //** Retrieving the multiselect and checkbox type data element
779 $fldarr=array('extra_field_id'=>$ky,'field_data'=>implode(",",$extrafieldsdata[$ky]));
781 //** Retrieving the extra field data
782 $fldarr=array('extra_field_id'=>$ky,'field_data'=>$vl);
789 'artifact_id'=>$at_arr[$i]->data_array['artifact_id'],
790 'group_artifact_id'=>$at_arr[$i]->data_array['group_artifact_id'],
791 'status_id'=>$at_arr[$i]->data_array['status_id'],
792 'priority'=>$at_arr[$i]->data_array['priority'],
793 'submitted_by'=>$at_arr[$i]->data_array['submitted_by'],
794 'assigned_to'=>$at_arr[$i]->data_array['assigned_to'],
795 'open_date'=>$at_arr[$i]->data_array['open_date'],
796 'close_date'=>$at_arr[$i]->data_array['close_date'],
797 'summary'=>$at_arr[$i]->data_array['summary'],
798 'details'=>$at_arr[$i]->data_array['details'],
799 'extra_fields'=>$flddata
810 function &getArtifactFiles($session_ser,$group_id,$group_artifact_id,$artifact_id) {
811 continue_session($session_ser);
812 $grp =& group_get_object($group_id);
813 if (!$grp || !is_object($grp)) {
814 return new soap_fault ('','getArtifactFiles','Could Not Get Group','Could Not Get Group');
815 } elseif ($grp->isError()) {
816 return new soap_fault ('','getArtifactFiles',$grp->getErrorMessage(),$grp->getErrorMessage());
819 $at = new ArtifactType($grp,$group_artifact_id);
820 if (!$at || !is_object($at)) {
821 return new soap_fault ('','getArtifactFiles','Could Not Get ArtifactType','Could Not Get ArtifactType');
822 } elseif ($at->isError()) {
823 return new soap_fault ('','getArtifactFiles',$at->getErrorMessage(),$at->getErrorMessage());
826 $a = new Artifact($at,$artifact_id);
827 if (!$a || !is_object($a)) {
828 return new soap_fault ('','getArtifactFiles','Could Not Get Artifact','Could Not Get Artifact');
829 } elseif ($a->isError()) {
830 return new soap_fault ('','getArtifactFiles',$a->getErrorMessage(),$a->getErrorMessage());
833 $files_arr = $a->getFiles();
834 $return = artifactfiles_to_soap($files_arr);
840 // convert array of artifact files to soap data structure
842 function artifactfiles_to_soap($files_arr) {
845 for ($i=0; $i<count($files_arr); $i++) {
846 if ($files_arr[$i]->isError()) {
850 'id' => $files_arr[$i]->getID(),
851 'artifact_id' => $files_arr[$i]->Artifact->getID(),
852 'name' => $files_arr[$i]->getName(),
853 'description' => $files_arr[$i]->getDescription(),
854 'filesize' => $files_arr[$i]->getSize(),
855 'filetype' => $files_arr[$i]->getType(),
856 'adddate' => $files_arr[$i]->getDate(),
857 'submitted_by' => $files_arr[$i]->getSubmittedBy()
864 function getArtifactFileData($session_ser,$group_id,$group_artifact_id,$artifact_id,$file_id) {
865 continue_session($session_ser);
866 $grp =& group_get_object($group_id);
867 if (!$grp || !is_object($grp)) {
868 return new soap_fault ('','getArtifactFileData','Could Not Get Group','Could Not Get Group');
869 } elseif ($grp->isError()) {
870 return new soap_fault ('','getArtifactFileData',$grp->getErrorMessage(),$grp->getErrorMessage());
873 $at = new ArtifactType($grp,$group_artifact_id);
874 if (!$at || !is_object($at)) {
875 return new soap_fault ('','getArtifactFileData','Could Not Get ArtifactType','Could Not Get ArtifactType');
876 } elseif ($at->isError()) {
877 return new soap_fault ('','getArtifactFileData',$at->getErrorMessage(),$at->getErrorMessage());
880 $a = new Artifact($at,$artifact_id);
881 if (!$a || !is_object($a)) {
882 return new soap_fault ('','getArtifactFileData','Could Not Get Artifact','Could Not Get Artifact');
883 } elseif ($a->isError()) {
884 return new soap_fault ('','getArtifactFileData',$a->getErrorMessage(),$a->getErrorMessage());
887 $af=new ArtifactFile($a,$file_id);
888 if (!$af || !is_object($af)) {
889 return new soap_fault ('','getArtifactFileData','ArtifactFile Could Not Be Created','ArtifactFile Could Not Be Created');
890 } else if ($af->isError()) {
891 return new soap_fault ('','getArtifactFileData',$af->getErrorMessage(),$af->getErrorMessage());
894 //send file encoded in base64
895 return base64_encode($af->getData());
905 'session_ser'=>'xsd:string',
906 'group_id'=>'xsd:int',
907 'group_artifact_id'=>'xsd:int',
908 'artifact_id'=>'xsd:int',
909 'base64_contents'=>'xsd:string',
910 'description'=>'xsd:string',
911 'filename'=>'xsd:string',
912 'filetype'=>'xsd:string'
914 function addArtifactFile($session_ser,$group_id,$group_artifact_id,$artifact_id,$base64_contents,$description,$filename,$filetype) {
915 continue_session($session_ser);
917 $grp =& group_get_object($group_id);
918 if (!$grp || !is_object($grp)) {
919 return new soap_fault ('','addArtifactFile','Could Not Get Group','Could Not Get Group');
920 } elseif ($grp->isError()) {
921 return new soap_fault ('','addArtifactFile',$grp->getErrorMessage(),$grp->getErrorMessage());
924 $at = new ArtifactType($grp,$group_artifact_id);
925 if (!$at || !is_object($at)) {
926 return new soap_fault ('','addArtifactFile','Could Not Get ArtifactType','Could Not Get ArtifactType');
927 } elseif ($at->isError()) {
928 return new soap_fault ('','addArtifactFile',$at->getErrorMessage(),$at->getErrorMessage());
931 $a = new Artifact($at,$artifact_id);
932 if (!$a || !is_object($a)) {
933 return new soap_fault ('','addArtifactFile','Could Not Get Artifact','Could Not Get Artifact');
934 } elseif ($a->isError()) {
935 return new soap_fault ('','addArtifactFile',$a->getErrorMessage(),$a->getErrorMessage());
938 $af = new ArtifactFile($a);
939 if (!$af || !is_object($af)) {
940 return new soap_fault ('','addArtifactFile','Could Not Create ArtifactFile object','Could Not Create ArtifactFile object');
941 } else if ($af->isError()) {
942 return new soap_fault ('','addArtifactFile',$af->getErrorMessage(),$af->getErrorMessage());
945 $bin_data = base64_decode($base64_contents);
946 $filesize = strlen($bin_data);
948 $res = $af->create($filename,$filetype,$filesize,$bin_data,$description);
951 return new soap_fault ('','addArtifactFile',$af->getErrorMessage(),$af->getErrorMessage());
959 // getArtifactMessages
961 function &getArtifactMessages($session_ser,$group_id,$group_artifact_id,$artifact_id) {
962 continue_session($session_ser);
963 $grp =& group_get_object($group_id);
964 if (!$grp || !is_object($grp)) {
965 return new soap_fault ('','getArtifactMessages','Could Not Get Group','Could Not Get Group');
966 } elseif ($grp->isError()) {
967 return new soap_fault ('','getArtifactMessages',$grp->getErrorMessage(),$grp->getErrorMessage());
970 $at = new ArtifactType($grp,$group_artifact_id);
971 if (!$at || !is_object($at)) {
972 return new soap_fault ('','getArtifactMessages','Could Not Get ArtifactType','Could Not Get ArtifactType');
973 } elseif ($at->isError()) {
974 return new soap_fault ('','getArtifactMessages',$at->getErrorMessage(),$at->getErrorMessage());
977 $a = new Artifact($at,$artifact_id);
978 if (!$a || !is_object($a)) {
979 return new soap_fault ('','getArtifactMessages','Could Not Get Artifact','Could Not Get Artifact');
980 } elseif ($a->isError()) {
981 return new soap_fault ('','getArtifactMessages',$a->getErrorMessage(),$a->getErrorMessage());
984 return artifactmessages_to_soap($a->getMessageObjects());
988 // convert array of artifact messages to soap data structure
990 function artifactmessages_to_soap($at_arr) {
992 for ($i=0; $i<count($at_arr); $i++) {
993 if ($at_arr[$i]->isError()) {
997 'id'=>$at_arr[$i]->data_array['id'],
998 'artifact_id'=>$at_arr[$i]->data_array['artifact_id'],
999 'body'=>$at_arr[$i]->data_array['body'],
1000 'adddate'=>$at_arr[$i]->data_array['adddate'],
1001 'user_id'=>$at_arr[$i]->data_array['user_id']
1009 // addArtifactMessage
1011 function &addArtifactMessage($session_ser,$group_id,$group_artifact_id,$artifact_id,$body) {
1012 continue_session($session_ser);
1013 $grp =& group_get_object($group_id);
1014 if (!$grp || !is_object($grp)) {
1015 return new soap_fault ('','addArtifactMessage','Could Not Get Group','Could Not Get Group');
1016 } elseif ($grp->isError()) {
1017 return new soap_fault ('','addArtifactMessage',$grp->getErrorMessage(),$grp->getErrorMessage());
1020 $at = new ArtifactType($grp,$group_artifact_id);
1021 if (!$at || !is_object($at)) {
1022 return new soap_fault ('','addArtifactMessage','Could Not Get ArtifactType','Could Not Get ArtifactType');
1023 } elseif ($at->isError()) {
1024 return new soap_fault ('','addArtifactMessage',$at->getErrorMessage(),$at->getErrorMessage());
1027 $a = new Artifact($at,$artifact_id);
1028 if (!$a || !is_object($a)) {
1029 return new soap_fault ('','addArtifactMessage','Could Not Get Artifact','Could Not Get Artifact');
1030 } elseif ($a->isError()) {
1031 return new soap_fault ('','addArtifactMessage',$a->getErrorMessage(),$a->getErrorMessage());
1034 $am = new ArtifactMessage($a);
1035 if (!$am || !is_object($am)) {
1036 return new soap_fault ('','addArtifactMessage','Could Not Get ArtifactMessage','Could Not Get ArtifactMessage');
1037 } elseif ($am->isError()) {
1038 return new soap_fault ('','addArtifactMessage',$am->getErrorMessage(),$am->getErrorMessage());
1041 if (!$am->create($body)) {
1042 return new soap_fault ('','addArtifactMessage',$am->getErrorMessage(),$am->getErrorMessage());
1044 return $am->getID();
1049 * artifactGetChangeLog
1051 $server->wsdl->addComplexType(
1052 'ArtifactChangeLog',
1058 'field_name' => array('name' => 'field_name', 'type' => 'xsd:string'),
1059 'old_value' => array('name' => 'old_value', 'type' => 'xsd:string'),
1060 'date' => array('name' => 'date', 'type' => 'xsd:int'),
1061 'user_name' => array('name' => 'user_name', 'type' => 'xsd:string')
1065 $server->wsdl->addComplexType(
1066 'ArrayOfArtifactChangeLog',
1073 array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactChangeLog[]')
1075 'tns:ArtifactChangeLog'
1079 'artifactGetChangeLog',
1081 'session_ser'=>'xsd:string',
1082 'group_id'=>'xsd:int',
1083 'group_artifact_id'=>'xsd:int',
1084 'artifact_id' => 'xsd:int'
1086 array('artifactGetChangeLogResponse'=>'tns:ArrayOfArtifactChangeLog'),
1088 $uri.'#artifactGetChangeLog','rpc','encoded'
1091 function artifactGetChangeLog($session_ser, $group_id, $group_artifact_id, $artifact_id) {
1092 continue_session($session_ser);
1093 $grp =& group_get_object($group_id);
1094 if (!$grp || !is_object($grp)) {
1095 return new soap_fault ('','artifactGetChangeLog','Could Not Get Group','Could Not Get Group');
1096 } elseif ($grp->isError()) {
1097 return new soap_fault ('','artifactGetChangeLog',$grp->getErrorMessage(),$grp->getErrorMessage());
1100 $at = new ArtifactType($grp,$group_artifact_id);
1101 if (!$at || !is_object($at)) {
1102 return new soap_fault ('','artifactGetChangeLog','Could Not Get ArtifactType','Could Not Get ArtifactType');
1103 } elseif ($at->isError()) {
1104 return new soap_fault ('','artifactGetChangeLog',$at->getErrorMessage(),$at->getErrorMessage());
1107 $artifact = new Artifact($at,$artifact_id);
1108 if (!$artifact || !is_object($artifact)) {
1109 return new soap_fault ('','artifactGetChangeLog','Could Not Get Artifact','Could Not Get Artifact');
1110 } elseif ($artifact->isError()) {
1111 return new soap_fault ('','artifactGetChangeLog',$artifact->getErrorMessage(),$artifact->getErrorMessage());
1114 // note that Artifact::getHistory returns a DB result handler
1115 $result = $artifact->getHistory();
1116 return artifact_history_to_soap($result, $at);
1119 function artifact_history_to_soap($db_result, &$artifactType) {
1121 while ($entry = db_fetch_array($db_result)) {
1122 $field_name = $entry["field_name"];
1123 $old_value = $entry["old_value"];
1124 $date = $entry["entrydate"];
1125 $user_name = $entry["user_name"];
1127 if ($field_name == 'status_id') {
1128 $old_value = $artifactType->getStatusName($old_value);
1129 } else if ($field_name == 'assigned_to') {
1130 $old_value = user_getname($old_value);
1131 } else if ($field == 'close_date') {
1132 $old_value = date(_('Y-m-d H:i'), $old_value);
1135 //$date = date(_('Y-m-d H:i'), $date);
1138 "field_name" => $field_name,
1139 "old_value" => $old_value,
1141 "user_name" => $user_name