From 8b0c163527d1500f3dc219f021d07e5a604b4d16 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 19 Feb 2015 18:06:09 +0100 Subject: MiniLinux download with version selection --- modules/minilinux.inc.php | 48 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) (limited to 'modules/minilinux.inc.php') diff --git a/modules/minilinux.inc.php b/modules/minilinux.inc.php index c9d73b61..0853c0db 100644 --- a/modules/minilinux.inc.php +++ b/modules/minilinux.inc.php @@ -18,6 +18,9 @@ class Page_MiniLinux extends Page Render::addTemplate('page-minilinux', array( 'listurl' => '?do=MiniLinux&async=true&action=list' )); + Render::addFooter(''); } protected function doAjax() @@ -30,11 +33,31 @@ class Page_MiniLinux extends Page return; } $action = Request::any('action'); + $selectedVersion = (int)Request::any('version', 0); switch ($action) { case 'list': $count = 0; foreach ($data['systems'] as &$system) { - foreach ($system['files'] as &$file) { + // Get latest version, build simple array of all version numbers + $versionNumbers = array(); + $selected = false; + foreach ($system['versions'] as $version) { + if (!is_numeric($version['version']) || $version['version'] < 1) + continue; + if ($selectedVersion === 0 && ($selected === false || $selected['version'] < $version['version'])) + $selected = $version; + elseif ($version['version'] == $selectedVersion) + $selected = $version; + $versionNumbers[(int)$version['version']] = array( + 'version' => $version['version'] + ); + } + if ($selected === false) continue; // No versions for this system!? + ksort($versionNumbers); + // Mark latest version as selected + $versionNumbers[(int)$selected['version']]['selected'] = true; + // Add status information to system and its files + foreach ($selected['files'] as &$file) { $file['uid'] = 'dlid' . $count++; $local = CONFIG_HTTP_DIR . '/' . $system['id'] . '/' . $file['name']; if (!file_exists($local) || filesize($local) !== $file['size'] || filemtime($local) < $file['mtime']) { @@ -52,10 +75,12 @@ class Page_MiniLinux extends Page } } } + unset($system['versions']); + $system['files'] = $selected['files']; + $system['version'] = $selected['version']; } - echo Render::parse('minilinux/filelist', array( - 'systems' => $data['systems'] - )); + $data['versions'] = array_values($versionNumbers); + echo Render::parse('minilinux/filelist', $data); return; case 'download': $id = Request::post('id'); @@ -68,11 +93,14 @@ class Page_MiniLinux extends Page $gpg = 'missing'; foreach ($data['systems'] as &$system) { if ($system['id'] !== $id) continue; - foreach ($system['files'] as &$f) { - if ($f['name'] !== $name) continue; - $file = $f; - if (!empty($f['gpg'])) $gpg = $f['gpg']; - break; + foreach ($system['versions'] as &$version) { + if ($version['version'] != $selectedVersion) continue; + foreach ($version['files'] as &$f) { + if ($f['name'] !== $name) continue; + $file = $f; + if (!empty($f['gpg'])) $gpg = $f['gpg']; + break; + } } } if ($file === false) { @@ -80,7 +108,7 @@ class Page_MiniLinux extends Page return; } $task = Taskmanager::submit('DownloadFile', array( - 'url' => CONFIG_REMOTE_ML . '/' . $id . '/' . $name, + 'url' => CONFIG_REMOTE_ML . '/' . $id . '/' . $selectedVersion . '/' . $name, 'destination' => CONFIG_HTTP_DIR . '/' . $id . '/' . $name, 'gpg' => $gpg )); -- cgit v1.2.3-55-g7522