diff options
| author | Simon Rettberg | 2025-05-22 16:52:27 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2025-05-22 16:52:27 +0200 |
| commit | 4efa11d6314c419495502dfa054d6576f9900208 (patch) | |
| tree | 98a9409cd77217322b77c2b0ac9769e88bdcddc5 /modules-available | |
| parent | Add audit logging of POST actions (diff) | |
| download | slx-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')
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&show=editbootentry&id={{entryid}}">{{lang_edit}}</a> + <a href="?do=serversetup&show=editbootentry&id={{entryid}}&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> |
