dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
dbxServer.class.php
Go to the documentation of this file.
1<?php
2namespace dbx\dbxAdmin;
3dbx()->get_system_obj( 'dbxReport', 'use' );
4
5
7 private function check_create_dd( $dd ) {
8 $retval='error';
9 $oDD = dbx()->get_system_obj( 'dbxDD' );
10 $dd_file=dbx()->os_path(dbx()->get_base_dir().'dbx/modules/dbx/dd/'.$dd.'.dd.php');
11 if ( !file_exists( $dd_file ) ) {
12 $oDD->create_dd( $dd );
13 $retval = 'create';
14 } else {
15 $retval = '<span class="red">not exist</span>';
16 $exist = $dd->get_table_exist($dd);
17 if ($exist) $retval = 'exist';
18 if ($exist) {
19 $change = $dd->update_dd( $dd );
20 if ($change) {
21 $retval.=' change';
22 } else {
23 $retval.=' ok';
24 }
25 }
26 }
27 return $retval;
28 }
29
30
40 private function get_dd_exist($db_server, $db_table, $path = '.') {
41 $datadics = array();
42
43 // Sicherstellen, dass der Pfad mit einem Slash endet
44 $path = rtrim($path, '/') . '/';
45
46 // Verzeichnis nach *.dd.php Dateien durchsuchen
47 $files = glob($path . '*.dd.php');
48
49 foreach ($files as $file) {
50 // Temporäre Variablen initialisieren, um Konflikte zu vermeiden
51 $table = array();
52 $fields = array();
53
54 // Datei einbinden
55 include $file;
56
57 // Überprüfen, ob die Bedingungen erfüllt sind
58 if (isset($table['table']) && $table['table'] == $db_table &&
59 isset($table['server']) && $table['server'] == $db_server) {
60 $datadics[] = $file;
61 }
62 }
63
64 return $datadics;
65 }
66
67
68
77 public function run_body($content) {
78 // Aktuellen Datensatz aus der Instanzvariable holen
79 $record = $this->_record;
80
81 // Informationen aus dem Datensatz extrahieren
82 $server = $record['server']; // Name des Datenbank-Servers
83 $table = $record['name']; // Name der Datenbank-Tabelle
84 $path = dbx()->get_base_dir() . 'dbx/modules/dbx/dd/'; // Pfad zu den DataDictionary-Dateien
85 $rid = $server.'|'.$table;
86
87 // DataDictionary-Dateien suchen
88 $dds = $this->get_dd_exist($server, $table, $path);
89
90 // Dateinamen verarbeiten:
91 // 1. '.dd.php' entfernen
92 // 2. Nach jedem Dateinamen $but_edit einfügen
93 $dd_list = implode('', array_map(function($file) {
94 // Den Dateinamen ohne '.dd.php' extrahieren
95 $dd = basename($file, '.dd.php');
96
97 // Button für das Bearbeiten eines DataDictionary
98
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>';
100
101
102 // Den DataDictionary-Eintrag und den Button kombinieren
103 return '<span class="dd-item">' . $dd . '</span>' . $but_edit;
104 }, $dds));
105
106 // Button für das Hinzufügen eines neuen DataDictionary
107 $base_url=dbx()->get_base_url();
108 $bt['title'] = $this->get_fd_message('create_dd_title');
109 $bt['buttonText'] = "<i class='bi bi-plus-lg'></i>"; // Text des Buttons
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}\')"; //"alert(\'JS run\');";
115 $bt['isPrompt'] = 'false' ; // true, wenn es sich um ein Prompt-Modal handelt
116 $bt['selectValueClass'] = ""; // Nur relevant, wenn $isPrompt true ist
117 $bt['selectTarget'] = ""; // Nur relevant, wenn $isPrompt true ist
118 $but_add =$this->get_tpl('button_modal',$bt);
119
120
121
122
123
124 // Kombiniere die DataDictionary-Einträge und die Buttons in einer Flexbox-Struktur
125 $dd_list = '<div class="d-flex justify-content-between align-items-center w-100">
126 <span class="dd-list">' . $dd_list . '</span>
127 ' . $but_add . '
128 </div>';
129
130 // Aktualisiere den Datensatz mit der Liste der gefundenen Dateien
131 $record['dd'] = $dd_list;
132
133 // Aktualisiere die Instanzvariable mit dem modifizierten Datensatz
134 $this->_record = $record;
135
136 // Gib den unveränderten Inhalt zurück
137 return $content;
138 }
139
140
141}
142
144
145
146 public function run_body( $content ) {
147 $oDB =dbx()->get_system_obj('dbxDB');
148 $oTPL=dbx()->get_system_obj('dbxTPL');
149
150 $tables=0; $count_tables=0;
151
152 $record = $this->_record;
153 $server = $record['name'];
154 $isActive = $oDB->db_server_config_is_active((string)$server, is_array($record) ? $record : array());
155 $connect = $isActive ? $oDB->connect_db_server($server) : 0;
156 $action = $this->_action;
157
158 //dbx_debug("record server=($server)",$record);
159
160
161 if (!$isActive) {
162 $record['sync'] = '<span class="badge bg-secondary">'
163 . dbx()->esc($this->get_fd_message('status_inactive')) . '</span>';
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);
168
169 } else {
170 $but['href'] =$action.'&dbx_run3=create_db&rid='.$server;
171 $but['label'] ='DB';
172 $but['class'] ='btn-inline';
173 $but['tooltip'] = $this->get_fd_message('connection_check');
174
175 $but_connect=$oTPL->get_tpl('dbx|button_dbcreate',$but);
176
177 $record['sync'] = "<span class='red'>" . dbx()->esc($this->get_fd_message('no')) . "</span> $but_connect";
178 }
179
180 $record['tables']=$count_tables;
181
182 $this->_record = $record;
183 return $content;
184 }
185
186}
187
188
189
190Class dbxServer extends \dbxObj {
191
193 private $serverTexts;
194
200 private function server_texts() {
201 if ($this->serverTexts) {
202 return $this->serverTexts;
203 }
204
205 dbx()->get_system_obj('dbxForm', 'use');
206 $texts = new \dbxForm();
207 $texts->set_form_help_enabled(false);
208 $texts->_fd = 'dbxAdmin|server';
209 $texts->load_fd_messages();
210 $this->serverTexts = $texts;
211
212 return $this->serverTexts;
213 }
214
215 private function run_maction($act,$sel) {
216 return 1;
217 }
218
219 private function browser_server() {
220 $uid = dbx()->user();
221 $do = dbx()->get_modul_var('dbx_run3');
222 $server = dbx()->get_modul_var('rid');
223 $texts = $this->server_texts();
224
225
226
227
228 if ($do == 'create_db') return 'create_db';
229
230 $oDD = dbx()->get_system_obj('dbxDD');
231 $oReport = new dbxReport_Tables;
232 $oReport->_action = '?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_tables&rid='.$server;
233
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');
238
239
240
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';
253
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';
257
258 //$bt['label']="Neue Datenbank Tabelle erstellen.";
259 //$bt['href'] ="?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_server_table&server=$server";
260
261 //$oReport->add_obj('new_table','button',$bt);
262
263 // Button für das Hinzufügen einer neuen Datenbank-Tabelle
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>"; // Text des Buttons
267 $bt['class'] = "btn btn-primary align-items-center justify-content-center w100";
268 $bt['style'] = "";
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}\')"; //"alert(\'JS run\');";
272 $bt['isPrompt'] = 'false' ; // true, wenn es sich um ein Prompt-Modal handelt
273 $bt['selectValueClass'] = ""; // Nur relevant, wenn $isPrompt true ist
274 $bt['selectTarget'] = ""; // Nur relevant, wenn $isPrompt true ist
275 //$but_add =$this->get_tpl('button_modal',$bt);
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);
279
280
281
282
283
284 $data=array();
285 $rdata=$oDD->get_db_tables($server);
286
287 //dbx_debug("DATA Tablels Server=($server)",$rdata);
288
289
290 $oReport->_data = $data;
291 $oReport->_msg_info = $texts->format_fd_message('tables_info', array('server' => $server));
292 $oReport->_msg_success = '';
293
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;
298
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 );
306
307 $content = $oReport->run();
308
309
310
311
312 // $content = "dbxAdmin->Server ($server)<br>";
313
314 return $content;
315 }
316
317 private function get_db_config(): array {
318 $file = $this->get_db_config_file();
319 $config = array();
320
321 if (file_exists($file)) {
322 include $file;
323 }
324
325 if (!is_array($config)) {
326 $config = array();
327 }
328
329 if (!isset($config['db']) || !is_array($config['db'])) {
330 $config['db'] = array();
331 }
332
333 return $config;
334 }
335
336 private function get_db_config_file(): string {
337 return dbx()->os_path(dbx()->get_base_dir() . 'dbx/modules/dbx/cfg/config.php');
338 }
339
340 private function write_db_config(array $config): int {
341 $file = $this->get_db_config_file();
342 $dir = dirname($file);
343
344 if (!is_dir($dir)) {
345 mkdir($dir, 0777, true);
346 }
347
348 $config = dbx()->get_system_obj('dbxConfigStore')->normalize_for_store($config);
349 $content = "<?php \n" . dbx_convertArrayToPHPCode($config, '$config');
350 $ok = file_put_contents($file, $content);
351
352 if ($ok) {
353 $_SESSION['dbx']['config']['dbx'] = $config;
354 $_SESSION['dbx']['config_file']['dbx'] = $file;
355 }
356
357 return $ok ?: 0;
358 }
359
360 private function get_default_server(array $config): string {
361 return isset($config['default_server']) ? trim((string) $config['default_server']) : '';
362 }
363
364 private function server_form_data(string $server, array $config): array {
365 $data = array(
366 'old_name' => '',
367 'name' => '',
368 'activ' => '1',
369 'type' => 'mysql',
370 'host' => '127.0.0.1',
371 'dbname' => '',
372 'user' => '',
373 'pass' => '',
374 'port' => '',
375 'is_default' => 0,
376 );
377
378 if ($server !== 'new' && isset($config['db'][$server]) && is_array($config['db'][$server])) {
379 $data = array_merge($data, $config['db'][$server]);
380 $data['old_name'] = $server;
381 $data['name'] = $server;
382 }
383
384 if ($server === 'new') {
385 $data['old_name'] = '';
386 $data['name'] = '';
387 }
388
389 if ($this->get_default_server($config) === $data['name']) {
390 $data['is_default'] = 1;
391 }
392
393 return $data;
394 }
395
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);
400
401 if ($type === 'sqlite' && $host !== '') {
402 $host = dbx()->config_path_store($host, true);
403 }
404
405 return array(
406 'activ' => $activ,
407 'type' => $type,
408 'host' => $host,
409 'dbname' => trim((string) ($post['dbname'] ?? '')),
410 'user' => trim((string) ($post['user'] ?? '')),
411 'pass' => (string) ($post['pass'] ?? ''),
412 'port' => trim((string) ($post['port'] ?? '')),
413 );
414 }
415
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;
419
420 $_SESSION['dbx']['config']['dbx'] = $config;
421
422 if (isset($oDB->db[$server])) {
423 unset($oDB->db[$server]);
424 }
425
426 $oDB->_dbMessage = '';
427 $oDB->_error = '';
428 $ok = $oDB->connect_db_server($server) ? 1 : 0;
429 $message = $oDB->_dbMessage ?: $oDB->_error;
430
431 if (isset($oDB->db[$server])) {
432 unset($oDB->db[$server]);
433 }
434
435 if ($oldSessionConfig === null) {
436 unset($_SESSION['dbx']['config']['dbx']);
437 } else {
438 $_SESSION['dbx']['config']['dbx'] = $oldSessionConfig;
439 }
440
441 return array('ok' => $ok, 'message' => $message);
442 }
443
444 private function ensure_server_connection(string $server, array $config): array {
445 return $this->test_server_connection($server, $config);
446 }
447
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'] ?? ''));
453
454 if ($newName === '') {
455 return array('ok' => 0, 'message' => $texts->get_fd_message('server_name_missing'));
456 }
457
458 if ($oldName !== '' && $oldName !== $newName && isset($config['db'][$newName])) {
459 return array('ok' => 0, 'message' => $texts->format_fd_message('server_exists', array('server' => $newName)));
460 }
461
462 if ($oldName === '' && isset($config['db'][$newName])) {
463 return array('ok' => 0, 'message' => $texts->format_fd_message('server_exists', array('server' => $newName)));
464 }
465
466 $record = $this->normalize_server_record($post);
467
468 if (strtolower(trim((string) ($record['type'] ?? ''))) === 'sqlite') {
469 return array('ok' => 0, 'message' => $texts->get_fd_message('sqlite_config_error'));
470 }
471
472 if ($oldName !== '' && $oldName !== $newName && isset($config['db'][$oldName])) {
473 unset($config['db'][$oldName]);
474 }
475
476 $config['db'][$newName] = $record;
477
478 if ((int) ($post['is_default'] ?? 0) === 1 || $this->get_default_server($config) === '') {
479 $config['default_server'] = $newName;
480 }
481
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);
485
486 if (!$test['ok']) {
487 $msg = $test['message'] ? $test['message'] : $texts->get_fd_message('connection_failed');
488 return array('ok' => 0, 'message' => $msg);
489 }
490
491 $ok = $this->write_db_config($config);
492
493 if (!$ok) {
494 return array('ok' => 0, 'message' => $texts->get_fd_message('config_save_error'));
495 }
496
497 $oDB = dbx()->get_system_obj('dbxDB');
498 if ($oldName && isset($oDB->db[$oldName])) {
499 unset($oDB->db[$oldName]);
500 }
501 if (isset($oDB->db[$newName])) {
502 unset($oDB->db[$newName]);
503 }
504
505 return array(
506 'ok' => 1,
507 'message' => $texts->format_fd_message('config_saved_connected', array('server' => $newName)),
508 'server' => $newName,
509 );
510 }
511
512 private function edit_server() {
513
514 $content='';
515 $oForm =dbx()->get_system_obj('dbxForm');
516 $texts = $this->server_texts();
517 $server=dbx()->get_modul_var('rid' ,'new','parameter');
518 if ($server === '') {
519 $server = 'new';
520 }
521 $fd ='dbxAdmin|server';
522
523 $oForm->init('form-server');
524 $config=$this->get_db_config();
525 $data=$this->server_form_data($server, $config);
526
527 $oForm->_data = $data;
528 $oForm->_msg_info = $texts->get_fd_message('edit_server');
529 $oForm->_fd = $fd;
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='*'; // get allways all, unchaged too
533
534 $oForm->add_flds();
535
536 if($oForm->submit()) {
537 if(!$oForm->errors()) { // submit && no errors && no warnings
538 $change=$oForm->changed();
539 if ($change) {
540 $save = $this->save_server_from_form($oForm->_post);
541
542 if ($save['ok']) {
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);
547 return $this->report_server();
548 } else {
549 $oForm->_msg_error = $save['message'];
550 }
551 } else {
552 $oForm->_msg_success = $texts->get_fd_message('no_change');
553 }
554 } else {
555 $err_flds='';
556 $errors=$oForm->_errors;
557 foreach ($errors as $key => $value) {
558 $err_flds.=$key.' ';
559 }
560 $oForm->_msg_error = $texts->format_fd_message('check_input', array('fields' => trim($err_flds)));
561 }
562 } else {
563 $oForm->add_obj('form_msg','obj-value','');
564 }
565
566 $content=$oForm->run();
567
568 return $content;
569
570 }
571
572
573 private function delete_server($server) {
574 dbx()->debug("delete server=($server)");
575 $ok=0;
576 if ($server) {
577 $config=$this->get_db_config();
578 if (isset($config['db'][$server])) unset($config['db'][$server]);
579 if ($this->get_default_server($config) === $server) {
580 $keys = array_keys($config['db']);
581 $config['default_server'] = $keys[0] ?? '';
582 }
583 $ok=$this->write_db_config($config);
584 }
585 return $ok;
586 }
587
588 private function create_server($server) {
589 $content='';
590 $oDB =dbx()->get_system_obj('dbxDB');
591 $oTPL=dbx()->get_system_obj('dbxTPL');
592 $texts=$this->server_texts();
593
594 if (isset($oDB->db[$server])) {
595 unset($oDB->db[$server]);
596 }
597
598 $config = dbx()->get_config('dbx', 'db');
599 $dbConfig = is_array($config) && isset($config[$server]) && is_array($config[$server]) ? $config[$server] : array();
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);
603 }
604
605 $ok=$oDB->connect_db_server($server);
606 if ($ok) {
607 $msg['msg'] = $texts->format_fd_message('server_connected', array('server' => $server));
608 $content=$oTPL->get_tpl('dbx|alert-success',$msg);
609 } else {
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);
613 }
614 return $content;
615 }
616
617 Private function report_server() {
618
619 $oReport = new dbxReport_Server;
620 $oReport->_action = '?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
621 $texts = $this->server_texts();
622 $listMessage = '';
623
624 $content = "dbxAdmin->DataDic<br>";
625 $uid = dbx()->user();
626 $oDD = dbx()->get_system_obj('dbxDD');
627 $do = dbx()->get_modul_var('dbx_run3');
628 $server = dbx()->get_modul_var('rid');
629
630
631 if ($do =='create_db') {
632 if ($server) return $this->create_server($server);
633 }
634
635 if ($do == 'row_show') {
636 if ($server) return $this->browser_server();
637 }
638
639 if ($do == 'row_edit') {
640 $modal_content=$this->edit_server();
641 return $modal_content;
642 }
643 if ($do == 'row_delete' && $server) {
644 $ok=$this->delete_server($server);
645 $listMessage = $ok
646 ? $texts->format_fd_message('server_deleted', array('server' => $server))
647 : $texts->format_fd_message('server_delete_error', array('server' => $server));
648 }
649
650 $config=$this->get_db_config();
651 $xdata=$config['db'];
652 $defaultServer=$this->get_default_server($config);
653 $rdata=array();
654 foreach ($xdata as $key => $value) {
655 if (!is_array($value)) {
656 continue;
657 }
658 if (dbx()->get_system_obj('dbxConfigStore')->is_module_db_entry((string) $key, $value)) {
659 continue;
660 }
661 $record=$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'));
670 $rdata[]=$record; // make records
671 }
672
673 //dbx_debug("##rdata=",$rdata);
674
675
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');
685
686
687
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';
701
702 // if ( $nosel ) $oReport->init( 'report-datadic', 'report-datadic-nosel' );
703 $oReport->_data = $data;
704 $oReport->_msg_info = $listMessage;
705 $oReport->_msg_success = '';
706
707 $oReport->_rflds = $flds;
708 $oReport->_mode = 'table';
709 $oReport->_pages = 1;
710 $oReport->_rdata = $rdata;
711
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'));
725
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');
729
730 if ($rrows <= 0) {
731 $rrows = 999999;
732 }
733
734 $oReport->_rdata = $oReport->data_rows( $rdata, $rpos, $rrows );
735 $oReport->_rcount = count( $rdata );
736 $content = $oReport->run();
737
738 return $content;
739 }
740
741 public function server_row_action_data($report, $data) {
742 if (!is_array($data) || !isset($data['data']) || !is_array($data['data'])) {
743 return $data;
744 }
745
746 $type = (string)($data['type'] ?? '');
747 if (!in_array($type, array('edit', 'show', 'delete'), true)) {
748 return $data;
749 }
750
751 $rid = (string)($data['data']['rid'] ?? '');
752 $base = '?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
753
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)),
760 ENT_QUOTES,
761 'UTF-8'
762 );
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);
767 }
768
769 return $data;
770 }
771
772 Private function delete_table($dd) {
773 $oTPL=dbx()->get_system_obj('dbxTPL');
774 $oDD =dbx()->get_system_obj('dbxDD');
775 $tab =$oDD->get_dd_table($dd);
776 $server=$oDD->get_dd_server($dd);
777 $data['table']=$tab;
778 $sql=$oTPL->get_tpl('modul|del_dd',$data,'sql');
779 $dd_file=dbx()->os_path(dbx()->get_base_dir().'dbx/modules/dbx/dd/'.$dd.'.dd.php');
780 if (file_exists($dd_file)) unlink($dd_file);
781 $ok =$oDD->rawQuery($server,$sql);
782 return $ok;
783 }
784
785 Private function create_table($table) {
786 dbx()->set_modul_var('rid',$table); // need for report fields
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');
790 $data['table']=$table;
791 $sql=$oTPL->get_tpl('modul|new_dd',$data,'sql');
792 $ok = $server ? $oDB->exec($server, $sql) : 0;
793 return $ok;
794 }
795
796
797 function add_dbtable() {
798 $server=dbx()->get_modul_var('server');
799 $content="add db-table server=($server)";
800
801
802
803 $content='';
804 $oDD = dbx()->get_system_obj('dbxDD');
805 $oForm = dbx()->get_system_obj('dbxForm');
806 $texts = $this->server_texts();
807 $dd = 'mod:dbtable';
808
809 $oForm->init('form-table');
810 $data=array();
811
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');
816 $oForm->_dd = $dd; // Main db-Table
817 $oForm->_action = "?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_dbtable&server=$server";
818 $oForm->_fld_change_state='*'; // get allways all, unchaged too
819
820 $oForm->add_fld(
821 'table',
822 'text-label',
823 rules: 'parameter|min=1',
824 label: $texts->get_fd_message('label_table')
825 );
826
827
828
829
830 //public function add_fld($name,$tpl,$data='',$rules='dd:',$label='dd:',$tooltip='dd:',$msg='dd:',$placeholder='dd:',$class='') { //#
831
832
833
834 if($oForm->submit()) {
835 if(!$oForm->errors()) { // submit && no errors && no warnings
836 $change=$oForm->changed();
837 if ($change) {
838 $ok=$oDD->connect_db_server($server);
839 if ($ok) {
840 //$database
841 }
842
843 $database=$oDD->get_database($server);
844 $table =dbx()->get_request_var('table');
845
846 $ok=1;
847
848 $messageValues = array(
849 'server' => $server,
850 'database' => $database,
851 'table' => $table,
852 );
853 if ($ok) {
854 $oForm->_msg_success = $texts->format_fd_message('table_created', $messageValues);
855 } else {
856 $oForm->_msg_error = $texts->format_fd_message('table_create_error', $messageValues);
857 }
858
859 } else {
860 $oForm->_msg_success = $texts->get_fd_message('no_change');
861 }
862 } else {
863
864 $oForm->_msg_error = $texts->get_fd_message('check_input_plain');
865 }
866 } else {
867 $oForm->add_obj('form_msg','obj-value','');
868 }
869
870 $content=$oForm->run();
871
872 return $content;
873
874
875
876
877 }
878
879
880
881
882
883
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');
888 switch ( $work ) {
889
890 case 'list_server':
891 $content = $this->report_server();
892 break;
893
894
895 case 'list_tables':
896 dbx()->set_modul_var('rid',$server);
897 $content = $this->browser_server();
898 break;
899
900 case 'edit_server':
901 $content =$this->edit_server();
902 break;
903
904 case 'new_server':
905 $content =$this->edit_server();
906 break;
907
908 case 'add_dbtable':
909 $content =$this->add_dbtable();
910 break;
911
912 }
913 return $content;
914 }
915
916}
917// class
$table['server']
Definition .dd.php:6
run_body($content)
Verarbeitet den übergebenen Inhalt und aktualisiert den Datensatz mit einer Liste der gefundenen Data...
$_action
Formular-Action.
$oTPL
Zentrale Template-Engine.
get_tpl($tpl, $data='', $type='htm', $i=0)
Wrapper auf dbxTPL->get_tpl().
$oDB
Zentraler DB-/DD-Service.
get_fd_message(string $key, string $default='')
Liefert eine Meldung aus der aktuell geladenen FD.
$_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.
Definition dbxApi.php:2805
dbx_convertArrayToPHPCode(array $array, string $prefix)
Konvertiert ein Array in PHP-Code, der es rekonstruiert.
Definition dbxApi.php:3190
get_base_dir(int $cutData=0)
Liefert das Basisverzeichnis der Installation.
Definition dbxApi.php:1507
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 report_server()
Private delete_table($dd)
DBX schema administration.