From fa50539faa3328de6d2cdb8357e91a566efc7bef Mon Sep 17 00:00:00 2001
From: Ibnu Maksum <ibnumaksum@gmail.com>
Date: Tue, 14 May 2024 14:25:34 +0700
Subject: [PATCH] disable FOREIGN_KEY_CHECKS when restore

---
 system/controllers/settings.php | 42 ++++++++++++++++++++++++++-------
 1 file changed, 34 insertions(+), 8 deletions(-)

diff --git a/system/controllers/settings.php b/system/controllers/settings.php
index d4ed3ad1..5575ebdd 100644
--- a/system/controllers/settings.php
+++ b/system/controllers/settings.php
@@ -732,22 +732,48 @@ switch ($action) {
             $suc = 0;
             $fal = 0;
             $json = json_decode(file_get_contents($_FILES['json']['tmp_name']), true);
+            try{
+                ORM::raw_execute("SET FOREIGN_KEY_CHECKS=0;");
+            } catch (Throwable $e) {
+            } catch (Exception $e) {
+            }
+            try{
+                ORM::raw_execute("SET GLOBAL FOREIGN_KEY_CHECKS=0;");
+            } catch (Throwable $e) {
+            } catch (Exception $e) {
+            }
             foreach ($json as $table => $records) {
                 ORM::raw_execute("TRUNCATE $table;");
                 foreach ($records as $rec) {
-                    $t = ORM::for_table($table)->create();
-                    foreach ($rec as $k => $v) {
-                        if ($k != 'id') {
-                            $t->set($k, $v);
+                    try{
+                        $t = ORM::for_table($table)->create();
+                        foreach ($rec as $k => $v) {
+                            if ($k != 'id') {
+                                $t->set($k, $v);
+                            }
                         }
-                    }
-                    if ($t->save()) {
-                        $suc++;
-                    } else {
+                        if ($t->save()) {
+                            $suc++;
+                        } else {
+                            $fal++;
+                        }
+                    } catch (Throwable $e) {
+                        $fal++;
+                    } catch (Exception $e) {
                         $fal++;
                     }
                 }
             }
+            try{
+                ORM::raw_execute("SET FOREIGN_KEY_CHECKS=1;");
+            } catch (Throwable $e) {
+            } catch (Exception $e) {
+            }
+            try{
+                ORM::raw_execute("SET GLOBAL FOREIGN_KEY_CHECKS=1;");
+            } catch (Throwable $e) {
+            } catch (Exception $e) {
+            }
             if (file_exists($_FILES['json']['tmp_name'])) unlink($_FILES['json']['tmp_name']);
             r2(U . "settings/dbstatus", 's', "Restored $suc success $fal failed");
         } else {