From a80e69efa2aad235386345003d30d24a093dfb1a Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Fri, 24 Jun 2022 18:19:26 +0200 Subject: [PATCH] module creator --- tools/module_creator/module_creator.php | 181 +++++++++++++++++ tools/module_creator/module_creator_edit.tpl | 49 +++++ tools/module_creator/module_creator_list.tpl | 5 + .../module_creator_php_template.txt | 189 ++++++++++++++++++ 4 files changed, 424 insertions(+) create mode 100644 tools/module_creator/module_creator.php create mode 100644 tools/module_creator/module_creator_edit.tpl create mode 100644 tools/module_creator/module_creator_list.tpl create mode 100644 tools/module_creator/module_creator_php_template.txt diff --git a/tools/module_creator/module_creator.php b/tools/module_creator/module_creator.php new file mode 100644 index 00000000..d906da20 --- /dev/null +++ b/tools/module_creator/module_creator.php @@ -0,0 +1,181 @@ + $value) { + echo($value); + + switch ($key) { + case 'Field': + $colwidth = 32; + + if ($value != 'id') { + $columns[] = $value; + } + + break; + case 'Type': + $colwidth = 16; + break; + default: + $colwidth = 8; + break; + } + + for ($filler = strlen($value); $filler < $colwidth; $filler++) { + echo(" "); + } + } + + // Build edit form + // {|Bezeichnung|}:* + + if ($row['Field'] != 'id') { + $edit_form = $edit_form . '{|' . $row['Field'] . '|}:' . "\n"; + } + + echo("\n"); + } + +// Create php file + + $list_of_columns = implode(', ', $columns); + $list_of_columns_in_quotes = "'" . implode('\', \'', $columns) . "'"; + + foreach ($columns as $column) { + $get_input = $get_input . "\$input['$column'] = \$this->app->Secure->GetPOST('$column');\n\t"; + $set_input = $set_input . "\$this->app->Tpl->Set('" . strtoupper($column) . "', \$input['$column']);\n\t"; + } + + $php_file_contents = file_get_contents($php_template_file_name); + + if (empty($php_file_contents)) { + echo("Failed to load" . $php_template_file_name . "\n"); + exit; + } + + $php_file_contents = str_replace('PLACEHOLDER_MODULENAME', $module_name, $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_MODULECLASSNAME', $module_class_name, $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_LIST', $module_name . "_list", $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_EDIT', $module_name . "_edit", $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_DELETE', $module_name . "_delete", $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_SQL_LIST', "SELECT id, $list_of_columns, id FROM $module_name", $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_SQL_EDIT', "INSERT INTO $module_name ($list_of_columns, id) values ('\".implode('\', \'',\$input).\"', \$id) ON DUPLICATE KEY UPDATE SET ", $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_GET_INPUT', $get_input, $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_SET_INPUT', $set_input, $php_file_contents); + $php_file_contents = str_replace('PLACEHOLDER_COLUMNS', $list_of_columns_in_quotes, $php_file_contents); + + if ($verbose) { + echo($php_file_contents); + } + + $php_file = fopen($target_php_folder . $php_file_name, "w"); + if (empty($php_file)) { + echo ("Failed to write to " . $target_php_folder . $php_file_name); + } + $template_list_file = fopen($target_tpl_folder . $template_list_file_name, "w"); + if (empty($template_list_file)) { + echo ("Failed to write to " . $target_tpl_folder . $template_list_file_name); + } + $template_edit_file = fopen($target_tpl_folder . $template_edit_file_name, "w"); + if (empty($template_edit_file)) { + echo ("Failed to write to " . $target_tpl_folder . $template_edit_file_name); + } + + fwrite($php_file, $php_file_contents); + fclose($php_file); + + $list_template_contents = file_get_contents("module_creator_list.tpl"); + if ($verbose) { + echo($list_template_contents); + } + fwrite($template_list_file, $list_template_contents); + fclose($template_list_file); + + $edit_template_contents = file_get_contents("module_creator_edit.tpl"); + $edit_template_contents = str_replace('PLACEHOLDER_LEGEND', "".$module_name, $edit_template_contents); + $edit_template_contents = str_replace('PLACEHOLDER_FIELDS', $edit_form, $edit_template_contents); + + if ($verbose) { + echo($edit_template_contents); + } + fwrite($template_edit_file, $edit_template_contents); + fclose($template_edit_file); + + echo("\n\nCreated module files: \n"); + echo ($target_php_folder . $php_file_name . "\n"); + echo ($target_tpl_folder . $template_list_file_name . "\n"); + echo ($target_tpl_folder . $template_edit_file_name . "\n"); +} else { + echo("Wrong parameters\n"); +} + + + diff --git a/tools/module_creator/module_creator_edit.tpl b/tools/module_creator/module_creator_edit.tpl new file mode 100644 index 00000000..af03696e --- /dev/null +++ b/tools/module_creator/module_creator_edit.tpl @@ -0,0 +1,49 @@ + +
+
+ [MESSAGE] +
+
+
+
+
+ {|PLACEHOLDER_LEGEND|} + + PLACEHOLDER_FIELDS +
+
+ +
+
+
+
+
+ +
+ + diff --git a/tools/module_creator/module_creator_list.tpl b/tools/module_creator/module_creator_list.tpl new file mode 100644 index 00000000..1742e34f --- /dev/null +++ b/tools/module_creator/module_creator_list.tpl @@ -0,0 +1,5 @@ +
+ [MESSAGE] + [TAB1] + [TAB1NEXT] +
diff --git a/tools/module_creator/module_creator_php_template.txt b/tools/module_creator/module_creator_php_template.txt new file mode 100644 index 00000000..0d3ee704 --- /dev/null +++ b/tools/module_creator/module_creator_php_template.txt @@ -0,0 +1,189 @@ +app = $app; + if ($intern) + return; + + $this->app->ActionHandlerInit($this); + + $this->app->ActionHandler("list", "PLACEHOLDER_LIST"); + $this->app->ActionHandler("create", "PLACEHOLDER_EDIT"); // This automatically adds a "New" button + $this->app->ActionHandler("edit", "PLACEHOLDER_EDIT"); + $this->app->ActionHandler("delete", "PLACEHOLDER_DELETE"); + + $this->app->DefaultActionHandler("list"); + + $this->app->ActionHandlerListen($app); + } + + public function Install() { + /* Fill out manually later */ + } + + static function TableSearch(&$app, $name, $erlaubtevars) { + switch ($name) { + case "PLACEHOLDER_LIST": + $allowed['PLACEHOLDER_LIST'] = array('list'); + $heading = array(PLACEHOLDER_COLUMNS, 'Menü'); + $width = array('10%'); // Fill out manually later + + $findcols = array(PLACEHOLDER_COLUMNS); + $searchsql = array(PLACEHOLDER_COLUMNS); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; + + $sql = "PLACEHOLDER_SQL_LIST"; + + $where = "1 +"; +// $groupby = ""; + $count = "SELECT count(DISTINCT id) FROM PLACEHOLDER_MODULENAME WHERE $where"; + + break; + } + + $erg = false; + + foreach ($erlaubtevars as $k => $v) { + if (isset($$v)) + $erg[$v] = $$v; + } + return $erg; + } + + function PLACEHOLDER_LIST() { + $this->app->erp->MenuEintrag("index.php?module=PLACEHOLDER_MODULENAME&action=list", "Übersicht"); + $this->app->erp->MenuEintrag("index.php?module=PLACEHOLDER_MODULENAME&action=create", "Neu anlegen"); + + $this->app->erp->MenuEintrag("index.php", "Zurück"); + + $this->app->YUI->TableSearch('TAB1', 'PLACEHOLDER_LIST', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "PLACEHOLDER_MODULENAME_list.tpl"); + } + + public function PLACEHOLDER_DELETE() { + $id = (int) $this->app->Secure->GetGET('id'); + + $this->app->DB->Delete("DELETE FROM `PLACEHOLDER_MODULENAME` WHERE `id` = '{$id}'"); + $this->app->Tpl->Set('MESSAGE', "
Der Eintrag wurde gelöscht.
"); + + $this->PLACEHOLDER_LIST(); + } + + /* + * Edit PLACEHOLDER_MODULENAME item + * If id is empty, create a new one + */ + + function PLACEHOLDER_EDIT() { + $id = $this->app->Secure->GetGET('id'); + + $this->app->Tpl->Set('ID', $id); + + $this->app->erp->MenuEintrag("index.php?module=PLACEHOLDER_MODULENAME&action=edit&id=$id", "Details"); + $this->app->erp->MenuEintrag("index.php?module=PLACEHOLDER_MODULENAME&action=list", "Zurück zur Übersicht"); + $id = $this->app->Secure->GetGET('id'); + $input = $this->GetInput(); + $submit = $this->app->Secure->GetPOST('submit'); + + if (empty($id)) { + // New item + $id = 'NULL'; + } + + if ($submit != '') + { + + // Write to database + + // Add checks here + + $columns = "id, "; + $values = "$id, "; + $update = ""; + + $fix = ""; + + foreach ($input as $key => $value) { + $columns = $columns.$fix.$key; + $values = $values.$fix."'".$value."'"; + $update = $update.$fix.$key." = '$value'"; + + $fix = ", "; + } + +// echo($columns."
"); +// echo($values."
"); +// echo($update."
"); + + $sql = "INSERT INTO PLACEHOLDER_MODULENAME (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; + + + echo($sql); + + $this->app->DB->Update($sql); + + if ($id == 'NULL') { + $msg = $this->app->erp->base64_url_encode("
Das Element wurde erfolgreich angelegt.
"); + header("Location: index.php?module=PLACEHOLDER_MODULENAME&action=list&msg=$msg"); + } else { + $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); + } + } + + + // Load values again from database + $result = $this->app->DB->SelectArr("PLACEHOLDER_SQL_LIST"." WHERE id=$id"); + + foreach ($result[0] as $key => $value) { + $this->app->Tpl->Set(strtoupper($key), $value); + } + + + /* + * Add displayed items later + * + + $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email); + $this->app->Tpl->Add('EMAIL', $email); + $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); + */ + +// $this->SetInput($input); + $this->app->Tpl->Parse('PAGE', "PLACEHOLDER_MODULENAME_edit.tpl"); + } + + /** + * Get all paramters from html form and save into $input + */ + public function GetInput(): array { + $input = array(); + //$input['EMAIL'] = $this->app->Secure->GetPOST('email'); + + PLACEHOLDER_GET_INPUT + + return $input; + } + + /* + * Set all fields in the page corresponding to $input + */ + function SetInput($input) { + // $this->app->Tpl->Set('EMAIL', $input['email']); + + PLACEHOLDER_SET_INPUT + } + +}