8 private function get_error_log_file() {
12 private function create_error_log_info($oReport) {
13 $file = $this->get_error_log_file();
15 if (!file_exists($file)) {
16 $oReport->add_obj(
'error_log',
'dbxAdmin|sysmsg-error-log-empty');
20 $content = file_get_contents($file);
22 if ($content ===
false) {
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',
33 $oReport->add_obj(
'error_log',
'dbxAdmin|sysmsg-error-log-box', $data);
36 private function normalize_sys_msg_level($level):
string {
37 $level = strtolower(trim((
string) $level));
38 if ($level ===
'warn') {
42 return in_array($level, array(
'error',
'warning',
'all'),
true) ? $level :
'all';
45 private function sys_msg_level_config():
string {
46 return $this->normalize_sys_msg_level(
dbx()->get_config(
'dbx',
'sys_msg_level',
'all'));
49 private function sys_msg_level_options(
string $current):
string {
51 'error' =>
'Nur Error',
52 'warning' =>
'Error + Warning',
57 foreach ($options as $value => $label) {
58 $selected = $value === $current ?
' selected' :
'';
59 $html .=
'<option value="' .
dbx()->esc($value) .
'"' . $selected .
'>' .
dbx()->esc($label) .
'</option>';
65 private function set_sys_msg_level_config(
string $level):
bool {
71 $config[
'sys_msg_level'] = $this->normalize_sys_msg_level($level);
72 return (
int)
dbx()->set_config(
'dbx',
$config) > 0;
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));
85 return $oForm->add_norep($oForm->run());
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>';
99 private function report_sysmsg() {
101 $db =
dbx()->get_system_obj(
'dbxDB');
102 $oReport =
dbx()->get_system_obj(
'dbxReport');
104 $oReport->init(
'report-sysmsg');
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());
111 $work =
dbx()->get_modul_var(
'dbx_do',
'',
'parameter');
112 $rid =
dbx()->get_modul_var(
'rid', 0,
'int');
114 if ($work ==
'row_delete' && $rid) {
115 $ok = $oReport->del_selected($rid);
116 $ok =
$db->delete($dd, $rid);
118 if ( $ok) $oReport->_msg_success =
'Zeile geloescht';
119 if (!$ok) $oReport->_msg_err =
'Zeile konnte nicht geloescht werden';
122 if ($work ==
'multi_delete') {
123 $result = $oReport->delete_multi_selected_records($dd);
124 $oReport->apply_multi_delete_result(
$result);
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';
134 if ($work ==
'delete_error_log') {
135 $file = $this->get_error_log_file();
137 if (!file_exists($file)) {
138 $oReport->_msg_success =
'PHP-Error-Log ist bereits leer';
140 $ok = @unlink($file);
142 if ( $ok) $oReport->_msg_success =
'PHP-Error-Log geloescht';
143 if (!$ok) $oReport->_msg_err =
'PHP-Error-Log konnte nicht geloescht werden';
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';
159 $rformat[
'create_date'] =
'php-datetime-usr';
160 $oReport->_rpt_format = $rformat;
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;
170 $oReport->enable_delete_tab($dd);
172 $oReport->add_action(
'rows_delete' ,
'action_button_delete' ,
'&dbx_do=multi_delete');
174 $oReport->create_selection_fields(
'dbxAdmin|rpt-sysmsg-selection');
175 $this->create_error_log_info($oReport);
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 =
'';
181 $oReport->_msg_err =
'Pruefen sie bitte ihre Eingaben';
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');
198 'like' => array(
'message',
'about',
'why',
'what',
'modul',
'action',
'work',
'rid'),
199 'equal' => array(
'level',
'status',
'xuser'),
200 'mode' =>
'contains',
205 if ($rstatus !=
'' && $rstatus !=
'all') {
206 if (!is_array($rwhere)) {
210 $rwhere[
'status'] = $rstatus;
214 if (is_array($rwhere)) {
215 $rwhere =
$db->normalize_where($dd, $rwhere);
218 $rwhere = $oReport->add_rwhere_select($rwhere);
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);
228 return $oReport->run();
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';
236 $this->set_sys_msg_level_config((
string) $level);
237 return $this->sys_msg_level_control();
244 private function client_diag() {
245 header(
'Content-Type: application/json; charset=utf-8');
247 $uid = (int)
dbx()->user(
'id');
249 $raw = file_get_contents(
'php://input');
250 $data = json_decode((
string) $raw,
true);
251 if (!is_array($data)) {
256 if (isset($data[
'entries']) && is_array($data[
'entries'])) {
257 $entries = $data[
'entries'];
258 } elseif (is_array($data) && !empty($data)) {
259 $entries = array($data);
262 $allowed = array(
'warning' => 1,
'error' => 1,
'security' => 1);
265 foreach ($entries as $entry) {
266 if (!is_array($entry)) {
270 $status = strtolower(trim((
string) ($entry[
'level'] ??
'warning')));
271 if ($status ===
'warn') {
274 if (!isset($allowed[$status])) {
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'] ??
''));
284 $about =
'dbxClient';
286 if ($message ===
'') {
287 $message = $code !==
'' ? $code :
'client diagnostic';
290 $rid = $code !==
'' ? $code : $element;
296 'element' => $element,
297 'ctx' => is_array($entry[
'ctx'] ??
null) ? $entry[
'ctx'] : array(),
298 'page' => (
string) (
$_SERVER[
'HTTP_REFERER'] ?? (
$_SERVER[
'REQUEST_URI'] ??
'')),
302 dbx()->sys_msg($status, $about, $rid, $message, $detail);
306 echo json_encode(array(
'ok' => 1,
'count' =>
$count), JSON_UNESCAPED_UNICODE);
311 $run2 =
dbx()->get_modul_var(
'dbx_run2',
'',
'parameter');
312 if ($run2 ===
'client_diag') {
313 return $this->client_diag();
315 if ($run2 ===
'sysmsg_level_save') {
316 if (
dbx()->get_modul_var(
'dbx_do',
'',
'parameter') !==
'') {
317 return $this->report_sysmsg();
319 return $this->process_sys_msg_level_action();
322 return $this->report_sysmsg();
if(! $db->connect_db_server($server)) $result