[Fusionforge-commits] FusionForge branch master updated. 00b2dac5e2226fdbf8d590069073fe4fd6d4fef7

Franck Villaume nerville at fusionforge.org
Mon Oct 6 16:45:03 CEST 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "FusionForge".

The branch, master has been updated
       via  00b2dac5e2226fdbf8d590069073fe4fd6d4fef7 (commit)
       via  b4cc1434456200272fc822cbe2694147e516436c (commit)
      from  920756b9cd4061f2afce6555740b077552a4da09 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 00b2dac5e2226fdbf8d590069073fe4fd6d4fef7
Author: Franck Villaume <franck.villaume at trivialdev.com>
Date:   Mon Oct 6 16:41:38 2014 +0200

    space

diff --git a/src/common/frs/actions/addfile.php b/src/common/frs/actions/addfile.php
index 1d6bd7e..209c953 100644
--- a/src/common/frs/actions/addfile.php
+++ b/src/common/frs/actions/addfile.php
@@ -58,7 +58,7 @@ if (!$frsp || !is_object($frsp)) {
 	exit_error($frsp->getErrorMessage(), 'frs');
 }
 
-$frsr = new FRSRelease($frsp,$release_id);
+$frsr = new FRSRelease($frsp, $release_id);
 if (!$frsr || !is_object($frsr)) {
 	exit_error(_('Could Not Get FRS Release'), 'frs');
 } elseif ($frsr->isError()) {
diff --git a/src/common/frs/include/frs_utils.php b/src/common/frs/include/frs_utils.php
index bd97981..a6f9710 100644
--- a/src/common/frs/include/frs_utils.php
+++ b/src/common/frs/include/frs_utils.php
@@ -189,7 +189,7 @@ function frs_add_file_from_form($release, $type_id, $processor_id, $release_date
 		} elseif ($frsf->isError()) {
 			return $frsf->getErrorMessage();
 		} else {
-			if (!$frsf->create($fname,$infile,$type_id,$processor_id,$release_date)) {
+			if (!$frsf->create($fname, $infile, $type_id, $processor_id, $release_date)) {
 				return $frsf->getErrorMessage();
 			}
 			return true;

commit b4cc1434456200272fc822cbe2694147e516436c
Author: Franck Villaume <franck.villaume at trivialdev.com>
Date:   Mon Oct 6 16:40:54 2014 +0200

    implement [#737]: FRS provide link to download any release as ZIP file

diff --git a/src/CHANGES b/src/CHANGES
index 91e0d3d..9df2b6a 100644
--- a/src/CHANGES
+++ b/src/CHANGES
@@ -5,6 +5,7 @@ Fusionforge-X.X:
 * [#697] FRS: Enable widget "My monitored packages" (TrivialDev)
 * [#705] FRS: Provide new role settings (TrivialDev)
 * [#713] FRS: Add delete packages, releases or files mass action (TrivialDev)
+* [#737] FRS: Provide link to download any release as ZIP file (TrivialDev)
 * [#656] General: drop tipsy plugin, use standard jQuery UI tooltip already provided (TrivialDev)
 * [#663] General: FusionForge Theme & jQuery UI theme sync (TrivialDev)
 * [#664] General: Update the jQuery & jQuery UI frameworks (TrivialDev)
diff --git a/src/common/frs/FRSFile.class.php b/src/common/frs/FRSFile.class.php
index 8fb19de..73f19a7 100644
--- a/src/common/frs/FRSFile.class.php
+++ b/src/common/frs/FRSFile.class.php
@@ -190,11 +190,11 @@ class FRSFile extends Error {
 		if (!$release_time) {
 			$release_time = time();
 		}
-		$file_size = filesize("$newfilelocation$name");
+		$file_size = filesize($newfilelocation.$name);
 
 		db_begin();
 		$result = db_query_params('INSERT INTO frs_file(release_id,filename,release_time,type_id,processor_id,file_size,post_date) VALUES ($1,$2,$3,$4,$5,$6,$7)',
-					   array ($this->FRSRelease->getId(),
+					   array ($this->FRSRelease->getID(),
 						  $name,
 						  $release_time,
 						  $type_id,
@@ -202,7 +202,7 @@ class FRSFile extends Error {
 						  $file_size,
 						  time()));
 		if (!$result) {
-			$this->setError(_('Error Adding Release: ').db_error());
+			$this->setError(_('Error Adding File')._(': ').db_error());
 			db_rollback();
 			return false;
 		}
@@ -210,10 +210,13 @@ class FRSFile extends Error {
 		if (!$this->fetchData($this->file_id)) {
 			db_rollback();
 			return false;
-		} else {
+		}
+		if ($this->FRSRelease->FRSPackage->createReleaseFilesAsZip($this->FRSRelease->getID())) {
 			db_commit();
-			$this->FRSRelease->FRSPackage->createNewestReleaseFilesAsZip();
 			return true;
+		} else {
+			$this->setError($this->FRSRelease->FRSPackage->getErrorMessage());
+			return false;
 		}
 	}
 
@@ -342,7 +345,7 @@ class FRSFile extends Error {
 	 * @return	boolean	success.
 	 */
 	function delete() {
-		if (!forge_check_perm ('frs', $this->FRSRelease->FRSPackage->getID(), 'file')) {
+		if (!forge_check_perm('frs', $this->FRSRelease->FRSPackage->getID(), 'file')) {
 			$this->setPermissionDeniedError();
 			return false;
 		}
@@ -363,7 +366,11 @@ class FRSFile extends Error {
 		} else {
 			db_query_params('DELETE FROM frs_dlstats_file WHERE file_id=$1', array($this->getID()));
 			db_query_params('DELETE FROM frs_dlstats_filetotal_agg WHERE file_id=$1', array($this->getID()));
-			$this->FRSRelease->FRSPackage->createNewestReleaseFilesAsZip();
+			if ($this->hasFiles()) {
+				$this->FRSRelease->FRSPackage->createReleaseFilesAsZip($this->FRSRelease->getID());
+			} else {
+				$this->FRSRelease->FRSPackage->deleteReleaseFilesAsZip($this->FRSRelease->getID());
+			}
 			return true;
 		}
 	}
@@ -440,9 +447,13 @@ class FRSFile extends Error {
 				return false;
 			}
 		}
-		db_commit();
-		$this->FRSRelease->FRSPackage->createNewestReleaseFilesAsZip();
-		return true;
+		if ($this->FRSRelease->FRSPackage->createReleaseFilesAsZip($this->FRSRelease->getID())) {
+			db_commit();
+			return true;
+		} else {
+			$this->setError($this->FRSRelease->FRSPackage->getErrorMessage());
+			return false;
+		}
 	}
 }
 
diff --git a/src/common/frs/FRSPackage.class.php b/src/common/frs/FRSPackage.class.php
index b664d02..27d4f32 100644
--- a/src/common/frs/FRSPackage.class.php
+++ b/src/common/frs/FRSPackage.class.php
@@ -155,7 +155,6 @@ class FRSPackage extends Error {
 	 * @return	boolean	success.
 	 */
 	function create($name) {
-
 		if (strlen($name) < 3) {
 			$this->setError(_('FRSPackage Name Must Be At Least 3 Characters'));
 			return false;
@@ -177,7 +176,7 @@ class FRSPackage extends Error {
 		}
 
 		db_begin();
-		$result = db_query_params('INSERT INTO frs_package(group_id, name, status_id) VALUES ($1,$2,$3)',
+		$result = db_query_params('INSERT INTO frs_package(group_id, name, status_id) VALUES ($1, $2, $3)',
 					array($this->Group->getId(),
 						htmlspecialchars($name),
 						1));
@@ -186,7 +185,7 @@ class FRSPackage extends Error {
 			db_rollback();
 			return false;
 		}
-		$this->package_id = db_insertid($result,'frs_package','package_id');
+		$this->package_id = db_insertid($result, 'frs_package', 'package_id');
 		if (!$this->fetchData($this->package_id)) {
 			db_rollback();
 			return false;
@@ -346,6 +345,15 @@ class FRSPackage extends Error {
 		return true;
 	}
 
+	function clearMonitor() {
+		$MonitorElementObject = new MonitorElement('frspackage');
+		if (!$MonitorElementObject->clearMonitor($this->getID())) {
+			$this->setError($MonitorElementObject->getErrorMessage());
+			return false;
+		}
+		return true;
+	}
+
 	/**
 	 * getMonitorCount - Get the count of people monitoring this package
 	 *
@@ -454,7 +462,7 @@ class FRSPackage extends Error {
 			}
 		}
 		db_commit();
-		$this->createNewestReleaseFilesAsZip();
+		$this->createReleaseFilesAsZip($this->getNewestReleaseID());
 		$this->sendNotice();
 		return true;
 	}
@@ -467,10 +475,10 @@ class FRSPackage extends Error {
 	function &getReleases() {
 		if (!is_array($this->package_releases) || count($this->package_releases) < 1) {
 			$this->package_releases=array();
-			$res = db_query_params ('SELECT * FROM frs_release WHERE package_id=$1',
-						array ($this->getID())) ;
+			$res = db_query_params('SELECT * FROM frs_release WHERE package_id=$1',
+						array($this->getID()));
 			while ($arr = db_fetch_array($res)) {
-				$this->package_releases[]=$this->newFRSRelease($arr['release_id'],$arr);
+				$this->package_releases[] = $this->newFRSRelease($arr['release_id'], $arr);
 			}
 		}
 		return $this->package_releases;
@@ -519,11 +527,11 @@ class FRSPackage extends Error {
 			$this->setError(_('Package delete error: trying to delete root dir'));
 			return false;
 		}
-		$this->deleteNewestReleaseFilesAsZip();
 
 		if (is_dir($dir))
 			rmdir($dir);
 
+		$this->clearMonitor();
 		db_query_params('DELETE FROM frs_package WHERE package_id=$1 AND group_id=$2',
 				 array ($this->getID(),
 					$this->Group->getID()));
@@ -531,49 +539,53 @@ class FRSPackage extends Error {
 	}
 
 	/**
-	 * Function that selects the newest release.
+	 * getNewestReleaseID - return the newest release_id of a package
 	 * The newest release is the release with the highest ID
 	 *
-	 * @return	object	FRSRelease
+	 * @return	integer	release id
 	 */
-	public function getNewestRelease() {
+	public function getNewestReleaseID() {
 		$result = db_query_params('SELECT MAX(release_id) AS release_id FROM frs_release WHERE package_id=$1',
-					  array ($this->getID()));
+					  array($this->getID()));
 
 		if ($result && db_numrows($result) == 1) {
 			$row = db_fetch_array($result);
-			return frsrelease_get_object($row['release_id']);
+			return $row['release_id'];
 		} else {
 			$this->setError(_('No valid max release id'));
 			return false;
 		}
 	}
 
-	public function getNewestReleaseZipName() {
-		return $this->getFileName().'-latest.zip';
+	public function getReleaseZipPath($release) {
+		return forge_get_config('upload_dir').'/'.$this->Group->getUnixName().'/'.$this->getFileName().'/'.$this->getReleaseZipName($release);
 	}
 
-	public function getNewestReleaseZipPath() {
-		return forge_get_config('upload_dir').'/'.$this->Group->getUnixName().'/'.$this->getFileName().'/'.$this->getNewestReleaseZipName();
+	public function getReleaseZipName($release) {
+		$frsr = frsrelease_get_object($release);
+		return $this->getFileName().'-'.$frsr->getName().'.zip';
+	}
+
+	public function getNewestReleaseZipName($release) {
+		return $this->getFileName().'-latest.zip';
 	}
 
 	/**
-	 * createNewestReleaseFilesAsZip - create the Zip Archive of the package
+	 * createReleaseFilesAsZip - create the Zip Archive of the release
 	 *
-	 * @return	bool true on success even if the php ZipArchive does not exist
+	 * @param	integer	release id.
+	 * @return	bool	true on success even if the php ZipArchive does not exist
 	 */
-	public function createNewestReleaseFilesAsZip(){
-		$release = $this->getNewestRelease();
-		if ($release && class_exists('ZipArchive')) {
+	public function createReleaseFilesAsZip($release_id) {
+		if ($release_id && class_exists('ZipArchive')) {
 			$zip = new ZipArchive();
-			$zipPath = $this->getNewestReleaseZipPath();
+			$zipPath = $this->getReleaseZipPath($release_id);
+			$release = frsrelease_get_object($release_id);
 			$filesPath = forge_get_config('upload_dir').'/'.$this->Group->getUnixName().'/'.$this->getFileName().'/'.$release->getFileName();
-
-			if ($zip->open($zipPath, ZIPARCHIVE::OVERWRITE) !== true) {
+			if ($zip->open($zipPath, ZIPARCHIVE::CREATE) !== true) {
 				$this->setError(_('Cannot open the file archive')._(': ').$zipPath.'.');
 				return false;
 			}
-
 			$files = $release->getFiles();
 			foreach ($files as $f) {
 				$filePath = $filesPath.'/'.$f->getName();
@@ -590,9 +602,9 @@ class FRSPackage extends Error {
 		return true;
 	}
 
-	public function deleteNewestReleaseFilesAsZip() {
-		if (file_exists($this->getNewestReleaseZipPath()))
-			unlink($this->getNewestReleaseZipPath());
+	public function deleteReleaseFilesAsZip($release_id) {
+		if (file_exists($this->getReleaseZipPath($release_id)))
+			unlink($this->getReleaseZipPath($release_id));
 		return true;
 	}
 
diff --git a/src/common/frs/FRSRelease.class.php b/src/common/frs/FRSRelease.class.php
index ea9fe6a..3acb7cd 100644
--- a/src/common/frs/FRSRelease.class.php
+++ b/src/common/frs/FRSRelease.class.php
@@ -69,6 +69,7 @@ class FRSRelease extends Error {
 	 */
 	var $FRSPackage;
 	var $release_files;
+	var $files_count = null;
 
 	/**
 	 * Constructor.
@@ -99,7 +100,7 @@ class FRSRelease extends Error {
 				$this->data_array =& $arr;
 				if ($this->data_array['package_id'] != $this->FRSPackage->getID()) {
 					$this->setError('FRSPackage_id in db result does not match FRSPackage Object');
-					$this->data_array=null;
+					$this->data_array = null;
 					return false;
 				}
 			}
@@ -342,6 +343,18 @@ class FRSRelease extends Error {
 		return $this->release_files;
 	}
 
+	function hasFiles() {
+		if ($files_count != null)
+			return $files_count;
+
+		$res = db_query_params('select count(file_id) as files_count from frs_file where release_id = $1', array($this->getID()));
+		if (db_numrows($res) >= 1) {
+			$row = db_fetch_array($res);
+			$files_count = $row['files_count'];
+		}
+		return $files_count;
+	}
+
 	/**
 	 * delete - delete this release and all its related data.
 	 *
@@ -375,11 +388,12 @@ class FRSRelease extends Error {
 			$this->setError(_('Release delete error')._(': ')._('trying to delete root dir'));
 			return false;
 		}
+		$this->FRSPackage->deleteReleaseFilesAsZip($this->getID());
 		rmdir($dir);
 
-		db_query_params ('DELETE FROM frs_release WHERE release_id=$1 AND package_id=$2',
-				 array ($this->getID(),
-					$this->FRSPackage->getID())) ;
+		db_query_params('DELETE FROM frs_release WHERE release_id=$1 AND package_id=$2',
+				array ($this->getID(),
+					$this->FRSPackage->getID()));
 		return true;
 	}
 
@@ -396,7 +410,7 @@ class FRSRelease extends Error {
 	 */
 	function update($status, $name, $notes, $changes, $preformatted, $release_date) {
 		if (strlen($name) < 3) {
-			$this->setError(_('FRSPackage Name Must Be At Least 3 Characters'));
+			$this->setError(_('FRSRelease Name Must Be At Least 3 Characters'));
 			return false;
 		}
 
@@ -421,7 +435,7 @@ class FRSRelease extends Error {
 			}
 		}
 		db_begin();
-		$res = db_query_params ('UPDATE frs_release SET	name=$1,status_id=$2,notes=$3,
+		$res = db_query_params('UPDATE frs_release SET	name=$1,status_id=$2,notes=$3,
 					changes=$4,preformatted=$5,release_date=$6,released_by=$7
 					WHERE package_id=$8 AND release_id=$9',
 					array (htmlspecialchars($name),
@@ -432,7 +446,7 @@ class FRSRelease extends Error {
 						   $release_date,
 						   user_getid(),
 						   $this->FRSPackage->getID(),
-						   $this->getID())) ;
+						   $this->getID()));
 
 		if (!$res || db_affected_rows($res) < 1) {
 			$this->setError(_('Error On Update')._(': ').db_error());
@@ -450,7 +464,7 @@ class FRSRelease extends Error {
 		$olddirlocation = forge_get_config('upload_dir').'/'.$this->FRSPackage->Group->getUnixName().'/'.$this->FRSPackage->getFileName().'/'.$oldfilename;
 		$newdirlocation = forge_get_config('upload_dir').'/'.$this->FRSPackage->Group->getUnixName().'/'.$this->FRSPackage->getFileName().'/'.$newfilename;
 
-		if (($oldfilename!=$newfilename) && is_dir($olddirlocation)) {
+		if (($oldfilename != $newfilename) && is_dir($olddirlocation)) {
 			if (is_dir($newdirlocation)) {
 				$this->setError(_('Error Updating Release')._(': ')._('Directory Already Exists'));
 				db_rollback();
@@ -464,7 +478,9 @@ class FRSRelease extends Error {
 			}
 		}
 		db_commit();
-		$this->FRSPackage->createNewestReleaseFilesAsZip();
+		if ($this->hasFiles()) {
+			$this->FRSPackage->createReleaseFilesAsZip($this->getID());
+		}
 		return true;
 	}
 
diff --git a/src/common/frs/FRSReleaseFactory.class.php b/src/common/frs/FRSReleaseFactory.class.php
index e6bc1db..29dc58d 100644
--- a/src/common/frs/FRSReleaseFactory.class.php
+++ b/src/common/frs/FRSReleaseFactory.class.php
@@ -122,7 +122,8 @@ class FRSReleaseFactory extends Error {
 		foreach ($ids as $id) {
 			if (forge_check_perm('frs', $id, 'read')) {
 				$frsp = new FRSPackage($this->Group, $id);
-				$frspnr = $frsp->getNewestRelease();
+				$frspnr_id = $frsp->getNewestReleaseID();
+				$frspnr = frsrelease_get_object($frspnr_id);
 			}
 			if (isset($frspnr) && $frspnr) {
 				$this->FRSNRs[] = $frspnr;
diff --git a/src/common/frs/views/listpackages.php b/src/common/frs/views/listpackages.php
index eb7bcbe..c7941ad 100644
--- a/src/common/frs/views/listpackages.php
+++ b/src/common/frs/views/listpackages.php
@@ -88,12 +88,10 @@ if (count($FRSPackages) < 1) {
 				$image = $HTML->getStartMonitoringPic($title);
 			}
 			$errorMessage = _('Unable to set monitoring');
-			$package_monitor = util_make_link('#', $image, array('id' => 'pkgid'.$package_id, 'onclick' => 'javascript:controllerFRS.doAction({action:\''.$url.'\', id:\'pkgid'.$package_id.'\'})'), true);
+			$package_monitor = util_make_link('#', $image, array('id' => 'pkgid'.$package_id, 'onclick' => 'javascript:controllerFRS.doAction({action:\''.util_make_uri($url).'\', id:\'pkgid'.$package_id.'\'})'), true);
 		} else {
 			$package_monitor = '';
 		}
-		$package_name_protected = $HTML->toSlug($package_name);
-		echo html_e('h2', array('id' => 'title_'. $package_name_protected), html_entity_decode($package_name).html_e('span', array('class' => 'frs-monitor-package'), $package_monitor));
 
 		// get the releases of the package
 		$FRSPackageReleases = $FRSPackage->getReleases();
@@ -101,31 +99,37 @@ if (count($FRSPackages) < 1) {
 
 		$proj_stats['releases'] += $num_releases;
 
+		$package_name_protected = $HTML->toSlug($package_name);
+		$package_ziplink = '';
+		if ($FRSPackageReleases && $num_releases >= 1 && class_exists('ZipArchive')) {
+				// display link to latest-release-as-zip
+				$package_ziplink = util_make_link('#', $HTML->getZipPic(_('Download the newest release as ZIP.').' '._('This link always points to the newest release as a ZIP file.')), array('onclick' => 'location:href=\''.util_make_uri('/frs/download.php/latestzip/'.$FRSPackage->getID().'/'.$FRSPackage->getNewestReleaseZipName()).'\''), true);
+		}
+		echo html_e('h2', array('id' => 'title_'. $package_name_protected), html_entity_decode($package_name).html_e('span', array('class' => 'frs-monitor-package'), $package_monitor).html_e('span', array('class' => 'frs-zip-package'), $package_ziplink));
+
 		if ( !$FRSPackageReleases || $num_releases < 1 ) {
 			echo $HTML->warning_msg(_('No releases'));
 		} else {
-			if (class_exists('ZipArchive')) {
-				// display link to latest-release-as-zip
-				echo html_e('p', array(), html_e('em', array(), _('Download latest release as ZIP')._(': ').
-					util_make_link('/frs/download.php/latestzip/'.$FRSPackage->getID().'/'.$FRSPackage->getNewestReleaseZipName(),
-						$FRSPackage->getNewestReleaseZipName(), array('title' => _('This link always points to the newest release as a ZIP file.')))));
-			}
-
 			// iterate and show the releases of the package
 			foreach ($FRSPackageReleases as $FRSPackageRelease) {
 				$package_release_id = $FRSPackageRelease->getID();
-
+				$ziplink = '';
+				if (class_exists('ZipArchive')) {
+					if (file_exists($FRSPackage->getReleaseZipPath($package_release_id))) {
+						$ziplink .= util_make_link('#', $HTML->getZipPic(_('Download this release as ZIP.').' '._('This link always points to this release as a ZIP file.')), array('onclick' => 'location:href=\''.util_make_uri('/frs/download.php/zip/'.$FRSPackageRelease->getID().'/'.$package_name.'-'.$FRSPackageRelease->getName().'.zip').'\''), true);
+					}
+				}
 				// Switch whether release_id exists and/or release_id is current one
 				if ( ! $release_id || $release_id == $package_release_id ) {
 					// no release_id OR release_id is current one
 					$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()).')');
-					echo $HTML->boxTop($release_title, $package_name.'_'.$FRSPackageRelease->getName());
+					echo $HTML->boxTop($release_title.html_e('span', array('class' => 'frs-zip-release'), $ziplink), $package_name.' '.$FRSPackageRelease->getName());
 				} elseif ( $release_id != $package_release_id ) {
 					// release_id but not current one
 					$t_url_anchor = $HTML->toSlug($package_name).'-'.$HTML->toSlug($FRSPackageRelease->getName()).'-title-content';
 					$t_url = '/frs/?group_id='.$group_id.'&release_id='.$package_release_id.'#'.$t_url_anchor;
-					$release_title = util_make_link( $t_url, $package_name.' '.$FRSPackageRelease->getName());
-					echo html_e('div', array('class' => 'frs_release_name_version'), $release_title);
+					$release_title = util_make_link($t_url, $package_name.' '.$FRSPackageRelease->getName());
+					echo html_e('div', array('class' => 'frs_release_name_version'), $release_title.html_e('span', array('class' => 'frs-zip-release'), $ziplink));
 				}
 
 				// get the files in this release....
@@ -134,28 +138,22 @@ if (count($FRSPackages) < 1) {
 
 				@$proj_stats['files'] += $num_files;
 
-				$cell_data = array();
-				$cell_data[] = _('File Name');
-				$cell_data[] = _('Date');
-				$cell_data[] = _('Size');
-				$cell_data[] = _('D/L');
-				$cell_data[] = _('Arch');
-				$cell_data[] = _('Type');
-				$cell_data[] = _('Latest');
-
 				// Switch whether release_id exists and/or release_id == package_release['release_id']
 				if (!$release_id || $release_id == $package_release_id) {
 					// no release_id
+					$cell_data = array();
+					$cell_data[] = _('File Name');
+					$cell_data[] = _('Date');
+					$cell_data[] = _('Size');
+					$cell_data[] = _('D/L');
+					$cell_data[] = _('Arch');
+					$cell_data[] = _('Type');
+					$cell_data[] = _('Latest');
 					echo $HTML->listTableTop($cell_data);
-				} else {
-				// release_id but not current one => dont print anything here
-				}
-
-				if ( !$release_id || $release_id == $package_release_id ) {
 					// no release_id OR no release_id OR release_id is current one
 					if ( !$res_files || $num_files < 1 ) {
 						$cells = array();
-						$cells[] = array('  '.html_e('em', array(), _('No releases')), 'colspan' => 7);
+						$cells[] = array('  '.html_e('em', array(), _('No files')), 'colspan' => 7);
 						echo $HTML->multiTableRow(array(), $cells);
 					} else {
 						// now iterate and show the files in this release....
@@ -176,12 +174,6 @@ if (count($FRSPackages) < 1) {
 						}
 					}
 					echo $HTML->listTableBottom();
-				} else {
-					// release_id but not current one
-					// nothing to print here
-				}
-
-				if ( ! $release_id || $release_id==$package_release_id ) {
 					echo $HTML->boxBottom();
 				}
 			} //for: release(s)
diff --git a/src/www/frs/download.php b/src/www/frs/download.php
index 4ced31d..c9e2008 100644
--- a/src/www/frs/download.php
+++ b/src/www/frs/download.php
@@ -60,18 +60,26 @@ function send_file($filename, $filepath, $file_id = NULL, $mode = NULL) {
 
 	if (session_loggedin()) {
 		$s =& session_get_user();
-		$us=$s->getID();
+		$us = $s->getID();
 	} else {
-		$us=100;
+		$us = 100;
 	}
 
 	$ip = getStringFromServer('REMOTE_ADDR');
 	if ($mode != 'latestzip') {
-		db_query_params('INSERT INTO frs_dlstats_file (ip_address,file_id,month,day,user_id) VALUES ($1, $2, $3, $4, $5)', array($ip,$file_id,date('Ym'),date('d'),$us));
+		db_query_params('INSERT INTO frs_dlstats_file (ip_address,file_id,month,day,user_id) VALUES ($1, $2, $3, $4, $5)', array($ip, $file_id, date('Ym'), date('d'), $us));
+	} else if ($mode == 'zip') {
+		// here $file_id is a release_id
+		$frsr = frsrelease_get_object($file_id);
+		$files = $release->getFiles();
+		foreach ($files as $fileObject) {
+			db_query_params('INSERT INTO frs_dlstats_file (ip_address,file_id,month,day,user_id) VALUES ($1, $2, $3, $4, $5)', array($ip, $fileObject->getID(), date('Ym'), date('d'), $us));
+		}
 	} else {
 		// here $file_id is a package_id
 		$Package = frspackage_get_object($file_id);
-		$release = $Package->getNewestRelease();
+		$release_id = $Package->getNewestReleaseID();
+		$release = frsrelease_get_object($release_id);
 		$files = $release->getFiles();
 		foreach ($files as $fileObject) {
 			db_query_params('INSERT INTO frs_dlstats_file (ip_address,file_id,month,day,user_id) VALUES ($1, $2, $3, $4, $5)', array($ip, $fileObject->getID(), date('Ym'), date('d'), $us));
@@ -149,14 +157,14 @@ case 'latestzip':
 	$package_id = $expl_pathinfo[4];
 
 	$Package = frspackage_get_object($package_id);
-	if (!$Package || !$Package->getNewestRelease()) {
+	if (!$Package) {
 		session_redirect404();
 	}
 
 	session_require_perm('frs', $Package->getID(), 'read');
 
-	$filename = $Package->getNewestReleaseZipName();
-	$filepath = $Package->getNewestReleaseZipPath();
+	$filename = $Package->getReleaseZipName($Package->getNewestReleaseID());
+	$filepath = $Package->getReleaseZipPath($Package->getNewestReleaseID());
 	send_file($filename, $filepath, $package_id, $mode);
 
 	break;
@@ -191,6 +199,26 @@ case 'latestfile':
 
 	break;
 
+case 'zip':
+	// .../download.php/zip/123/foo.tar.gz
+	// 123 -> release_id
+	// foo.tar.gz -> file name
+	$release_id = $expl_pathinfo[4];
+	$file_name = $expl_pathinfo[5];
+
+	$frsr = frsrelease_get_object($release_id);
+	$frsp = $frsr->FRSPackage;
+	$Group = $frsp->Group;
+	if (!$frsr || !$frsp) {
+		session_redirect404();
+	}
+	session_require_perm('frs', $frsp->getID(), 'read');
+
+	$filepath = forge_get_config('upload_dir').'/'.$Group->getUnixName().'/'.$frsp->getFileName().'/'.$file_name;
+	send_file($file_name, $filepath, $frsr->getID());
+
+	break;
+
 default:
 	exit_error(_('Invalid download mode'));
 }

-----------------------------------------------------------------------

Summary of changes:
 src/CHANGES                                |    1 +
 src/common/frs/FRSFile.class.php           |   31 ++++++++----
 src/common/frs/FRSPackage.class.php        |   70 ++++++++++++++++------------
 src/common/frs/FRSRelease.class.php        |   34 ++++++++++----
 src/common/frs/FRSReleaseFactory.class.php |    3 +-
 src/common/frs/actions/addfile.php         |    2 +-
 src/common/frs/include/frs_utils.php       |    2 +-
 src/common/frs/views/listpackages.php      |   62 +++++++++++-------------
 src/www/frs/download.php                   |   42 ++++++++++++++---
 9 files changed, 154 insertions(+), 93 deletions(-)


hooks/post-receive
-- 
FusionForge



More information about the Fusionforge-commits mailing list