Add warning and code functionality
This commit is contained in:
parent
906efd44a5
commit
7f9d9a06df
|
|
@ -4,6 +4,26 @@ require_once("Wizard.php");
|
|||
|
||||
$wizard = new Wizard();
|
||||
|
||||
$wizard->addCode('selectdatabase',function($storedvariables){
|
||||
$selectdatabase['databasetype'] = $_POST['databasetype'];
|
||||
return $selectdatabase;
|
||||
});
|
||||
|
||||
$wizard->addCode('enterlogindata',function($storedvariables){
|
||||
$logindata['host'] = $_POST['host'];
|
||||
$logindata['user'] = $_POST['user'];
|
||||
$logindata['password'] = $_POST['password'];
|
||||
$logindata['dbname'] = $_POST['dbname'];
|
||||
$conf_file = fopen("../etc/konfiguration.php", "w");
|
||||
fwrite($conf_file, "<?php\n");
|
||||
fwrite($conf_file, "define( 'MYSQL_HOST', '".$logindata['host']."' );\n");
|
||||
fwrite($conf_file, "define( 'MYSQL_BENUTZER', '".$logindata['user']."' );\n");
|
||||
fwrite($conf_file, "define( 'MYSQL_KENNWORT', '".$logindata['password']."' );\n");
|
||||
fwrite($conf_file, "define( 'MYSQL_DATENBANK', '".$logindata['dbname']."' );\n");
|
||||
fwrite($conf_file, "?>");
|
||||
return $logindata;
|
||||
});
|
||||
|
||||
$wizard->renderPHP();
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
class WizardStep {
|
||||
public string $page = "";
|
||||
public array $redirects = array();
|
||||
public string $warning = "";
|
||||
public $code = null;
|
||||
public function __construct($step){
|
||||
if(isset($step['page'])){
|
||||
$this->page = $step['page'];
|
||||
|
|
@ -16,49 +18,76 @@ class WizardStep {
|
|||
foreach($this->redirects as $redirect){
|
||||
if(isset($redirect['==']) && isset($redirect['id'])){
|
||||
foreach($redirect['=='] as $key => $value){
|
||||
if(isset($_GET[$key]) && $_GET[$key] == $value){
|
||||
$_GET['step'] = $redirect['id'];
|
||||
if(isset($_POST[$key]) && $_POST[$key] == $value){
|
||||
$_POST['step'] = $redirect['id'];
|
||||
if(isset($redirect['warning'])){
|
||||
$this->warning = $redirect['warning'];
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(isset($redirect['!=']) && isset($redirect['id'])){
|
||||
foreach($redirect['!='] as $key => $value){
|
||||
if(isset($_GET[$key]) && $_GET[$key] != $value){
|
||||
$_GET['step'] = $redirect['id'];
|
||||
if(isset($_POST[$key]) && $_POST[$key] != $value){
|
||||
$_POST['step'] = $redirect['id'];
|
||||
if(isset($redirect['warning'])){
|
||||
$this->warning = $redirect['warning'];
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(isset($redirect['>']) && isset($redirect['id'])){
|
||||
foreach($redirect['>'] as $key => $value){
|
||||
if(isset($_GET[$key]) && $_GET[$key] > $value){
|
||||
$_GET['step'] = $redirect['id'];
|
||||
if(isset($_POST[$key]) && $_POST[$key] > $value){
|
||||
$_POST['step'] = $redirect['id'];
|
||||
if(isset($redirect['warning'])){
|
||||
$this->warning = $redirect['warning'];
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(isset($redirect['<']) && isset($redirect['id'])){
|
||||
foreach($redirect['<'] as $key => $value){
|
||||
if(isset($_GET[$key]) && $_GET[$key] < $value){
|
||||
$_GET['step'] = $redirect['id'];
|
||||
if(isset($_POST[$key]) && $_POST[$key] < $value){
|
||||
$_POST['step'] = $redirect['id'];
|
||||
if(isset($redirect['warning'])){
|
||||
$this->warning = $redirect['warning'];
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(isset($redirect['>=']) && isset($redirect['id'])){
|
||||
foreach($redirect['>='] as $key => $value){
|
||||
if(isset($_GET[$key]) && $_GET[$key] >= $value){
|
||||
$_GET['step'] = $redirect['id'];
|
||||
if(isset($_POST[$key]) && $_POST[$key] >= $value){
|
||||
$_POST['step'] = $redirect['id'];
|
||||
if(isset($redirect['warning'])){
|
||||
$this->warning = $redirect['warning'];
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(isset($redirect['<=']) && isset($redirect['id'])){
|
||||
foreach($redirect['<='] as $key => $value){
|
||||
if(isset($_GET[$key]) && $_GET[$key] <= $value){
|
||||
$_GET['step'] = $redirect['id'];
|
||||
if(isset($_POST[$key]) && $_POST[$key] <= $value){
|
||||
$_POST['step'] = $redirect['id'];
|
||||
if(isset($redirect['warning'])){
|
||||
$this->warning = $redirect['warning'];
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public function setCode(callable $function){
|
||||
$this->code = $function;
|
||||
}
|
||||
}
|
||||
|
||||
class Wizard {
|
||||
|
|
@ -66,6 +95,7 @@ class Wizard {
|
|||
private string $firststep = "";
|
||||
private array $steps = array();
|
||||
private string $footer = "";
|
||||
private array $storedvariables = array();
|
||||
public function __construct($json_file = 'setupWizard.json'){
|
||||
$stepsArray = json_decode(file_get_contents($json_file), true);
|
||||
$this->header = $stepsArray['header'];
|
||||
|
|
@ -74,19 +104,40 @@ class Wizard {
|
|||
$this->steps[$step['id']] = new WizardStep($step);
|
||||
}
|
||||
$this->footer = $stepsArray['footer'];
|
||||
if(isset($_POST['storedvariables'])){
|
||||
$this->storedvariables = json_decode($_POST['storedvariables'],JSON_FORCE_OBJECT);
|
||||
}
|
||||
}
|
||||
public function renderPHP(){
|
||||
if(isset($_GET['stepfrom'])){
|
||||
$this->steps[$_GET['stepfrom']]->setCurrentStep();
|
||||
}
|
||||
echo $this->header;
|
||||
if(isset($_GET['step'])){
|
||||
echo $this->steps[$_GET['step']]->page;
|
||||
if(isset($_POST['stepfrom'])){
|
||||
$this->steps[$_POST['stepfrom']]->setCurrentStep();
|
||||
if(isset($_POST['step']) && ($_POST['step'] != $_POST['stepfrom'])){
|
||||
if(!is_null($this->steps[$_POST['stepfrom']]->code)){
|
||||
$this->storedvariables[$_POST['stepfrom']] = call_user_func($this->steps[$_POST['stepfrom']]->code, $this->storedvariables);
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
echo $this->steps[$this->firststep]->page;
|
||||
if(!isset($_POST['step'])){
|
||||
$_POST['step'] = $this->firststep;
|
||||
}
|
||||
// If warning not set this does not add anything to the page:
|
||||
echo $this->steps[$_POST['step']]->warning;
|
||||
$pagedom = new DOMDocument();
|
||||
$pagedom->loadHTML("\xEF\xBB\xBF".$this->steps[$_POST['step']]->page);
|
||||
$forms = $pagedom->getElementsByTagName('form');
|
||||
foreach($forms as $form){
|
||||
$input = $pagedom->createElement('input');
|
||||
$input->setAttribute('type','hidden');
|
||||
$input->setAttribute('name','storedvariables');
|
||||
$input->setAttribute('value',json_encode($this->storedvariables,JSON_FORCE_OBJECT));
|
||||
$form->appendChild($input);
|
||||
}
|
||||
echo $pagedom->saveHTML();
|
||||
echo $this->footer;
|
||||
}
|
||||
public function addCode($stepid, $function){
|
||||
$this->steps[$stepid]->setCode($function);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"steps": [
|
||||
{
|
||||
"id": "selectdatabase",
|
||||
"page": "<h2>Datenbanktyp auswählen<\/h2><p>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><p><form action=\"Setup.php\">\r\n <fieldset>\r\n <legend>Datenbank auswählen<\/legend>\r\n <input type=\"hidden\" name=\"stepfrom\" value=\"selectdatabase\" \/>\r\n <input type=\"radio\" id=\"sqlite\" name=\"databasetype\" value=\"SQLite\" checked \/>\r\n <label for=\"sqlite\">SQLite<\/label><br \/>\r\n <input type=\"radio\" id=\"sqlite\" name=\"databasetype\" value=\"MariaDB\" \/>\r\n <label for=\"sqlite\">MariaDB<\/label><br \/>\r\n <input type=\"submit\" value=\"Weiter\" \/>\r\n <\/fieldset>\r\n<\/form><\/p>",
|
||||
"page": "<h2>Datenbanktyp auswählen<\/h2><p>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><p><form action=\"Setup.php\" method=\"post\">\r\n <fieldset>\r\n <legend>Datenbank auswählen<\/legend>\r\n <input type=\"hidden\" name=\"stepfrom\" value=\"selectdatabase\" \/>\r\n <input type=\"radio\" id=\"sqlite\" name=\"databasetype\" value=\"SQLite\" checked \/>\r\n <label for=\"sqlite\">SQLite<\/label><br \/>\r\n <input type=\"radio\" id=\"sqlite\" name=\"databasetype\" value=\"MariaDB\" \/>\r\n <label for=\"sqlite\">MariaDB<\/label><br \/>\r\n <input type=\"submit\" value=\"Weiter\" \/>\r\n <\/fieldset>\r\n<\/form><\/p>",
|
||||
"redirects": [
|
||||
{
|
||||
"==": {"databasetype": "SQLite"},
|
||||
|
|
@ -22,7 +22,23 @@
|
|||
},
|
||||
{
|
||||
"id": "enterlogindata",
|
||||
"page": "<h2>Logindaten f\u00FCr die Datenbank eingeben<\/h2>\r\n<p>Bitte hier zun\u00E4chst die Logindaten f\u00FCr die Datenbank eingeben. Es muss in der Regel nur ein Passwort vergeben werden und die anderen beiden Werte k\u00F6nnen unver\u00E4ndert bleiben.<\/p>\r\n<p><form action=\"Setup.php\" >\r\n <input type=\"hidden\" name=\"step\" value=\"setupdatabase\" \/>\r\n <label for=\"host\">Hostname<\/label><br \/>\r\n <input type=\"text\" id=\"host\" name=\"host\" value=\"localhost\" \/><br \/>\r\n <label for=\"user\">Benutzername<\/label><br \/>\r\n <input type=\"text\" id=\"user\" name=\"user\" value=\"helferdb\" \/><br \/>\r\n <label for=\"password\">Passwort<\/label><br \/>\r\n <input type=\"password\" id=\"password\" name=\"password\" \/><br \/>\r\n <input type=\"submit\" value=\"Datenbank einrichten\" \/>\r\n<\/form><\/p>\r\n"
|
||||
"page": "<h2>Logindaten für die Datenbank eingeben<\/h2>\r\n<p>Bitte hier zun\u00E4chst die Logindaten f\u00FCr die Datenbank eingeben. Es muss in der Regel nur ein Passwort vergeben werden und die anderen beiden Werte k\u00F6nnen unver\u00E4ndert bleiben.<\/p>\r\n<p><form action=\"Setup.php\" method=\"post\">\r\n <fieldset>\r\n <legend>Logindaten eingeben<\/legend>\r\n <input type=\"hidden\" name=\"step\" value=\"setupdatabase\" \/>\r\n <input type=\"hidden\" name=\"stepfrom\" value=\"enterlogindata\" \/>\r\n <label for=\"host\">Hostname<\/label><br \/>\r\n <input type=\"text\" id=\"host\" name=\"host\" value=\"localhost\" \/><br \/>\r\n <label for=\"user\">Benutzername<\/label><br \/>\r\n <input type=\"text\" id=\"user\" name=\"user\" value=\"helferdb\" \/><br \/>\r\n <label for=\"password\">Passwort<\/label><br \/>\r\n <input type=\"password\" id=\"password\" name=\"password\" \/><br \/>\r\n <label for=\"dbname\">Datenbankname<\/label><br \/>\r\n <input type=\"text\" id=\"dbname\" name=\"dbname\" value=\"helferdb\" \/><br \/>\r\n <input type=\"submit\" value=\"Datenbank einrichten\" \/>\r\n<\/fieldset>\r\n<\/form><\/p>\r\n",
|
||||
"redirects": [
|
||||
{
|
||||
"==": {"password": ""},
|
||||
"id": "enterlogindata",
|
||||
"warning": "<p style=\"color:red\"><i>Bitte Passwort eingeben!<\/i><\/p>"
|
||||
},
|
||||
{
|
||||
"==": {
|
||||
"host":"",
|
||||
"user":"",
|
||||
"dbname":""
|
||||
},
|
||||
"id": "enterlogindata",
|
||||
"warning": "<p style=\"color:red\"><i>Bitte alle Felder eingeben!<\/i><\/p>"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "setupdatabase",
|
||||
|
|
|
|||
Loading…
Reference in New Issue