summaryrefslogtreecommitdiffstats
path: root/modules-available
diff options
context:
space:
mode:
authorSimon Rettberg2025-05-22 16:52:27 +0200
committerSimon Rettberg2025-05-22 16:52:27 +0200
commit4efa11d6314c419495502dfa054d6576f9900208 (patch)
tree98a9409cd77217322b77c2b0ac9769e88bdcddc5 /modules-available
parentAdd audit logging of POST actions (diff)
downloadslx-admin-4efa11d6314c419495502dfa054d6576f9900208.tar.gz
slx-admin-4efa11d6314c419495502dfa054d6576f9900208.tar.xz
slx-admin-4efa11d6314c419495502dfa054d6576f9900208.zip
[serversetup-bwlp-ipxe] Open entry editor as popup from menu editor
... so we don't lose any changes we made, which might or might not happen when navigating away from the page. We'd be at the mercy of the browser restoring the modified state when navigating back.
Diffstat (limited to 'modules-available')
-rw-r--r--modules-available/serversetup-bwlp-ipxe/page.inc.php48
-rw-r--r--modules-available/serversetup-bwlp-ipxe/templates/ipxe-new-boot-entry.html17
-rw-r--r--modules-available/serversetup-bwlp-ipxe/templates/menu-edit.html5
3 files changed, 54 insertions, 16 deletions
diff --git a/modules-available/serversetup-bwlp-ipxe/page.inc.php b/modules-available/serversetup-bwlp-ipxe/page.inc.php
index 0de71eff..3bbe50dd 100644
--- a/modules-available/serversetup-bwlp-ipxe/page.inc.php
+++ b/modules-available/serversetup-bwlp-ipxe/page.inc.php
@@ -41,6 +41,10 @@ class Page_ServerSetup extends Page
['id' => IPxeBuilder::VERSION_LIST_TASK, 'action' => 'LIST'], true);
}
+ if (Request::get('popup', false, 'bool')) {
+ Dashboard::disable();
+ }
+
$action = Request::post('action');
if ($action === false) {
@@ -183,7 +187,14 @@ class Page_ServerSetup extends Page
switch ($show) {
case 'editbootentry':
User::assertPermission('ipxe.bootentry.*');
- $this->showEditBootEntry();
+ $ret = $this->showEditBootEntry();
+ if ($ret !== null) {
+ if (Request::get('popup', false, 'bool')) {
+ http_response_code($ret);
+ } else {
+ Util::redirect('?do=serversetup&show=localboot', $ret);
+ }
+ }
break;
case 'editmenu':
User::assertPermission('ipxe.menu.view');
@@ -218,7 +229,7 @@ class Page_ServerSetup extends Page
$this->showImportMenu();
break;
default:
- Util::redirect('?do=serversetup');
+ Util::redirect('?do=serversetup', 404);
}
}
@@ -446,7 +457,7 @@ class Page_ServerSetup extends Page
}
$menu['keys'] = array_map(function ($item) { return ['key' => $item]; }, MenuEntry::getKeyList());
$menu['entrylist'] = array_merge(
- Database::queryAll("SELECT entryid, title, hotkey, module, data FROM serversetup_bootentry ORDER BY title ASC"),
+ Database::queryAll("SELECT entryid, title, hotkey, module, data, module = '.special' AS no_edit FROM serversetup_bootentry ORDER BY title ASC"),
// Add all menus, so we can link
Database::queryAll("SELECT Concat('menu:', menuid) AS entryid, title, 1 AS no_edit FROM serversetup_menu ORDER BY title ASC")
);
@@ -511,7 +522,11 @@ class Page_ServerSetup extends Page
Render::addTemplate('menu-edit', $menu);
}
- private function showEditBootEntry()
+ /**
+ * Show edit boot menu form. If entry cannot be edited, an error code is returned,
+ * on success, null is returned.
+ */
+ private function showEditBootEntry(): ?int
{
$params = ['hooks' => []];
foreach (Hook::load('ipxe-bootentry') as $hook) {
@@ -531,18 +546,18 @@ class Page_ServerSetup extends Page
WHERE entryid = :id LIMIT 1', ['id' => $id]);
if ($row === false) {
Message::addError('invalid-boot-entry', $id);
- Util::redirect('?do=serversetup', 404);
+ return 404;
}
if ($row['module'] === '.special') {
Message::addError('cannot-edit-special', $id);
- Util::redirect('?do=serversetup', 403);
+ return 403;
}
if ($row['module'][0] === '.') {
// either script or exec entry
$entry = BootEntry::fromJson($row['module'], $row['data']);
if ($entry === null) {
Message::addError('unknown-bootentry-type', $id);
- Util::redirect('?do=serversetup&show=bootentry', 404);
+ return 404;
}
$entry->addFormFields($params);
} else {
@@ -589,7 +604,9 @@ class Page_ServerSetup extends Page
}
$params['disabled'] = User::hasPermission('ipxe.bootentry.edit') ? '' : 'disabled';
+ $params['popup'] = Request::get('popup', false, 'bool');
Render::addTemplate('ipxe-new-boot-entry', $params);
+ return null;
}
private function showEditAddress()
@@ -862,8 +879,13 @@ class Page_ServerSetup extends Page
private function saveBootEntry()
{
- $oldEntryId = Request::post('entryid', false, 'string');
+ $oldEntryId = Request::post('entryid', '', 'string');
$newId = Request::post('newid', false, 'string');
+ $popup = Request::any('popup', false, 'bool');
+ $redirect = '?do=serversetup&show=editbootentry&id=' . $oldEntryId;
+ if ($popup) {
+ $redirect .= '&popup=1';
+ }
if (!preg_match('/^[a-z0-9\-_]{1,16}$/', $newId)) {
Message::addError('main.parameter-empty', 'newid');
return;
@@ -885,7 +907,7 @@ class Page_ServerSetup extends Page
}
if ($entry === null) {
Message::addError('main.value-invalid', 'type', $type);
- Util::redirect('?do=serversetup&show=bootentry');
+ Util::redirect($redirect);
}
$entryData = json_encode($entry->toArray());
} else {
@@ -935,8 +957,12 @@ class Page_ServerSetup extends Page
Message::addWarning('nothing-changed-or-protected', $newId);
}
}
- if (Request::post('next') === 'reload') {
- Util::redirect('?do=serversetup&show=editbootentry&id=' . $newId);
+ if ($popup || Request::post('next') === 'reload') {
+ $redirect = '?do=serversetup&show=editbootentry&id=' . $newId;
+ if ($popup) {
+ $redirect .= '&popup=1';
+ }
+ Util::redirect($redirect);
}
Util::redirect('?do=serversetup&show=bootentry');
}
diff --git a/modules-available/serversetup-bwlp-ipxe/templates/ipxe-new-boot-entry.html b/modules-available/serversetup-bwlp-ipxe/templates/ipxe-new-boot-entry.html
index 8b7b74fc..1c302fb9 100644
--- a/modules-available/serversetup-bwlp-ipxe/templates/ipxe-new-boot-entry.html
+++ b/modules-available/serversetup-bwlp-ipxe/templates/ipxe-new-boot-entry.html
@@ -209,10 +209,19 @@
<span class="glyphicon glyphicon-floppy-disk"></span>
{{lang_saveAndReload}}
</button>
- <button type="submit" class="btn btn-primary" {{disabled}}>
- <span class="glyphicon glyphicon-floppy-disk"></span>
- {{lang_save}}
- </button>
+ {{#popup}}
+ <input type="hidden" name="popup" value="1">
+ <button type="button" class="btn btn-default" onclick="window.close()">
+ <span class="glyphicon glyphicon-remove"></span>
+ {{lang_cancel}}
+ </button>
+ {{/popup}}
+ {{^popup}}
+ <button type="submit" class="btn btn-primary" {{disabled}}>
+ <span class="glyphicon glyphicon-floppy-disk"></span>
+ {{lang_save}}
+ </button>
+ {{/popup}}
</div>
</form>
</div>
diff --git a/modules-available/serversetup-bwlp-ipxe/templates/menu-edit.html b/modules-available/serversetup-bwlp-ipxe/templates/menu-edit.html
index 6f119515..4a84b321 100644
--- a/modules-available/serversetup-bwlp-ipxe/templates/menu-edit.html
+++ b/modules-available/serversetup-bwlp-ipxe/templates/menu-edit.html
@@ -209,7 +209,10 @@
{{/ishook}}
{{^no_edit}}
<div class="text-right">
- <a href="?do=serversetup&amp;show=editbootentry&amp;id={{entryid}}">{{lang_edit}}</a>
+ <a href="?do=serversetup&amp;show=editbootentry&amp;id={{entryid}}&amp;popup=true" target="_blank"
+ onclick="window.open(this.href, '_blank', 'toolbar=0,scrollbars,resizable');return false">
+ {{lang_edit}} <span class="glyphicon glyphicon-new-window"></span>
+ </a>
</div>
{{/no_edit}}
</div>