dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
Loading...
Searching...
No Matches
dbxSysMsg.class.php
Go to the documentation of this file.
1<?php
2namespace dbx\dbxAdmin;
3
4require_once dbx_get_base_dir() . 'dbx/include/dbxForm.class.php';
5
6class dbxSysMsg {
7
8 private function get_error_log_file() {
9 return dbx_get_file_dir() . 'dbxError.log';
10 }
11
12 private function create_error_log_info($oReport) {
13 $file = $this->get_error_log_file();
14
15 if (!file_exists($file)) {
16 $oReport->add_obj('error_log', 'dbxAdmin|sysmsg-error-log-empty');
17 return;
18 }
19
20 $content = file_get_contents($file);
21
22 if ($content === false) {
23 $content = '';
24 }
25
26 $data = array(
27 'file' => 'files/dbxError.log',
28 'size' => number_format((float) filesize($file), 0, ',', '.'),
29 'content' => htmlspecialchars($content, ENT_QUOTES, 'UTF-8'),
30 'action' => '?dbx_modul=dbxAdmin&dbx_run1=sysmsg&dbx_run2=list_sysmsg&dbx_do=delete_error_log',
31 );
32
33 $oReport->add_obj('error_log', 'dbxAdmin|sysmsg-error-log-box', $data);
34 }
35
36 private function normalize_sys_msg_level($level): string {
37 $level = strtolower(trim((string) $level));
38 if ($level === 'warn') {
39 $level = 'warning';
40 }
41
42 return in_array($level, array('error', 'warning', 'all'), true) ? $level : 'all';
43 }
44
45 private function sys_msg_level_config(): string {
46 return $this->normalize_sys_msg_level(dbx()->get_config('dbx', 'sys_msg_level', 'all'));
47 }
48
49 private function sys_msg_level_options(string $current): string {
50 $options = array(
51 'error' => 'Nur Error',
52 'warning' => 'Error + Warning',
53 'all' => 'Alles',
54 );
55 $html = '';
56
57 foreach ($options as $value => $label) {
58 $selected = $value === $current ? ' selected' : '';
59 $html .= '<option value="' . dbx()->esc($value) . '"' . $selected . '>' . dbx()->esc($label) . '</option>';
60 }
61
62 return $html;
63 }
64
65 private function set_sys_msg_level_config(string $level): bool {
66 $config = dbx()->get_config('dbx');
67 if (!is_array($config)) {
68 $config = array();
69 }
70
71 $config['sys_msg_level'] = $this->normalize_sys_msg_level($level);
72 return (int) dbx()->set_config('dbx', $config) > 0;
73 }
74
75 private function sys_msg_level_control(): string {
76 $oForm = new \dbxForm();
77 $oForm->init('admin-dashboard-sysmsg-level-control', 'admin-dashboard-sysmsg-level-control');
78 $oForm->_action = '?dbx_modul=dbxAdmin&dbx_run1=sysmsg&dbx_run2=sysmsg_level_save';
79 $oForm->_msg_info = '';
80 $current = $this->sys_msg_level_config();
81 $oForm->add_rep('action', dbx()->esc($oForm->_action));
82 $oForm->add_rep('sys_msg_level_save_base', dbx()->esc($oForm->_action));
83 $oForm->add_rep('sys_msg_level_options', $this->sys_msg_level_options($current));
84
85 return $oForm->add_norep($oForm->run());
86 }
87
88 private function delete_table_action(): string {
89 return '<a class="btn btn-sm btn-outline-danger dbxAjax dbxConfirm"'
90 . ' href="?dbx_modul=dbxAdmin&dbx_run1=sysmsg&dbx_run2=list_sysmsg&dbx_do=delete_tab"'
91 . ' title="System-Meldungen leeren"'
92 . ' data-confirm-title="<i class=\'bi bi-trash3\'></i> System-Meldungen leeren"'
93 . ' data-confirm="Alle System-Meldungen wirklich loeschen?"'
94 . ' data-confirm-hint="<small>Die Tabelle dbxSysMsg wird komplett geleert. Dieser Vorgang kann nicht rueckgaengig gemacht werden.</small>"'
95 . ' data-confirm-buttons="yesno"'
96 . ' role="button"><i class="bi bi-trash3"></i></a>';
97 }
98
99 private function report_sysmsg() {
100 $dd = 'dbxSysMsg';
101 $db = dbx()->get_system_obj('dbxDB');
102 $oReport = dbx()->get_system_obj('dbxReport');
103
104 $oReport->init('report-sysmsg');
105 $oReport->_dd = $dd;
106 $oReport->add_rep('bar_title', 'System-Meldungen');
107 $oReport->add_rep('bar_subtitle', 'Log und Fehlerprotokoll');
108 $oReport->add_rep('report_shell_class', 'dbx-admin-dashboard-panel dbx-admin-dashboard-sysmsg-report');
109 $oReport->add_rep('bar_actions', $this->delete_table_action());
110
111 $work = dbx()->get_modul_var('dbx_do', '', 'parameter');
112 $rid = dbx()->get_modul_var('rid', 0, 'int');
113
114 if ($work == 'row_delete' && $rid) {
115 $ok = $oReport->del_selected($rid);
116 $ok = $db->delete($dd, $rid);
117
118 if ( $ok) $oReport->_msg_success = 'Zeile geloescht';
119 if (!$ok) $oReport->_msg_err = 'Zeile konnte nicht geloescht werden';
120 }
121
122 if ($work == 'multi_delete') {
123 $result = $oReport->delete_multi_selected_records($dd);
124 $oReport->apply_multi_delete_result($result);
125 }
126
127 if ($work == 'delete_tab') {
128 $ok = $db->delete_tab($dd);
129 dbx()->debug("##delete tab dd=($dd) ok=($ok)");
130 if ( $ok) $oReport->_msg_success = 'Datenbank-Tabelle geleert';
131 if (!$ok) $oReport->_msg_err = 'Datenbank-Tabelle konnte nicht geleert werden';
132 }
133
134 if ($work == 'delete_error_log') {
135 $file = $this->get_error_log_file();
136
137 if (!file_exists($file)) {
138 $oReport->_msg_success = 'PHP-Error-Log ist bereits leer';
139 } else {
140 $ok = @unlink($file);
141
142 if ( $ok) $oReport->_msg_success = 'PHP-Error-Log geloescht';
143 if (!$ok) $oReport->_msg_err = 'PHP-Error-Log konnte nicht geloescht werden';
144 }
145 }
146
147 $flds['id'] = 'ID';
148 $flds['create_date'] = 'Create';
149 $flds['level'] = 'Level';
150 $flds['status'] = 'Status';
151 $flds['about'] = 'Bereich';
152 $flds['modul'] = 'Modul';
153 $flds['action'] = 'Action';
154 $flds['work'] = 'Work';
155 $flds['rid'] = 'RID';
156 $flds['xuser'] = 'User';
157 $flds['message'] = 'Message';
158
159 $rformat['create_date'] = 'php-datetime-usr';
160 $oReport->_rpt_format = $rformat;
161
162 $oReport->_action = '?dbx_modul=dbxAdmin&dbx_run1=sysmsg&dbx_run2=list_sysmsg';
163 $oReport->_pages = true;
164 $oReport->_create_row_select = true;
165 $oReport->_create_row_edit = false;
166 $oReport->_create_row_delete = true;
167 $oReport->_create_sel_flds = true;
168 $oReport->_but_pagination = 5;
169
170 $oReport->enable_delete_tab($dd);
171
172 $oReport->add_action('rows_delete' , 'action_button_delete' , '&dbx_do=multi_delete');
173
174 $oReport->create_selection_fields('dbxAdmin|rpt-sysmsg-selection');
175 $this->create_error_log_info($oReport);
176
177 if ($work != 'delete_tab' && $work != 'delete_error_log' && $work != 'multi_delete' && $work != 'row_delete' && $oReport->submit()) {
178 if (!$oReport->errors()) {
179 $oReport->_msg_success = '';
180 } else {
181 $oReport->_msg_err = 'Pruefen sie bitte ihre Eingaben';
182 }
183 }
184
185 $rwhere = $oReport->get_fld_val('dbx_rwhere' , '' , 'sqlsearch|max=64');
186 $rstatus= $oReport->get_fld_val('dbx_rstatus', 'all' , 'parameter');
187 $rrows = $oReport->get_fld_val('dbx_rrows' , 15 , 'int');
188 $rpos = $oReport->get_fld_val('dbx_rpos' , 0 , 'int');
189 $rsort = $oReport->get_fld_val('dbx_rsort' , 'create_date', 'parameter');
190 $rdesc = $oReport->get_fld_val('dbx_rdesc' , 'DESC' , 'parameter');
191 $select = $oReport->get_fld_val('dbx_rselect', 0 , 'int');
192 $rgroup = '';
193
194 if ($rwhere != '') {
195 $rwhere = array(
196 'search' => array(
197 'value' => $rwhere,
198 'like' => array('message', 'about', 'why', 'what', 'modul', 'action', 'work', 'rid'),
199 'equal' => array('level', 'status', 'xuser'),
200 'mode' => 'contains',
201 ),
202 );
203 }
204
205 if ($rstatus != '' && $rstatus != 'all') {
206 if (!is_array($rwhere)) {
207 $rwhere = array();
208 }
209
210 $rwhere['status'] = $rstatus;
211 }
212
213 if ($select) {
214 if (is_array($rwhere)) {
215 $rwhere = $db->normalize_where($dd, $rwhere);
216 }
217
218 $rwhere = $oReport->add_rwhere_select($rwhere);
219 }
220
221 $oReport->_rflds = $flds;
222 $oReport->_rrows = $rrows;
223 $oReport->_rpos = $rpos;
224 $oReport->_count_all = $db->count($dd);
225 $oReport->_rcount = $db->count($dd, $rwhere);
226 $oReport->_rdata = $db->select($dd, $rwhere, $flds, $rsort, $rdesc, $rgroup, $rrows, $rpos);
227
228 return $oReport->run();
229 }
230
231 private function process_sys_msg_level_action(): string {
232 $level = dbx()->get_request_var('sys_msg_level', null, 'parameter');
233 if ($level === null || $level === '') {
234 $level = $_POST['sys_msg_level'] ?? 'all';
235 }
236 $this->set_sys_msg_level_config((string) $level);
237 return $this->sys_msg_level_control();
238 }
239
244 private function client_diag() {
245 header('Content-Type: application/json; charset=utf-8');
246
247 $uid = (int) dbx()->user('id');
248
249 $raw = file_get_contents('php://input');
250 $data = json_decode((string) $raw, true);
251 if (!is_array($data)) {
252 $data = $_POST;
253 }
254
255 $entries = array();
256 if (isset($data['entries']) && is_array($data['entries'])) {
257 $entries = $data['entries'];
258 } elseif (is_array($data) && !empty($data)) {
259 $entries = array($data);
260 }
261
262 $allowed = array('warning' => 1, 'error' => 1, 'security' => 1);
263 $count = 0;
264
265 foreach ($entries as $entry) {
266 if (!is_array($entry)) {
267 continue;
268 }
269
270 $status = strtolower(trim((string) ($entry['level'] ?? 'warning')));
271 if ($status === 'warn') {
272 $status = 'warning';
273 }
274 if (!isset($allowed[$status])) {
275 $status = 'warning';
276 }
277
278 $about = trim((string) ($entry['lib'] ?? 'dbxClient'));
279 $code = trim((string) ($entry['code'] ?? ''));
280 $message = trim((string) ($entry['message'] ?? ''));
281 $element = trim((string) ($entry['element'] ?? ''));
282
283 if ($about === '') {
284 $about = 'dbxClient';
285 }
286 if ($message === '') {
287 $message = $code !== '' ? $code : 'client diagnostic';
288 }
289
290 $rid = $code !== '' ? $code : $element;
291 if ($rid === '') {
292 $rid = 'client';
293 }
294
295 $detail = array(
296 'element' => $element,
297 'ctx' => is_array($entry['ctx'] ?? null) ? $entry['ctx'] : array(),
298 'page' => (string) ($_SERVER['HTTP_REFERER'] ?? ($_SERVER['REQUEST_URI'] ?? '')),
299 'uid' => $uid,
300 );
301
302 dbx()->sys_msg($status, $about, $rid, $message, $detail);
303 $count++;
304 }
305
306 echo json_encode(array('ok' => 1, 'count' => $count), JSON_UNESCAPED_UNICODE);
307 exit;
308 }
309
310 public function run() {
311 $run2 = dbx()->get_modul_var('dbx_run2', '', 'parameter');
312 if ($run2 === 'client_diag') {
313 return $this->client_diag();
314 }
315 if ($run2 === 'sysmsg_level_save') {
316 if (dbx()->get_modul_var('dbx_do', '', 'parameter') !== '') {
317 return $this->report_sysmsg();
318 }
319 return $this->process_sys_msg_level_action();
320 }
321
322 return $this->report_sysmsg();
323 }
324}
325?>
$config['version']
Definition config.php:2
exit
Definition index.php:532
dbx_get_file_dir()
Definition index.php:265
dbx_get_base_dir($cut_Data=0)
Definition index.php:157
DBX schema administration.
if(! $db->connect_db_server($server)) $result
$_SERVER['REQUEST_URI']