3 * Project File Information/Download Page
5 * Copyright 1999-2001 (c) VA Linux Systems
6 * Copyright 2002-2004 (c) GForge Team
7 * Copyright 2010 (c) FusionForge Team
8 * Copyright 2013, 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.
28 require_once '../env.inc.php';
29 require_once $gfcommon.'include/pre.php';
30 require_once $gfcommon.'frs/include/frs_utils.php';
31 require_once $gfcommon.'frs/FRSPackage.class.php';
33 $group_id = getIntFromRequest('group_id');
34 $release_id = getIntFromRequest('release_id');
35 $cur_group = group_get_object($group_id);
42 // Members of projects can see all packages
43 // Non-members can only see public packages
45 if (session_loggedin()) {
46 if (user_ismember($group_id) || forge_check_global_perm('forge_admin')) {
49 $pub_sql=' AND is_public=1 ';
52 $pub_sql=' AND is_public=1 ';
61 $res_package = db_query_params( $sql, array($group_id));
62 $num_packages = db_numrows( $res_package );
64 frs_header(array('title'=>_('Project Filelist'),'group'=>$group_id));
66 plugin_hook("blocks", "files index");
69 if ( $num_packages < 1) {
70 echo "<h1>"._('No File Packages')."</h1>";
71 echo "<div class='warning'>"._('There are no file packages defined for this project.')."</div>";
73 echo '<div id="forge-frs" class="underline-link">'."\n";
75 echo '<div class="blue-box">'._('Below is a list of all files of the project.').' ';
77 echo _('The release you have chosen is <span class="selected">highlighted</span>.').' ';
79 echo _('Before downloading, you may want to read Release Notes and ChangeLog (accessible by clicking on release version).').'
80 </div><!-- class="blue-box" -->
83 // check the permissions and see if this user is a release manager.
84 // If so, offer the opportunity to create a release
86 if (forge_check_perm ('frs', $group_id, 'write')) {
87 echo '<p><a href="admin/qrs.php?group_id='.$group_id.'">';
88 echo _('To create a new release click here.');
92 // get unix group name for path
93 $group_unix_name=group_getunixname($group_id);
95 $proj_stats['packages'] = $num_packages;
96 $proj_stats['releases'] = 0;
97 $proj_stats['size'] = 0;
99 // Iterate and show the packages
100 for ( $p = 0; $p < $num_packages; $p++ ) {
102 $frsPackage = new FRSPackage($cur_group, db_result($res_package, $p, 'package_id'));
104 $package_name = db_result($res_package, $p, 'name');
106 if($frsPackage->isMonitoring()) {
107 $title = db_result($res_package, $p, 'name') . " - " . _('Stop monitoring this package');
108 $url = '/frs/monitor.php?filemodule_id='. db_result($res_package, $p, 'package_id') .'&group_id='.db_result($res_package,$p,'group_id').'&stop=1';
109 $package_monitor = util_make_link ( $url, $GLOBALS['HTML']->getMonitorPic($title));
111 $title = db_result($res_package, $p, 'name') . " - " . _('Monitor this package');
112 $url = '/frs/monitor.php?filemodule_id='. db_result($res_package, $p, 'package_id') .'&group_id='.db_result($res_package,$p,'group_id').'&start=1';
113 $package_monitor = util_make_link ( $url, $GLOBALS['HTML']->getMonitorPic($title));
116 $package_name_protected = $HTML->toSlug($package_name);
117 echo "\n".'<h2 id="title_'. $package_name_protected .'">' . $package_name . ' <span class="frs-monitor-package">' . $package_monitor . '</span></h2>'."\n";
119 // get the releases of the package
120 $res_release = db_query_params ('SELECT * FROM frs_release
122 AND status_id=1 ORDER BY release_date DESC, name ASC',
123 array (db_result($res_package,$p,'package_id')));
124 $num_releases = db_numrows( $res_release );
126 $proj_stats['releases'] += $num_releases;
128 if ( !$res_release || $num_releases < 1 ) {
129 echo '<div class="warning">' . _('No releases') . '</div>
132 if (class_exists('ZipArchive')) {
133 // display link to latest-release-as-zip
134 print '<p><em>'._('Download latest release as zip:').' ';
135 print util_make_link ('/frs/download.php/latestzip/'.$frsPackage->getID().'/'.$frsPackage->getNewestReleaseZipName(),
136 $frsPackage->getNewestReleaseZipName(),
137 array('title' => _('This link always points to the newest release as a zip file.')));
141 // iterate and show the releases of the package
142 for ( $r = 0; $r < $num_releases; $r++ ) {
143 $package_release = db_fetch_array( $res_release );
145 // Switch whether release_id exists and/or release_id is current one
146 if ( ! $release_id || $release_id==$package_release['release_id'] ) {
147 // no release_id OR release_id is current one
148 $release_title = util_make_link ( 'frs/shownotes.php?release_id=' . $package_release['release_id'], $package_name.' '.$package_release['name'].' ('.date(_('Y-m-d H:i'),$package_release['release_date']).')');
149 echo $GLOBALS['HTML']->boxTop($release_title, $package_name . '_' . $package_release['name'])."\n";
150 } elseif ( $release_id!=$package_release['release_id'] ) {
151 // release_id but not current one
152 $t_url_anchor = $HTML->toSlug($package_name)."-".$HTML->toSlug($package_release['name'])."-title-content";
153 $t_url = 'frs/?group_id='.$group_id.'&release_id=' . $package_release['release_id'] . "#" . $t_url_anchor;
154 $release_title = util_make_link ( $t_url, $package_name.' '.$package_release['name']);
155 echo '<div class="frs_release_name_version">'.$release_title."</div>"."\n";
158 // get the files in this release....
159 $res_file = db_query_params("SELECT frs_file.filename AS filename,
160 frs_file.file_size AS file_size,
161 frs_file.file_id AS file_id,
162 frs_file.release_time AS release_time,
163 frs_filetype.name AS type,
164 frs_processor.name AS processor,
165 frs_dlstats_filetotal_agg.downloads AS downloads
166 FROM frs_filetype,frs_processor,
167 frs_file LEFT JOIN frs_dlstats_filetotal_agg ON frs_dlstats_filetotal_agg.file_id=frs_file.file_id
169 AND frs_filetype.type_id=frs_file.type_id
170 AND frs_processor.processor_id=frs_file.processor_id
171 ORDER BY filename", array($package_release['release_id']));
172 $num_files = db_numrows( $res_file );
174 @$proj_stats['files'] += $num_files;
176 $cell_data = array();
177 $cell_data[] = _('Filename');
178 $cell_data[] = _('Date');
179 $cell_data[] = _('Size');
180 $cell_data[] = _('D/L');
181 $cell_data[] = _('Arch');
182 $cell_data[] = _('Type');
183 $cell_data[] = _('Latest');
185 // Switch whether release_id exists and/or release_id == package_release['release_id']
186 if ( ! $release_id ) {
188 echo $GLOBALS['HTML']->listTableTop($cell_data,'',false);
189 } elseif ( $release_id==$package_release['release_id'] ) {
190 // release_id is current one
191 echo $GLOBALS['HTML']->listTableTop($cell_data,'',true);
193 // release_id but not current one => dont print anything here
196 if ( ! $release_id || $release_id==$package_release['release_id'] ) {
197 // no release_id OR no release_id OR release_id is current one
198 if ( !$res_file || $num_files < 1 ) {
199 echo '<tr><td colspan="7"> <em>'._('No releases').'</em></td></tr>
202 // now iterate and show the files in this release....
203 for ( $f = 0; $f < $num_files; $f++ ) {
204 $file_release = db_fetch_array( $res_file );
206 $tmp_col1 = util_make_link ('/frs/download.php/file/'.$file_release['file_id'].'/'.$file_release['filename'], $file_release['filename']);
207 $tmp_col2 = date(_('Y-m-d H:i'), $file_release['release_time'] );
208 $tmp_col3 = human_readable_bytes($file_release['file_size']);
209 $tmp_col4 = ($file_release['downloads'] ? number_format($file_release['downloads'], 0) : '0');
210 $tmp_col5 = $file_release['processor'];
211 $tmp_col6 = $file_release['type'];
212 $tmp_col7 = util_make_link ('/frs/download.php/latestfile/'.$frsPackage->getID().'/'.$file_release['filename'], _('Latest version'));
214 $proj_stats['size'] += $file_release['file_size'];
215 @$proj_stats['downloads'] += $file_release['downloads'];
218 echo ' <td>' . $tmp_col1 . '</td>'."\n";
219 echo ' <td>' . $tmp_col2 . '</td>'."\n";
220 echo ' <td>' . $tmp_col3 . '</td>'."\n";
221 echo ' <td>' . $tmp_col4 . '</td>'."\n";
222 echo ' <td>' . $tmp_col5 . '</td>'."\n";
223 echo ' <td>' . $tmp_col6 . '</td>'."\n";
224 echo ' <td>' . $tmp_col7 . '</td>'."\n";
228 echo $GLOBALS['HTML']->listTableBottom();
230 // release_id but not current one
231 // nothing to print here
234 if ( ! $release_id || $release_id==$package_release['release_id'] ) {
235 echo $GLOBALS['HTML']->boxBottom();
238 } //if: release(s) available
240 echo '</div><!-- id="forge-frs" -->';