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 ) ) {
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');
58 if (isset(
$table[
'table']) &&
$table[
'table'] == $db_table &&
59 isset(
$table[
'server']) &&
$table[
'server'] == $db_server) {
84 $path =
dbx()->get_base_dir() .
'dbx/modules/dbx/dd/';
93 $dd_list = implode(
'', array_map(
function(
$file) {
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();
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">'
164 } elseif ($connect) {
165 $record[
'sync'] =
'<span class="green">' .
dbx()->esc($this->
get_fd_message(
'yes')) .
'</span>';
166 $tables=
$oDB->get_db_tables(
$server,
'sqlite_sequence');
167 $count_tables=count($tables);
170 $but[
'href'] =$action.
'&dbx_run3=create_db&rid='.
$server;
172 $but[
'class'] =
'btn-inline';
175 $but_connect=
$oTPL->get_tpl(
'dbx|button_dbcreate',$but);
177 $record[
'sync'] =
"<span class='red'>" .
dbx()->esc($this->
get_fd_message(
'no')) .
"</span> $but_connect";
180 $record[
'tables']=$count_tables;
182 $this->_record = $record;
190Class dbxServer extends \dbxObj {
193 private $serverTexts;
200 private function server_texts() {
201 if ($this->serverTexts) {
202 return $this->serverTexts;
205 dbx()->get_system_obj(
'dbxForm',
'use');
207 $texts->set_form_help_enabled(
false);
208 $texts->_fd =
'dbxAdmin|server';
209 $texts->load_fd_messages();
210 $this->serverTexts =
$texts;
212 return $this->serverTexts;
215 private function run_maction($act,$sel) {
219 private function browser_server() {
220 $uid =
dbx()->user();
221 $do =
dbx()->get_modul_var(
'dbx_run3');
223 $texts = $this->server_texts();
228 if ($do ==
'create_db')
return 'create_db';
230 $oDD =
dbx()->get_system_obj(
'dbxDD');
232 $oReport->_action =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_tables&rid='.$server;
234 $flds[
'server'] =
$texts->get_fd_message(
'column_server');
235 $flds[
'name'] =
$texts->get_fd_message(
'column_table');
236 $flds[
'count'] =
$texts->get_fd_message(
'column_count');
237 $flds[
'dd'] =
$texts->get_fd_message(
'column_datadic');
241 $oReport->init(
'report-tables');
242 $oReport->_fd =
'dbxAdmin|server';
243 $oReport->load_fd_messages();
244 $oReport->set_form_help_enabled(
false);
245 $oReport->add_rep(
'bar_title',
$texts->get_fd_message(
'column_tables'));
246 $oReport->add_rep(
'bar_subtitle',
$texts->format_fd_message(
'tables_info', array(
'server' =>
$server)));
247 $oReport->_create_row_select = 1;
248 $oReport->_create_row_edit = 1;
249 $oReport->_create_row_delete = 1;
250 $oReport->_create_row_show = 1;
251 $oReport->_create_sel_flds = 0;
252 $oReport->_fld_id =
'server';
254 $oReport->_tabel_tpls[
'tpl_row_delete'] =
'modul|confirm_row_delete_table';
255 $oReport->_tabel_tpls[
'tpl_row_edit'] =
'table_row_modal-edit';
256 $oReport->_tabel_tpls[
'tpl_row_show'] =
'table_row_modal-show';
264 $base_url=
dbx()->get_base_url();
265 $bt[
'title'] =
$texts->get_fd_message(
'new_table_title');
266 $bt[
'buttonText'] =
$texts->get_fd_message(
'new_table') .
" <i class='bi bi-plus-lg'></i>";
267 $bt[
'class'] =
"btn btn-primary align-items-center justify-content-center w100";
269 $bt[
'url'] = $base_url.
"?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_dbtable&server=$server";
270 $bt[
'modalClass'] =
"modal-xl";
271 $bt[
'returnJs'] =
"dbxReSendForm(\'#dbx_form_{i}\')";
272 $bt[
'isPrompt'] =
'false' ;
273 $bt[
'selectValueClass'] =
"";
274 $bt[
'selectTarget'] =
"";
276 $oReport->add_obj(
'new_table',
'button_modal',$bt);
277 $tableBtn =
dbx()->get_system_obj(
'dbxTPL')->get_tpl(
'dbx|button_modal', $bt);
278 $oReport->add_obj(
'bar_actions',
'obj-value', $tableBtn);
290 $oReport->_data = $data;
291 $oReport->_msg_info =
$texts->format_fd_message(
'tables_info', array(
'server' =>
$server));
292 $oReport->_msg_success =
'';
294 $rwhere =
dbx()->get_request_var(
'dbx_rwhere',
'',
'sqlsearch');
295 $rrows =
dbx()->get_request_var(
'dbx_rrows', 9999,
'int');
296 $rpos =
dbx()->get_request_var(
'dbx_rpos', 0,
'int');
297 $rpos=0; $rrows=9999;
299 $oReport->_rflds = $flds;
300 $oReport->_mode =
'table';
301 $oReport->_pages = 0;
302 $oReport->_rrows = $rrows;
303 $oReport->_rpos = $rpos;
304 $oReport->_rdata = $oReport->data_rows( $rdata, $rpos, $rrows );
305 $oReport->_rcount = count( $rdata );
317 private function get_db_config(): array {
318 $file = $this->get_db_config_file();
321 if (file_exists(
$file)) {
336 private function get_db_config_file():
string {
340 private function write_db_config(array
$config):
int {
341 $file = $this->get_db_config_file();
345 mkdir(
$dir, 0777,
true);
360 private function get_default_server(array
$config):
string {
361 return isset(
$config[
'default_server']) ? trim((
string)
$config[
'default_server']) :
'';
364 private function server_form_data(
string $server, array
$config): array {
370 'host' =>
'127.0.0.1',
385 $data[
'old_name'] =
'';
389 if ($this->get_default_server(
$config) === $data[
'name']) {
390 $data[
'is_default'] = 1;
396 private function normalize_server_record(array $post): array {
397 $type = strtolower(trim((
string) ($post[
'type'] ??
'mysql')));
398 $host = trim((
string) ($post[
'host'] ??
''));
399 $activ = (string) ((
int) ($post[
'activ'] ?? 1) ? 1 : 0);
401 if ($type ===
'sqlite' && $host !==
'') {
402 $host =
dbx()->config_path_store($host,
true);
409 'dbname' => trim((
string) ($post[
'dbname'] ??
'')),
410 'user' => trim((
string) ($post[
'user'] ??
'')),
411 'pass' => (
string) ($post[
'pass'] ??
''),
412 'port' => trim((
string) ($post[
'port'] ??
'')),
416 private function test_server_connection(
string $server, array
$config): array {
417 $oDB =
dbx()->get_system_obj(
'dbxDB');
418 $oldSessionConfig =
$_SESSION[
'dbx'][
'config'][
'dbx'] ??
null;
422 if (isset($oDB->db[
$server])) {
426 $oDB->_dbMessage =
'';
428 $ok = $oDB->connect_db_server(
$server) ? 1 : 0;
429 $message = $oDB->_dbMessage ?: $oDB->_error;
431 if (isset($oDB->db[
$server])) {
435 if ($oldSessionConfig ===
null) {
436 unset(
$_SESSION[
'dbx'][
'config'][
'dbx']);
438 $_SESSION[
'dbx'][
'config'][
'dbx'] = $oldSessionConfig;
441 return array(
'ok' =>
$ok,
'message' => $message);
444 private function ensure_server_connection(
string $server, array
$config): array {
448 private function save_server_from_form(array $post): array {
449 $texts = $this->server_texts();
450 $config = $this->get_db_config();
451 $oldName = trim((
string) ($post[
'old_name'] ??
''));
452 $newName = trim((
string) ($post[
'name'] ??
''));
454 if ($newName ===
'') {
455 return array(
'ok' => 0,
'message' =>
$texts->get_fd_message(
'server_name_missing'));
458 if ($oldName !==
'' && $oldName !== $newName && isset(
$config[
'db'][$newName])) {
459 return array(
'ok' => 0,
'message' =>
$texts->format_fd_message(
'server_exists', array(
'server' => $newName)));
462 if ($oldName ===
'' && isset(
$config[
'db'][$newName])) {
463 return array(
'ok' => 0,
'message' =>
$texts->format_fd_message(
'server_exists', array(
'server' => $newName)));
466 $record = $this->normalize_server_record($post);
468 if (strtolower(trim((
string) ($record[
'type'] ??
''))) ===
'sqlite') {
469 return array(
'ok' => 0,
'message' =>
$texts->get_fd_message(
'sqlite_config_error'));
472 if ($oldName !==
'' && $oldName !== $newName && isset(
$config[
'db'][$oldName])) {
473 unset(
$config[
'db'][$oldName]);
476 $config[
'db'][$newName] = $record;
478 if ((
int) ($post[
'is_default'] ?? 0) === 1 || $this->get_default_server(
$config) ===
'') {
479 $config[
'default_server'] = $newName;
482 $test = ((string)($record[
'activ'] ??
'1') ===
'0')
483 ? array(
'ok' => 1,
'message' =>
$texts->get_fd_message(
'server_disabled_test_skipped'))
484 : $this->ensure_server_connection($newName,
$config);
487 $msg = $test[
'message'] ? $test[
'message'] :
$texts->get_fd_message(
'connection_failed');
488 return array(
'ok' => 0,
'message' => $msg);
494 return array(
'ok' => 0,
'message' =>
$texts->get_fd_message(
'config_save_error'));
497 $oDB =
dbx()->get_system_obj(
'dbxDB');
498 if ($oldName && isset($oDB->db[$oldName])) {
499 unset($oDB->db[$oldName]);
501 if (isset($oDB->db[$newName])) {
502 unset($oDB->db[$newName]);
507 'message' =>
$texts->format_fd_message(
'config_saved_connected', array(
'server' => $newName)),
508 'server' => $newName,
512 private function edit_server() {
515 $oForm =
dbx()->get_system_obj(
'dbxForm');
516 $texts = $this->server_texts();
517 $server=
dbx()->get_modul_var(
'rid' ,
'new',
'parameter');
521 $fd =
'dbxAdmin|server';
523 $oForm->init(
'form-server');
524 $config=$this->get_db_config();
527 $oForm->_data = $data;
528 $oForm->_msg_info =
$texts->get_fd_message(
'edit_server');
530 $oForm->load_fd_messages();
531 $oForm->_action =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=edit_server&rid='.$server;
532 $oForm->_fld_change_state=
'*';
536 if($oForm->submit()) {
537 if(!$oForm->errors()) {
538 $change=$oForm->changed();
540 $save = $this->save_server_from_form($oForm->_post);
543 $serverName = (string)($save[
'server'] ??
'');
544 dbx()->set_modul_var(
'dbx_run2',
'list_server');
545 dbx()->set_modul_var(
'dbx_run3',
'');
546 dbx()->set_modul_var(
'rid', $serverName);
549 $oForm->_msg_error = $save[
'message'];
552 $oForm->_msg_success =
$texts->get_fd_message(
'no_change');
560 $oForm->_msg_error =
$texts->format_fd_message(
'check_input', array(
'fields' => trim($err_flds)));
563 $oForm->add_obj(
'form_msg',
'obj-value',
'');
573 private function delete_server(
$server) {
574 dbx()->debug(
"delete server=($server)");
577 $config=$this->get_db_config();
588 private function create_server(
$server) {
590 $oDB =
dbx()->get_system_obj(
'dbxDB');
591 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
592 $texts=$this->server_texts();
594 if (isset($oDB->db[
$server])) {
600 if (!$oDB->db_server_config_is_active((
string)
$server, $dbConfig)) {
601 $msg[
'msg'] =
$texts->format_fd_message(
'server_disabled', array(
'server' =>
$server));
602 return $oTPL->get_tpl(
'dbx|alert-info', $msg);
607 $msg[
'msg'] =
$texts->format_fd_message(
'server_connected', array(
'server' =>
$server));
608 $content=$oTPL->get_tpl(
'dbx|alert-success',$msg);
610 $msg[
'msg'] =
$texts->format_fd_message(
'server_connect_error', array(
'server' =>
$server))
611 .
'<br>' .
dbx()->esc((
string)$oDB->_dbMessage);
612 $content=$oTPL->get_tpl(
'dbx|alert-danger',$msg);
620 $oReport->_action =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
621 $texts = $this->server_texts();
625 $uid =
dbx()->user();
626 $oDD =
dbx()->get_system_obj(
'dbxDD');
627 $do =
dbx()->get_modul_var(
'dbx_run3');
631 if ($do ==
'create_db') {
635 if ($do ==
'row_show') {
636 if (
$server)
return $this->browser_server();
639 if ($do ==
'row_edit') {
640 $modal_content=$this->edit_server();
641 return $modal_content;
643 if ($do ==
'row_delete' &&
$server) {
646 ?
$texts->format_fd_message(
'server_deleted', array(
'server' =>
$server))
647 :
$texts->format_fd_message(
'server_delete_error', array(
'server' =>
$server));
650 $config=$this->get_db_config();
652 $defaultServer=$this->get_default_server(
$config);
654 foreach ($xdata as $key =>
$value) {
658 if (
dbx()->get_system_obj(
'dbxConfigStore')->is_module_db_entry((
string) $key,
$value)) {
662 $record[
'name']=$key;
663 $record[
'activ'] = array_key_exists(
'activ', $record) ? (string)$record[
'activ'] :
'1';
664 $record[
'activ_view'] = ((string)$record[
'activ'] ===
'0')
665 ?
'<span class="badge bg-secondary">' .
dbx()->esc(
$texts->get_fd_message(
'status_inactive')) .
'</span>'
666 :
'<span class="badge bg-success">' .
dbx()->esc(
$texts->get_fd_message(
'status_active')) .
'</span>';
667 $record[
'is_default'] = ($key === $defaultServer)
668 ?
'<span class="green">' .
dbx()->esc(
$texts->get_fd_message(
'yes')) .
'</span>'
669 :
dbx()->esc(
$texts->get_fd_message(
'no'));
676 $data[
'dbx_rrows'] = 999;
677 $flds[
'name'] =
$texts->get_fd_message(
'column_server');
678 $flds[
'dbname'] =
$texts->get_fd_message(
'column_database');
679 $flds[
'host'] =
$texts->get_fd_message(
'column_host');
680 $flds[
'type'] =
$texts->get_fd_message(
'column_type');
681 $flds[
'activ_view'] =
$texts->get_fd_message(
'column_status');
682 $flds[
'is_default'] =
$texts->get_fd_message(
'column_default');
683 $flds[
'tables'] =
$texts->get_fd_message(
'column_tables');
684 $flds[
'sync'] =
$texts->get_fd_message(
'column_connected');
688 $oReport->init(
'report-server');
689 $oReport->_fd =
'dbxAdmin|server';
690 $oReport->load_fd_messages();
691 $oReport->set_form_help_enabled(
false);
692 $oReport->set_callback_owner($this);
693 $oReport->set_callback(
'row_action_data',
'server_row_action_data');
694 $oReport->_create_row_select = 0;
695 $oReport->_create_row_edit = 1;
696 $oReport->_create_row_delete = 1;
697 $oReport->_create_row_show = 1;
698 $oReport->_create_sel_flds = 0;
699 $oReport->_fld_id =
'name';
700 $oReport->_tabel_tpls[
'tpl_row_edit'] =
'modul|server_row_edit';
703 $oReport->_data = $data;
704 $oReport->_msg_info = $listMessage;
705 $oReport->_msg_success =
'';
707 $oReport->_rflds = $flds;
708 $oReport->_mode =
'table';
709 $oReport->_pages = 1;
710 $oReport->_rdata = $rdata;
712 $newUrl =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=new_server&rid=new';
713 $bdata[
'url'] = htmlspecialchars($newUrl, ENT_QUOTES,
'UTF-8');
714 $bdata[
'label'] =
$texts->get_fd_message(
'new_server');
715 $bdata[
'title'] =
$texts->get_fd_message(
'new_server_title');
716 $bdata[
'class'] =
'btn btn-primary btn-sm';
717 $bdata[
'icon'] =
'bi bi-plus-lg';
718 $bdata[
'width'] =
'30%';
719 $bdata[
'height'] =
'560';
720 $newServerBtn =
dbx()->get_system_obj(
'dbxTPL')->get_tpl(
'modul|server_button_openwin', $bdata);
721 $oReport->add_obj(
'new_server',
'obj-value', $newServerBtn);
722 $oReport->add_obj(
'bar_actions',
'obj-value', $newServerBtn);
723 $oReport->add_rep(
'bar_title',
$texts->get_fd_message(
'bar_title'));
724 $oReport->add_rep(
'bar_subtitle',
$texts->get_fd_message(
'bar_subtitle'));
726 $rwhere =
dbx()->get_request_var(
'dbx_rwhere',
'',
'sqlsearch');
727 $rrows =
dbx()->get_request_var(
'dbx_rrows', 25,
'int');
728 $rpos =
dbx()->get_request_var(
'dbx_rpos', 0,
'int');
734 $oReport->_rdata = $oReport->data_rows( $rdata, $rpos, $rrows );
735 $oReport->_rcount = count( $rdata );
742 if (!is_array($data) || !isset($data[
'data']) || !is_array($data[
'data'])) {
746 $type = (string)($data[
'type'] ??
'');
747 if (!in_array($type, array(
'edit',
'show',
'delete'),
true)) {
751 $rid = (string)($data[
'data'][
'rid'] ??
'');
752 $base =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
754 if ($type ===
'edit') {
755 $editUrl =
'?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=edit_server&rid=' . rawurlencode($rid);
756 $data[
'data'][
'action'] = $editUrl;
757 $data[
'data'][
'edit_url'] = htmlspecialchars($editUrl, ENT_QUOTES,
'UTF-8');
758 $data[
'data'][
'edit_title'] = htmlspecialchars(
759 $this->server_texts()->format_fd_message(
'edit_server_title', array(
'server' => $rid)),
763 } elseif ($type ===
'show') {
764 $data[
'data'][
'action'] =
$base .
'&dbx_run3=row_show&rid=' . rawurlencode($rid);
765 } elseif ($type ===
'delete') {
766 $data[
'data'][
'action'] =
$base .
'&dbx_run3=row_delete&rid=' . rawurlencode($rid);
773 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
774 $oDD =
dbx()->get_system_obj(
'dbxDD');
778 $sql=$oTPL->get_tpl(
'modul|del_dd',$data,
'sql');
780 if (file_exists($dd_file)) unlink($dd_file);
787 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
788 $oDB =
dbx()->get_system_obj(
'dbxDB');
789 $server =
dbx()->get_modul_var(
'server',
dbx()->get_modul_var(
'rid',
'',
'parameter'),
'parameter');
791 $sql=$oTPL->get_tpl(
'modul|new_dd',$data,
'sql');
799 $content=
"add db-table server=($server)";
804 $oDD =
dbx()->get_system_obj(
'dbxDD');
805 $oForm =
dbx()->get_system_obj(
'dbxForm');
806 $texts = $this->server_texts();
809 $oForm->init(
'form-table');
812 $oForm->_data = $data;
813 $oForm->_fd =
'dbxAdmin|server';
814 $oForm->load_fd_messages();
815 $oForm->_msg_info =
$texts->get_fd_message(
'create_table_info');
817 $oForm->_action =
"?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_dbtable&server=$server";
818 $oForm->_fld_change_state=
'*';
823 rules:
'parameter|min=1',
824 label:
$texts->get_fd_message(
'label_table')
834 if($oForm->submit()) {
835 if(!$oForm->errors()) {
836 $change=$oForm->changed();
848 $messageValues = array(
850 'database' => $database,
854 $oForm->_msg_success =
$texts->format_fd_message(
'table_created', $messageValues);
856 $oForm->_msg_error =
$texts->format_fd_message(
'table_create_error', $messageValues);
860 $oForm->_msg_success =
$texts->get_fd_message(
'no_change');
864 $oForm->_msg_error =
$texts->get_fd_message(
'check_input_plain');
867 $oForm->add_obj(
'form_msg',
'obj-value',
'');
884 public function run() {
885 $work =
dbx()->get_modul_var(
'dbx_run2',
'list',
'parameter' );
886 $content =
"Unbekannter Aufruf dbx_run2=($work)";
887 $server =
dbx()->get_modul_var(
'rid',
'',
'parameter');
896 dbx()->set_modul_var(
'rid',$server);
run_body($content)
Verarbeitet den übergebenen Inhalt und aktualisiert den Datensatz mit einer Liste der gefundenen Data...
$_record
Aktueller Datensatz im Body-Lauf.
if((string)($formActionPolicy['action'] ?? '') !=='dbxAction.save'||!dbx() ->check_action_token((string)($formActionPolicy['scope'] ?? ''),(string)($formActionRoute['params']['dbx_token'] ?? ''))) $report
dbx()
Liefert die zentrale dbXapp-API als Singleton.
dbx_convertArrayToPHPCode(array $array, string $prefix)
Konvertiert ein Array in PHP-Code, der es rekonstruiert.
get_base_dir(int $cutData=0)
Liefert das Basisverzeichnis der Installation.
if($resolved !==$expectedBase . 'files/test/') $config
foreach(array('bootstrapRowColumns', 'setBootstrapColumnLayout', 'addBootstrapColumn', 'dissolveBootstrapColumns',) as $function) $keys
foreach( $valid as $email) foreach($invalid as $email) $fd
server_row_action_data($report, $data)
Private create_table($table)
Private delete_table($dd)
DBX schema administration.