From f000706b9f0c54503af38954e866c7fbaea40da8 Mon Sep 17 00:00:00 2001
From: Carsten  Rose <carsten.rose@math.uzh.ch>
Date: Wed, 5 Oct 2016 15:16:22 +0200
Subject: [PATCH] QuickFormQuery.php, Database.php: throw an error if table
 'Form' is missing.

---
 extension/qfq/qfq/Constants.php      | 53 ++++++++++++++--------------
 extension/qfq/qfq/Database.php       | 23 ++++++++++++
 extension/qfq/qfq/QuickFormQuery.php |  4 +++
 3 files changed, 54 insertions(+), 26 deletions(-)

diff --git a/extension/qfq/qfq/Constants.php b/extension/qfq/qfq/Constants.php
index 4e93e3369..97f9f9071 100644
--- a/extension/qfq/qfq/Constants.php
+++ b/extension/qfq/qfq/Constants.php
@@ -146,42 +146,43 @@ const ERROR_EXPECTED_ARRAY = 1061;
 const ERROR_REPORT_FAILED_ACTION = 1062;
 const ERROR_MISSING_MESSAGE_FAIL = 1063;
 const ERROR_MISSING_TABLE_NAME = 1064;
-const ERROR_RECORD_NOT_FOUND = 1065;
-const ERROR_INVALID_EDITOR_PROPERTY_NAME = 1066;
+const ERROR_MISSING_TABLE = 1065;
+const ERROR_RECORD_NOT_FOUND = 1066;
+const ERROR_INVALID_EDITOR_PROPERTY_NAME = 1067;
 
 // Subrecord
-const ERROR_SUBRECORD_MISSING_COLUMN_ID = 1066;
+const ERROR_SUBRECORD_MISSING_COLUMN_ID = 1100;
 
 // Store
-const ERROR_STORE_VALUE_ALREADY_CODPIED = 1100;
-const ERROR_STORE_KEY_EXIST = 1101;
+const ERROR_STORE_VALUE_ALREADY_CODPIED = 1200;
+const ERROR_STORE_KEY_EXIST = 1201;
 
 // I/O Error
-const ERROR_IO_READ_FILE = 1200;
-const ERROR_IO_WRITE = 1203;
-const ERROR_IO_OPEN = 1204;
-const ERROR_IO_UNLINK = 1205;
-const ERROR_IO_FILE_EXIST = 1206;
-const ERROR_IO_RENAME = 1207;
-const ERROR_IO_INVALID_LINK = 1208;
-const ERROR_IO_DIR_EXIST_AS_FILE = 1209;
-const ERROR_IO_CHDIR = 1210;
+const ERROR_IO_READ_FILE = 1300;
+const ERROR_IO_WRITE = 1303;
+const ERROR_IO_OPEN = 1304;
+const ERROR_IO_UNLINK = 1305;
+const ERROR_IO_FILE_EXIST = 1306;
+const ERROR_IO_RENAME = 1307;
+const ERROR_IO_INVALID_LINK = 1308;
+const ERROR_IO_DIR_EXIST_AS_FILE = 1309;
+const ERROR_IO_CHDIR = 1310;
 
 //Report
-const ERROR_UNKNOWN_LINK_QUALIFIER = 1300;
-const ERROR_UNDEFINED_RENDER_CONTROL_COMBINATION = 1301;
-const ERROR_MISSING_VALUE = 1302;
-const ERROR_INVALID_VALUE = 1303;
-const ERROR_MULTIPLE_DEFINITION = 1304;
-const ERROR_MULTIPLE_URL_PAGE_MAILTO_DEFINITION = 1305;
-const ERROR_UNKNOWN_TOKEN = 1306;
-const ERROR_TOO_FEW_PARAMETER_FOR_SENDMAIL = 1307;
-const ERROR_TOO_MANY_PARAMETER = 1308;
+const ERROR_UNKNOWN_LINK_QUALIFIER = 1400;
+const ERROR_UNDEFINED_RENDER_CONTROL_COMBINATION = 1401;
+const ERROR_MISSING_VALUE = 1402;
+const ERROR_INVALID_VALUE = 1403;
+const ERROR_MULTIPLE_DEFINITION = 1404;
+const ERROR_MULTIPLE_URL_PAGE_MAILTO_DEFINITION = 1405;
+const ERROR_UNKNOWN_TOKEN = 1406;
+const ERROR_TOO_FEW_PARAMETER_FOR_SENDMAIL = 1407;
+const ERROR_TOO_MANY_PARAMETER = 1408;
 
 // Upload
-const ERROR_UPLOAD = 1400;
-const ERROR_UNKNOWN_ACTION = 1402;
-const ERROR_NO_TARGET_PATH_FILE_NAME = 1403;
+const ERROR_UPLOAD = 1500;
+const ERROR_UNKNOWN_ACTION = 1502;
+const ERROR_NO_TARGET_PATH_FILE_NAME = 1503;
 
 // KeyValueParser
 const ERROR_KVP_VALUE_HAS_NO_KEY = 1900;
diff --git a/extension/qfq/qfq/Database.php b/extension/qfq/qfq/Database.php
index d06a6a8b4..336e65c20 100644
--- a/extension/qfq/qfq/Database.php
+++ b/extension/qfq/qfq/Database.php
@@ -567,4 +567,27 @@ class Database {
         return $this->mysqli->insert_id;
     }
 
+    /**
+     * Searches for the table '$name'.
+     *
+     * @param $name
+     * @return bool  true if found, else false
+     */
+    public function existTable($name) {
+        $found = false;
+
+        $tables = $this->sql("SHOW tables");
+
+        foreach ($tables as $t) {
+            foreach ($t as $key => $value) {
+                if ($value === $name) {
+                    $found = true;
+                    break 2;
+                }
+            }
+        }
+
+        return $found;
+    }
+
 }
\ No newline at end of file
diff --git a/extension/qfq/qfq/QuickFormQuery.php b/extension/qfq/qfq/QuickFormQuery.php
index 66a556c23..ff69ea8c3 100644
--- a/extension/qfq/qfq/QuickFormQuery.php
+++ b/extension/qfq/qfq/QuickFormQuery.php
@@ -319,6 +319,10 @@ class QuickFormQuery {
             return false;
         }
 
+        if (!$this->db->existTable('Form')) {
+            throw new UserFormException("Table 'Form' not found", ERROR_MISSING_TABLE);
+        }
+
         // Preparation for Log, Debug
         $this->store->setVar(SYSTEM_FORM, $formName, STORE_SYSTEM);
 
-- 
GitLab