function show_newest_releases() { global $Language; $return = ""; $hp = Codendi_HTMLPurifier::instance(); // Fetch releases that are no more than 3 months old $start_time = strval(time() - 3 * 30 * 24 * 3600); $query = new_utils_get_new_releases_short($start_time); $res_newrel = db_query($query); // print each one but only show one release per project $count = 0; $DONE = array(); $frspf = new FRSPackageFactory(); $frsrf = new FRSReleaseFactory(); while (($row_newrel = db_fetch_array($res_newrel)) && $count < 10) { if (!isset($DONE[$row_newrel['group_id']])) { //if ((!permission_exist("PACKAGE_READ",$row_newrel['package_id'] ))&& // (!permission_exist("RELEASE_READ",$row_newrel['release_id'] ))) { if ($frspf->userCanRead($row_newrel['group_id'], $row_newrel['package_id'], 100) && $frsrf->userCanRead($row_newrel['group_id'], $row_newrel['package_id'], $row_newrel['release_id'], 100)) { $return .= '(' . $hp->purify($row_newrel['release_version'], CODENDI_PURIFIER_CONVERT_HTML) . ') ' . '<A href="/projects/' . $row_newrel['unix_group_name'] . '/">' . $hp->purify(util_unconvert_htmlspecialchars($row_newrel['group_name']), CODENDI_PURIFIER_CONVERT_HTML) . "</A><BR>\n"; $count++; $DONE[$row_newrel['group_id']] = true; } } } $return .= '<center><A href="/new/?func=releases">[ ' . $Language->getText('include_features_boxes', 'more') . ' ]</A></center>'; return $return; }
/** * Get one or more releases from the database * * $extraFlags allow to define if you want to include deleted releases into * the search (thanks to FRSReleaseDao::INCLUDE_DELETED constant) * * @param $release_id * @param $group_id * @param $package_id * @param $extraFlags * * @return FRSRelease */ function getFRSReleaseFromDb($release_id, $group_id = null, $package_id = null, $extraFlags = 0) { $_id = (int) $release_id; $dao =& $this->_getFRSReleaseDao(); if ($group_id && $package_id) { $_group_id = (int) $group_id; $_package_id = (int) $package_id; $dar = $dao->searchByGroupPackageReleaseID($_id, $_group_id, $package_id, $extraFlags); } else { if ($group_id) { $_group_id = (int) $group_id; $dar = $dao->searchInGroupById($_id, $_group_id, $extraFlags); } else { $dar = $dao->searchById($_id, $extraFlags); } } if ($dar->isError()) { return; } if (!$dar->valid()) { return; } $data_array =& $dar->current(); return FRSReleaseFactory::getFRSReleaseFromArray($data_array); }
private function importRelease(Project $project, FRSPackage $package, SimpleXMLElement $xml_rel, $extraction_path) { $user = $this->user_finder->getUser($xml_rel->user); $attrs = $xml_rel->attributes(); $release = new FRSRelease(); $release->setProject($project); $release->setReleaseDate(strtotime($attrs['time'])); $release->setName((string) $attrs['name']); $release->setStatusID(FRSRelease::STATUS_ACTIVE); $release->setPackageID($package->getPackageID()); $release->setNotes((string) $xml_rel->notes); $release->setChanges((string) $xml_rel->changes); $release->setPreformatted($attrs['preformatted'] == '1' || $attrs['preformatted'] == 'true'); $release->setReleasedBy($user->getId()); $release->setReleaseID($this->release_factory->create($release->toArray())); $read_perms = array(); foreach ($xml_rel->{'read-access'} as $perm) { $ugroup_name = (string) $perm->ugroup; $ugroup = $this->getUGroupManager()->getUGroupByName($project, $ugroup_name); $read_perms[] = $ugroup->getId(); } $this->getPermissionsManager()->savePermissions($project, $release->getReleaseID(), FRSRelease::PERM_READ, $read_perms); foreach ($xml_rel->xpath('file') as $xml_file) { $this->importFile($project, $release, $user, $xml_file, $extraction_path); } }
function isValidForUpdate($release, $group_id) { $frspf = new FRSPackageFactory(); $frsrf = new FRSReleaseFactory(); $frsff = new FRSFileFactory(); if (isset($release['package_id']) && $release['package_id'] != 'null') { if (!isset($release['name']) || !$release['name'] || $release['name'] == '') { $this->addError($GLOBALS['Language']->getText('file_admin_editreleases', 'rel_name_empty')); } else { //see if this package belongs to this project $res1 =& $frsrf->getFRSReleaseFromDb($release['release_id'], $group_id); if (!$res1 || count($res1) < 1) { $this->addError($GLOBALS['Language']->getText('file_admin_editreleases', 'p_rel_not_yours')); } else { if ($release['package_id'] != $res1->getPackageID()) { //changing to a different package for this release $res2 = $frspf->getFRSPackageFromDb($release['package_id'], $group_id); if (!$res2 || count($res2) < 1) { //new package_id isn't theirs $this->addError($GLOBALS['Language']->getText('file_admin_editreleases', 'p_not_yours')); } } //check if release name exists already if ($res1->getPackageID() != $release['package_id'] || $res1->getPackageID() == $release['package_id'] && $res1->getName() != $release['name']) { $release_exists = $frsrf->getReleaseIdByName($release['name'], $release['package_id']); } if (!isset($release_exists) || count($release_exists) < 1) { //now check the date if (!ereg("[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}", $release['date'])) { $this->addError($GLOBALS['Language']->getText('file_admin_editreleases', 'data_not_parsed')); } } else { $this->addError($GLOBALS['Language']->getText('file_admin_editreleases', 'rel_name_exists')); } } } } else { $this->addError($GLOBALS['Language']->getText('file_admin_editreleases', 'create_p_before_rel_status')); } return count($this->_errors) ? false : true; }
public function setUp() { $package_factory = new FRSPackageFactoryMock(); $release_factory = new FRSReleaseFactory(); $file_factory = new FRSXMLImporterTest_FRSFileFactory(); $this->package_dao = mock('FRSPackageDao'); $package_factory->dao = $this->package_dao; FRSPackageFactory::setInstance($package_factory); $this->permissions_manager = mock('PermissionsManager'); PermissionsManager::setInstance($this->permissions_manager); $this->release_dao = mock('FRSReleaseDao'); $release_factory->dao = $this->release_dao; $release_factory->package_factory = $package_factory; $release_factory->file_factory = $file_factory; FRSReleaseFactory::setInstance($release_factory); $this->file_dao = mock('FRSFileDao'); $file_factory->dao = $this->file_dao; $file_factory->release_factory = $release_factory; $this->processor_dao = mock('FRSProcessorDao'); $this->filetype_dao = mock('FRSFileTypeDao'); $this->user_finder = mock('User\\XML\\Import\\IFindUserFromXMLReference'); $this->user_manager = mock('UserManager'); UserManager::setInstance($this->user_manager); $this->ugroup_dao = mock("UGroupDao"); stub($this->ugroup_dao)->searchByGroupIdAndName()->returns(new DataAccessResultEmpty()); $this->frs_importer = new FRSXMLImporter(mock('Logger'), new XML_RNGValidator(), $package_factory, $release_factory, $file_factory, $this->user_finder, new UGroupManager($this->ugroup_dao), $this->processor_dao, $this->filetype_dao); EventManager::setInstance(mock('EventManager')); $GLOBALS['Language'] = mock('BaseLanguage'); if (isset($GLOBALS['ftp_incoming_dir'])) { $this->old_ftp_incoming_dir = $GLOBALS['ftp_incoming_dir']; } if (isset($GLOBALS['old_ftp_frs_dir_prefix'])) { $this->old_ftp_frs_dir_prefix = $GLOBALS['ftp_frs_dir_prefix']; } $GLOBALS['ftp_incoming_dir'] = parent::getTmpDir(); $GLOBALS['ftp_frs_dir_prefix'] = parent::getTmpDir(); }
function frs_show_release_popup2($group_id, $name = 'release_id', $checked_val = "xzxz") { /* return a pop-up select box of releases for the project */ $frsrf = new FRSReleaseFactory(); if (!$group_id) { return $GLOBALS['Language']->getText('file_file_utils', 'g_id_err'); } else { $hp =& Codendi_HTMLPurifier::instance(); $res = $frsrf->getFRSReleasesInfoListFromDb($group_id); $p = array(); foreach ($res as $release) { $p[$release['package_name']][$release['release_id']] = $release['release_name']; } $select = '<select name="' . $name . '">'; foreach ($p as $package_name => $releases) { $select .= '<optgroup label="' . $package_name . '">'; foreach ($releases as $id => $name) { $select .= '<option value="' . $id . '" ' . ($id == $checked_val ? 'selected="selected"' : '') . '>' . $hp->purify($name) . '</option>'; } $select .= '</optgroup>'; } $select .= '</select>'; return $select; } }
define("FRS_COLLAPSED_ICON", util_get_image_theme("ic/toggle_plus.png")); $authorized_user = false; $hp = Codendi_HTMLPurifier::instance(); $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()) {
/** * Function userCanRead : determine if the user can view this release or not * * @param int $user_id if not given or 0 take the current user * @return boolean true if user has Read access to this release, false otherwise */ function userCanRead($user_id = 0) { $release_factory = new FRSReleaseFactory(); return $release_factory->userCanRead($this->getGroupID(), $this->getPackageID(), $this->getReleaseID(), $user_id); }
$query = new_utils_get_new_releases_long(0, 0, $limit * 3); $res = db_query($query); // ## one time output print " <channel>\n"; print " <copyright>" . $Language->getText('export_rss_sfnewreleases', 'copyright', array($GLOBALS['sys_long_org_name'], $GLOBALS['sys_name'], date('Y', time()))) . "</copyright>\n"; print " <pubDate>" . gmdate('D, d M Y g:i:s', time()) . " GMT</pubDate>\n"; print " <description>" . $Language->getText('export_rss_sfnewreleases', 'new_releases', $GLOBALS['sys_name']) . "</description>\n"; print " <link>" . get_server_url() . "</link>\n"; print " <title>" . $Language->getText('export_rss_sfnewreleases', 'new_releases', $GLOBALS['sys_name']) . "</title>\n"; list($host, $port) = explode(':', $GLOBALS['sys_default_domain']); print " <webMaster>webmaster@" . $host . "</webMaster>\n"; print " <language>en-us</language>\n"; // ## item outputs $outputtotal = 0; $frspf = new FRSPackageFactory(); $frsrf = new FRSReleaseFactory(); while ($row = db_fetch_array($res)) { if (!$G_RELEASE["{$row['group_id']}"]) { if ($frspf->userCanRead($row['group_id'], $row['package_id'], 100) && $frsrf->userCanRead($row['group_id'], $row['package_id'], $row_newrel['release_id'], 100)) { print " <item>\n"; print " <title>" . htmlspecialchars($row['group_name'] . " " . $row['release_version']) . "</title>\n"; print " <link>" . get_server_url() . "/file/showfiles.php?group_id={$row['group_id']}</link>\n"; print " <description>" . rss_description($row['short_description']) . "</description>\n"; print " </item>\n"; $outputtotal++; // ## eliminate dupes, only do $limit of these $G_RELEASE[$row['group_id']] = 1; if ($outputtotal >= $limit) { break; } }
If you pass the group_id plus the package_id, you will get the list of releases with just the releases of that package shown */ $vGroupId = new Valid_GroupId(); $vGroupId->required(); if ($request->valid($vGroupId)) { $group_id = $request->get('group_id'); } else { exit_no_group(); } $frspf = new FRSPackageFactory(); $user = UserManager::instance()->getCurrentUser(); if (!$frspf->userCanAdmin($user, $group_id)) { exit_permission_denied(); } $frsrf = new FRSReleaseFactory(); $frsff = new FRSFileFactory(); $existing_packages = array(); $res = $frspf->getFRSPackagesFromDb($group_id); foreach ($res as $p => $nop) { $existing_packages[] = array('id' => $res[$p]->getPackageId(), 'name' => $res[$p]->getName(), 'rank' => $res[$p]->getRank()); } $vFunc = new Valid_WhiteList('func', array('delete', 'add', 'create', 'edit', 'update')); $vFunc->required(); if ($request->valid($vFunc)) { switch ($request->get('func')) { case 'delete': //Not yet $vPackageId = new Valid_UInt('id'); if ($request->valid($vPackageId)) { $package_id = $request->get('id');
/** * Returns the HTML content for tooltip when hover a reference with the nature file * @returns string HTML content for file tooltip */ function getReferenceTooltip() { $tooltip = ''; $rf = new FRSReleaseFactory(); $pf = new FRSPackageFactory(); $release_id = $this->getReleaseID(); $release = $rf->getFRSReleaseFromDb($release_id); $package_id = $release->getPackageID(); $package = $pf->getFRSPackageFromDb($package_id); $tooltip .= '<table>'; $tooltip .= ' <tr>'; $tooltip .= ' <td><strong>' . $GLOBALS['Language']->getText('file_admin_editreleases', 'filename') . ':</strong></td>'; $tooltip .= ' <td>' . basename($this->getFileName()) . '</td>'; $tooltip .= ' </tr>'; $tooltip .= ' <tr>'; $tooltip .= ' <td><strong>' . $GLOBALS['Language']->getText('file_ref_tooltip', 'package_release') . ':</strong></td>'; $tooltip .= ' <td>' . $package->getName() . ' / ' . $release->getName() . '</td>'; $tooltip .= ' </tr>'; $tooltip .= ' <tr>'; $tooltip .= ' <td><strong>' . $GLOBALS['Language']->getText('file_showfiles', 'date') . ':</strong></td>'; $tooltip .= ' <td>' . format_date($GLOBALS['Language']->getText('system', 'datefmt_short'), $release->getReleaseDate()) . '</td>'; $tooltip .= ' </tr>'; $tooltip .= ' <tr>'; $tooltip .= ' <td><strong>' . $GLOBALS['Language']->getText('file_showfiles', 'size') . ':</strong></td>'; $tooltip .= ' <td>' . $this->getDisplayFileSize() . '</td>'; $tooltip .= ' </tr>'; $tooltip .= '</table>'; return $tooltip; }
define("FRS_EXPANDED_ICON", util_get_image_theme("ic/toggle_minus.png")); 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()) {
$vGroupId = new Valid_GroupId(); $vGroupId->required(); if ($request->valid($vGroupId)) { $group_id = $request->get('group_id'); } else { exit_no_group(); } $frspf = new FRSPackageFactory(); $user = UserManager::instance()->getCurrentUser(); if (!$frspf->userCanAdmin($user, $group_id)) { exit_permission_denied(); } $GLOBALS['HTML']->includeJavascriptFile("/scripts/scriptaculous/scriptaculous.js"); $GLOBALS['HTML']->includeCalendarScripts(); $GLOBALS['HTML']->includeJavascriptFile("../scripts/frs.js"); $frsrf = new FRSReleaseFactory(); $frsff = new FRSFileFactory(); $vFunc = new Valid_WhiteList('func', array('delete', 'add', 'create', 'edit', 'update')); if (!$request->valid($vFunc)) { $GLOBALS['Response']->redirect('../showfiles.php?group_id=' . $group_id); } if ($request->valid(new Valid_UInt('package_id'))) { $package_id = $request->get('package_id'); if ($package =& $frspf->getFRSPackageFromDb($package_id, $group_id)) { switch ($request->get('func')) { case 'delete': if ($request->valid(new Valid_UInt('id'))) { $release_id = $request->get('id'); /* Delete a release with all the files included Delete the corresponding row from the database
/** * getReleases - gets Release objects for all the releases in this package. * * return array Array of FRSRelease Objects. */ function &getReleases() { if (!is_array($this->package_releases) || count($this->package_releases) < 1) { $this->package_releases = array(); $frsrf = new FRSReleaseFactory(); $this->package_releases = $frsrf->getFRSReleasesFromDb($this->getPackageID()); } return $this->package_releases; }
/** * 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'); } }
/** * Return the list of Packages for given project * * @param Integer $group_id * @param String $status_id * * @return Array */ function getFRSPackagesFromDb($group_id, $status_id = null) { $_id = (int) $group_id; $dao = $this->_getFRSPackageDao(); if ($status_id) { $_status_id = (int) $status_id; $dar = $dao->searchActivePackagesByGroupId($_id, $this->STATUS_ACTIVE); } else { $dar = $dao->searchByGroupId($_id); } if ($dar && !$dar->isError()) { $packages = array(); $um = UserManager::instance(); $user = $um->getCurrentUser(); foreach ($dar as $data_array) { if ($status_id) { if ($this->userCanRead($group_id, $data_array['package_id'], $user->getID())) { $packages[] = $this->getFRSPackageFromArray($data_array); } else { $frsrf = new FRSReleaseFactory(); $authorised_releases = $frsrf->getFRSReleasesFromDb($data_array['package_id'], 1, $group_id); if ($authorised_releases && count($authorised_releases) > 0) { $packages[] = $this->getFRSPackageFromArray($data_array); } } } else { $packages[] = $this->getFRSPackageFromArray($data_array); } } return $packages; } return; }
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; }