/** * deleteEmptyRelease - Delete an empty release or all empty releases in package package_id in project group_id. * * @param String $sessionKey The session hash associated with the session opened by the person who calls the service * @param Integer $group_id Id of the project in which we want to delete empty releases * @param Integer $package_id Id of the package in which we want to delete empty releases * @param Integer $release_id Id of the release to delete * @param Boolean $cleanup_all Set to true to delete all empty releases * * @return Array list of deleted releases, or a soap fault if: * - group_id does not match with a valid project * - the package_id does not match * - the user does not have permissions to delete releases * - the system was not able to delete the releases. */ function deleteEmptyRelease($sessionKey, $group_id, $package_id, $release_id, $cleanup_all) { if (session_continue($sessionKey)) { try { $pm = ProjectManager::instance(); $pm->getGroupByIdForSoap($group_id, 'deleteRelease'); } catch (SoapFault $e) { return $e; } $packageFactory = new FRSPackageFactory(); $package = $packageFactory->getFRSPackageFromDb($package_id); if (!$package || $package->getGroupID() != $group_id) { return new SoapFault(invalid_package_fault, 'Invalid Package', 'deleteRelease'); } $releaseFactory = new FRSReleaseFactory(); $releases = array(); if ($release_id && !$cleanup_all) { $release = $releaseFactory->getFRSReleaseFromDb($release_id); if (!$release || $release->getPackageID() != $package_id) { return new SoapFault(invalid_release_fault, 'Invalid Release', 'deleteRelease'); } $releases[] = $release; } elseif ($cleanup_all) { // retrieve all the releases $releases = $releaseFactory->getFRSReleasesFromDb($package_id); } $deleted = array(); foreach ($releases as $release) { $fileFactory = new FRSFileFactory(); $files = $fileFactory->getFRSFilesFromDb($release->getReleaseID()); if (empty($files)) { if ($releaseFactory->userCanUpdate($group_id, $release->getReleaseID())) { if ($releaseFactory->delete_release($group_id, $release->getReleaseID())) { $deleted[] = release_to_soap($release); } else { return new SoapFault(invalid_package_fault, 'Release ' . $release->getReleaseID() . ' could not be deleted', 'deleteRelease'); } } else { return new SoapFault(invalid_package_fault, 'You don\'t have permission to delete package ' . $release->getReleaseID(), 'deleteRelease'); } } } return $deleted; } else { return new SoapFault(invalid_session_fault, 'Invalid Session', 'deleteRelease'); } }