3 * SOAP Tracker Include - this file contains wrapper functions for the SOAP interface
5 * Copyright 2004 (c) GForge, LLC
10 * This file is part of GForge.
12 * GForge is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * GForge is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with GForge; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US
27 require_once('common/include/Error.class.php');
28 require_once('common/tracker/ArtifactType.class.php');
29 require_once('common/tracker/Artifact.class.php');
30 require_once('common/tracker/ArtifactFactory.class.php');
31 require_once('common/tracker/ArtifactTypeFactory.class.php');
32 require_once('common/tracker/Artifacts.class.php');
33 require_once('common/tracker/ArtifactFile.class.php');
34 require_once('common/tracker/ArtifactMessage.class.php');
39 $server->wsdl->addComplexType(
40 'ArtifactExtraFieldAvailableValue',
46 'element_id' => array('name' => 'element_id', 'type' => 'xsd:int'),
47 'element_name' => array('name' => 'element_name', 'type' => 'xsd:string'),
48 'status_id' => array('name' => 'status_id', 'type' => 'xsd:int')
52 $server->wsdl->addComplexType(
53 'ArrayOfArtifactExtraFieldAvailableValues',
60 array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactExtraFieldAvailableValue[]')
62 'tns:ArtifactExtraFieldAvailableValue'
64 $server->wsdl->addComplexType(
71 'extra_field_id' => array('name' => 'extra_field_id', 'type' => 'xsd:int'),
72 'field_name' => array('name' => 'field_name', 'type' => 'xsd:string'),
73 'field_type' => array('name' => 'field_type', 'type' => 'xsd:int'),
74 'attribute1' => array('name' => 'attribute1', 'type' => 'xsd:int'),
75 'attribute2' => array('name' => 'attribute2', 'type' => 'xsd:int'),
76 'is_required' => array('name' => 'is_required', 'type' => 'xsd:int'),
77 'alias' => array('name' => 'alias', 'type' => 'xsd:string'),
78 'available_values' => array('name' => 'available_values', 'type' => 'tns:ArrayOfArtifactExtraFieldAvailableValues'),
79 'default_selected_id' => array('name' => 'default_selected', 'type' => 'xsd:int')
83 $server->wsdl->addComplexType(
84 'ArrayOfArtifactExtraField',
91 array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactExtraField[]')
93 'tns:ArtifactExtraField'
99 $server->wsdl->addComplexType(
106 'group_artifact_id' => array('name'=>'group_artifact_id', 'type' => 'xsd:int'),
107 'group_id' => array('name'=>'group_id', 'type' => 'xsd:int'),
108 'name' => array('name'=>'name', 'type' => 'xsd:string'),
109 'description' => array('name'=>'description', 'type' => 'xsd:string'),
110 'is_public' => array('name'=>'is_public', 'type' => 'xsd:int'),
111 'allow_anon' => array('name'=>'allow_anon', 'type' => 'xsd:int'),
112 'due_period' => array('name'=>'due_period', 'type' => 'xsd:int'),
113 'datatype' => array('name'=>'datatype', 'type' => 'xsd:int'),
114 'status_timeout' => array('name'=>'status_timeout', 'type' => 'xsd:int'),
115 'extra_fields' => array('name' => 'extra_fields', 'type' => 'tns:ArrayOfArtifactExtraField'),
116 'custom_status_field' => array('name' => 'custom_status_field', 'type' => 'xsd:int'),
120 $server->wsdl->addComplexType(
121 'ArrayOfArtifactType',
127 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactType[]')),
132 array('session_ser'=>'xsd:string','group_id'=>'xsd:int'),
133 array('getArtifactTypesResponse'=>'tns:ArrayOfArtifactType'),
135 $uri.'#getArtifactTypes','rpc','encoded'
138 // Artifact Extra Fields
139 // By remo on 08-Mar-2005
141 $server->wsdl->addComplexType(
142 'ArtifactExtraFieldsData',
148 'extra_field_id' => array('name'=>'extra_field_id', 'type' => 'xsd:int'),
149 'field_data' => array('name'=>'field_data', 'type' => 'xsd:string')
153 $server->wsdl->addComplexType(
154 'ArrayOfArtifactExtraFieldsData',
160 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactExtraFieldsData[]')),
161 'tns:ArtifactExtraFieldsData'
168 $server->wsdl->addComplexType(
175 'artifact_id' => array('name'=>'artifact_id', 'type' => 'xsd:int'),
176 'group_artifact_id' => array('name'=>'group_artifact_id', 'type' => 'xsd:int'),
177 'status_id' => array('name'=>'status_id', 'type' => 'xsd:int'),
178 'priority' => array('name'=>'priority', 'type' => 'xsd:int'),
179 'submitted_by' => array('name'=>'submitted_by', 'type' => 'xsd:int'),
180 'assigned_to' => array('name'=>'assigned_to', 'type' => 'xsd:int'),
181 'open_date' => array('name'=>'open_date', 'type' => 'xsd:int'),
182 'close_date' => array('name'=>'close_date', 'type' => 'xsd:int'),
183 'summary' => array('name'=>'summary', 'type' => 'xsd:string'),
184 'details' => array('name'=>'details', 'type' => 'xsd:string'),
185 'extra_fields'=>array('name'=>'extra_fields', 'type' => 'tns:ArrayOfArtifactExtraFieldsData')
188 //ArrayOfArtifactExtraFieldsData
189 $server->wsdl->addComplexType(
196 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Artifact[]')),
204 'session_ser'=>'xsd:string',
205 'group_id'=>'xsd:int',
206 'group_artifact_id'=>'xsd:int',
207 'assigned_to'=>'xsd:int',
208 'status'=>'xsd:int'),
209 array('getArtifactsResponse'=>'tns:ArrayOfArtifact'),
210 $uri,$uri.'#getArtifacts','rpc','encoded');
217 'session_ser'=>'xsd:string',
218 'group_id'=>'xsd:int',
219 'group_artifact_id'=>'xsd:int',
220 'status_id'=>'xsd:int',
221 'priority'=>'xsd:int',
222 'assigned_to'=>'xsd:int',
223 'summary'=>'xsd:string',
224 'details'=>'xsd:string',
225 'extra_fields'=>'tns:ArrayOfArtifactExtraFieldsData'
227 array('addArtifactResponse'=>'xsd:int'),
228 $uri,$uri.'#addArtifact','rpc','encoded'
236 'session_ser'=>'xsd:string',
237 'group_id'=>'xsd:int',
238 'group_artifact_id'=>'xsd:int',
239 'artifact_id'=>'xsd:int',
240 'status_id'=>'xsd:int',
241 'priority'=>'xsd:int',
242 'assigned_to'=>'xsd:int',
243 'summary'=>'xsd:string',
244 'details'=>'xsd:string',
245 'new_artifact_type_id'=>'xsd:int',
246 'extra_fields_data'=>'tns:ArrayOfArtifactExtraFieldsData'
248 array('addArtifactResponse'=>'xsd:int'),
249 $uri,$uri.'#updateArtifact','rpc','encoded'
255 $server->wsdl->addComplexType(
262 'id' => array('name'=>'id', 'type' => 'xsd:int'),
263 'artifact_id' => array('name'=>'artifact_id', 'type' => 'xsd:int'),
264 'name' => array('name'=>'name', 'type' => 'xsd:string'),
265 'description' => array('name'=>'description', 'type' => 'xsd:string'),
266 'filesize' => array('name'=>'filesize', 'type' => 'xsd:int'),
267 'filetype' => array('name'=>'filetype', 'type' => 'xsd:string'),
268 'adddate' => array('name'=>'adddate', 'type' => 'xsd:int'),
269 'submitted_by' => array('name'=>'submitted_by', 'type' => 'xsd:int')
273 $server->wsdl->addComplexType(
274 'ArrayOfArtifactFile',
280 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactFile[]')),
286 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
287 array('getArtifactFilesResponse'=>'tns:ArrayOfArtifactFile'),
288 $uri,$uri.'#getArtifactFiles','rpc','encoded'
291 // This is for retrieving a single file base64-encoded
293 'getArtifactFileData',
294 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int','file_id'=>'xsd:int'),
295 array('getArtifactFileDataResponse'=>'xsd:string'),
296 $uri,$uri.'#getArtifactFileData','rpc','encoded'
301 array( 'session_ser'=>'xsd:string',
302 'group_id'=>'xsd:int',
303 'group_artifact_id'=>'xsd:int',
304 'artifact_id'=>'xsd:int',
305 'base64_contents'=>'xsd:string',
306 'description'=>'xsd:string',
307 'filename'=>'xsd:string',
308 'filetype'=>'xsd:string'
310 array('addArtifactFileResponse'=>'xsd:int'),
311 $uri,$uri.'#addArtifactFile','rpc','encoded'
314 //ARTIFACT QUERY DEFINITIONS
315 //insertElements($id,$status,$assignee,$changed_since,$sort_col,$sort_ord,$extra_fields)
318 // ArtifactFile Delete
321 'artifactFileDelete',
322 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int','file_id'=>'xsd:int'),
323 array('artifactFileDeleteResponse'=>'xsd:boolean'),
324 $uri,$uri.'#artifactFileDeleteResponse','rpc','encoded'
327 function artifactFileDelete($session_ser,$group_id,$group_artifact_id,$artifact_id,$file_id) {
328 continue_session($session_ser);
329 $a =& artifactfile_get_object($file_id);
330 if (!$a || !is_object($a)) {
331 return new soap_fault ('','artifactFileDelete','Could Not Get ArtifactFile','Could Not Get ArtifactFile');
332 } elseif ($a->isError()) {
333 return new soap_fault ('','artifactFileDelete','$a->getErrorMessage()',$a->getErrorMessage());
336 return new soap_fault ('','artifactFileDelete','$a->getErrorMessage()',$a->getErrorMessage());
346 $server->wsdl->addComplexType(
353 'id' => array('name'=>'id', 'type' => 'xsd:int'),
354 'artifact_id' => array('name'=>'artifact_id', 'type' => 'xsd:int'),
355 'body' => array('name'=>'body', 'type' => 'xsd:string'),
356 'adddate' => array('name'=>'adddate', 'type' => 'xsd:int'),
357 'user_id' => array('name'=>'user_id', 'type' => 'xsd:int')
361 $server->wsdl->addComplexType(
362 'ArrayOfArtifactMessage',
368 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactMessage[]')),
369 'tns:ArtifactMessage'
373 'getArtifactMessages',
374 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
375 array('getArtifactMessagesResponse'=>'tns:ArrayOfArtifactMessage'),
376 $uri,$uri.'#getArtifactMessages','rpc','encoded'
381 'addArtifactMessage',
382 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int','body'=>'xsd:string'),
383 array('addArtifactMessageResponse'=>'xsd:int'),
384 $uri,$uri.'#addArtifactMessage','rpc','encoded'
388 // ArtifactTechnician
393 'getArtifactTechnicians',
394 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int'),
395 array('getArtifactTechniciansResponse'=>'tns:ArrayOfUser'),
396 $uri,$uri.'#getArtifactTechnicians','rpc','encoded'
400 // Artifact Monitoring
403 'artifactSetMonitor',
404 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
405 array('artifactSetMonitorResponse'=>'xsd:boolean'),
406 $uri,$uri.'#artifactSetMonitorResponse','rpc','encoded'
410 'artifactIsMonitoring',
411 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
412 array('artifactIsMonitoringResponse'=>'xsd:boolean'),
413 $uri,$uri.'#artifactIsMonitoringResponse','rpc','encoded'
416 function artifactSetMonitor($session_ser,$group_id,$group_artifact_id,$artifact_id) {
417 continue_session($session_ser);
418 $a =& artifact_get_object($artifact_id);
419 if (!$a || !is_object($a)) {
420 return new soap_fault ('','artifactSetMonitor','Could Not Get Artifact','Could Not Get Artifact');
421 } elseif ($a->isError()) {
422 return new soap_fault ('','artifactSetMonitor','$a->getErrorMessage()',$a->getErrorMessage());
428 function artifactIsMonitoring($session_ser,$group_id,$group_artifact_id,$artifact_id) {
429 continue_session($session_ser);
430 $a =& artifact_get_object($artifact_id);
431 if (!$a || !is_object($a)) {
432 return new soap_fault ('','artifactIsMonitoring','Could Not Get Artifact','Could Not Get Artifact');
433 } elseif ($a->isError()) {
434 return new soap_fault ('','artifactIsMonitoring','$a->getErrorMessage()',$a->getErrorMessage());
436 return $a->isMonitoring();
444 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int','artifact_id'=>'xsd:int'),
445 array('artifactDeleteResponse'=>'xsd:boolean'),
446 $uri,$uri.'#artifactDeleteResponse','rpc','encoded'
449 function artifactDelete($session_ser,$group_id,$group_artifact_id,$artifact_id) {
450 continue_session($session_ser);
451 $a =& artifact_get_object($artifact_id);
452 if (!$a || !is_object($a)) {
453 return new soap_fault ('','artifactDelete','Could Not Get Artifact','Could Not Get Artifact');
454 } elseif ($a->isError()) {
455 return new soap_fault ('','artifactDelete','$a->getErrorMessage()',$a->getErrorMessage());
457 if (!$a->delete(1)) {
458 return new soap_fault ('','artifactDelete','$a->getErrorMessage()',$a->getErrorMessage());
465 'artifactTypeIsMonitoring',
466 array('session_ser'=>'xsd:string','group_id'=>'xsd:int','group_artifact_id'=>'xsd:int'),
467 array('artifactTypeIsMonitoringResponse'=>'xsd:boolean'),
468 $uri,$uri.'#artifactTypeIsMonitoringResponse','rpc','encoded'
471 function artifactTypeSetMonitor($session_ser,$group_id,$group_artifact_id) {
472 continue_session($session_ser);
473 $a =& artifacttype_get_object($group_artifact_id);
474 if (!$a || !is_object($a)) {
475 return new soap_fault ('','artifactTypeSetMonitor','Could Not Get ArtifactType','Could Not Get ArtifactType');
476 } elseif ($a->isError()) {
477 return new soap_fault ('','artifactTypeSetMonitor','$a->getErrorMessage()',$a->getErrorMessage());
483 function artifactTypeIsMonitoring($session_ser,$group_id,$group_artifact_id) {
484 continue_session($session_ser);
485 $a =& artifacttype_get_object($group_artifact_id);
486 if (!$a || !is_object($a)) {
487 return new soap_fault ('','artifactTypeIsMonitoring','Could Not Get ArtifactType','Could Not Get ArtifactType');
488 } elseif ($a->isError()) {
489 return new soap_fault ('','artifactTypeIsMonitoring','$a->getErrorMessage()',$a->getErrorMessage());
491 return $a->isMonitoring();
497 function &getArtifactTypes($session_ser,$group_id) {
498 continue_session($session_ser);
499 $grp =& group_get_object($group_id);
500 if (!$grp || !is_object($grp)) {
501 return new soap_fault ('','getArtifactTypes','Could Not Get Group','Could Not Get Group');
502 } elseif ($grp->isError()) {
503 return new soap_fault ('','getArtifactTypes','$grp->getErrorMessage()',$grp->getErrorMessage());
506 $atf = new ArtifactTypeFactory($grp);
507 if (!$atf || !is_object($atf)) {
508 return new soap_fault ('','getArtifactTypes','Could Not Get ArtifactTypeFactory','Could Not Get ArtifactTypeFactory');
509 } elseif ($atf->isError()) {
510 return new soap_fault ('','getArtifactTypes',$atf->getErrorMessage(),$atf->getErrorMessage());
513 return artifacttype_to_soap($atf->getArtifactTypes());
517 // convert array of artifact types to soap data structure
519 function artifacttype_to_soap($at_arr) {
522 for ($i=0; $i<count($at_arr); $i++) {
523 if ($at_arr[$i]->isError()) {
526 // Get list of extra fields for this artifact
527 $extrafields = array();
528 $tmpextrafields = $at_arr[$i]->getExtraFields();
529 foreach ($tmpextrafields as $extrafield) {
530 $aefobj = new ArtifactExtraField($at_arr[$i], $extrafield["extra_field_id"]);
532 // array of available values
533 $avtmp = $aefobj->getAvailableValues();
535 for ($j=0; $j < count($avtmp); $j++) {
536 $avs[$j]["element_id"] = $avtmp[$j]["element_id"];
537 $avs[$j]["element_name"] = $avtmp[$j]["element_name"];
538 $avs[$j]["status_id"] = $avtmp[$j]["status_id"];
541 $extrafields[] = array(
542 "extra_field_id"=> $aefobj->getID(),
543 "field_name" => $aefobj->getName(),
544 "field_type" => $aefobj->getType(),
545 "attribute1" => $aefobj->getAttribute1(),
546 "attribute2" => $aefobj->getAttribute2(),
547 "is_required" => $aefobj->isRequired(),
548 "alias" => $aefobj->getAlias(),
549 "available_values" => $avs,
550 "default_selected_id" => 0 //TODO (not implemented yet)
555 'group_artifact_id'=>$at_arr[$i]->data_array['group_artifact_id'],
556 'group_id'=>$at_arr[$i]->data_array['group_id'],
557 'name'=>$at_arr[$i]->data_array['name'],
558 'description'=>$at_arr[$i]->data_array['description'],
559 'is_public'=>$at_arr[$i]->data_array['is_public'],
560 'allow_anon'=>$at_arr[$i]->data_array['allow_anon'],
561 'due_period'=>$at_arr[$i]->data_array['due_period'],
562 'datatype'=>$at_arr[$i]->data_array['datatype'],
563 'status_timeout'=>$at_arr[$i]->data_array['status_timeout'],
564 'extra_fields' => $extrafields,
565 '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 for ($i=0; $i<count($at_arr); $i++) {
755 // return only the first 100
756 if ($i == 100) break;
758 if ($at_arr[$i]->isError()) {
761 //NEEDS THOROUGH COMMENTS AND EXPLANATION
763 // Retrieving the artifact details
764 //**checks whether there is any artifact details exists for this object, if not continue with next loop
766 if(count($at_arr[$i]) < 1) { continue; }
768 $fldelementdata=array();
769 $extrafieldsdata=array();
770 $extrafieldsdata=$at_arr[$i]->getExtraFieldData();
773 //** Retrieving the extra field data and the element data
774 //** checks whether there is any extra fields data available for this artifact
775 //** and checks for the extra element data for the multiselect and checkbox type
776 if(is_array($extrafieldsdata) && count($extrafieldsdata)>0) {
777 while(list($ky,$vl)=each($extrafieldsdata)) {
779 if(is_array($extrafieldsdata[$ky])) {
780 //** Retrieving the multiselect and checkbox type data element
781 $fldarr=array('extra_field_id'=>$ky,'field_data'=>implode(",",$extrafieldsdata[$ky]));
783 //** Retrieving the extra field data
784 $fldarr=array('extra_field_id'=>$ky,'field_data'=>$vl);
791 'artifact_id'=>$at_arr[$i]->data_array['artifact_id'],
792 'group_artifact_id'=>$at_arr[$i]->data_array['group_artifact_id'],
793 'status_id'=>$at_arr[$i]->data_array['status_id'],
794 'priority'=>$at_arr[$i]->data_array['priority'],
795 'submitted_by'=>$at_arr[$i]->data_array['submitted_by'],
796 'assigned_to'=>$at_arr[$i]->data_array['assigned_to'],
797 'open_date'=>$at_arr[$i]->data_array['open_date'],
798 'close_date'=>$at_arr[$i]->data_array['close_date'],
799 'summary'=>$at_arr[$i]->data_array['summary'],
800 'details'=>$at_arr[$i]->data_array['details'],
801 'extra_fields'=>$flddata
811 function &getArtifactFiles($session_ser,$group_id,$group_artifact_id,$artifact_id) {
812 continue_session($session_ser);
813 $grp =& group_get_object($group_id);
814 if (!$grp || !is_object($grp)) {
815 return new soap_fault ('','getArtifactFiles','Could Not Get Group','Could Not Get Group');
816 } elseif ($grp->isError()) {
817 return new soap_fault ('','getArtifactFiles',$grp->getErrorMessage(),$grp->getErrorMessage());
820 $at = new ArtifactType($grp,$group_artifact_id);
821 if (!$at || !is_object($at)) {
822 return new soap_fault ('','getArtifactFiles','Could Not Get ArtifactType','Could Not Get ArtifactType');
823 } elseif ($at->isError()) {
824 return new soap_fault ('','getArtifactFiles',$at->getErrorMessage(),$at->getErrorMessage());
827 $a = new Artifact($at,$artifact_id);
828 if (!$a || !is_object($a)) {
829 return new soap_fault ('','getArtifactFiles','Could Not Get Artifact','Could Not Get Artifact');
830 } elseif ($a->isError()) {
831 return new soap_fault ('','getArtifactFiles',$a->getErrorMessage(),$a->getErrorMessage());
834 $files_arr = $a->getFiles();
835 $return = artifactfiles_to_soap($files_arr);
841 // convert array of artifact files to soap data structure
843 function artifactfiles_to_soap($files_arr) {
846 for ($i=0; $i<count($files_arr); $i++) {
847 if ($files_arr[$i]->isError()) {
851 'id' => $files_arr[$i]->getID(),
852 'artifact_id' => $files_arr[$i]->Artifact->getID(),
853 'name' => $files_arr[$i]->getName(),
854 'description' => $files_arr[$i]->getDescription(),
855 'filesize' => $files_arr[$i]->getSize(),
856 'filetype' => $files_arr[$i]->getType(),
857 'adddate' => $files_arr[$i]->getDate(),
858 'submitted_by' => $files_arr[$i]->getSubmittedBy()
865 function getArtifactFileData($session_ser,$group_id,$group_artifact_id,$artifact_id,$file_id) {
866 continue_session($session_ser);
867 $grp =& group_get_object($group_id);
868 if (!$grp || !is_object($grp)) {
869 return new soap_fault ('','getArtifactFileData','Could Not Get Group','Could Not Get Group');
870 } elseif ($grp->isError()) {
871 return new soap_fault ('','getArtifactFileData',$grp->getErrorMessage(),$grp->getErrorMessage());
874 $at = new ArtifactType($grp,$group_artifact_id);
875 if (!$at || !is_object($at)) {
876 return new soap_fault ('','getArtifactFileData','Could Not Get ArtifactType','Could Not Get ArtifactType');
877 } elseif ($at->isError()) {
878 return new soap_fault ('','getArtifactFileData',$at->getErrorMessage(),$at->getErrorMessage());
881 $a = new Artifact($at,$artifact_id);
882 if (!$a || !is_object($a)) {
883 return new soap_fault ('','getArtifactFileData','Could Not Get Artifact','Could Not Get Artifact');
884 } elseif ($a->isError()) {
885 return new soap_fault ('','getArtifactFileData',$a->getErrorMessage(),$a->getErrorMessage());
888 $af=new ArtifactFile($a,$file_id);
889 if (!$af || !is_object($af)) {
890 return new soap_fault ('','getArtifactFileData','ArtifactFile Could Not Be Created','ArtifactFile Could Not Be Created');
891 } else if ($af->isError()) {
892 return new soap_fault ('','getArtifactFileData',$af->getErrorMessage(),$af->getErrorMessage());
895 //send file encoded in base64
896 return base64_encode($af->getData());
906 'session_ser'=>'xsd:string',
907 'group_id'=>'xsd:int',
908 'group_artifact_id'=>'xsd:int',
909 'artifact_id'=>'xsd:int',
910 'base64_contents'=>'xsd:string',
911 'description'=>'xsd:string',
912 'filename'=>'xsd:string',
913 'filetype'=>'xsd:string'
915 function addArtifactFile($session_ser,$group_id,$group_artifact_id,$artifact_id,$base64_contents,$description,$filename,$filetype) {
916 continue_session($session_ser);
918 $grp =& group_get_object($group_id);
919 if (!$grp || !is_object($grp)) {
920 return new soap_fault ('','addArtifactFile','Could Not Get Group','Could Not Get Group');
921 } elseif ($grp->isError()) {
922 return new soap_fault ('','addArtifactFile',$grp->getErrorMessage(),$grp->getErrorMessage());
925 $at = new ArtifactType($grp,$group_artifact_id);
926 if (!$at || !is_object($at)) {
927 return new soap_fault ('','addArtifactFile','Could Not Get ArtifactType','Could Not Get ArtifactType');
928 } elseif ($at->isError()) {
929 return new soap_fault ('','addArtifactFile',$at->getErrorMessage(),$at->getErrorMessage());
932 $a = new Artifact($at,$artifact_id);
933 if (!$a || !is_object($a)) {
934 return new soap_fault ('','addArtifactFile','Could Not Get Artifact','Could Not Get Artifact');
935 } elseif ($a->isError()) {
936 return new soap_fault ('','addArtifactFile',$a->getErrorMessage(),$a->getErrorMessage());
939 $af = new ArtifactFile($a);
940 if (!$af || !is_object($af)) {
941 return new soap_fault ('','addArtifactFile','Could Not Create ArtifactFile object','Could Not Create ArtifactFile object');
942 } else if ($af->isError()) {
943 return new soap_fault ('','addArtifactFile',$af->getErrorMessage(),$af->getErrorMessage());
946 $bin_data = base64_decode($base64_contents);
947 $filesize = strlen($bin_data);
949 $res = $af->create($filename,$filetype,$filesize,$bin_data,$description);
952 return new soap_fault ('','addArtifactFile',$af->getErrorMessage(),$af->getErrorMessage());
960 // getArtifactMessages
962 function &getArtifactMessages($session_ser,$group_id,$group_artifact_id,$artifact_id) {
963 continue_session($session_ser);
964 $grp =& group_get_object($group_id);
965 if (!$grp || !is_object($grp)) {
966 return new soap_fault ('','getArtifactMessages','Could Not Get Group','Could Not Get Group');
967 } elseif ($grp->isError()) {
968 return new soap_fault ('','getArtifactMessages',$grp->getErrorMessage(),$grp->getErrorMessage());
971 $at = new ArtifactType($grp,$group_artifact_id);
972 if (!$at || !is_object($at)) {
973 return new soap_fault ('','getArtifactMessages','Could Not Get ArtifactType','Could Not Get ArtifactType');
974 } elseif ($at->isError()) {
975 return new soap_fault ('','getArtifactMessages',$at->getErrorMessage(),$at->getErrorMessage());
978 $a = new Artifact($at,$artifact_id);
979 if (!$a || !is_object($a)) {
980 return new soap_fault ('','getArtifactMessages','Could Not Get Artifact','Could Not Get Artifact');
981 } elseif ($a->isError()) {
982 return new soap_fault ('','getArtifactMessages',$a->getErrorMessage(),$a->getErrorMessage());
985 return artifactmessages_to_soap($a->getMessageObjects());
989 // convert array of artifact messages to soap data structure
991 function artifactmessages_to_soap($at_arr) {
993 for ($i=0; $i<count($at_arr); $i++) {
994 if ($at_arr[$i]->isError()) {
998 'id'=>$at_arr[$i]->data_array['id'],
999 'artifact_id'=>$at_arr[$i]->data_array['artifact_id'],
1000 'body'=>$at_arr[$i]->data_array['body'],
1001 'adddate'=>$at_arr[$i]->data_array['adddate'],
1002 'user_id'=>$at_arr[$i]->data_array['user_id']
1010 // addArtifactMessage
1012 function &addArtifactMessage($session_ser,$group_id,$group_artifact_id,$artifact_id,$body) {
1013 continue_session($session_ser);
1014 $grp =& group_get_object($group_id);
1015 if (!$grp || !is_object($grp)) {
1016 return new soap_fault ('','addArtifactMessage','Could Not Get Group','Could Not Get Group');
1017 } elseif ($grp->isError()) {
1018 return new soap_fault ('','addArtifactMessage',$grp->getErrorMessage(),$grp->getErrorMessage());
1021 $at = new ArtifactType($grp,$group_artifact_id);
1022 if (!$at || !is_object($at)) {
1023 return new soap_fault ('','addArtifactMessage','Could Not Get ArtifactType','Could Not Get ArtifactType');
1024 } elseif ($at->isError()) {
1025 return new soap_fault ('','addArtifactMessage',$at->getErrorMessage(),$at->getErrorMessage());
1028 $a = new Artifact($at,$artifact_id);
1029 if (!$a || !is_object($a)) {
1030 return new soap_fault ('','addArtifactMessage','Could Not Get Artifact','Could Not Get Artifact');
1031 } elseif ($a->isError()) {
1032 return new soap_fault ('','addArtifactMessage',$a->getErrorMessage(),$a->getErrorMessage());
1035 $am = new ArtifactMessage($a);
1036 if (!$am || !is_object($am)) {
1037 return new soap_fault ('','addArtifactMessage','Could Not Get ArtifactMessage','Could Not Get ArtifactMessage');
1038 } elseif ($am->isError()) {
1039 return new soap_fault ('','addArtifactMessage',$am->getErrorMessage(),$am->getErrorMessage());
1042 if (!$am->create($body)) {
1043 return new soap_fault ('','addArtifactMessage',$am->getErrorMessage(),$am->getErrorMessage());
1045 return $am->getID();
1050 * artifactGetChangeLog
1052 $server->wsdl->addComplexType(
1053 'ArtifactChangeLog',
1059 'field_name' => array('name' => 'field_name', 'type' => 'xsd:string'),
1060 'old_value' => array('name' => 'old_value', 'type' => 'xsd:string'),
1061 'date' => array('name' => 'date', 'type' => 'xsd:int'),
1062 'user_name' => array('name' => 'user_name', 'type' => 'xsd:string')
1066 $server->wsdl->addComplexType(
1067 'ArrayOfArtifactChangeLog',
1074 array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArtifactChangeLog[]')
1076 'tns:ArtifactChangeLog'
1080 'artifactGetChangeLog',
1082 'session_ser'=>'xsd:string',
1083 'group_id'=>'xsd:int',
1084 'group_artifact_id'=>'xsd:int',
1085 'artifact_id' => 'xsd:int'
1087 array('artifactGetChangeLogResponse'=>'tns:ArrayOfArtifactChangeLog'),
1089 $uri.'#artifactGetChangeLog','rpc','encoded'
1092 function artifactGetChangeLog($session_ser, $group_id, $group_artifact_id, $artifact_id) {
1093 continue_session($session_ser);
1094 $grp =& group_get_object($group_id);
1095 if (!$grp || !is_object($grp)) {
1096 return new soap_fault ('','artifactGetChangeLog','Could Not Get Group','Could Not Get Group');
1097 } elseif ($grp->isError()) {
1098 return new soap_fault ('','artifactGetChangeLog',$grp->getErrorMessage(),$grp->getErrorMessage());
1101 $at = new ArtifactType($grp,$group_artifact_id);
1102 if (!$at || !is_object($at)) {
1103 return new soap_fault ('','artifactGetChangeLog','Could Not Get ArtifactType','Could Not Get ArtifactType');
1104 } elseif ($at->isError()) {
1105 return new soap_fault ('','artifactGetChangeLog',$at->getErrorMessage(),$at->getErrorMessage());
1108 $artifact = new Artifact($at,$artifact_id);
1109 if (!$artifact || !is_object($artifact)) {
1110 return new soap_fault ('','artifactGetChangeLog','Could Not Get Artifact','Could Not Get Artifact');
1111 } elseif ($artifact->isError()) {
1112 return new soap_fault ('','artifactGetChangeLog',$artifact->getErrorMessage(),$artifact->getErrorMessage());
1115 // note that Artifact::getHistory returns a DB result handler
1116 $result = $artifact->getHistory();
1117 return artifact_history_to_soap($result, $at);
1120 function artifact_history_to_soap($db_result, &$artifactType) {
1122 while ($entry = db_fetch_array($db_result)) {
1123 $field_name = $entry["field_name"];
1124 $old_value = $entry["old_value"];
1125 $date = $entry["entrydate"];
1126 $user_name = $entry["user_name"];
1128 if ($field_name == 'status_id') {
1129 $old_value = $artifactType->getStatusName($old_value);
1130 } else if ($field_name == 'assigned_to') {
1131 $old_value = user_getname($old_value);
1132 } else if ($field == 'close_date') {
1133 $old_value = date($GLOBALS['sys_datefmt'], $old_value);
1136 //$date = date($GLOBALS['sys_datefmt'], $date);
1139 "field_name" => $field_name,
1140 "old_value" => $old_value,
1142 "user_name" => $user_name