3 * SOAP File Release System Include - this file contains wrapper functions for the SOAP interface
5 * Copyright 2004 (c) GForge, LLC
8 * This file is part of FusionForge.
10 * FusionForge 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 * FusionForge 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 FusionForge; 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.'frs/FRSFile.class.php';
27 //require_once $gfcommon.'frs/FRSFileType.class.php';
28 //require_once $gfcommon.'frs/FRSFileProcessorType.class.php';
29 require_once $gfcommon.'frs/FRSPackage.class.php';
30 require_once $gfcommon.'frs/FRSRelease.class.php';
32 $server->wsdl->addComplexType(
39 'package_id' => array('name'=>'package_id', 'type' => 'xsd:int'),
40 'name' => array('name'=>'name', 'type' => 'xsd:string'),
41 'status_id' => array('name'=>'description', 'type' => 'xsd:string'),
42 'is_public' => array('name'=>'is_public', 'type' => 'xsd:int'),
46 $server->wsdl->addComplexType(
53 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSPackage[]')),
60 'session_ser'=>'xsd:string',
61 'group_id'=>'xsd:int'),
62 array('getPackagesResponse'=>'tns:ArrayOfFRSPackage'),
63 $uri,$uri.'#getPackages','rpc','encoded'
66 $server->wsdl->addComplexType(
73 'type_id' => array('name'=>'type_id', 'type' => 'xsd:int'),
74 'name' => array('name'=>'name', 'type' => 'xsd:string'),
77 $server->wsdl->addComplexType(
84 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSFileType[]')),
90 array('session_ser'=>'xsd:string'),
91 array('getFileTypeResponse'=>'tns:ArrayOfFRSFileType'),
92 $uri,$uri.'#getFileTypes','rpc','encoded'
95 $server->wsdl->addComplexType(
96 'FRSFileProcessorType',
102 'processor_id' => array('name'=>'processor_id', 'type' => 'xsd:int'),
103 'name' => array('name'=>'name', 'type' => 'xsd:string'),
106 $server->wsdl->addComplexType(
107 'ArrayOfFRSFileProcessorType',
113 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSFileProcessorType[]')),
114 'tns:FRSFileProcessorType'
117 'getFileProcessorTypes',
118 array('session_ser'=>'xsd:string'),
119 array('getFileProcessorTypeResponse'=>'tns:ArrayOfFRSFileProcessorType'),
120 $uri,$uri.'#getFileProcessorTypes','rpc','encoded'
126 'session_ser'=>'xsd:string',
127 'group_id'=>'xsd:int',
128 'package_name'=>'xsd:string',
129 'is_public'=>'xsd:int'),
130 array('addPackageResponse'=>'xsd:int'),
131 $uri,$uri.'#addPackage','rpc','encoded'
134 $server->wsdl->addComplexType(
141 'release_id' => array('name'=>'release_id', 'type' => 'xsd:int'),
142 'name' => array('name'=>'name', 'type' => 'xsd:string'),
143 'notes' => array('name'=>'notes', 'type' => 'xsd:string'),
144 'changes' => array('name'=>'changes', 'type' => 'xsd:string'),
145 'status_id' => array('name'=>'description', 'type' => 'xsd:string'),
146 'release_date' => array('name'=>'release_date', 'type' => 'xsd:int'),
150 $server->wsdl->addComplexType(
157 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSRelease[]')),
164 'session_ser'=>'xsd:string',
165 'group_id'=>'xsd:int',
166 'package_id'=>'xsd:int'),
167 array('getPackagesResponse'=>'tns:ArrayOfFRSRelease'),
168 $uri,$uri.'#getReleases','rpc','encoded'
174 'session_ser'=>'xsd:string',
175 'group_id'=>'xsd:int',
176 'package_id'=>'xsd:int',
177 'name'=>'xsd:string',
178 'notes'=>'xsd:string',
179 'changes'=>'xsd:string',
180 'release_date'=>'xsd:int'),
181 array('addRelease'=>'xsd:int'),
182 $uri,$uri.'#addRelease','rpc','encoded'
185 $server->wsdl->addComplexType(
192 'file_id' => array('name'=>'file_id', 'type' => 'xsd:int'),
193 'name' => array('name'=>'name', 'type' => 'xsd:string'),
194 'size' => array('name'=>'size', 'type' => 'xsd:int'),
195 'type' => array('name'=>'type', 'type' => 'xsd:string'),
196 'processor' => array('name'=>'processor', 'type' => 'xsd:string'),
197 'downloads' => array('name'=>'downloads', 'type' => 'xsd:int'),
198 'release' => array('name'=>'release_time', 'type' => 'xsd:int'),
199 'date' => array('name'=>'date', 'type' => 'xsd:int'),
204 $server->wsdl->addComplexType(
211 array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:FRSFile[]')),
218 'session_ser'=>'xsd:string',
219 'group_id'=>'xsd:int',
220 'package_id'=>'xsd:int',
221 'release_id'=>'xsd:int'),
222 array('getFilesResponse'=>'tns:ArrayOfFRSFile'),
223 $uri,$uri.'#getFiles','rpc','encoded'
229 'session_ser'=>'xsd:string',
230 'group_id'=>'xsd:int',
231 'package_id'=>'xsd:int',
232 'release_id'=>'xsd:int',
233 'file_id'=>'xsd:int'),
234 array('getFileResponse'=>'xsd:string'),
235 $uri,$uri.'#getFile','rpc','encoded'
241 'session_ser'=>'xsd:string',
242 'group_id'=>'xsd:int',
243 'package_id'=>'xsd:int',
244 'release_id'=>'xsd:int',
245 'name'=>'xsd:string',
246 'base64_contents'=>'xsd:string',
247 'type_id'=>'xsd:int',
248 'processor_id'=>'xsd:int',
249 'release_time'=>'xsd:int'
251 array('addFile'=>'xsd:string'),
252 $uri,$uri.'#addFile','rpc','encoded'
258 'session_ser'=>'xsd:string',
259 'group_id'=>'xsd:int',
260 'package_id'=>'xsd:int',
261 'release_id'=>'xsd:int',
262 'file_name'=>'xsd:string',
263 'type_id'=>'xsd:int',
264 'processor_id'=>'xsd:int',
265 'release_time'=>'xsd:int'
267 array('addUploadedFile'=>'xsd:string'),
268 $uri,$uri.'#addUploadedFile','rpc','encoded'
271 function getPackages($session_ser,$group_id) {
272 continue_session($session_ser);
273 $grp = group_get_object($group_id);
274 if (!$grp || !is_object($grp)) {
275 return new soap_fault ('','getPackages','Could Not Get Project','Could Not Get Project');
276 } elseif ($grp->isError()) {
277 return new soap_fault ('','getPackages',$grp->getErrorMessage(),$grp->getErrorMessage());
280 $pkg_arr = get_frs_packages($grp);
281 return packages_to_soap($pkg_arr);
284 function packages_to_soap(&$pkg_arr) {
287 if (is_array($pkg_arr) && count($pkg_arr) > 0) {
288 for ($i=0; $i<count($pkg_arr); $i++) {
289 if ($pkg_arr[$i]->isError()) {
293 'package_id' => $pkg_arr[$i]->getID(),
294 'name' => $pkg_arr[$i]->getName(),
295 'status_id' => $pkg_arr[$i]->getStatus(),
296 'is_public' => $pkg_arr[$i]->isPublic()
304 function getFileTypes($session_ser) {
305 continue_session($session_ser);
306 $pkg_arr = get_frs_filetypes();
307 return filetypes_to_soap($pkg_arr);
310 function getFileProcessorTypes($session_ser) {
311 continue_session($session_ser);
312 $pkg_arr = get_frs_fileprocessortypes();
313 return fileprocessortypes_to_soap($pkg_arr);
316 function addPackage($session_ser,$group_id,$package_name,$is_public) {
317 continue_session($session_ser);
318 $grp = group_get_object($group_id);
319 if (!$grp || !is_object($grp)) {
320 return new soap_fault ('','addPackage','Could Not Get Project','Could Not Get Project');
321 } elseif ($grp->isError()) {
322 return new soap_fault ('','addPackage',$grp->getErrorMessage(),$grp->getErrorMessage());
325 $frsp = new FRSPackage($grp);
326 if (!$frsp->create($package_name, $is_public)) {
327 return new soap_fault('', 'addPackage', $frsp->getErrorMessage(), $frsp->getErrorMessage());
329 return $frsp->getID();
333 function getReleases($session_ser,$group_id,$package_id) {
334 continue_session($session_ser);
335 $grp = group_get_object($group_id);
336 if (!$grp || !is_object($grp)) {
337 return new soap_fault ('','getReleases','Could Not Get Project','Could Not Get Project');
338 } elseif ($grp->isError()) {
339 return new soap_fault ('','getReleases',$grp->getErrorMessage(),$grp->getErrorMessage());
342 $frsp =& frspackage_get_object($package_id);
343 if (!$frsp || !is_object($frsp)) {
344 return new soap_fault ('','getReleases','Could Not Get Package','Could Not Get Package');
345 } else if ($frsp->isError()) {
346 return new soap_fault ('','getReleases',$frsp->getErrorMessage(),$frsp->getErrorMessage());
349 $release_arr =& $frsp->getReleases();
351 return releases_to_soap($release_arr);
354 function releases_to_soap(&$release_arr) {
357 if (is_array($release_arr) && count($release_arr) > 0) {
358 for ($i=0; $i<count($release_arr); $i++) {
359 if ($release_arr[$i]->isError()) {
363 'release_id' => $release_arr[$i]->getID(),
364 'name' => $release_arr[$i]->getName(),
365 'notes' => $release_arr[$i]->getNotes(),
366 'changes' => $release_arr[$i]->getChanges(),
367 'status_id' => $release_arr[$i]->getStatus(),
368 'release_date' => $release_arr[$i]->getReleaseDate()
377 function addRelease($session_ser,$group_id,$package_id,$name,$notes,$changes,$release_date) {
378 continue_session($session_ser);
380 $grp = group_get_object($group_id);
381 if (!$grp || !is_object($grp)) {
382 return new soap_fault ('','getPackages','Could Not Get Project','Could Not Get Project');
383 } elseif ($grp->isError()) {
384 return new soap_fault ('','getPackages',$grp->getErrorMessage(),$grp->getErrorMessage());
387 $frsp =& frspackage_get_object($package_id);
388 if (!$frsp || !is_object($frsp)) {
389 return new soap_fault ('','getReleases','Could Not Get Package','Could Not Get Package');
390 } else if ($frsp->isError()) {
391 return new soap_fault ('','getReleases',$frsp->getErrorMessage(),$frsp->getErrorMessage());
394 $frsr = new FRSRelease($frsp);
395 if (!$frsr->create($name,$notes,$changes,0,$release_date)) {
396 return new soap_fault('', 'addRelease', $frsr->getErrorMessage(), $frsr->getErrorMessage());
398 return $frsr->getID();
402 function getFiles($session_ser,$group_id,$package_id,$release_id) {
403 continue_session($session_ser);
405 $grp = group_get_object($group_id);
406 if (!$grp || !is_object($grp)) {
407 return new soap_fault ('','getFiles','Could Not Get Project','Could Not Get Project');
408 } elseif ($grp->isError()) {
409 return new soap_fault ('','getFiles',$grp->getErrorMessage(),$grp->getErrorMessage());
412 $frsp =& frspackage_get_object($package_id);
413 if (!$frsp || !is_object($frsp)) {
414 return new soap_fault ('','getFiles','Could Not Get Package','Could Not Get Package');
415 } else if ($frsp->isError()) {
416 return new soap_fault ('','getFiles',$frsp->getErrorMessage(),$frsp->getErrorMessage());
419 //TODO: Check that the release belongs to the package
420 $frsr =& frsrelease_get_object($release_id);
421 if (!$frsr || !is_object($frsr)) {
422 return new soap_fault ('','getFiles','Could Not Get Release','Could Not Get Release');
423 } else if ($frsr->isError()) {
424 return new soap_fault ('','getFiles',$frsr->getErrorMessage(),$frsr->getErrorMessage());
427 $files_arr =& $frsr->getFiles();
428 return files_to_soap($files_arr);
431 function files_to_soap($files_arr) {
434 if (is_array($files_arr) && count($files_arr) > 0) {
435 for ($i=0; $i<count($files_arr); $i++) {
436 if ($files_arr[$i]->isError()) {
440 'file_id' => $files_arr[$i]->getID(),
441 'name' => $files_arr[$i]->getName(),
442 'size' => $files_arr[$i]->getSize(),
443 'type' => $files_arr[$i]->getFileType(),
444 'processor' => $files_arr[$i]->getProcessor(),
445 'downloads' => $files_arr[$i]->getDownloads(),
446 'release' => $files_arr[$i]->getReleaseTime(),
447 'date' => $files_arr[$i]->getPostDate(),
456 function filetypes_to_soap($files_arr) {
459 if (is_array($files_arr) && count($files_arr) > 0) {
460 for ($i=0; $i<count($files_arr); $i++) {
461 if ($files_arr[$i]->isError()) {
465 'type_id' => $files_arr[$i]->getID(),
466 'name' => $files_arr[$i]->getName(),
474 function fileprocessortypes_to_soap($files_arr) {
477 if (is_array($files_arr) && count($files_arr) > 0) {
478 for ($i=0; $i<count($files_arr); $i++) {
479 if ($files_arr[$i]->isError()) {
483 'processor_id' => $files_arr[$i]->getID(),
484 'name' => $files_arr[$i]->getName(),
492 function getFile($session_ser,$group_id,$package_id,$release_id,$file_id) {
493 continue_session($session_ser);
495 $grp = group_get_object($group_id);
496 if (!$grp || !is_object($grp)) {
497 return new soap_fault ('','getFile','Could Not Get Project','Could Not Get Project');
498 } elseif ($grp->isError()) {
499 return new soap_fault ('','getFile',$grp->getErrorMessage(),$grp->getErrorMessage());
502 $frsp =& frspackage_get_object($package_id);
503 if (!$frsp || !is_object($frsp)) {
504 return new soap_fault ('','getFile','Could Not Get Package','Could Not Get Package');
505 } else if ($frsp->isError()) {
506 return new soap_fault ('','getFile',$frsp->getErrorMessage(),$frsp->getErrorMessage());
509 $frsr =& frsrelease_get_object($release_id);
510 if (!$frsr || !is_object($frsr)) {
511 return new soap_fault ('','getFile','Could Not Get Release','Could Not Get Release');
512 } else if ($frsr->isError()) {
513 return new soap_fault ('','getFile',$frsr->getErrorMessage(),$frsr->getErrorMessage());
516 $frsf = new FRSFile($frsr, $file_id);
517 if (!$frsf || !is_object($frsf)) {
518 return new soap_fault ('','getFile','Could Not Get File','Could Not Get File');
519 } else if ($frsf->isError()) {
520 return new soap_fault ('','getFile',$frsf->getErrorMessage(),$frsf->getErrorMessage());
523 $file_location = forge_get_config('upload_dir').'/'.
524 $frsf->FRSRelease->FRSPackage->Group->getUnixName().'/'.
525 $frsf->FRSRelease->FRSPackage->getFileName().'/'.
526 $frsf->FRSRelease->getFileName().'/'.
528 if (!file_exists($file_location)) {
529 return new soap_fault('','getFile','File doesn\'t exist in server','File doesn\'t exist in server');
532 $fh = fopen($file_location, "rb");
533 $contents = fread($fh, filesize($file_location));
535 return base64_encode($contents);
538 function addFile($session_ser,$group_id,$package_id,$release_id,$name,$base64_contents,$type_id,$processor_id,$release_time) {
539 continue_session($session_ser);
541 $grp = group_get_object($group_id);
542 if (!$grp || !is_object($grp)) {
543 return new soap_fault ('','addFile','Could Not Get Project','Could Not Get Project');
544 } elseif ($grp->isError()) {
545 return new soap_fault ('','addFile',$grp->getErrorMessage(),$grp->getErrorMessage());
548 $frsp =& frspackage_get_object($package_id);
549 if (!$frsp || !is_object($frsp)) {
550 return new soap_fault ('','addFile','Could Not Get Package','Could Not Get Package');
551 } else if ($frsp->isError()) {
552 return new soap_fault ('','addFile',$frsp->getErrorMessage(),$frsp->getErrorMessage());
555 $frsr =& frsrelease_get_object($release_id);
556 if (!$frsr || !is_object($frsr)) {
557 return new soap_fault ('','addFile','Could Not Get Release','Could Not Get Release');
558 } else if ($frsr->isError()) {
559 return new soap_fault ('','addFile',$frsr->getErrorMessage(),$frsr->getErrorMessage());
562 $frsf = new FRSFile($frsr);
563 if (!$frsf || !is_object($frsf)) {
564 return new soap_fault ('','addFile','Could Not Get File','Could Not Get File');
567 $tmpname = tempnam("/tmp", "gforge_cli_frs");
568 $fh = fopen($tmpname, "wb");
570 return new soap_fault ('','addFile','Could not create temporary file in directory /tmp');
572 fwrite($fh, base64_decode($base64_contents));
575 if (!$frsf->create($name,$tmpname,$type_id,$processor_id,$release_time)) {
577 return new soap_fault ('','addFile',$frsf->getErrorMessage(),$frsf->getErrorMessage());
580 return $frsf->getID();