/**
  * 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;
 }
Пример #2
0
 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())));
 }
Пример #3
0
 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);
 }
Пример #4
0
 /**
  * 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;
 }
Пример #5
0
 /**
  * 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');
     }
 }
Пример #6
0
 /**
  *	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;
 }
Пример #7
0
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()) {
Пример #8
0
 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;
 }
Пример #9
0
 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);
}
Пример #11
0
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;
Пример #12
0
                    $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 . '"}';
                }
            }
        }
    }
}
Пример #13
0
                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 . '"}';
                }
            }
        }
    }
}
Пример #14
0
//
//
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';
Пример #15
0
 /**
  * Generates file list of the given release
  *
  * @param FRSRelease $release
  *
  * @return Array
  */
 function getFileList($release)
 {
     $frsff = new FRSFileFactory();
     return $frsff->getFRSFilesFromDb($release->getReleaseID());
 }
Пример #16
0
 function __construct()
 {
     parent::__construct();
     $this->fileforge = '/bin/true';
 }