diff --git a/helferdb_structure_mariadb.sql b/helferdb_structure_mariadb.sql new file mode 100644 index 0000000..b95af3a --- /dev/null +++ b/helferdb_structure_mariadb.sql @@ -0,0 +1,54 @@ +DROP TABLE IF EXISTS `Dienst`; +CREATE TABLE `Dienst` ( + `DienstID` int(11) NOT NULL AUTO_INCREMENT, + `Was` text NOT NULL, + `Wo` text NOT NULL, + `Info` text NOT NULL, + `Leiter` int(11) NOT NULL, + `ElternDienstID` int(11) DEFAULT NULL, + `HelferLevel` int(11) DEFAULT NULL, + PRIMARY KEY (`DienstID`) +); +DROP TABLE IF EXISTS `EinzelSchicht`; +CREATE TABLE `EinzelSchicht` ( + `EinzelSchichtID` int(11) NOT NULL AUTO_INCREMENT, + `SchichtID` int(11) NOT NULL, + `HelferID` int(11) NOT NULL, + PRIMARY KEY (`EinzelSchichtID`) +); +DROP TABLE IF EXISTS `Helfer`; +CREATE TABLE `Helfer` ( + `HelferId` int(11) NOT NULL AUTO_INCREMENT, + `Name` varchar(50) NOT NULL, + `Status` int(11) NOT NULL, + `Email` varchar(50) NOT NULL, + `Handy` varchar(50) NOT NULL, + `BildFile` varchar(200) NOT NULL, + `DoReport` tinyint(1) NOT NULL, + `Admin` int(11) DEFAULT 0, + `Passwort` varchar(200) DEFAULT NULL, + `HelferLevel` int(11) DEFAULT NULL, + PRIMARY KEY (`HelferId`), + UNIQUE KEY `unique_index_email` (`Email`) +); +DROP TABLE IF EXISTS `HelferLevel`; +CREATE TABLE `HelferLevel` ( + `HelferLevel` int(11) DEFAULT NULL, + `HelferLevelBeschreibung` varchar(255) DEFAULT NULL +); +DROP TABLE IF EXISTS `Schicht`; +CREATE TABLE `Schicht` ( + `SchichtID` int(11) NOT NULL AUTO_INCREMENT, + `DienstID` int(11) NOT NULL, + `Von` datetime NOT NULL, + `Bis` datetime NOT NULL, + `Soll` int(11) NOT NULL, + `Dauer` time DEFAULT NULL, + PRIMARY KEY (`SchichtID`) +); +DROP TABLE IF EXISTS `Status`; +CREATE TABLE `Status` ( + `StatusID` int(11) NOT NULL AUTO_INCREMENT, + `Text` text NOT NULL, + PRIMARY KEY (`StatusID`) +); diff --git a/helferdb_structure_sqlite.sql b/helferdb_structure_sqlite.sql new file mode 100644 index 0000000..89de12b --- /dev/null +++ b/helferdb_structure_sqlite.sql @@ -0,0 +1,54 @@ +DROP TABLE IF EXISTS `Dienst`; +CREATE TABLE `Dienst` ( + `DienstID` int(11) NOT NULL, + `Was` text NOT NULL, + `Wo` text NOT NULL, + `Info` text NOT NULL, + `Leiter` int(11) NOT NULL, + `ElternDienstID` int(11) DEFAULT NULL, + `HelferLevel` int(11) DEFAULT NULL, + PRIMARY KEY (`DienstID`) +); +DROP TABLE IF EXISTS `EinzelSchicht`; +CREATE TABLE `EinzelSchicht` ( + `EinzelSchichtID` int(11) NOT NULL, + `SchichtID` int(11) NOT NULL, + `HelferID` int(11) NOT NULL, + PRIMARY KEY (`EinzelSchichtID`) +); +DROP TABLE IF EXISTS `Helfer`; +CREATE TABLE `Helfer` ( + `HelferId` int(11) NOT NULL, + `Name` varchar(50) NOT NULL, + `Status` int(11) NOT NULL, + `Email` varchar(50) NOT NULL, + `Handy` varchar(50) NOT NULL, + `BildFile` varchar(200) NOT NULL, + `DoReport` tinyint(1) NOT NULL, + `Admin` int(11) DEFAULT 0, + `Passwort` varchar(200) DEFAULT NULL, + `HelferLevel` int(11) DEFAULT NULL, + PRIMARY KEY (`HelferId`), + UNIQUE('Email') +); +DROP TABLE IF EXISTS `HelferLevel`; +CREATE TABLE `HelferLevel` ( + `HelferLevel` int(11) DEFAULT NULL, + `HelferLevelBeschreibung` varchar(255) DEFAULT NULL +); +DROP TABLE IF EXISTS `Schicht`; +CREATE TABLE `Schicht` ( + `SchichtID` int(11) NOT NULL, + `DienstID` int(11) NOT NULL, + `Von` datetime NOT NULL, + `Bis` datetime NOT NULL, + `Soll` int(11) NOT NULL, + `Dauer` time DEFAULT NULL, + PRIMARY KEY (`SchichtID`) +); +DROP TABLE IF EXISTS `Status`; +CREATE TABLE `Status` ( + `StatusID` int(11) NOT NULL, + `Text` text NOT NULL, + PRIMARY KEY (`StatusID`) +); diff --git a/html/SQL.php b/html/SQL.php index 4d1cf10..09dbbd1 100644 --- a/html/SQL.php +++ b/html/SQL.php @@ -28,7 +28,7 @@ class DB { public function prepare($method, $sql, $variant = '') { - self::$stmts[$method . "::" . $variant] = self::$pdo->prepare($sql); + return self::$stmts[$method . "::" . $variant] = self::$pdo->prepare($sql); } public function execute($method, $values = array(), $variant = '') @@ -40,7 +40,23 @@ class DB { { return self::$stmts[$method . "::" . $variant]->fetch($mode,$cursorOrientation,$cursorOffset); } - + public function executeScript($method, $filename, $variant = '') + { + $sqlFromFile = file_get_contents($filename); + $sqlStatements = explode(";", $sqlFromFile); + $statementcounter = 0; + foreach($sqlStatements as $sqlStatement){ + if(self::prepare($method, $sqlStatement.";", $variant) == false){ + return array(); + }; + $retval[$statementcounter] = self::execute($method,array(),$variant); + if(!is_null(self::pdoErrorCode()) && self::pdoErrorCode() != '00000'){ + return $retval; + } + $statementcounter++; + } + return $retval; + } public function fetchAll($method, $variant = '') { return self::$stmts[$method . "::" . $variant]->fetchAll(); diff --git a/html/Setup.php b/html/Setup.php index 7cfe029..1c91b7c 100644 --- a/html/Setup.php +++ b/html/Setup.php @@ -18,10 +18,10 @@ $wizard->addCode('enterlogindata',function($storedvariables){ }); $wizard->addCode('createdatabase',function($storedvariables){ - $conf_file = fopen("../etc/konfiguration.php", "w"); + $conf_file = fopen("../bengelsystem_konfiguration.php", "w"); fwrite($conf_file, "addCode('createdatabase',function($storedvariables){ echo "
Fehler ".$db->pdoErrorCode()." beim Verbindungsversuch mit der Datenbank: \"".$db->pdoErrorInfo()[2]."\"
"; $_POST['step'] = 'createdatabase'; } else { - echo "Successfully connected to database!
"; + echo "Erfolgreich mit der Datenbank verbunden!
"; } }); @@ -61,29 +61,21 @@ $wizard->addCode('createdatabasetables',function($storedvariables){ echo "Fehler ".$db->pdoErrorCode()." beim Verbindungsversuch mit der Datenbank: \"".$db->pdoErrorInfo()[2]."\"
"; $_POST['step'] = 'createdatabase'; } else { - echo "Successfully connected to database!
"; + echo "Erfolgreich mit der Datenbank verbunden!
"; } - $sql = file_get_contents("../etc/helferdb_schema_test.sql"); - $db->prepare(__METHOD__,$sql); - if(!is_null($db->errorCode(__METHOD__)) && $db->errorCode(__METHOD__) != '1'){ - echo ""; - var_dump(__METHOD__); - var_dump($db->errorCode(__METHOD__)); - var_dump($db->errorInfo(__METHOD__)); - echo ""; - echo "
Fehler: \"".$db->errorInfo(__METHOD__)[2]."\"
"; - $_POST['step'] = 'createdatabasetables'; + if($storedvariables['selectdatabase']['databasetype'] == 'SQLite'){ + $dbscript = "../helferdb_structure_sqlite.sql"; + } elseif ($storedvariables['selectdatabase']['databasetype'] == 'MariaDB'){ + $dbscript = "../helferdb_structure_mariadb.sql"; } - $db->execute(__METHOD__); - if(!is_null($db->errorCode(__METHOD__)) && $db->errorCode(__METHOD__) != '1'){ - echo ""; - var_dump(__METHOD__); - var_dump($db->errorCode(__METHOD__)); - var_dump($db->errorInfo(__METHOD__)); - echo ""; - echo "
Fehler: \"".$db->errorInfo(__METHOD__)[2]."\"
"; - $_POST['step'] = 'createdatabasetables'; + $statementsReturnvalues = $db->executeScript(__METHOD__, $dbscript); + if(!is_null($db->pdoErrorCode()) && $db->pdoErrorCode() != '00000'){ + echo "Fehler ".$db->pdoErrorCode()." bei Statement Nr. ".sizeof($statementsReturnvalues)." beim Versuch Tabellen anzulegen: \"".$db->pdoErrorInfo()[2]."\"
"; + $_POST['step'] = 'createdatabase'; + } else { + echo "Datenbanktabellen wurden erfolgreich angelegt!
"; } + }); $wizard->renderPHP(); diff --git a/html/Wizard.php b/html/Wizard.php index d3ca44f..97aa9de 100644 --- a/html/Wizard.php +++ b/html/Wizard.php @@ -145,7 +145,11 @@ class Wizard { else{ $page = "\xEF\xBB\xBF".$pageval; } + libxml_use_internal_errors(true); $pagedom->loadHTML($page); + foreach (libxml_get_errors() as $error) { + echo "Error when parsing html for step \"".$_POST['step']."\":".$error->line." ".$error->column." ".$error->message."
"; + } $forms = $pagedom->getElementsByTagName('form'); foreach($forms as $form){ $input = $pagedom->createElement('input'); diff --git a/html/konfiguration.php b/html/konfiguration.php index e5d846a..e526158 100644 --- a/html/konfiguration.php +++ b/html/konfiguration.php @@ -1,7 +1,7 @@ Datenbanktyp auswählen<\/h2>Für die meisten Conventions sollte eine SQLite Datenbank ausreichen. In diesem Fall ist die Datenbank in einer einzelnen Datei und es ist nicht nötig eine separate Datenbank aufzusetzen.<\/p>