3 * SOAP File Release System Include - this file contains wrapper functions for the SOAP interface
5 * Copyright 2004 (c) GForge, LLC
6 * http://fusionforge.org
8 * This file is part of FusionForge. FusionForge is free software;
9 * you can redistribute it and/or modify it under the terms of the
10 * GNU General Public License as published by the Free Software
11 * Foundation; either version 2 of the Licence, or (at your option)
14 * FusionForge is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 require_once $gfcommon.'include/FFError.class.php';
25 require_once $gfcommon.'frs/FRSFile.class.php';
26 require_once $gfcommon.'frs/FRSFileType.class.php';
27 require_once $gfcommon.'frs/FRSFileProcessorType.class.php';
28 require_once $gfcommon.'frs/FRSPackage.class.php';
29 require_once $gfcommon.'frs/FRSRelease.class.php';
31 $server->wsdl->addComplexType(
38 'package_id' => array('name'=>'package_id', 'type' => 'xsd:int'),
39 'name' => array('name'=>'name', 'type' => 'xsd:string'),
40 'status_id' => array('name'=>'description', 'type' => 'xsd:string'),
41 'is_public' => array('name'=>'is_public', 'type' => 'xsd:int'),
45 $server->wsdl->addComplexType(
52 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSPackage[]')),
59 'session_ser'=>'xsd:string',
60 'group_id'=>'xsd:int'),
61 array('getPackagesResponse'=>'tns:ArrayOfFRSPackage'),
62 $uri,$uri.'#getPackages','rpc','encoded'
65 $server->wsdl->addComplexType(
72 'type_id' => array('name'=>'type_id', 'type' => 'xsd:int'),
73 'name' => array('name'=>'name', 'type' => 'xsd:string'),
76 $server->wsdl->addComplexType(
83 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSFileType[]')),
89 array('session_ser'=>'xsd:string'),
90 array('getFileTypeResponse'=>'tns:ArrayOfFRSFileType'),
91 $uri,$uri.'#getFileTypes','rpc','encoded'
94 $server->wsdl->addComplexType(
95 'FRSFileProcessorType',
101 'processor_id' => array('name'=>'processor_id', 'type' => 'xsd:int'),
102 'name' => array('name'=>'name', 'type' => 'xsd:string'),
105 $server->wsdl->addComplexType(
106 'ArrayOfFRSFileProcessorType',
112 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSFileProcessorType[]')),
113 'tns:FRSFileProcessorType'
116 'getFileProcessorTypes',
117 array('session_ser'=>'xsd:string'),
118 array('getFileProcessorTypeResponse'=>'tns:ArrayOfFRSFileProcessorType'),
119 $uri,$uri.'#getFileProcessorTypes','rpc','encoded'
125 'session_ser'=>'xsd:string',
126 'group_id'=>'xsd:int',
127 'package_name'=>'xsd:string',
128 'is_public'=>'xsd:int'),
129 array('addPackageResponse'=>'xsd:int'),
130 $uri,$uri.'#addPackage','rpc','encoded'
133 $server->wsdl->addComplexType(
140 'release_id' => array('name'=>'release_id', 'type' => 'xsd:int'),
141 'name' => array('name'=>'name', 'type' => 'xsd:string'),
142 'notes' => array('name'=>'notes', 'type' => 'xsd:string'),
143 'changes' => array('name'=>'changes', 'type' => 'xsd:string'),
144 'status_id' => array('name'=>'description', 'type' => 'xsd:string'),
145 'release_date' => array('name'=>'release_date', 'type' => 'xsd:int'),
149 $server->wsdl->addComplexType(
156 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSRelease[]')),
163 'session_ser'=>'xsd:string',
164 'group_id'=>'xsd:int',
165 'package_id'=>'xsd:int'),
166 array('getPackagesResponse'=>'tns:ArrayOfFRSRelease'),
167 $uri,$uri.'#getReleases','rpc','encoded'
173 'session_ser'=>'xsd:string',
174 'group_id'=>'xsd:int',
175 'package_id'=>'xsd:int',
176 'name'=>'xsd:string',
177 'notes'=>'xsd:string',
178 'changes'=>'xsd:string',
179 'release_date'=>'xsd:int'),
180 array('addRelease'=>'xsd:int'),
181 $uri,$uri.'#addRelease','rpc','encoded'
184 $server->wsdl->addComplexType(
191 'file_id' => array('name'=>'file_id', 'type' => 'xsd:int'),
192 'name' => array('name'=>'name', 'type' => 'xsd:string'),
193 'size' => array('name'=>'size', 'type' => 'xsd:int'),
194 'type' => array('name'=>'type', 'type' => 'xsd:string'),
195 'processor' => array('name'=>'processor', 'type' => 'xsd:string'),
196 'downloads' => array('name'=>'downloads', 'type' => 'xsd:int'),
197 'release' => array('name'=>'release_time', 'type' => 'xsd:int'),
198 'date' => array('name'=>'date', 'type' => 'xsd:int'),
202 $server->wsdl->addComplexType(
209 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSFile[]')),
216 'session_ser'=>'xsd:string',
217 'group_id'=>'xsd:int',
218 'package_id'=>'xsd:int',
219 'release_id'=>'xsd:int'),
220 array('getFilesResponse'=>'tns:ArrayOfFRSFile'),
221 $uri,$uri.'#getFiles','rpc','encoded'
227 'session_ser'=>'xsd:string',
228 'group_id'=>'xsd:int',
229 'package_id'=>'xsd:int',
230 'release_id'=>'xsd:int',
231 'file_id'=>'xsd:int'),
232 array('getFileResponse'=>'xsd:string'),
233 $uri,$uri.'#getFile','rpc','encoded'
239 'session_ser'=>'xsd:string',
240 'group_id'=>'xsd:int',
241 'package_id'=>'xsd:int',
242 'release_id'=>'xsd:int',
243 'name'=>'xsd:string',
244 'base64_contents'=>'xsd:string',
245 'type_id'=>'xsd:int',
246 'processor_id'=>'xsd:int',
247 'release_time'=>'xsd:int'
249 array('addFile'=>'xsd:string'),
250 $uri,$uri.'#addFile','rpc','encoded'
256 'session_ser'=>'xsd:string',
257 'group_id'=>'xsd:int',
258 'package_id'=>'xsd:int',
259 'release_id'=>'xsd:int',
260 'file_name'=>'xsd:string',
261 'type_id'=>'xsd:int',
262 'processor_id'=>'xsd:int',
263 'release_time'=>'xsd:int'
265 array('addUploadedFile'=>'xsd:string'),
266 $uri,$uri.'#addUploadedFile','rpc','encoded'
269 function getPackages($session_ser,$group_id) {
270 continue_session($session_ser);
271 $grp = group_get_object($group_id);
272 if (!$grp || !is_object($grp)) {
273 return new soap_fault('','getPackages','Could Not Get Project','Could Not Get Project');
274 } elseif ($grp->isError()) {
275 return new soap_fault('','getPackages',$grp->getErrorMessage(),$grp->getErrorMessage());
278 $pkg_arr = get_frs_packages($grp);
279 return packages_to_soap($pkg_arr);
282 function packages_to_soap(&$pkg_arr) {
285 if (is_array($pkg_arr) && count($pkg_arr) > 0) {
286 for ($i=0; $i<count($pkg_arr); $i++) {
287 if ($pkg_arr[$i]->isError()) {
291 'package_id' => $pkg_arr[$i]->getID(),
292 'name' => $pkg_arr[$i]->getName(),
293 'status_id' => $pkg_arr[$i]->getStatus(),
294 'is_public' => $pkg_arr[$i]->isPublic()
302 function getFileTypes($session_ser) {
303 continue_session($session_ser);
304 $pkg_arr = get_frs_filetypes();
305 return filetypes_to_soap($pkg_arr);
308 function getFileProcessorTypes($session_ser) {
309 continue_session($session_ser);
310 $pkg_arr = get_frs_fileprocessortypes();
311 return fileprocessortypes_to_soap($pkg_arr);
314 function addPackage($session_ser,$group_id,$package_name,$is_public) {
315 continue_session($session_ser);
316 $grp = group_get_object($group_id);
317 if (!$grp || !is_object($grp)) {
318 return new soap_fault('','addPackage','Could Not Get Project','Could Not Get Project');
319 } elseif ($grp->isError()) {
320 return new soap_fault('','addPackage',$grp->getErrorMessage(),$grp->getErrorMessage());
323 $frsp = new FRSPackage($grp);
324 if (!$frsp->create($package_name, $is_public)) {
325 return new soap_fault('', 'addPackage', $frsp->getErrorMessage(), $frsp->getErrorMessage());
327 return $frsp->getID();
331 function getReleases($session_ser,$group_id,$package_id) {
332 continue_session($session_ser);
333 $grp = group_get_object($group_id);
334 if (!$grp || !is_object($grp)) {
335 return new soap_fault('','getReleases','Could Not Get Project','Could Not Get Project');
336 } elseif ($grp->isError()) {
337 return new soap_fault('','getReleases',$grp->getErrorMessage(),$grp->getErrorMessage());
340 $frsp = frspackage_get_object($package_id);
341 if (!$frsp || !is_object($frsp)) {
342 return new soap_fault('','getReleases','Could Not Get Package','Could Not Get Package');
343 } elseif ($frsp->isError()) {
344 return new soap_fault('','getReleases',$frsp->getErrorMessage(),$frsp->getErrorMessage());
347 $release_arr = $frsp->getReleases();
349 return releases_to_soap($release_arr);
352 function releases_to_soap(&$release_arr) {
355 if (is_array($release_arr) && count($release_arr) > 0) {
356 for ($i=0; $i<count($release_arr); $i++) {
357 if ($release_arr[$i]->isError()) {
361 'release_id' => $release_arr[$i]->getID(),
362 'name' => $release_arr[$i]->getName(),
363 'notes' => $release_arr[$i]->getNotes(),
364 'changes' => $release_arr[$i]->getChanges(),
365 'status_id' => $release_arr[$i]->getStatus(),
366 'release_date' => $release_arr[$i]->getReleaseDate()
375 function addRelease($session_ser,$group_id,$package_id,$name,$notes,$changes,$release_date) {
376 continue_session($session_ser);
378 $grp = group_get_object($group_id);
379 if (!$grp || !is_object($grp)) {
380 return new soap_fault('','getPackages','Could Not Get Project','Could Not Get Project');
381 } elseif ($grp->isError()) {
382 return new soap_fault('','getPackages',$grp->getErrorMessage(),$grp->getErrorMessage());
385 $frsp = frspackage_get_object($package_id);
386 if (!$frsp || !is_object($frsp)) {
387 return new soap_fault('','getReleases','Could Not Get Package','Could Not Get Package');
388 } elseif ($frsp->isError()) {
389 return new soap_fault('','getReleases',$frsp->getErrorMessage(),$frsp->getErrorMessage());
392 $frsr = new FRSRelease($frsp);
393 if (!$frsr->create($name,$notes,$changes,0,$release_date)) {
394 return new soap_fault('', 'addRelease', $frsr->getErrorMessage(), $frsr->getErrorMessage());
396 return $frsr->getID();
400 function getFiles($session_ser,$group_id,$package_id,$release_id) {
401 continue_session($session_ser);
403 $grp = group_get_object($group_id);
404 if (!$grp || !is_object($grp)) {
405 return new soap_fault('','getFiles','Could Not Get Project','Could Not Get Project');
406 } elseif ($grp->isError()) {
407 return new soap_fault('','getFiles',$grp->getErrorMessage(),$grp->getErrorMessage());
410 $frsp =& frspackage_get_object($package_id);
411 if (!$frsp || !is_object($frsp)) {
412 return new soap_fault('','getFiles','Could Not Get Package','Could Not Get Package');
413 } elseif ($frsp->isError()) {
414 return new soap_fault('','getFiles',$frsp->getErrorMessage(),$frsp->getErrorMessage());
417 //TODO: Check that the release belongs to the package
418 $frsr =& frsrelease_get_object($release_id);
419 if (!$frsr || !is_object($frsr)) {
420 return new soap_fault('','getFiles','Could Not Get Release','Could Not Get Release');
421 } elseif ($frsr->isError()) {
422 return new soap_fault('','getFiles',$frsr->getErrorMessage(),$frsr->getErrorMessage());
425 $files_arr =& $frsr->getFiles();
426 return files_to_soap($files_arr);
429 function files_to_soap($files_arr) {
432 if (is_array($files_arr) && count($files_arr) > 0) {
433 for ($i=0; $i<count($files_arr); $i++) {
434 if ($files_arr[$i]->isError()) {
438 'file_id' => $files_arr[$i]->getID(),
439 'name' => $files_arr[$i]->getName(),
440 'size' => $files_arr[$i]->getSize(),
441 'type' => $files_arr[$i]->getFileType(),
442 'processor' => $files_arr[$i]->getProcessor(),
443 'downloads' => $files_arr[$i]->getDownloads(),
444 'release' => $files_arr[$i]->getReleaseTime(),
445 'date' => $files_arr[$i]->getPostDate(),
454 function filetypes_to_soap($files_arr) {
457 if (is_array($files_arr) && count($files_arr) > 0) {
458 for ($i=0; $i<count($files_arr); $i++) {
459 if ($files_arr[$i]->isError()) {
463 'type_id' => $files_arr[$i]->getID(),
464 'name' => $files_arr[$i]->getName(),
472 function fileprocessortypes_to_soap($files_arr) {
475 if (is_array($files_arr) && count($files_arr) > 0) {
476 for ($i=0; $i<count($files_arr); $i++) {
477 if ($files_arr[$i]->isError()) {
481 'processor_id' => $files_arr[$i]->getID(),
482 'name' => $files_arr[$i]->getName(),
490 function getFile($session_ser,$group_id,$package_id,$release_id,$file_id) {
491 continue_session($session_ser);
493 $grp = group_get_object($group_id);
494 if (!$grp || !is_object($grp)) {
495 return new soap_fault('','getFile','Could Not Get Project','Could Not Get Project');
496 } elseif ($grp->isError()) {
497 return new soap_fault('','getFile',$grp->getErrorMessage(),$grp->getErrorMessage());
500 $frsp =& frspackage_get_object($package_id);
501 if (!$frsp || !is_object($frsp)) {
502 return new soap_fault('','getFile','Could Not Get Package','Could Not Get Package');
503 } elseif ($frsp->isError()) {
504 return new soap_fault('','getFile',$frsp->getErrorMessage(),$frsp->getErrorMessage());
507 $frsr =& frsrelease_get_object($release_id);
508 if (!$frsr || !is_object($frsr)) {
509 return new soap_fault('','getFile','Could Not Get Release','Could Not Get Release');
510 } elseif ($frsr->isError()) {
511 return new soap_fault('','getFile',$frsr->getErrorMessage(),$frsr->getErrorMessage());
514 $frsf = new FRSFile($frsr, $file_id);
515 if (!$frsf || !is_object($frsf)) {
516 return new soap_fault('','getFile','Could Not Get File','Could Not Get File');
517 } elseif ($frsf->isError()) {
518 return new soap_fault('','getFile',$frsf->getErrorMessage(),$frsf->getErrorMessage());
521 $file_location = forge_get_config('upload_dir').'/'.
522 $frsf->FRSRelease->FRSPackage->Group->getUnixName().'/'.
523 $frsf->FRSRelease->FRSPackage->getFileName().'/'.
524 $frsf->FRSRelease->getFileName().'/'.
526 if (!file_exists($file_location)) {
527 return new soap_fault('','getFile','File doesn\'t exist in server','File doesn\'t exist in server');
530 $fh = fopen($file_location, "rb");
531 $contents = fread($fh, filesize($file_location));
533 return base64_encode($contents);
536 function addFile($session_ser,$group_id,$package_id,$release_id,$name,$base64_contents,$type_id,$processor_id,$release_time) {
537 continue_session($session_ser);
539 $grp = group_get_object($group_id);
540 if (!$grp || !is_object($grp)) {
541 return new soap_fault('','addFile','Could Not Get Project','Could Not Get Project');
542 } elseif ($grp->isError()) {
543 return new soap_fault('','addFile',$grp->getErrorMessage(),$grp->getErrorMessage());
546 $frsp =& frspackage_get_object($package_id);
547 if (!$frsp || !is_object($frsp)) {
548 return new soap_fault('','addFile','Could Not Get Package','Could Not Get Package');
549 } elseif ($frsp->isError()) {
550 return new soap_fault('','addFile',$frsp->getErrorMessage(),$frsp->getErrorMessage());
553 $frsr =& frsrelease_get_object($release_id);
554 if (!$frsr || !is_object($frsr)) {
555 return new soap_fault('','addFile','Could Not Get Release','Could Not Get Release');
556 } elseif ($frsr->isError()) {
557 return new soap_fault('','addFile',$frsr->getErrorMessage(),$frsr->getErrorMessage());
560 $frsf = new FRSFile($frsr);
561 if (!$frsf || !is_object($frsf)) {
562 return new soap_fault('','addFile','Could Not Get File','Could Not Get File');
565 $tmpname = tempnam("/tmp", "gforge_cli_frs");
566 $fh = fopen($tmpname, "wb");
568 return new soap_fault('','addFile','Could not create temporary file in directory /tmp');
570 fwrite($fh, base64_decode($base64_contents));
573 if (!$frsf->create($name,$tmpname,$type_id,$processor_id,$release_time)) {
575 return new soap_fault('','addFile',$frsf->getErrorMessage(),$frsf->getErrorMessage());
578 return $frsf->getID();