31 if (!file_exists(
$file)) {
39 clearstatcache(
true,
$file);
40 return file_exists(
$file) ?
'error' :
'deleted';
43 private function create_error_log_info($oReport) {
44 $file = $this->get_error_log_file();
46 if (!file_exists(
$file)) {
47 $oReport->add_obj(
'error_log',
'dbxAdmin|sysmsg-error-log-empty');
58 'file' =>
'files/dbxError.log',
59 'size' => number_format((
float) filesize(
$file), 0,
',',
'.'),
60 'content' => htmlspecialchars(
$content, ENT_QUOTES,
'UTF-8'),
62 '?dbx_modul=dbxAdmin&dbx_run1=sysmsg&dbx_run2=list_sysmsg'
63 .
'&dbx_do=delete_error_log&rid=error_log'
67 $oReport->add_obj(
'error_log',
'dbxAdmin|sysmsg-error-log-box', $data);
70 private function normalize_sys_msg_level($level): string {
71 $level = strtolower(trim((string) $level));
72 if ($level ===
'warn') {
76 return in_array($level, array(
'error',
'warning',
'all'),
true) ? $level :
'all';
79 private function sys_msg_level_config(): string {
80 return $this->normalize_sys_msg_level(
dbx()->get_config(
'dbx',
'sys_msg_level',
'all'));
83 private function sys_msg_level_options(
string $current,
$texts): string {
85 'error' =>
$texts->get_fd_message(
'level_error_only'),
86 'warning' =>
$texts->get_fd_message(
'level_error_warning'),
87 'all' =>
$texts->get_fd_message(
'level_all'),
92 $selected =
$value === $current ?
' selected' :
'';
93 $html .=
'<option value="' .
dbx()->esc(
$value) .
'"' . $selected .
'>' .
dbx()->esc($label) .
'</option>';
99 private function set_sys_msg_level_config(
string $level): bool {
105 $config[
'sys_msg_level'] = $this->normalize_sys_msg_level($level);
106 return (
int)
dbx()->set_config(
'dbx',
$config) > 0;
109 private function sys_msg_level_control(): string {
111 $oForm->
init(
'admin-dashboard-sysmsg-level-control',
'admin-dashboard-sysmsg-level-control');
112 $oForm->_fd =
'dbxAdmin|rpt-sysmsg-selection';
113 $oForm->load_fd_messages();
114 $oForm->_action =
'?dbx_modul=dbxAdmin&dbx_run1=sysmsg&dbx_run2=sysmsg_level_save';
115 $oForm->_msg_info =
'';
116 $current = $this->sys_msg_level_config();
117 $oForm->add_rep(
'action',
dbx()->
esc($oForm->_action));
118 $oForm->add_rep(
'sys_msg_level_save_base',
dbx()->
esc($oForm->_action));
120 'sys_msg_level_options',
121 $this->sys_msg_level_options($current, $oForm)
124 return $oForm->add_norep($oForm->run());
127 private function report_sysmsg() {
129 $db =
dbx()->get_system_obj(
'dbxDB');
130 $oReport =
dbx()->get_system_obj(
'dbxReport');
132 $oReport->init(
'report-sysmsg');
133 $oReport->_fd =
'dbxAdmin|rpt-sysmsg-selection';
134 $oReport->load_fd_messages();
136 $oReport->add_rep(
'report_shell_class',
'dbx-admin-dashboard-panel dbx-admin-dashboard-sysmsg-report');
138 $work =
dbx()->get_modul_var(
'dbx_do',
'',
'parameter');
139 $rid =
dbx()->get_modul_var(
'rid', 0,
'int');
141 if (
$work ==
'row_delete' && $rid) {
142 $ok = $oReport->del_selected($rid);
146 $oReport->_msg_success = $oReport->get_fd_message(
150 $oReport->_msg_error = $oReport->get_fd_message(
156 if (
$work ==
'multi_delete') {
157 $result = $oReport->delete_multi_selected_records(
$dd);
158 $oReport->apply_multi_delete_result(
$result);
161 if (
$work ==
'delete_tab') {
163 dbx()->debug(
"##delete tab dd=($dd) ok=($ok)");
165 $oReport->_msg_success = $oReport->get_fd_message(
169 $oReport->_msg_error = $oReport->get_fd_message(
175 if (
$work ==
'delete_error_log') {
176 $result = $this->delete_error_log();
179 $oReport->_msg_success = $oReport->get_fd_message(
182 } elseif (
$result ===
'deleted') {
183 $oReport->_msg_success = $oReport->get_fd_message(
187 $oReport->_msg_error = $oReport->get_fd_message(
188 'error_log_delete_error'
194 $flds[
'create_date'] = $oReport->get_fd_message(
'column_created');
195 $flds[
'level'] = $oReport->get_fd_message(
'column_level');
196 $flds[
'status'] = $oReport->get_fd_message(
'column_status');
197 $flds[
'about'] = $oReport->get_fd_message(
'column_context');
198 $flds[
'modul'] = $oReport->get_fd_message(
'column_module');
199 $flds[
'action'] = $oReport->get_fd_message(
'column_action');
200 $flds[
'work'] = $oReport->get_fd_message(
'column_process');
201 $flds[
'rid'] =
'RID';
202 $flds[
'xuser'] = $oReport->get_fd_message(
'column_user');
203 $flds[
'message'] = $oReport->get_fd_message(
'column_message');
205 $rformat[
'create_date'] =
'php-datetime-usr';
206 $oReport->_rpt_format = $rformat;
208 $oReport->_action =
'?dbx_modul=dbxAdmin&dbx_run1=sysmsg&dbx_run2=list_sysmsg';
209 $oReport->_pages =
true;
210 $oReport->_create_row_select =
true;
211 $oReport->_create_row_edit =
false;
212 $oReport->_create_row_delete =
true;
213 $oReport->_create_sel_flds =
true;
214 $oReport->_but_pagination = 5;
216 $oReport->enable_delete_tab(
$dd);
218 $oReport->add_action(
'rows_delete' ,
'action_button_delete' ,
'&dbx_do=multi_delete');
220 $oReport->create_selection_fields(
'dbxAdmin|rpt-sysmsg-selection');
221 $this->create_error_log_info($oReport);
223 if (
$work !=
'delete_tab' &&
$work !=
'delete_error_log' &&
$work !=
'multi_delete' &&
$work !=
'row_delete' && $oReport->submit()) {
224 if (!$oReport->errors()) {
225 $oReport->_msg_success =
'';
227 $oReport->_msg_error = $oReport->get_fd_message(
233 $rwhere = $oReport->get_fld_val(
'dbx_rwhere' ,
'' ,
'sqlsearch|max=64');
234 $rstatus= $oReport->get_fld_val(
'dbx_rstatus',
'all' ,
'parameter');
235 $rrows = $oReport->get_fld_val(
'dbx_rrows' , 15 ,
'int');
236 $rpos = $oReport->get_fld_val(
'dbx_rpos' , 0 ,
'int');
237 $rsort = $oReport->get_fld_val(
'dbx_rsort' ,
'create_date',
'parameter');
238 $rdesc = $oReport->get_fld_val(
'dbx_rdesc' ,
'DESC' ,
'parameter');
239 $select = $oReport->get_fld_val(
'dbx_rselect', 0 ,
'int');
246 'like' => array(
'message',
'about',
'why',
'what',
'modul',
'action',
'work',
'rid'),
247 'equal' => array(
'level',
'status',
'xuser'),
248 'mode' =>
'contains',
253 if ($rstatus !=
'' && $rstatus !=
'all') {
254 if (!is_array($rwhere)) {
258 $rwhere[
'status'] = $rstatus;
262 if (is_array($rwhere)) {
263 $rwhere =
$db->normalize_where(
$dd, $rwhere);
266 $rwhere = $oReport->add_rwhere_select($rwhere);
269 $oReport->_rflds = $flds;
270 $oReport->_rrows = $rrows;
271 $oReport->_rpos = $rpos;
272 $oReport->_count_all =
$db->count(
$dd);
273 $oReport->_rcount =
$db->count(
$dd, $rwhere);
274 $oReport->_rdata =
$db->select(
$dd, $rwhere, $flds, $rsort, $rdesc, $rgroup, $rrows, $rpos);
276 return $oReport->run();
279 private function process_sys_msg_level_action(): string {
280 $level =
dbx()->get_request_var(
'sys_msg_level', null,
'parameter');
281 if ($level ===
null || $level ===
'') {
282 $level =
$_POST[
'sys_msg_level'] ??
'all';
284 $this->set_sys_msg_level_config((
string) $level);
285 return $this->sys_msg_level_control();
292 private function client_diag() {
293 header(
'Content-Type: application/json; charset=utf-8');
295 $uid = (int)
dbx()->user(
'id');
297 $raw = file_get_contents(
'php://input');
298 $data = json_decode((
string) $raw,
true);
299 if (!is_array($data)) {
304 if (isset($data[
'entries']) && is_array($data[
'entries'])) {
305 $entries = $data[
'entries'];
306 } elseif (is_array($data) && !empty($data)) {
307 $entries = array($data);
310 $allowed = array(
'warning' => 1,
'error' => 1,
'security' => 1);
313 foreach ($entries as $entry) {
314 if (!is_array($entry)) {
318 $status = strtolower(trim((
string) ($entry[
'level'] ??
'warning')));
319 if ($status ===
'warn') {
326 $about = trim((
string) ($entry[
'lib'] ??
'dbxClient'));
327 $code = trim((
string) ($entry[
'code'] ??
''));
328 $message = trim((
string) ($entry[
'message'] ??
''));
329 $element = trim((
string) ($entry[
'element'] ??
''));
332 $about =
'dbxClient';
334 if ($message ===
'') {
335 $message = $code !==
'' ? $code :
'client diagnostic';
338 $rid = $code !==
'' ? $code : $element;
344 'element' => $element,
345 'ctx' => is_array($entry[
'ctx'] ??
null) ? $entry[
'ctx'] : array(),
346 'page' => (
string) (
$_SERVER[
'HTTP_REFERER'] ?? (
$_SERVER[
'REQUEST_URI'] ??
'')),
350 dbx()->sys_msg($status, $about, $rid, $message, $detail);
354 echo json_encode(array(
'ok' => 1,
'count' =>
$count), JSON_UNESCAPED_UNICODE);
359 $run2 =
dbx()->get_modul_var(
'dbx_run2',
'',
'parameter');
360 if ($run2 ===
'client_diag') {
361 return $this->client_diag();
363 if ($run2 ===
'sysmsg_level_save') {
364 if (
dbx()->get_modul_var(
'dbx_do',
'',
'parameter') !==
'') {
365 return $this->report_sysmsg();
367 return $this->process_sys_msg_level_action();
370 return $this->report_sysmsg();