From 04449f369f42469c707e134dc2dab66938607ddd Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 10 Jul 2020 17:27:56 +0200 Subject: [minilinux] (bootentry-hook) Add entry for "latest from branch" The iPXE menu item of type "minilinux" will now show an option to automatically use the latest locally installed version for each branch. --- .../minilinux/inc/linuxbootentryhook.inc.php | 29 ++++++++++++++++++---- modules-available/minilinux/lang/de/module.json | 1 + .../minilinux/lang/de/permissions.json | 5 ++-- modules-available/minilinux/lang/en/module.json | 1 + .../minilinux/lang/en/permissions.json | 5 ++-- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/modules-available/minilinux/inc/linuxbootentryhook.inc.php b/modules-available/minilinux/inc/linuxbootentryhook.inc.php index 324ffc7e..30ede469 100644 --- a/modules-available/minilinux/inc/linuxbootentryhook.inc.php +++ b/modules-available/minilinux/inc/linuxbootentryhook.inc.php @@ -37,6 +37,7 @@ class LinuxBootEntryHook extends BootEntryHook /* * Dictionary::translate('default_boot_entry'); * Dictionary::translate('not_installed_hint'); + * Dictionary::translate('latest_of_branch'); */ $array = []; $array[] = new HookEntryGroup($this->name(), [ @@ -49,12 +50,19 @@ class LinuxBootEntryHook extends BootEntryHook // Group by branch for detailed listing foreach ($branches as $branch) { if (isset($versions[$branch['branchid']])) { - $group = []; + $group = [ + new HookEntry($branch['branchid'], + $branch['branchid'] . ' ' + . Dictionary::translateFileModule('minilinux', 'module', + 'latest_of_branch', true), + true), + ]; foreach ($versions[$branch['branchid']] as $version) { $valid = $version['installed'] != 0; $title = $version['versionid'] . ' ' . $version['title']; if (!$valid) { - $title .= ' ' . Dictionary::translateFileModule('minilinux', 'module', 'not_installed_hint'); + $title .= ' ' . Dictionary::translateFileModule('minilinux', 'module', + 'not_installed_hint', true); } $group[] = new HookEntry($version['versionid'], $title, $valid); } @@ -65,7 +73,7 @@ class LinuxBootEntryHook extends BootEntryHook } /** - * @param $id + * @param $localData * @return BootEntry the actual boot entry instance for given entry, false if invalid id */ public function getBootEntryInternal($localData) @@ -76,13 +84,21 @@ class LinuxBootEntryHook extends BootEntryHook } else { $effectiveId = $id; } - $res = Database::queryFirst('SELECT installed, data FROM minilinux_version WHERE versionid = :id', ['id' => $effectiveId]); + $res = Database::queryFirst('SELECT versionid, installed, data FROM minilinux_version WHERE versionid = :id', + ['id' => $effectiveId]); + if ($res === false) { + // Maybe this is a branchid, which means latest from according branch (installed only) + $res = Database::queryFirst('SELECT versionid, installed, data FROM minilinux_version WHERE branchid = :id + ORDER BY installed DESC, dateline DESC LIMIT 1', // Order by installed instead of WHERE for better errormsg + ['id' => $effectiveId]); + } if ($res === false) { return BootEntry::newCustomBootEntry(['script' => 'prompt Invalid minilinux boot entry id: ' . $id]); } if ($res['installed'] == 0) { return BootEntry::newCustomBootEntry(['script' => 'prompt Selected version not currently installed on server: ' . $effectiveId]); } + $effectiveId = $res['versionid']; // In case we selected from a branchid, so above message doesn't show versionid $remoteData = json_decode($res['data'], true); $bios = $efi = false; if (!@is_array($remoteData['agnostic']) && !@is_array($remoteData['efi']) && !@is_array($remoteData['bios'])) { @@ -157,6 +173,9 @@ class LinuxBootEntryHook extends BootEntryHook if ($id === 'default') return true; // Meta-version that links to whatever the default is set to $res = Database::queryFirst('SELECT installed FROM minilinux_version WHERE versionid = :id', ['id' => $id]); - return $res !== false && $res['installed']; + if ($res !== false && $res['installed']) + return true; + $res = Database::queryFirst('SELECT branchid FROM minilinux_branch WHERE branchid = :id', ['id' => $id]); + return $res !== false; } } diff --git a/modules-available/minilinux/lang/de/module.json b/modules-available/minilinux/lang/de/module.json index 133e428f..9cf5c1a1 100644 --- a/modules-available/minilinux/lang/de/module.json +++ b/modules-available/minilinux/lang/de/module.json @@ -8,6 +8,7 @@ "ipxe-debug": "Debug-Ausgaben statt Bootlogo", "ipxe-insecure-cpu": "Alle Mitigations for CPU-Sicherheitsl\u00fccken deaktivieren", "ipxe-kcl-extra": "Modifikation der Kernel-Command-Line", + "latest_of_branch": "(Neueste lokal vorhandene Version)", "menu-sources": "Update-Quellen", "menu-versions": "Verf\u00fcgbare Versionen", "module_name": "Netboot Grundsystem", diff --git a/modules-available/minilinux/lang/de/permissions.json b/modules-available/minilinux/lang/de/permissions.json index 29012620..c7d7df54 100644 --- a/modules-available/minilinux/lang/de/permissions.json +++ b/modules-available/minilinux/lang/de/permissions.json @@ -1,4 +1,5 @@ { - "view": "Zeige Komponenten des Minilinux. Wird nicht benötigt, wenn Nutzer eine der anderen Rechte hat.", - "update": "Aktualisieren von Komponenten des Minilinux." + "delete": "Ein heruntergeladenes Linux l\u00f6schen.", + "update": "Aktualisieren von Komponenten des Minilinux.", + "view": "Zeige Komponenten des Minilinux. Wird nicht ben\u00f6tigt, wenn Nutzer eine der anderen Rechte hat." } \ No newline at end of file diff --git a/modules-available/minilinux/lang/en/module.json b/modules-available/minilinux/lang/en/module.json index 4667ceda..b58c48e2 100644 --- a/modules-available/minilinux/lang/en/module.json +++ b/modules-available/minilinux/lang/en/module.json @@ -8,6 +8,7 @@ "ipxe-debug": "Print debug messages instead of showing splash screen", "ipxe-insecure-cpu": "Disable all mitigations for CPU security flaws", "ipxe-kcl-extra": "Modifications to the kernel command line", + "latest_of_branch": "(Latest locally available version)", "menu-sources": "Sources for updates", "menu-versions": "Available versions", "module_name": "Net-boot OS", diff --git a/modules-available/minilinux/lang/en/permissions.json b/modules-available/minilinux/lang/en/permissions.json index b8389e62..124dcdb8 100644 --- a/modules-available/minilinux/lang/en/permissions.json +++ b/modules-available/minilinux/lang/en/permissions.json @@ -1,4 +1,5 @@ { - "view": "Show list of minilinux components. Not needed if User has any of the other permissions.", - "update": "Update minilinux components." + "delete": "Delete a downloaded Linux version.", + "update": "Update minilinux components.", + "view": "Show list of minilinux components. Not needed if User has any of the other permissions." } \ No newline at end of file -- cgit v1.2.3-55-g7522