3dbx()->get_system_obj(
'dbxReport',
'use' );
7 private function check_create_dd( $dd ) {
9 $oDD =
dbx()->get_system_obj(
'dbxDD' );
11 if ( !file_exists( $dd_file ) ) {
12 $oDD->create_dd( $dd );
15 $retval =
'<span class="red">not exist</span>';
16 $exist = $dd->get_table_exist($dd);
17 if ($exist) $retval =
'exist';
19 $change = $dd->update_dd( $dd );
40 private function get_dd_exist($db_server, $db_table, $path =
'.') {
44 $path = rtrim($path,
'/') .
'/';
47 $files = glob($path .
'*.dd.php');
49 foreach ($files as $file) {
58 if (isset(
$table[
'table']) &&
$table[
'table'] == $db_table &&
59 isset(
$table[
'server']) &&
$table[
'server'] == $db_server) {
93 $dd_list = implode(
'', array_map(
function($file) {
95 $dd = basename($file,
'.dd.php');
99 $but_edit =
'<a class="nav-link openWin" href="?dbx_modul=dbxAdmin&dbx_run1=datadic&dbx_run2=list_dd&dbx_run3=row_edit&rid='. $dd .
'" data-dbx_win_width="1400" data-dbx_win_height="800"><i class="bi bi-pencil-square"></i></a>';
103 return '<span class="dd-item">' . $dd .
'</span>' . $but_edit;
107 $base_url=
dbx()->get_base_url();
108 $bt[
'title'] =
"dd für Server - Datenbank - Tabelle erstellen.";
109 $bt[
'buttonText'] =
"<i class='bi bi-plus-lg'></i>";
110 $bt[
'class'] =
"btn btn-primary btn-sm p-1 d-flex align-items-center justify-content-center";
111 $bt[
'style'] =
"width: 36px; height: 24px; cursor: pointer; margin-left: 5px;";
112 $bt[
'url'] = $base_url.
"?dbx_modul=dbxAdmin&dbx_run1=datadic&dbx_run2=add_dd&rid=".$rid;
113 $bt[
'modalClass'] =
"modal-xl";
114 $bt[
'returnJs'] =
"dbxReSendForm(\'#dbx_form_{i}\')";
115 $bt[
'isPrompt'] =
'false' ;
116 $bt[
'selectValueClass'] =
"";
117 $bt[
'selectTarget'] =
"";
118 $but_add =$this->
get_tpl(
'button_modal',$bt);
125 $dd_list =
'<div class="d-flex justify-content-between align-items-center w-100">
126 <span class="dd-list">' . $dd_list .
'</span>
131 $record[
'dd'] = $dd_list;
134 $this->_record = $record;
147 $oDB =
dbx()->get_system_obj(
'dbxDB');
148 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
150 $tables=0; $count_tables=0;
154 $isActive =
$oDB->db_server_config_is_active((
string)
$server, is_array($record) ? $record : array());
155 $connect = $isActive ?
$oDB->connect_db_server(
$server) : 0;
162 $record[
'sync'] =
'<span class="badge bg-secondary">Deaktiviert</span>';
163 } elseif ($connect) {
164 $record[
'sync'] =
'<span class="green">Ja</span>';
165 $tables=
$oDB->get_db_tables(
$server,
'sqlite_sequence');
166 $count_tables=count($tables);
169 $but[
'href'] =$action.
'&dbx_run3=create_db&rid='.
$server;
171 $but[
'class'] =
'btn-inline';
172 $but[
'tooltip']=
"Verbindung pruefen";
174 $but_connect=
$oTPL->get_tpl(
'dbx|button_dbcreate',$but);
176 $record[
'sync'] =
"<span class='red'>Nein</span> $but_connect";
179 $record[
'tables']=$count_tables;
181 $this->_record = $record;
189Class dbxServer extends \dbxObj {
191 private function run_maction($act,$sel) {
195 private function browser_server() {
196 $uid =
dbx()->user();
197 $do =
dbx()->get_modul_var(
'dbx_run3');
203 if ($do ==
'create_db')
return 'create_db';
205 $oDD =
dbx()->get_system_obj(
'dbxDD');
206 $oReport =
new dbxReport_Tables;
207 $oReport->_action =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_tables&rid='.$server;
209 $flds[
'server'] =
'Server';
210 $flds[
'name'] =
'Tablelle';
211 $flds[
'count'] =
'Count';
212 $flds[
'dd'] =
'DataDictonary';
216 $oReport->init(
'report-tables');
217 $oReport->add_rep(
'bar_subtitle',
'Server: ' . (
string)
$server);
218 $oReport->_create_row_select = 1;
219 $oReport->_create_row_edit = 1;
220 $oReport->_create_row_delete = 1;
221 $oReport->_create_row_show = 1;
222 $oReport->_create_sel_flds = 0;
223 $oReport->_fld_id =
'server';
225 $oReport->_tabel_tpls[
'tpl_row_delete'] =
'modul|confirm_row_delete_table';
226 $oReport->_tabel_tpls[
'tpl_row_edit'] =
'table_row_modal-edit';
227 $oReport->_tabel_tpls[
'tpl_row_show'] =
'table_row_modal-show';
235 $base_url=
dbx()->get_base_url();
236 $bt[
'title'] =
"Neue Datenbank Tabelle erstellen.";
237 $bt[
'buttonText'] =
"Neue Datenbank Tabelle erstellen. <i class='bi bi-plus-lg'></i>";
238 $bt[
'class'] =
"btn btn-primary align-items-center justify-content-center w100";
240 $bt[
'url'] = $base_url.
"?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_dbtable&server=$server";
241 $bt[
'modalClass'] =
"modal-xl";
242 $bt[
'returnJs'] =
"dbxReSendForm(\'#dbx_form_{i}\')";
243 $bt[
'isPrompt'] =
'false' ;
244 $bt[
'selectValueClass'] =
"";
245 $bt[
'selectTarget'] =
"";
247 $oReport->add_obj(
'new_table',
'button_modal',$bt);
248 $tableBtn =
dbx()->get_system_obj(
'dbxTPL')->get_tpl(
'dbx|button_modal', $bt);
249 $oReport->add_obj(
'bar_actions',
'obj-value', $tableBtn);
256 $rdata=$oDD->get_db_tables(
$server);
261 $oReport->_data = $data;
262 $oReport->_msg_info =
"db-Tabllen von ($server)";
263 $oReport->_msg_success =
'';
265 $rwhere =
dbx()->get_request_var(
'dbx_rwhere',
'',
'sqlsearch');
266 $rrows =
dbx()->get_request_var(
'dbx_rrows', 9999,
'int');
267 $rpos =
dbx()->get_request_var(
'dbx_rpos', 0,
'int');
268 $rpos=0; $rrows=9999;
270 $oReport->_rflds = $flds;
271 $oReport->_mode =
'table';
272 $oReport->_pages = 0;
273 $oReport->_rrows = $rrows;
274 $oReport->_rpos = $rpos;
275 $oReport->_rdata = $oReport->data_rows( $rdata, $rpos, $rrows );
276 $oReport->_rcount = count( $rdata );
278 $content = $oReport->run();
288 private function get_db_config(): array {
289 $file = $this->get_db_config_file();
292 if (file_exists($file)) {
307 private function get_db_config_file(): string {
311 private function write_db_config(array
$config): int {
312 $file = $this->get_db_config_file();
313 $dir = dirname($file);
316 mkdir(
$dir, 0777,
true);
320 $content =
"<?php \n" . dbx_convertArrayToPHPCode(
$config,
'$config');
321 $ok = file_put_contents($file, $content);
324 $_SESSION[
'dbx'][
'config'][
'dbx'] =
$config;
325 $_SESSION[
'dbx'][
'config_file'][
'dbx'] = $file;
331 private function get_default_server(array
$config): string {
332 return isset(
$config[
'default_server']) ? trim((string)
$config[
'default_server']) :
'';
335 private function server_form_data(
string $server, array
$config): array {
341 'host' =>
'127.0.0.1',
356 $data[
'old_name'] =
'';
360 if ($this->get_default_server(
$config) === $data[
'name']) {
361 $data[
'is_default'] = 1;
367 private function normalize_server_record(array $post): array {
368 $type = strtolower(trim((string) ($post[
'type'] ??
'mysql')));
369 $host = trim((
string) ($post[
'host'] ??
''));
370 $activ = (string) ((
int) ($post[
'activ'] ?? 1) ? 1 : 0);
372 if ($type ===
'sqlite' && $host !==
'') {
380 'dbname' => trim((
string) ($post[
'dbname'] ??
'')),
381 'user' => trim((
string) ($post[
'user'] ??
'')),
382 'pass' => (
string) ($post[
'pass'] ??
''),
383 'port' => trim((
string) ($post[
'port'] ??
'')),
387 private function test_server_connection(
string $server, array
$config): array {
388 $oDB =
dbx()->get_system_obj(
'dbxDB');
389 $oldSessionConfig = $_SESSION[
'dbx'][
'config'][
'dbx'] ??
null;
391 $_SESSION[
'dbx'][
'config'][
'dbx'] =
$config;
393 if (isset($oDB->db[
$server])) {
394 unset($oDB->db[$server]);
397 $oDB->_dbMessage =
'';
399 $ok = $oDB->connect_db_server(
$server) ? 1 : 0;
400 $message = $oDB->_dbMessage ?: $oDB->_error;
403 unset($oDB->db[$server]);
406 if ($oldSessionConfig ===
null) {
407 unset($_SESSION[
'dbx'][
'config'][
'dbx']);
409 $_SESSION[
'dbx'][
'config'][
'dbx'] = $oldSessionConfig;
412 return array(
'ok' => $ok,
'message' => $message);
415 private function ensure_server_connection(
string $server, array
$config): array {
419 private function save_server_from_form(array $post): array {
420 $config = $this->get_db_config();
421 $oldName = trim((
string) ($post[
'old_name'] ??
''));
422 $newName = trim((
string) ($post[
'name'] ??
''));
424 if ($newName ===
'') {
425 return array(
'ok' => 0,
'message' =>
'Servername fehlt.');
428 if ($oldName !==
'' && $oldName !== $newName && isset(
$config[
'db'][$newName])) {
429 return array(
'ok' => 0,
'message' =>
"Server ($newName) existiert bereits.");
432 if ($oldName ===
'' && isset(
$config[
'db'][$newName])) {
433 return array(
'ok' => 0,
'message' =>
"Server ($newName) existiert bereits.");
436 $record = $this->normalize_server_record($post);
438 if (strtolower(trim((
string) ($record[
'type'] ??
''))) ===
'sqlite') {
439 return array(
'ok' => 0,
'message' =>
'Modul-SQLite (*.db3) gehoert nicht in die System-Config. Dateien liegen unter dbx/modules/*/db/.');
442 if ($oldName !==
'' && $oldName !== $newName && isset(
$config[
'db'][$oldName])) {
443 unset(
$config[
'db'][$oldName]);
446 $config[
'db'][$newName] = $record;
448 if ((
int) ($post[
'is_default'] ?? 0) === 1 || $this->get_default_server(
$config) ===
'') {
449 $config[
'default_server'] = $newName;
452 $test = ((string)($record[
'activ'] ??
'1') ===
'0')
453 ? array(
'ok' => 1,
'message' =>
'Server ist deaktiviert; Verbindungstest wurde uebersprungen.')
454 : $this->ensure_server_connection($newName,
$config);
457 $msg = $test[
'message'] ? $test[
'message'] :
'Verbindung nicht moeglich.';
458 return array(
'ok' => 0,
'message' => $msg);
461 $ok = $this->write_db_config(
$config);
464 return array(
'ok' => 0,
'message' =>
'Config konnte nicht gespeichert werden.');
467 $oDB =
dbx()->get_system_obj(
'dbxDB');
468 if ($oldName && isset($oDB->db[$oldName])) {
469 unset($oDB->db[$oldName]);
471 if (isset($oDB->db[$newName])) {
472 unset($oDB->db[$newName]);
475 return array(
'ok' => 1,
'message' =>
"Config gespeichert, Server ($newName) verbunden.",
'server' => $newName);
478 private function edit_server() {
481 $oForm =
dbx()->get_system_obj(
'dbxForm');
482 $server=
dbx()->get_modul_var(
'rid' ,
'new',
'parameter');
486 $fd =
'dbxAdmin|server';
488 $oForm->init(
'form-server');
489 $config=$this->get_db_config();
492 $oForm->_data = $data;
493 $oForm->_msg_info =
'DB-Server bearbeiten';
495 $oForm->_action =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=edit_server&rid='.$server;
496 $oForm->_fld_change_state=
'*';
500 if($oForm->submit()) {
501 if(!$oForm->errors()) {
502 $change=$oForm->changed();
504 $save = $this->save_server_from_form($oForm->_post);
507 $serverName = (string)($save[
'server'] ??
'');
508 dbx()->set_modul_var(
'dbx_run2',
'list_server');
509 dbx()->set_modul_var(
'dbx_run3',
'');
510 dbx()->set_modul_var(
'rid', $serverName);
511 return $this->report_server();
513 $oForm->_msg_error = $save[
'message'];
516 $oForm->_msg_success =
'Keine Änderung';
520 $errors=$oForm->_errors;
521 foreach ($errors as $key => $value) {
524 $oForm->_msg_error =
'Prüfen sie bitte ihre Eingaben ('.$err_flds.
')';
527 $oForm->add_obj(
'form_msg',
'obj-value',
'');
530 $content=$oForm->run();
537 private function delete_server(
$server) {
538 dbx()->debug(
"delete server=($server)");
541 $config=$this->get_db_config();
544 $keys = array_keys(
$config[
'db']);
545 $config[
'default_server'] = $keys[0] ??
'';
547 $ok=$this->write_db_config(
$config);
552 private function create_server(
$server) {
554 $oDB =
dbx()->get_system_obj(
'dbxDB');
555 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
557 if (isset($oDB->db[
$server])) {
563 if (!$oDB->db_server_config_is_active((
string)
$server, $dbConfig)) {
564 $msg[
'msg'] =
"Server ($server) ist deaktiviert.";
565 return $oTPL->get_tpl(
'dbx|alert-info', $msg);
568 $ok=$oDB->connect_db_server(
$server);
570 $msg[
'msg'] =
"Server ($server) wurde verbunden.";
571 $content=$oTPL->get_tpl(
'dbx|alert-success',$msg);
573 $msg[
'msg'] =
"Server ($server) konnte nicht verbunden werden.<br>".$oDB->_dbMessage;
574 $content=$oTPL->get_tpl(
'dbx|alert-danger',$msg);
579 Private
function report_server() {
581 $oReport =
new dbxReport_Server;
582 $oReport->_action =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
584 $content =
"dbxAdmin->DataDic<br>";
585 $uid =
dbx()->user();
586 $oDD =
dbx()->get_system_obj(
'dbxDD');
587 $do =
dbx()->get_modul_var(
'dbx_run3');
591 if ($do ==
'create_db') {
595 if ($do ==
'row_show') {
596 if (
$server)
return $this->browser_server();
599 if ($do ==
'row_edit') {
600 $modal_content=$this->edit_server();
601 return $modal_content;
603 if ($do ==
'row_delete' &&
$server) {
604 $ok=$this->delete_server(
$server);
605 if ( $ok) $oReport->_msg_info =
"Server ($server) gelöscht";
606 if (!$ok) $oReport->_msg_info =
"Server ($server) konnte nicht gelöscht werden";
609 $config=$this->get_db_config();
611 $defaultServer=$this->get_default_server(
$config);
613 foreach ($xdata as $key => $value) {
614 if (!is_array($value)) {
621 $record[
'name']=$key;
622 $record[
'activ'] = array_key_exists(
'activ', $record) ? (string)$record[
'activ'] :
'1';
623 $record[
'activ_view'] = ((string)$record[
'activ'] ===
'0')
624 ?
'<span class="badge bg-secondary">Deaktiviert</span>'
625 :
'<span class="badge bg-success">Aktiv</span>';
626 $record[
'is_default']=($key === $defaultServer) ?
'<span class="green">Ja</span>' :
'Nein';
633 $data[
'dbx_rrows'] = 999;
634 $flds[
'name'] =
'Server';
635 $flds[
'dbname'] =
'Datenbank';
636 $flds[
'host'] =
'Host';
637 $flds[
'type'] =
'Type';
638 $flds[
'activ_view'] =
'Status';
639 $flds[
'is_default'] =
'Default';
640 $flds[
'tables'] =
'Tabellen';
641 $flds[
'sync'] =
'Verbunden';
645 $oReport->init(
'report-server');
646 $oReport->set_callback_owner($this);
647 $oReport->set_callback(
'row_action_data',
'server_row_action_data');
648 $oReport->_create_row_select = 0;
649 $oReport->_create_row_edit = 1;
650 $oReport->_create_row_delete = 1;
651 $oReport->_create_row_show = 1;
652 $oReport->_create_sel_flds = 0;
653 $oReport->_fld_id =
'name';
654 $oReport->_tabel_tpls[
'tpl_row_edit'] =
'modul|server_row_edit';
657 $oReport->_data = $data;
658 $oReport->_msg_info =
'';
659 $oReport->_msg_success =
'';
661 $oReport->_rflds = $flds;
662 $oReport->_mode =
'table';
663 $oReport->_pages = 1;
664 $oReport->_rdata = $rdata;
666 $newUrl =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=new_server&rid=new';
667 $bdata[
'url'] = htmlspecialchars($newUrl, ENT_QUOTES,
'UTF-8');
668 $bdata[
'label'] =
'Neuer Server';
669 $bdata[
'title'] =
'Neuen DB-Server anlegen';
670 $bdata[
'class'] =
'btn btn-primary btn-sm';
671 $bdata[
'icon'] =
'bi bi-plus-lg';
672 $bdata[
'width'] =
'30%';
673 $bdata[
'height'] =
'560';
674 $newServerBtn =
dbx()->get_system_obj(
'dbxTPL')->get_tpl(
'modul|server_button_openwin', $bdata);
675 $oReport->add_obj(
'new_server',
'obj-value', $newServerBtn);
676 $oReport->add_obj(
'bar_actions',
'obj-value', $newServerBtn);
678 $rwhere =
dbx()->get_request_var(
'dbx_rwhere',
'',
'sqlsearch');
679 $rrows =
dbx()->get_request_var(
'dbx_rrows', 25,
'int');
680 $rpos =
dbx()->get_request_var(
'dbx_rpos', 0,
'int');
686 $oReport->_rdata = $oReport->data_rows( $rdata, $rpos, $rrows );
687 $oReport->_rcount = count( $rdata );
688 $content = $oReport->run();
693 public function server_row_action_data($report, $data) {
694 if (!is_array($data) || !isset($data[
'data']) || !is_array($data[
'data'])) {
698 $type = (string)($data[
'type'] ??
'');
699 if (!in_array($type, array(
'edit',
'show',
'delete'),
true)) {
703 $rid = (string)($data[
'data'][
'rid'] ??
'');
704 $base =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
706 if ($type ===
'edit') {
707 $editUrl =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=edit_server&rid=' . rawurlencode($rid);
708 $data[
'data'][
'action'] = $editUrl;
709 $data[
'data'][
'edit_url'] = htmlspecialchars($editUrl, ENT_QUOTES,
'UTF-8');
710 $data[
'data'][
'edit_title'] = htmlspecialchars(
'DB-Server bearbeiten: ' . $rid, ENT_QUOTES,
'UTF-8');
711 } elseif ($type ===
'show') {
712 $data[
'data'][
'action'] =
$base .
'&dbx_run3=row_show&rid=' . rawurlencode($rid);
713 } elseif ($type ===
'delete') {
714 $data[
'data'][
'action'] =
$base .
'&dbx_run3=row_delete&rid=' . rawurlencode($rid);
720 Private
function delete_table($dd) {
721 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
722 $oDD =
dbx()->get_system_obj(
'dbxDD');
723 $tab =$oDD->get_dd_table($dd);
724 $server=$oDD->get_dd_server($dd);
726 $sql=$oTPL->get_tpl(
'modul|del_dd',$data,
'sql');
728 if (file_exists($dd_file)) unlink($dd_file);
729 $ok =$oDD->rawQuery(
$server,$sql);
733 Private
function create_table(
$table) {
735 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
736 $oDB =
dbx()->get_system_obj(
'dbxDB');
737 $server =
dbx()->get_modul_var(
'server',
dbx()->get_modul_var(
'rid',
'',
'parameter'),
'parameter');
739 $sql=$oTPL->get_tpl(
'modul|new_dd',$data,
'sql');
745 function add_dbtable() {
747 $content=
"add db-table server=($server)";
752 $oDD =
dbx()->get_system_obj(
'dbxDD');
753 $oForm =
dbx()->get_system_obj(
'dbxForm');
756 $oForm->init(
'form-table');
759 $oForm->_data = $data;
760 $oForm->_msg_info =
'Sie können ein Daten bearbeiten';
762 $oForm->_action =
"?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_dbtable&server=$server";
763 $oForm->_fld_change_state=
'*';
765 $oForm->add_fld(
'table' ,
'text-label',rules:
'parameter|min=1');
774 if($oForm->submit()) {
775 if(!$oForm->errors()) {
776 $change=$oForm->changed();
778 $ok=$oDD->connect_db_server(
$server);
783 $database=$oDD->get_database(
$server);
788 if ( $ok) $oForm->_msg_success =
"Server ($server )Datenbank ($database) Tabelle ($table) wurde erstellt.";
789 if (!$ok) $oForm->_msg_error =
"Server ($server )Datenbank ($database) Tabelle ($table) konnte nicht erstellt werden.";
792 $oForm->_msg_success =
'Keine Änderung';
796 $oForm->_msg_error =
'Prüfen sie bitte ihre Eingabe.';
799 $oForm->add_obj(
'form_msg',
'obj-value',
'');
802 $content=$oForm->run();
816 public function run() {
817 $work =
dbx()->get_modul_var(
'dbx_run2',
'list',
'parameter' );
818 $content =
"Unbekannter Aufruf dbx_run2=($work)";
819 $server =
dbx()->get_modul_var(
'rid',
'',
'parameter');
823 $content = $this->report_server();
829 $content = $this->browser_server();
833 $content =$this->edit_server();
837 $content =$this->edit_server();
841 $content =$this->add_dbtable();
run_body($content)
Verarbeitet den übergebenen Inhalt und aktualisiert den Datensatz mit einer Liste der gefundenen Data...
$_record
Aktueller Datensatz im Body-Lauf.
dbx_normalize_config_for_store(array $config)
dbx_os_path_file($path_file)
dbx_config_is_module_db_entry(string $key, array $entry)
dbx_config_path_store(string $path, bool $dirTrailingSlash=false)
dbx_get_base_dir($cut_Data=0)
DBX schema administration.