setTemplateFile('config_debug'); } /** * Update debug configuration. */ public function procAdminUpdateDebug() { $vars = Context::getRequestVars(); // Save display type settings $display_type = array_values(array_filter($vars->debug_display_type ?: [], function($str) { return in_array($str, ['panel', 'comment', 'file']); })); // Debug settings Config::set('debug.enabled', $vars->debug_enabled === 'Y'); Config::set('debug.log_slow_queries', max(0, floatval($vars->debug_log_slow_queries))); Config::set('debug.log_slow_triggers', max(0, floatval($vars->debug_log_slow_triggers))); Config::set('debug.log_slow_widgets', max(0, floatval($vars->debug_log_slow_widgets))); Config::set('debug.log_slow_remote_requests', max(0, floatval($vars->debug_log_slow_remote_requests))); Config::set('debug.display_type', $display_type); Config::set('debug.display_to', strval($vars->debug_display_to) ?: 'admin'); Config::set('debug.query_comment', $vars->debug_query_comment === 'Y'); Config::set('debug.query_full_stack', $vars->debug_query_full_stack === 'Y'); Config::set('debug.write_error_log', strval($vars->debug_write_error_log) ?: 'fatal'); // Debug content $debug_content = array_values($vars->debug_display_content ?: array()); Config::set('debug.display_content', $debug_content); // Log filename $log_filename = strval($vars->debug_log_filename); $log_filename_today = str_replace(array('YYYY', 'YY', 'MM', 'DD'), array( getInternalDateTime(RX_TIME, 'Y'), getInternalDateTime(RX_TIME, 'y'), getInternalDateTime(RX_TIME, 'm'), getInternalDateTime(RX_TIME, 'd'), ), $log_filename); if (file_exists(RX_BASEDIR . $log_filename_today) && !is_writable(RX_BASEDIR . $log_filename_today)) { throw new Exception('msg_debug_log_filename_not_writable'); } if (!file_exists(dirname(RX_BASEDIR . $log_filename)) && !FileHandler::makeDir(dirname(RX_BASEDIR . $log_filename))) { throw new Exception('msg_debug_log_filename_not_writable'); } if (!is_writable(dirname(RX_BASEDIR . $log_filename))) { throw new Exception('msg_debug_log_filename_not_writable'); } Config::set('debug.log_filename', $log_filename); // IP access control $allowed_ip = array_map('trim', preg_split('/[\r\n]/', $vars->debug_allowed_ip)); $allowed_ip = array_unique(array_filter($allowed_ip, function($item) { return $item !== ''; })); if (!IpFilter::validateRanges($allowed_ip)) { throw new Exception('msg_invalid_ip'); } Config::set('debug.allow', array_values($allowed_ip)); // Save if (!Config::save()) { throw new Exception('msg_failed_to_save_config'); } $this->setMessage('success_updated'); $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminConfigDebug')); } }