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 * http://fusionforge.org/
10 * This file is part of FusionForge. FusionForge is free software;
11 * you can redistribute it and/or modify it under the terms of the
12 * GNU General Public License as published by the Free Software
13 * Foundation; either version 2 of the Licence, or (at your option)
16 * FusionForge is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License along
22 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 require_once('../env.inc.php');
28 require_once $gfcommon.'include/pre.php';
29 require_once $gfwww.'frs/include/frs_utils.php';
30 require_once $gfcommon.'frs/FRSPackage.class.php';
32 $group_id = getIntFromRequest('group_id');
33 $release_id = getIntFromRequest('release_id');
34 $cur_group = group_get_object($group_id);
41 // Members of projects can see all packages
42 // Non-members can only see public packages
44 if (session_loggedin()) {
45 if (user_ismember($group_id) || forge_check_global_perm('forge_admin')) {
48 $pub_sql=' AND is_public=1 ';
51 $pub_sql=' AND is_public=1 ';
60 $res_package = db_query_params( $sql, array($group_id));
61 $num_packages = db_numrows( $res_package );
63 frs_header(array('title'=>_('Project Filelist'),'group'=>$group_id));
65 plugin_hook("blocks", "files index");
68 if ( $num_packages < 1) {
69 echo "<h1>"._('No File Packages')."</h1>";
70 echo "<div class='warning'>"._('There are no file packages defined for this project.')."</div>";
72 echo '<div id="forge-frs" class="underline-link">'."\n";
74 echo '<div class="blue-box">'._('Below is a list of all files of the project.').' ';
76 echo _('The release you have chosen is <span class="selected">highlighted</span>.').' ';
78 echo _('Before downloading, you may want to read Release Notes and ChangeLog (accessible by clicking on release version).').'
79 </div><!-- class="blue-box" -->
82 // check the permissions and see if this user is a release manager.
83 // If so, offer the opportunity to create a release
85 if (forge_check_perm ('frs', $group_id, 'write')) {
86 echo '<p><a href="admin/qrs.php?group_id='.$group_id.'">';
87 echo _('To create a new release click here.');
91 // get unix group name for path
92 $group_unix_name=group_getunixname($group_id);
94 $proj_stats['packages'] = $num_packages;
95 $proj_stats['releases'] = 0;
96 $proj_stats['size'] = 0;
98 // Iterate and show the packages
99 for ( $p = 0; $p < $num_packages; $p++ ) {
101 $frsPackage = new FRSPackage($cur_group, db_result($res_package, $p, 'package_id'));
103 $package_name = db_result($res_package, $p, 'name');
105 if($frsPackage->isMonitoring()) {
106 $title = db_result($res_package, $p, 'name') . " - " . _('Stop monitoring this package');
107 $url = '/frs/monitor.php?filemodule_id='. db_result($res_package, $p, 'package_id') .'&group_id='.db_result($res_package,$p,'group_id').'&stop=1';
108 $package_monitor = util_make_link ( $url, $GLOBALS['HTML']->getMonitorPic($title));
110 $title = db_result($res_package, $p, 'name') . " - " . _('Monitor this package');
111 $url = '/frs/monitor.php?filemodule_id='. db_result($res_package, $p, 'package_id') .'&group_id='.db_result($res_package,$p,'group_id').'&start=1';
112 $package_monitor = util_make_link ( $url, $GLOBALS['HTML']->getMonitorPic($title));
115 $package_name_protected = $HTML->toSlug($package_name);
116 echo "\n".'<h2 id="title_'. $package_name_protected .'">' . $package_name . ' <span class="frs-monitor-package">' . $package_monitor . '</span></h2>'."\n";
118 // get the releases of the package
119 $res_release = db_query_params ('SELECT * FROM frs_release
121 AND status_id=1 ORDER BY release_date DESC, name ASC',
122 array (db_result($res_package,$p,'package_id')));
123 $num_releases = db_numrows( $res_release );
125 $proj_stats['releases'] += $num_releases;
127 if ( !$res_release || $num_releases < 1 ) {
128 echo '<div class="warning">' . _('No releases') . '</div>
131 // display link to latest-release-as-zip
132 print '<p><em>'._('Download latest release as zip:').' ';
133 print util_make_link ('/frs/download.php/latestzip/'.$frsPackage->getID().'/'.$frsPackage->getNewestReleaseZipName(),
134 $frsPackage->getNewestReleaseZipName(),
135 array('title' => _('This link always points to the newest release as a zip file.')));
138 // iterate and show the releases of the package
139 for ( $r = 0; $r < $num_releases; $r++ ) {
140 $package_release = db_fetch_array( $res_release );
142 // Switch whether release_id exists and/or release_id is current one
143 if ( ! $release_id || $release_id==$package_release['release_id'] ) {
144 // no release_id OR release_id is current one
145 $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']).')');
146 echo $GLOBALS['HTML']->boxTop($release_title, $package_name . '_' . $package_release['name'])."\n";
147 } elseif ( $release_id!=$package_release['release_id'] ) {
148 // release_id but not current one
149 $t_url_anchor = $HTML->toSlug($package_name)."-".$HTML->toSlug($package_release['name'])."-title-content";
150 $t_url = 'frs/?group_id='.$group_id.'&release_id=' . $package_release['release_id'] . "#" . $t_url_anchor;
151 $release_title = util_make_link ( $t_url, $package_name.' '.$package_release['name']);
152 echo '<div class="frs_release_name_version">'.$release_title."</div>"."\n";
155 // get the files in this release....
156 $res_file = db_query_params("SELECT frs_file.filename AS filename,
157 frs_file.file_size AS file_size,
158 frs_file.file_id AS file_id,
159 frs_file.release_time AS release_time,
160 frs_filetype.name AS type,
161 frs_processor.name AS processor,
162 frs_dlstats_filetotal_agg.downloads AS downloads
163 FROM frs_filetype,frs_processor,
164 frs_file LEFT JOIN frs_dlstats_filetotal_agg ON frs_dlstats_filetotal_agg.file_id=frs_file.file_id
166 AND frs_filetype.type_id=frs_file.type_id
167 AND frs_processor.processor_id=frs_file.processor_id
168 ORDER BY filename", array($package_release['release_id']));
169 $num_files = db_numrows( $res_file );
171 @$proj_stats['files'] += $num_files;
173 $cell_data = array();
174 $cell_data[] = _('Filename');
175 $cell_data[] = _('Date');
176 $cell_data[] = _('Size');
177 $cell_data[] = _('D/L');
178 $cell_data[] = _('Arch');
179 $cell_data[] = _('Type');
180 $cell_data[] = _('Latest');
182 // Switch whether release_id exists and/or release_id == package_release['release_id']
183 if ( ! $release_id ) {
185 echo $GLOBALS['HTML']->listTableTop($cell_data,'',false);
186 } elseif ( $release_id==$package_release['release_id'] ) {
187 // release_id is current one
188 echo $GLOBALS['HTML']->listTableTop($cell_data,'',true);
190 // release_id but not current one => dont print anything here
193 if ( ! $release_id || $release_id==$package_release['release_id'] ) {
194 // no release_id OR no release_id OR release_id is current one
195 if ( !$res_file || $num_files < 1 ) {
196 echo '<tr><td colspan="7"> <em>'._('No releases').'</em></td></tr>
199 // now iterate and show the files in this release....
200 for ( $f = 0; $f < $num_files; $f++ ) {
201 $file_release = db_fetch_array( $res_file );
203 $tmp_col1 = util_make_link ('/frs/download.php/file/'.$file_release['file_id'].'/'.$file_release['filename'], $file_release['filename']);
204 $tmp_col2 = date(_('Y-m-d H:i'), $file_release['release_time'] );
205 $tmp_col3 = human_readable_bytes($file_release['file_size']);
206 $tmp_col4 = ($file_release['downloads'] ? number_format($file_release['downloads'], 0) : '0');
207 $tmp_col5 = $file_release['processor'];
208 $tmp_col6 = $file_release['type'];
209 $tmp_col7 = util_make_link ('/frs/download.php/latestfile/'.$frsPackage->getID().'/'.$file_release['filename'], _('Latest version'));
211 $proj_stats['size'] += $file_release['file_size'];
212 @$proj_stats['downloads'] += $file_release['downloads'];
215 echo ' <td>' . $tmp_col1 . '</td>'."\n";
216 echo ' <td>' . $tmp_col2 . '</td>'."\n";
217 echo ' <td>' . $tmp_col3 . '</td>'."\n";
218 echo ' <td>' . $tmp_col4 . '</td>'."\n";
219 echo ' <td>' . $tmp_col5 . '</td>'."\n";
220 echo ' <td>' . $tmp_col6 . '</td>'."\n";
221 echo ' <td>' . $tmp_col7 . '</td>'."\n";
225 echo $GLOBALS['HTML']->listTableBottom();
227 // release_id but not current one
228 // nothing to print here
231 if ( ! $release_id || $release_id==$package_release['release_id'] ) {
232 echo $GLOBALS['HTML']->boxBottom();
235 } //if: release(s) available
237 echo '</div><!-- id="forge-frs" -->';