3 * FusionForge FRS: List packages view
5 * Copyright 1999-2001 (c) VA Linux Systems
6 * Copyright 2002-2004 (c) GForge Team
7 * Copyright 2010 (c) FusionForge Team
8 * Copyright 2013-2014,2016-2017,2020, Franck Villaume - TrivialDev
9 * http://fusionforge.org
11 * This file is part of FusionForge. FusionForge is free software;
12 * you can redistribute it and/or modify it under the terms of the
13 * GNU General Public License as published by the Free Software
14 * Foundation; either version 2 of the Licence, or (at your option)
17 * FusionForge is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License along
23 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 /* please do not add require here : use www/frs/index.php to add require */
28 /* global variables used */
29 global $HTML; // html object
30 global $group_id; // id of group
31 global $g; // group object
32 global $fpFactory; // frs package factory package
34 $FRSPackages = $fpFactory->getFRSs(true);
35 if (count($FRSPackages) < 1) {
36 $localInformation = _('There are no file packages defined for this project.');
40 if ($g->usesPlugin('projects-hierarchy')) {
41 $projectsHierarchy = plugin_get_object('projects-hierarchy');
42 $projectIDsArray = $projectsHierarchy->getFamily($group_id, 'child', true, 'validated');
43 foreach ($projectIDsArray as $projectid) {
44 $childGroupObject = group_get_object($projectid);
45 if ($childGroupObject && is_object($childGroupObject) && !$childGroupObject->isError()) {
46 if ($childGroupObject->usesFRS() && $projectsHierarchy->getFRSStatus($childGroupObject->getID())) {
47 $childfpf = new FRSPackageFactory($childGroupObject);
48 $child_frsp = $childfpf->getFRSs(true);
49 if (count($child_frsp) > 0) {
50 $FRSPackages = array_merge($FRSPackages, $child_frsp);
55 unset($childGroupObject);
59 if (count($FRSPackages) < 1) {
60 echo $HTML->information(_('There are no file packages defined for this project.'));
62 $javascript = <<<'EOS'
64 jQuery(document).ready(function() {
65 controllerFRS = new FRSController();
68 echo html_e('script', array( 'type'=>'text/javascript'), '//<![CDATA['."\n".'jQuery(function(){'.$javascript.'});'."\n".'//]]>');
70 echo html_ao('div', array('id' => 'forge-frs', 'class' => 'underline-link'));
72 $content = _('Below is a list of all files of the project.').' ';
74 $content = _('The release you have chosen is <span class="selected">highlighted</span>.').' ';
76 $content .= _('Before downloading, you may want to read Release Notes and ChangeLog (accessible by clicking on release version).');
77 echo html_e('div', array('class' => 'blue-box'), $content);
79 // check the permissions and see if this user is a release manager.
80 // If so, offer the opportunity to create a release
81 if (forge_check_perm('frs_admin', $group_id, 'admin')) {
82 echo html_e('p', array(), util_make_link('/frs/?view=qrs&group_id='.$group_id, _('To create a new release click here.')));
85 // Iterate and show the packages
86 $current_groupid = $group_id;
87 foreach ($FRSPackages as $FRSPackage) {
89 if ($FRSPackage->Group->getID() != $current_groupid) {
90 echo html_e('h2', array(), sprintf(_('Child Project %s Packages'), util_make_link('/frs/?group_id='.$FRSPackage->Group->getID(), $FRSPackage->Group->getPublicName())));
91 $current_groupid = $FRSPackage->Group->getID();
93 $package_id = $FRSPackage->getID();
94 $package_name = $FRSPackage->getName();
95 $url = '/frs/?group_id='.$FRSPackage->Group->getID().'&package_id='.$package_id.'&action=monitor';
96 if (session_loggedin()) {
97 if($FRSPackage->isMonitoring()) {
98 $title = html_entity_decode($package_name).' - '._('Stop monitoring this package');
100 $image = $HTML->getStopMonitoringPic($title);
102 $title = html_entity_decode($package_name).' - '._('Start monitoring this package');
104 $image = $HTML->getStartMonitoringPic($title);
106 $errorMessage = _('Unable to set monitoring');
107 $package_monitor = html_e('span', array('class' => 'frs-monitor-package'), util_make_link('#', $image, array('id' => 'pkgid'.$package_id, 'onclick' => 'javascript:controllerFRS.doAction({action:\''.util_make_uri($url).'\', id:\'pkgid'.$package_id.'\'})'), true));
109 $package_monitor = '';
112 // get the releases of the package
113 $FRSPackageReleases = $FRSPackage->getReleases(false);
114 $num_releases = count($FRSPackageReleases);
116 $package_name_protected = $HTML->toSlug($package_name);
117 $package_ziplink = '';
118 if ($FRSPackageReleases && $num_releases >= 1 && class_exists('ZipArchive') && file_exists($FRSPackage->getReleaseZipPath($FRSPackage->getNewestReleaseID()))) {
119 // display link to latest-release-as-zip
120 $package_ziplink = html_e('span', array('class' => 'frs-zip-package'), util_make_link('/frs/download.php/latestzip/'.$FRSPackage->getID().'/'.$FRSPackage->getNewestReleaseZipName(),
121 $HTML->getZipPic(_('Download the newest release as ZIP.')
122 .' '._('This link always points to the newest release as a ZIP file.'))));
124 echo html_e('h2', array('id' => 'title_'. $package_name_protected), html_entity_decode($package_name).$package_monitor.$package_ziplink);
126 if ( !$FRSPackageReleases || $num_releases < 1 ) {
127 echo $HTML->warning_msg(_('No releases'));
129 // iterate and show the releases of the package
130 foreach ($FRSPackageReleases as $FRSPackageRelease) {
131 $package_release_id = $FRSPackageRelease->getID();
133 if (class_exists('ZipArchive')) {
134 if (file_exists($FRSPackage->getReleaseZipPath($package_release_id))) {
135 $ziplink .= html_e('span', array('class' => 'frs-zip-release'), util_make_link('/frs/download.php/zip/'.$FRSPackageRelease->getID().'/'.urlencode($FRSPackage->getReleaseZipName($FRSPackageRelease->getID())),
136 $HTML->getZipPic(_('Download this release as ZIP.').' '._('This link always points to this release as a ZIP file.'))), false);
139 // Switch whether release_id exists and/or release_id is current one
140 if ( ! $release_id || $release_id == $package_release_id ) {
141 // no release_id OR release_id is current one
142 $release_title = util_make_link('/frs/?view=shownotes&group_id='.$group_id.'&release_id='.$package_release_id, $package_name.' '.$FRSPackageRelease->getName().' ('.date(_('Y-m-d H:i'), $FRSPackageRelease->getReleaseDate()).')');
143 echo $HTML->boxTop($release_title.$ziplink, $package_name.' '.$FRSPackageRelease->getName());
144 } elseif ( $release_id != $package_release_id ) {
145 // release_id but not current one
146 $t_url_anchor = $HTML->toSlug($package_name).'-'.$HTML->toSlug($FRSPackageRelease->getName()).'-title-content';
147 $t_url = '/frs/?group_id='.$group_id.'&release_id='.$package_release_id.'#'.$t_url_anchor;
148 $release_title = util_make_link($t_url, $package_name.' '.$FRSPackageRelease->getName());
149 echo html_e('div', array('class' => 'frs_release_name_version'), $release_title.$ziplink);
152 // display linked roadmaps if any
153 if ($g->usesTracker()) {
154 $linkedRoadmaps = $FRSPackageRelease->getLinkedRoadmaps();
155 if (count($linkedRoadmaps)) {
157 foreach ($linkedRoadmaps as $linkedRoadmapID => $linkedRoadmap) {
158 $roadmapObject = new Roadmap($g, $linkedRoadmapID);
160 foreach ($linkedRoadmap as $linkedRoadmapRelease) {
164 $urls .= util_make_link('/tracker/roadmap.php?group_id='.$group_id.'&release='.urlencode($linkedRoadmapRelease), $roadmapObject->getName().' - '.$linkedRoadmapRelease);
168 echo html_e('span', array(), html_e('b', array(), _('Linked Roadmaps')._(': ')).$urls, false);
172 // get the files in this release....
173 $res_files = $FRSPackageRelease->getFiles();
175 // Switch whether release_id exists and/or release_id == package_release['release_id']
176 if (!$release_id || $release_id == $package_release_id) {
177 // no release_id OR no release_id OR release_id is current one
178 if ( !$res_files || count($res_files) < 1 ) {
179 echo $HTML->information(_('No files'));
181 $cell_data = array();
182 $cell_data[] = _('File Name');
183 $cell_data[] = _('Date');
184 $cell_data[] = _('Size');
185 $cell_data[] = _('D/L');
186 $cell_data[] = _('Arch');
187 $cell_data[] = _('Type');
188 $cell_data[] = _('Latest');
189 echo $HTML->listTableTop($cell_data);
190 // now iterate and show the files in this release....
191 foreach ($res_files as $res_file) {
193 $cells[][] = util_make_link('/frs/download.php/file/'.$res_file->getID().'/'.urlencode($res_file->getName()), $res_file->getName());
194 $cells[][] = date(_('Y-m-d H:i'), $res_file->getReleaseTime());
195 $cells[][] = human_readable_bytes($res_file->getSize());
196 $cells[][] = ($res_file->getDownloads() ? number_format($res_file->getDownloads(), 0) : '0');
197 $cells[][] = $res_file->getProcessor();
198 $cells[][] = $res_file->getFileType();
199 $cells[][] = util_make_link('/frs/download.php/latestfile/'.$FRSPackage->getID().'/'.urlencode($res_file->getName()), _('Latest version'));
200 echo $HTML->multiTableRow(array(), $cells);
202 echo $HTML->listTableBottom();
204 echo $HTML->boxBottom();
207 } //if: release(s) available
209 echo html_ac(html_ap() -1);