dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
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_file(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'] = "dd für Server - Datenbank - Tabelle erstellen.";
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">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);
167
168 } else {
169 $but['href'] =$action.'&dbx_run3=create_db&rid='.$server;
170 $but['label'] ='DB';
171 $but['class'] ='btn-inline';
172 $but['tooltip']="Verbindung pruefen";
173
174 $but_connect=$oTPL->get_tpl('dbx|button_dbcreate',$but);
175
176 $record['sync'] ="<span class='red'>Nein</span> $but_connect";
177 }
178
179 $record['tables']=$count_tables;
180
181 $this->_record = $record;
182 return $content;
183 }
184
185}
186
187
188
189Class dbxServer extends \dbxObj {
190
191 private function run_maction($act,$sel) {
192 return 1;
193 }
194
195 private function browser_server() {
196 $uid = dbx()->user();
197 $do = dbx()->get_modul_var('dbx_run3');
198 $server = dbx()->get_modul_var('rid');
199
200
201
202
203 if ($do == 'create_db') return 'create_db';
204
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;
208
209 $flds['server'] = 'Server';
210 $flds['name'] = 'Tablelle';
211 $flds['count'] = 'Count';
212 $flds['dd'] = 'DataDictonary';
213
214
215
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';
224
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';
228
229 //$bt['label']="Neue Datenbank Tabelle erstellen.";
230 //$bt['href'] ="?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_server_table&server=$server";
231
232 //$oReport->add_obj('new_table','button',$bt);
233
234 // Button für das Hinzufügen einer neuen Datenbank-Tabelle
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>"; // Text des Buttons
238 $bt['class'] = "btn btn-primary align-items-center justify-content-center w100";
239 $bt['style'] = "";
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}\')"; //"alert(\'JS run\');";
243 $bt['isPrompt'] = 'false' ; // true, wenn es sich um ein Prompt-Modal handelt
244 $bt['selectValueClass'] = ""; // Nur relevant, wenn $isPrompt true ist
245 $bt['selectTarget'] = ""; // Nur relevant, wenn $isPrompt true ist
246 //$but_add =$this->get_tpl('button_modal',$bt);
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);
250
251
252
253
254
255 $data=array();
256 $rdata=$oDD->get_db_tables($server);
257
258 //dbx_debug("DATA Tablels Server=($server)",$rdata);
259
260
261 $oReport->_data = $data;
262 $oReport->_msg_info = "db-Tabllen von ($server)";
263 $oReport->_msg_success = '';
264
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;
269
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 );
277
278 $content = $oReport->run();
279
280
281
282
283 // $content = "dbxAdmin->Server ($server)<br>";
284
285 return $content;
286 }
287
288 private function get_db_config(): array {
289 $file = $this->get_db_config_file();
290 $config = array();
291
292 if (file_exists($file)) {
293 include $file;
294 }
295
296 if (!is_array($config)) {
297 $config = array();
298 }
299
300 if (!isset($config['db']) || !is_array($config['db'])) {
301 $config['db'] = array();
302 }
303
304 return $config;
305 }
306
307 private function get_db_config_file(): string {
308 return dbx_os_path_file(dbx_get_base_dir() . 'dbx/modules/dbx/cfg/config.php');
309 }
310
311 private function write_db_config(array $config): int {
312 $file = $this->get_db_config_file();
313 $dir = dirname($file);
314
315 if (!is_dir($dir)) {
316 mkdir($dir, 0777, true);
317 }
318
320 $content = "<?php \n" . dbx_convertArrayToPHPCode($config, '$config');
321 $ok = file_put_contents($file, $content);
322
323 if ($ok) {
324 $_SESSION['dbx']['config']['dbx'] = $config;
325 $_SESSION['dbx']['config_file']['dbx'] = $file;
326 }
327
328 return $ok ?: 0;
329 }
330
331 private function get_default_server(array $config): string {
332 return isset($config['default_server']) ? trim((string) $config['default_server']) : '';
333 }
334
335 private function server_form_data(string $server, array $config): array {
336 $data = array(
337 'old_name' => '',
338 'name' => '',
339 'activ' => '1',
340 'type' => 'mysql',
341 'host' => '127.0.0.1',
342 'dbname' => '',
343 'user' => '',
344 'pass' => '',
345 'port' => '',
346 'is_default' => 0,
347 );
348
349 if ($server !== 'new' && isset($config['db'][$server]) && is_array($config['db'][$server])) {
350 $data = array_merge($data, $config['db'][$server]);
351 $data['old_name'] = $server;
352 $data['name'] = $server;
353 }
354
355 if ($server === 'new') {
356 $data['old_name'] = '';
357 $data['name'] = '';
358 }
359
360 if ($this->get_default_server($config) === $data['name']) {
361 $data['is_default'] = 1;
362 }
363
364 return $data;
365 }
366
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);
371
372 if ($type === 'sqlite' && $host !== '') {
373 $host = dbx_config_path_store($host, true);
374 }
375
376 return array(
377 'activ' => $activ,
378 'type' => $type,
379 'host' => $host,
380 'dbname' => trim((string) ($post['dbname'] ?? '')),
381 'user' => trim((string) ($post['user'] ?? '')),
382 'pass' => (string) ($post['pass'] ?? ''),
383 'port' => trim((string) ($post['port'] ?? '')),
384 );
385 }
386
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;
390
391 $_SESSION['dbx']['config']['dbx'] = $config;
392
393 if (isset($oDB->db[$server])) {
394 unset($oDB->db[$server]);
395 }
396
397 $oDB->_dbMessage = '';
398 $oDB->_error = '';
399 $ok = $oDB->connect_db_server($server) ? 1 : 0;
400 $message = $oDB->_dbMessage ?: $oDB->_error;
401
402 if (isset($oDB->db[$server])) {
403 unset($oDB->db[$server]);
404 }
405
406 if ($oldSessionConfig === null) {
407 unset($_SESSION['dbx']['config']['dbx']);
408 } else {
409 $_SESSION['dbx']['config']['dbx'] = $oldSessionConfig;
410 }
411
412 return array('ok' => $ok, 'message' => $message);
413 }
414
415 private function ensure_server_connection(string $server, array $config): array {
416 return $this->test_server_connection($server, $config);
417 }
418
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'] ?? ''));
423
424 if ($newName === '') {
425 return array('ok' => 0, 'message' => 'Servername fehlt.');
426 }
427
428 if ($oldName !== '' && $oldName !== $newName && isset($config['db'][$newName])) {
429 return array('ok' => 0, 'message' => "Server ($newName) existiert bereits.");
430 }
431
432 if ($oldName === '' && isset($config['db'][$newName])) {
433 return array('ok' => 0, 'message' => "Server ($newName) existiert bereits.");
434 }
435
436 $record = $this->normalize_server_record($post);
437
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/.');
440 }
441
442 if ($oldName !== '' && $oldName !== $newName && isset($config['db'][$oldName])) {
443 unset($config['db'][$oldName]);
444 }
445
446 $config['db'][$newName] = $record;
447
448 if ((int) ($post['is_default'] ?? 0) === 1 || $this->get_default_server($config) === '') {
449 $config['default_server'] = $newName;
450 }
451
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);
455
456 if (!$test['ok']) {
457 $msg = $test['message'] ? $test['message'] : 'Verbindung nicht moeglich.';
458 return array('ok' => 0, 'message' => $msg);
459 }
460
461 $ok = $this->write_db_config($config);
462
463 if (!$ok) {
464 return array('ok' => 0, 'message' => 'Config konnte nicht gespeichert werden.');
465 }
466
467 $oDB = dbx()->get_system_obj('dbxDB');
468 if ($oldName && isset($oDB->db[$oldName])) {
469 unset($oDB->db[$oldName]);
470 }
471 if (isset($oDB->db[$newName])) {
472 unset($oDB->db[$newName]);
473 }
474
475 return array('ok' => 1, 'message' => "Config gespeichert, Server ($newName) verbunden.", 'server' => $newName);
476 }
477
478 private function edit_server() {
479
480 $content='';
481 $oForm =dbx()->get_system_obj('dbxForm');
482 $server=dbx()->get_modul_var('rid' ,'new','parameter');
483 if ($server === '') {
484 $server = 'new';
485 }
486 $fd ='dbxAdmin|server';
487
488 $oForm->init('form-server');
489 $config=$this->get_db_config();
490 $data=$this->server_form_data($server, $config);
491
492 $oForm->_data = $data;
493 $oForm->_msg_info = 'DB-Server bearbeiten';
494 $oForm->_fd = $fd;
495 $oForm->_action = '?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=edit_server&rid='.$server;
496 $oForm->_fld_change_state='*'; // get allways all, unchaged too
497
498 $oForm->add_flds();
499
500 if($oForm->submit()) {
501 if(!$oForm->errors()) { // submit && no errors && no warnings
502 $change=$oForm->changed();
503 if ($change) {
504 $save = $this->save_server_from_form($oForm->_post);
505
506 if ($save['ok']) {
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();
512 } else {
513 $oForm->_msg_error = $save['message'];
514 }
515 } else {
516 $oForm->_msg_success = 'Keine Änderung';
517 }
518 } else {
519 $err_flds='';
520 $errors=$oForm->_errors;
521 foreach ($errors as $key => $value) {
522 $err_flds.=$key.' ';
523 }
524 $oForm->_msg_error = 'Prüfen sie bitte ihre Eingaben ('.$err_flds.')';
525 }
526 } else {
527 $oForm->add_obj('form_msg','obj-value','');
528 }
529
530 $content=$oForm->run();
531
532 return $content;
533
534 }
535
536
537 private function delete_server($server) {
538 dbx()->debug("delete server=($server)");
539 $ok=0;
540 if ($server) {
541 $config=$this->get_db_config();
542 if (isset($config['db'][$server])) unset($config['db'][$server]);
543 if ($this->get_default_server($config) === $server) {
544 $keys = array_keys($config['db']);
545 $config['default_server'] = $keys[0] ?? '';
546 }
547 $ok=$this->write_db_config($config);
548 }
549 return $ok;
550 }
551
552 private function create_server($server) {
553 $content='';
554 $oDB =dbx()->get_system_obj('dbxDB');
555 $oTPL=dbx()->get_system_obj('dbxTPL');
556
557 if (isset($oDB->db[$server])) {
558 unset($oDB->db[$server]);
559 }
560
561 $config = dbx()->get_config('dbx', 'db');
562 $dbConfig = is_array($config) && isset($config[$server]) && is_array($config[$server]) ? $config[$server] : array();
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);
566 }
567
568 $ok=$oDB->connect_db_server($server);
569 if ($ok) {
570 $msg['msg'] = "Server ($server) wurde verbunden.";
571 $content=$oTPL->get_tpl('dbx|alert-success',$msg);
572 } else {
573 $msg['msg'] = "Server ($server) konnte nicht verbunden werden.<br>".$oDB->_dbMessage;
574 $content=$oTPL->get_tpl('dbx|alert-danger',$msg);
575 }
576 return $content;
577 }
578
579 Private function report_server() {
580
581 $oReport = new dbxReport_Server;
582 $oReport->_action = '?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
583
584 $content = "dbxAdmin->DataDic<br>";
585 $uid = dbx()->user();
586 $oDD = dbx()->get_system_obj('dbxDD');
587 $do = dbx()->get_modul_var('dbx_run3');
588 $server = dbx()->get_modul_var('rid');
589
590
591 if ($do =='create_db') {
592 if ($server) return $this->create_server($server);
593 }
594
595 if ($do == 'row_show') {
596 if ($server) return $this->browser_server();
597 }
598
599 if ($do == 'row_edit') {
600 $modal_content=$this->edit_server();
601 return $modal_content;
602 }
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";
607 }
608
609 $config=$this->get_db_config();
610 $xdata=$config['db'];
611 $defaultServer=$this->get_default_server($config);
612 $rdata=array();
613 foreach ($xdata as $key => $value) {
614 if (!is_array($value)) {
615 continue;
616 }
617 if (function_exists('dbx_config_is_module_db_entry') && dbx_config_is_module_db_entry((string) $key, $value)) {
618 continue;
619 }
620 $record=$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';
627 $rdata[]=$record; // make records
628 }
629
630 //dbx_debug("##rdata=",$rdata);
631
632
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';
642
643
644
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';
655
656 // if ( $nosel ) $oReport->init( 'report-datadic', 'report-datadic-nosel' );
657 $oReport->_data = $data;
658 $oReport->_msg_info = '';
659 $oReport->_msg_success = '';
660
661 $oReport->_rflds = $flds;
662 $oReport->_mode = 'table';
663 $oReport->_pages = 1;
664 $oReport->_rdata = $rdata;
665
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);
677
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');
681
682 if ($rrows <= 0) {
683 $rrows = 999999;
684 }
685
686 $oReport->_rdata = $oReport->data_rows( $rdata, $rpos, $rrows );
687 $oReport->_rcount = count( $rdata );
688 $content = $oReport->run();
689
690 return $content;
691 }
692
693 public function server_row_action_data($report, $data) {
694 if (!is_array($data) || !isset($data['data']) || !is_array($data['data'])) {
695 return $data;
696 }
697
698 $type = (string)($data['type'] ?? '');
699 if (!in_array($type, array('edit', 'show', 'delete'), true)) {
700 return $data;
701 }
702
703 $rid = (string)($data['data']['rid'] ?? '');
704 $base = '?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=list_server';
705
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);
715 }
716
717 return $data;
718 }
719
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);
725 $data['table']=$tab;
726 $sql=$oTPL->get_tpl('modul|del_dd',$data,'sql');
727 $dd_file=dbx_os_path_file(dbx_get_base_dir().'dbx/modules/dbx/dd/'.$dd.'.dd.php');
728 if (file_exists($dd_file)) unlink($dd_file);
729 $ok =$oDD->rawQuery($server,$sql);
730 return $ok;
731 }
732
733 Private function create_table($table) {
734 dbx()->set_modul_var('rid',$table); // need for report fields
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');
738 $data['table']=$table;
739 $sql=$oTPL->get_tpl('modul|new_dd',$data,'sql');
740 $ok = $server ? $oDB->exec($server, $sql) : 0;
741 return $ok;
742 }
743
744
745 function add_dbtable() {
746 $server=dbx()->get_modul_var('server');
747 $content="add db-table server=($server)";
748
749
750
751 $content='';
752 $oDD = dbx()->get_system_obj('dbxDD');
753 $oForm = dbx()->get_system_obj('dbxForm');
754 $dd = 'mod:dbtable';
755
756 $oForm->init('form-table');
757 $data=array();
758
759 $oForm->_data = $data;
760 $oForm->_msg_info = 'Sie können ein Daten bearbeiten';
761 $oForm->_dd = $dd; // Main db-Table
762 $oForm->_action = "?dbx_modul=dbxAdmin&dbx_run1=server&dbx_run2=add_dbtable&server=$server";
763 $oForm->_fld_change_state='*'; // get allways all, unchaged too
764
765 $oForm->add_fld('table' ,'text-label',rules: 'parameter|min=1');
766
767
768
769
770 //public function add_fld($name,$tpl,$data='',$rules='dd:',$label='dd:',$tooltip='dd:',$msg='dd:',$placeholder='dd:',$class='') { //#
771
772
773
774 if($oForm->submit()) {
775 if(!$oForm->errors()) { // submit && no errors && no warnings
776 $change=$oForm->changed();
777 if ($change) {
778 $ok=$oDD->connect_db_server($server);
779 if ($ok) {
780 //$database
781 }
782
783 $database=$oDD->get_database($server);
784 $table =dbx()->get_request_var('table');
785
786 $ok=1;
787
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.";
790
791 } else {
792 $oForm->_msg_success = 'Keine Änderung';
793 }
794 } else {
795
796 $oForm->_msg_error = 'Prüfen sie bitte ihre Eingabe.';
797 }
798 } else {
799 $oForm->add_obj('form_msg','obj-value','');
800 }
801
802 $content=$oForm->run();
803
804 return $content;
805
806
807
808
809 }
810
811
812
813
814
815
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');
820 switch ( $work ) {
821
822 case 'list_server':
823 $content = $this->report_server();
824 break;
825
826
827 case 'list_tables':
828 dbx()->set_modul_var('rid',$server);
829 $content = $this->browser_server();
830 break;
831
832 case 'edit_server':
833 $content =$this->edit_server();
834 break;
835
836 case 'new_server':
837 $content =$this->edit_server();
838 break;
839
840 case 'add_dbtable':
841 $content =$this->add_dbtable();
842 break;
843
844 }
845 return $content;
846 }
847
848}
849// 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.
$_record
Aktueller Datensatz im Body-Lauf.
$fields[]
Definition config.dd.php:16
$config['version']
Definition config.php:2
dbx_normalize_config_for_store(array $config)
Definition index.php:261
dbx_os_path_file($path_file)
Definition index.php:164
dbx_config_is_module_db_entry(string $key, array $entry)
Definition index.php:231
dbx_config_path_store(string $path, bool $dirTrailingSlash=false)
Definition index.php:200
if( $syncRequest)
Definition index.php:520
dbx_get_base_dir($cut_Data=0)
Definition index.php:157
DBX schema administration.