]> git.joonet.de Git - adminer.git/commitdiff
Allow Disable foreign keys
authorAndrea <andream@fasys.it>
Wed, 19 Feb 2020 14:08:52 +0000 (15:08 +0100)
committerGitHub <noreply@github.com>
Wed, 19 Feb 2020 14:08:52 +0000 (15:08 +0100)
Allow Disable foreign keys  in SQL command

plugins/fk-disable.php [new file with mode: 0644]

diff --git a/plugins/fk-disable.php b/plugins/fk-disable.php
new file mode 100644 (file)
index 0000000..bd11866
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Allow Disable foreign keys
+ * @author Andrea Mariani, fasys.it
+ */
+class AdminerFkDisable
+{
+    private function deleteAllBetween($beginning, $end, $string) {
+        $beginningPos = strpos($string, $beginning);
+        $endPos = strpos($string, $end);
+        if ($beginningPos === false || $endPos === false) {
+            return $string;
+        }
+
+        $textToDelete = substr($string, $beginningPos, ($endPos + strlen($end)) - $beginningPos);
+        return $this->deleteAllBetween($beginning, $end, str_replace($textToDelete, '', $string)); // recursion to ensure all occurrences are replaced
+    }
+
+       public function head(){
+               if (!isset($_GET['sql'])) {
+                       return;
+               }
+
+               $query = trim($_POST['query']);
+
+               if($_POST['fk_disable']){
+                   if($query) {
+                $query = trim($this->deleteAllBetween("-- FK:D0", "-- FK:D1", $query));
+                $_POST['query'] = "-- FK:D0\nSET FOREIGN_KEY_CHECKS=0;\n-- FK:D1\n\n{$query}\n\n-- FK:D0\nSET FOREIGN_KEY_CHECKS=1;\n-- FK:D1";
+            }
+            $fk_disable_checked = ($_POST['fk_disable']) ? 'checked="checked"' : "";
+        }
+
+    ?>
+
+    <script<?php echo nonce();?> type="text/javascript">
+
+        function domReady(fn) {
+            document.addEventListener("DOMContentLoaded", fn);
+            if (document.readyState === "interactive" || document.readyState === "complete" ) {
+                fn();
+            }
+        }
+
+        domReady(() => {
+            document.querySelectorAll('#form p')[1].insertAdjacentHTML('beforeend', '<label><input type="checkbox" name="fk_disable" value="1" <?= $fk_disable_checked ?> /><?= h('Disable Foreign Keys') ?></label>')
+        })
+
+    </script>
+    <?php
+       }
+}