/** * Process stored event * * @return Boolean */ public function process() { list($project_path, $file_id, $old_path) = $this->getParametersAsArray(); $file_factory = new FRSFileFactory(); $file = $file_factory->getFRSFileFromDb($file_id); if (!$file) { $this->error('File does not exist with ID ' . $file_id); return false; } $file_path = $file->getFilePath(); $this->createNecessaryFolders($project_path, $file_path); if (!file_exists($project_path . $old_path)) { $this->error('Cannot find file to move: ' . $file_id . ' from: ' . $project_path . $old_path); return false; } if (file_exists($project_path . $file_path)) { $this->error('File already exists at location: ' . $file_id . ' location: ' . $project_path . $file_path); return false; } if (rename($project_path . $old_path, $project_path . $file_path)) { $this->done(); return true; } $this->error('Unable to move file: ' . $file_id . ' from: ' . $project_path . $old_path . ' to ' . $project_path . $file_path); return false; }
public function put($data) { if (!file_put_contents($this->getFileLocation(), $data)) { throw new Sabre_DAV_Exception_Forbidden('Permission denied to change data'); } $frs_file_factory = new FRSFileFactory(); $frs_file_factory->update(array('file_id' => $this->file->getFileId(), 'file_size' => filesize($this->getFileLocation()))); }
private function importFile(Project $project, FRSRelease $release, PFUser $user, SimpleXMLElement $xml_file, $extraction_path) { $user = empty($xml_file->user) ? $user : $this->user_finder->getUser($xml_file->user); $attrs = $xml_file->attributes(); $src = $extraction_path . '/' . $attrs['src']; $name = isset($attrs['name']) ? (string) $attrs['name'] : basename($src); $md5 = strtolower(md5_file($src)); $time = strtotime($attrs['release-time']); $date = strtotime($attrs['post-date']); $desc = ""; $type_id = $this->getFileTypeDao()->searchTypeId($attrs['filetype']); if (is_null($type_id)) { throw new Exception("Invalid filetype '{$attrs['filetype']}'"); } $proc_id = $this->getProcessorDao()->searchProcessorId($project->getID(), $attrs['arch']); if (is_null($proc_id)) { throw new Exception("Invalid architecture '{$attrs['arch']}'"); } foreach ($xml_file->children() as $elem) { if ($elem->getName() != "description") { continue; } $desc .= (string) $elem; } if (isset($attrs['md5sum'])) { $expected_md5 = strtolower($attrs['md5sum']); if ($expected_md5 != $md5) { throw new Exception("Import of file {$src} failed because the file is corrupted " . "(expected MD5 {$expected_md5}, got {$md5})"); } } $dirPath = $this->file_factory->getSrcDir($project); $dest = "{$dirPath}/{$name}"; if (!copy($src, $dest)) { throw new Exception("Could not copy {$src} to {$dest}"); } $newFile = new FRSFile(); $newFile->setGroup($project); $newFile->setRelease($release); $newFile->setFileName($name); $newFile->setProcessorID($proc_id); $newFile->setTypeID($type_id); $newFile->setReferenceMd5($md5); $newFile->setComputedMd5($md5); $newFile->setUserId($user->getId()); $newFile->setComment($desc); $newFile->setReleaseTime($time); $newFile->setPostDate($date); $this->file_factory->createFile($newFile); }
/** * get the files of the release. * * @param int $relase_id the ID of the release the files belong to */ function &getFRSFilesFromDb($release_id) { $_id = (int) $release_id; $dao =& $this->_getFRSFileDao(); $dar = $dao->searchByReleaseId($_id); $files = array(); if (!$dar->isError() && $dar->valid()) { while ($dar->valid()) { $data_array =& $dar->current(); $files[] = FRSFileFactory::getFRSFileFromArray($data_array); $dar->next(); } } return $files; }
/** * 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'); } }
/** * getFiles - gets all the file objects for files in this release. * * return array Array of FRSFile Objects. */ function &getFiles() { if (!is_array($this->release_files) || count($this->release_files) < 1) { $this->release_files = array(); $frsff = new FRSFileFactory(); $this->release_files = $frsff->getFRSFilesFromDb($this->getReleaseID()); } return $this->release_files; }
require_once 'www/project/admin/permissions.php'; require_once 'common/frs/FRSFileFactory.class.php'; require_once 'www/file/file_utils.php'; list(, $group_id, $file_id) = explode('/', $_SERVER['PATH_INFO']); // Must have a group_id and file_id otherwise // we cannot do much $vGroupId = new Valid_groupId(); $vGroupId->required(); $vFileId = new Valid_UInt(); $vFileId->required(); if (!$vFileId->validate($file_id) || !$vGroupId->validate($group_id)) { exit_missing_param(); } // Now make an innerjoin on the 4 tables to be sure // that the file_id we have belongs to the given group_id $frsff = new FRSFileFactory(); $file =& $frsff->getFRSFileFromDb($file_id, $group_id); if (!$file || $file->isError()) { exit_error($Language->getText('file_download', 'incorrect_release_id'), $Language->getText('file_download', 'report_error', $GLOBALS['sys_name'])); } // Check permissions for downloading the file, and check that the file has the active status if (!$file->userCanDownload() || !$file->isActive()) { exit_error($Language->getText('file_download', 'access_denied'), $Language->getText('file_download', 'access_not_authorized', session_make_url("/project/memberlist.php?group_id={$group_id}"))); } if (!$file->fileExists()) { exit_error($Language->getText('global', 'error'), $Language->getText('file_download', 'file_not_available')); } // Log the download in the Log system $file->logDownload(user_getid()); // Start download if (!$file->download()) {
private function getProjectIdForSystemReference($keyword, $value) { $ref_gid = null; $nature = $this->getSystemReferenceNatureByKeyword($keyword); switch ($nature) { case self::REFERENCE_NATURE_RELEASE: $release_factory = new FRSReleaseFactory(); $release = $release_factory->getFRSReleaseFromDb($value); if ($release) { $ref_gid = $release->getProject()->getID(); } break; case self::REFERENCE_NATURE_FILE: $file_factory = new FRSFileFactory(); $file = $file_factory->getFRSFileFromDb($value); if ($file) { $ref_gid = $file->getGroup()->getID(); } break; case self::REFERENCE_NATURE_FORUM: $forum_dao = new ForumDao(); $forum_group_id_row = $forum_dao->searchByGroupForumId($value)->getRow(); if ($forum_group_id_row) { $ref_gid = $forum_group_id_row['group_id']; } break; case self::REFERENCE_NATURE_FORUMMESSAGE: $forum_dao = new ForumDao(); $message_group_id_row = $forum_dao->getMessageProjectId($value); if ($message_group_id_row) { $ref_gid = $message_group_id_row['group_id']; } break; case self::REFERENCE_NATURE_NEWS: $news_dao = new NewsBytesDao(); $news_group_id_row = $news_dao->searchByForumId($value)->getRow(); if ($news_group_id_row) { $ref_gid = $news_group_id_row['group_id']; } break; } return $ref_gid; }
function testCreateFileCompareMD5Checksums() { $r = new FRSRelease(); $r->setReleaseID(456); $r->setPackageID(123); $r->setGroupID(111); $ff = new FRSFileFactoryTestCreateFiles(); $f = new FRSFile(); $f->setRelease($r); $f->setFileName('toto.txt'); touch($GLOBALS['ftp_incoming_dir'] . '/toto.txt'); $path = $GLOBALS['ftp_incoming_dir'] . '/' . $f->getFileName(); $f->setReferenceMd5('d41d8cd98f00b204e9800998ecf8427e'); try { $ff->createFile($f, FRSFileFactory::COMPUTE_MD5); } catch (Exception $e) { $this->assertIsA($e, 'FRSFileMD5SumException'); } $this->assertNotNull($f->getComputedMd5()); $this->assertTrue(FRSFileFactory::compareMd5Checksums($f->getComputedMd5(), $f->getReferenceMd5())); unlink($GLOBALS['ftp_incoming_dir'] . '/toto.txt'); }
function frs_file_restore_process($request, $group_id) { $fileId = $request->getValidated('id', 'uint', 0); if ($fileId > 0) { $fileFactory = new FRSFileFactory(); $file = $fileFactory->getFRSFileFromDb($fileId); $file_name = $file->getFileName(); $basename = basename($file_name); $release_id = $file->getReleaseID(); if (!$fileFactory->isSameFileMarkedToBeRestored($basename, $release_id, $group_id)) { if (!$fileFactory->isFileNameExist($file_name, $group_id)) { if ($fileFactory->markFileToBeRestored($file)) { $GLOBALS['Response']->addFeedback('info', 'File marked to be restored'); } else { $GLOBALS['Response']->addFeedback('error', 'File not restored'); } } else { $GLOBALS['Response']->addFeedback('error', 'There is already a file with this filename having an active status'); } } else { $GLOBALS['Response']->addFeedback('error', 'A file with a same name is marked to be restored'); } } else { $GLOBALS['Response']->addFeedback('error', 'Bad file id'); } $GLOBALS['Response']->redirect('?group_id=' . $group_id); }
define("FRS_COLLAPSED_ICON", util_get_image_theme("ic/toggle_plus.png")); $authorized_user = false; $request =& HTTPRequest::instance(); $vGroupId = new Valid_GroupId(); $vGroupId->required(); if ($request->valid($vGroupId)) { $group_id = $request->get('group_id'); } else { exit_no_group(); } if (user_ismember($group_id, 'R2') || user_ismember($group_id, 'A')) { $authorized_user = true; } $frspf = new FRSPackageFactory(); $frsrf = new FRSReleaseFactory(); $frsff = new FRSFileFactory(); $packages = array(); $num_packages = 0; // Retain only packages the user is authorized to access, or packages containing releases the user is authorized to access... $res = $frspf->getFRSPackagesFromDb($group_id); $user = UserManager::instance()->getCurrentUser(); foreach ($res as $package) { if ($frspf->userCanRead($group_id, $package->getPackageID(), $user->getId())) { if ($request->existAndNonEmpty('release_id')) { if ($request->valid(new Valid_UInt('release_id'))) { $release_id = $request->get('release_id'); $row3 =& $frsrf->getFRSReleaseFromDb($release_id); } } if (!$request->existAndNonEmpty('release_id') || $row3->getPackageID() == $package->getPackageID()) { $packages[$package->getPackageID()] = $package;
$date = $request->get('date'); $group_id = $request->get('group_id'); $release_id = $request->get('release_id'); $validator = new frsValidator(); $release = array('name' => $name, 'release_id' => $release_id, 'package_id' => $package_id, 'date' => $date); if ($validator->isValidForUpdate($release, $group_id)) { //frs valid $header = array('valid' => true); } else { //frs non valid $errors = $validator->getErrors(); $feedback = new Feedback(); $feedback->log('error', $errors[0]); $header = array('valid' => false, 'msg' => $feedback->fetch()); } header(json_header($header)); } } else { if ($action == 'refresh_file_list') { $project = $request->getProject(); $frsff = new FRSFileFactory(); $file_list = $frsff->getUploadedFileNames($project); $available_ftp_files = implode(",", $file_list); $purifier = Codendi_HTMLPurifier::instance(); $available_ftp_files = $purifier->purify($available_ftp_files, CODENDI_PURIFIER_JS_DQUOTE); echo '{"valid":true, "msg":"' . $available_ftp_files . '"}'; } } } } }
if ($request->valid($vName) && $request->valid($vDate) && $request->valid($vGroupId) && $request->valid($vPackageId) && $request->valid($vReleaseId)) { $name = $request->get('name'); $package_id = $request->get('package_id'); $date = $request->get('date'); $group_id = $request->get('group_id'); $release_id = $request->get('release_id'); $validator = new frsValidator(); $release = array('name' => $name, 'release_id' => $release_id, 'package_id' => $package_id, 'date' => $date); if ($validator->isValidForUpdate($release, $group_id)) { //frs valid $header = array('valid' => true); } else { //frs non valid $errors = $validator->getErrors(); $feedback = new Feedback(); $feedback->log('error', $errors[0]); $header = array('valid' => false, 'msg' => $feedback->fetch()); } header(json_header($header)); } } else { if ($action == 'refresh_file_list') { $frsff = new FRSFileFactory(); $file_list = $frsff->getUploadedFileNames(); $available_ftp_files = implode(",", $file_list); echo '{"valid":true, "msg":"' . $available_ftp_files . '"}'; } } } } }
// // require_once 'pre.php'; require_once 'common/frs/FRSFileFactory.class.php'; require_once 'common/frs/FRSPackageFactory.class.php'; $vGroupId = new Valid_GroupId(); $vGroupId->required(); $vFileId = new Valid_UInt('file_id'); $vFileId->required(); if ($request->valid($vGroupId) && $request->valid($vFileId)) { $group_id = $request->get('group_id'); $file_id = $request->get('file_id'); } else { exit_missing_param(); } $frsff = new FRSFileFactory(); $frspf = new FRSPackageFactory(); // Must have a group_id and file_id otherwise // we cannot do much if (!$file_id || !$group_id) { exit_missing_param(); } //determine font for this platform if (browser_is_windows() && browser_is_ie()) { //ie needs smaller fonts $font_size = 'smaller'; $font_size_normal = 'small'; } else { if (browser_is_windows()) { //netscape on wintel $font_size = 'small';
/** * Generates file list of the given release * * @param FRSRelease $release * * @return Array */ function getFileList($release) { $frsff = new FRSFileFactory(); return $frsff->getFRSFilesFromDb($release->getReleaseID()); }
function __construct() { parent::__construct(); $this->fileforge = '/bin/true'; }