]> git.joonet.de Git - adminer.git/commitdiff
AdminerConfig: Support permalinks
authorJakub Vrana <jakub@vrana.cz>
Sun, 6 Apr 2025 06:08:57 +0000 (08:08 +0200)
committerJakub Vrana <jakub@vrana.cz>
Sun, 6 Apr 2025 06:15:20 +0000 (08:15 +0200)
adminer/include/functions.inc.php
plugins/config.php
plugins/menu-links.php

index 1a945c388e5fe0c6877096e3fbb4127050545694..52999519c1b93575f4d6e5cd7c9047e58d9fdf2e 100644 (file)
@@ -348,7 +348,9 @@ function get_setting(string $key, string $cookie = "adminer_settings") {
 * @param mixed[] $settings
 */
 function save_settings(array $settings, string $cookie = "adminer_settings"): void {
-       cookie($cookie, http_build_query($settings + get_settings($cookie)));
+       $value = http_build_query($settings + get_settings($cookie));
+       cookie($cookie, $value);
+       $_COOKIE[$cookie] = $value;
 }
 
 /** Restart stopped session */
index 1b217d0b1999a11bfa411029c16877c9decce1c2..a5fa23f2bc96d6a10fc6a02ac08bb6541270b4ff 100644 (file)
@@ -12,10 +12,9 @@ class AdminerConfig extends Adminer\Plugin {
                static $called; // this function is called from page_header() and it also calls page_header()
                if (isset($_GET["config"]) && !$called && Adminer\connection()) {
                        $called = true;
-                       if ($_POST) { //! check $error
-                               unset($_POST["token"]);
-                               Adminer\save_settings($_POST, "adminer_config");
-                               Adminer\redirect($_SERVER["REQUEST_URI"], $this->lang('Configuration saved.'));
+                       if ($_GET["config"]) { // using $_GET allows sharing links between devices but doesn't protect against CSRF
+                               Adminer\save_settings($_GET["config"], "adminer_config");
+                               Adminer\redirect(null, $this->lang('Configuration saved.'));
                        }
                        Adminer\page_header($this->lang('Configuration'));
                        $config = Adminer\adminer()->config();
@@ -23,14 +22,14 @@ class AdminerConfig extends Adminer\Plugin {
                                // this plugin itself defines config() so this branch is not currently used
                                echo "<p>" . $this->lang('Only some plugins support configuration, e.g. %s.', '<a href="https://github.com/vrana/adminer/blob/master/plugins/menu-links.php"' . Adminer\target_blank() . '>menu-links</a>') . "\n";
                        } else {
-                               echo "<form action='' method='post'>\n";
+                               echo "<form action=''>\n";
+                               Adminer\hidden_fields_get();
                                echo "<table>\n";
                                foreach (array_reverse($config) as $title => $html) { // Plugins::$append actually prepends
                                        echo "<tr><th>$title<td>$html\n";
                                }
                                echo "</table>\n";
                                echo "<p><input type='submit' value='" . Adminer\lang('Save') . "'>\n";
-                               echo Adminer\input_token();
                                echo "</form>\n";
                        }
                        Adminer\page_footer('db');
@@ -43,7 +42,7 @@ class AdminerConfig extends Adminer\Plugin {
                        '' => $this->lang('Use %s if exists', "adminer.css"),
                        'builtin' => $this->lang('Use builtin design'),
                );
-               return array($this->lang('Design') => Adminer\html_radios('design', $options, Adminer\get_setting("design", "adminer_config"), "<br>"));
+               return array($this->lang('Design') => Adminer\html_radios('config[design]', $options, Adminer\get_setting("design", "adminer_config"), "<br>"));
        }
 
        function css() {
index f9cd37a050817ec98af31cf5807aafa33875ddf1..dfa9fa3b9672dfe0bc369c20f6f83f8e34cb80a9 100644 (file)
@@ -11,7 +11,7 @@ class AdminerMenuLinks extends Adminer\Plugin {
 
        /** @param ''|'table'|'select'|'auto' $menu see config() for explanation */
        function __construct($menu = '') {
-               $this->menu = Adminer\get_setting("menu", "adminer_config") ?: $menu;
+               $this->menu = $menu;
        }
 
        function config() {
@@ -21,11 +21,12 @@ class AdminerMenuLinks extends Adminer\Plugin {
                        '' => $this->lang('Both'),
                        'auto' => $this->lang('Auto (Select on select page, Table otherwise)'),
                );
-               return array($this->lang('Menu table links') => Adminer\html_radios('menu', $options, $this->menu, "<br>"));
+               $menu = Adminer\get_setting("menu", "adminer_config") ?: $this->menu;
+               return array($this->lang('Menu table links') => Adminer\html_radios('config[menu]', $options, $menu, "<br>"));
        }
 
        function tablesPrint(array $tables) {
-               $menu = $this->menu;
+               $menu = Adminer\get_setting("menu", "adminer_config") ?: $this->menu;
                $titles = array(
                        'select' => Adminer\lang('Select data'),
                        'table' => Adminer\lang('Show structure'),