/** * deleteEmptyPackage - Delete an empty package or all empty packages 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 the package(s) * @param Integer $package_id Id of the package to delete * @param Boolean $cleanup_all Set to true to delete all empty packages * * @return Array list of deleted packages, or a soap fault if: * - group_id does not match with a valid project * - the user does not have permissions to delete packages * - the system was not able to delete the packages. */ function deleteEmptyPackage($sessionKey, $group_id, $package_id, $cleanup_all) { if (session_continue($sessionKey)) { try { $pm = ProjectManager::instance(); $pm->getGroupByIdForSoap($group_id, 'deletePackage'); } catch (SoapFault $e) { return $e; } $packageFactory = new FRSPackageFactory(); $packages = array(); if ($package_id && !$cleanup_all) { $package = $packageFactory->getFRSPackageFromDb($package_id); if (!$package || $package->getGroupID() != $group_id) { return new SoapFault(invalid_package_fault, 'Invalid Package', 'deletePackage'); } $packages[] = $package; } elseif ($cleanup_all) { $packages = $packageFactory->getFRSPackagesFromDb($group_id); } $deleted = array(); foreach ($packages as $package) { $releaseFactory = new FRSReleaseFactory(); $releases = $releaseFactory->getFRSReleasesFromDb($package->getPackageID()); if (empty($releases)) { if ($packageFactory->userCanUpdate($group_id, $package->getPackageID())) { if ($packageFactory->delete_package($group_id, $package->getPackageID())) { $deleted[] = package_to_soap($package); } else { return new SoapFault(invalid_package_fault, 'Package ' . $package->getPackageID() . ' could not be deleted', 'deletePackage'); } } else { return new SoapFault(invalid_package_fault, 'You don\'t have permission to delete package ' . $package->getPackageID(), 'deletePackage'); } } } return $deleted; } else { return new SoapFault(invalid_session_fault, 'Invalid Session', 'deletePackage'); } }
switch ($request->get('func')) { case 'delete': //Not yet $vPackageId = new Valid_UInt('id'); if ($request->valid($vPackageId)) { $package_id = $request->get('id'); /* Delete the corresponding package only if it is empty */ $res_release = $frsrf->getFRSReleasesFromDb($package_id, null, $group_id); $num_releases = count($res_release); //make sure there is no more release in the package if ($num_releases > 0) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editpackages', 'p_not_empty')); } else { if (!$frspf->delete_package($group_id, $package_id)) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editpackages', 'p_not_yours')); } else { $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editpackages', 'p_del')); } } } $GLOBALS['Response']->redirect('/file/?group_id=' . $group_id); break; case 'add': $package = new FRSPackage(array('group_id' => $group_id)); frs_display_package_form($package, $GLOBALS['Language']->getText('file_admin_editpackages', 'create_new_p'), '?group_id=' . $group_id . '&func=create', $existing_packages); break; case 'create': if (!$request->exist('submit')) { $GLOBALS['Response']->addFeedback('info', $Language->getText('file_admin_editpackages', 'create_canceled'));