| %s | %s | %s |
',
__('Date/Time', 'wp-fail2ban'),
__('Priority', 'wp-fail2ban'),
__('Message', 'wp-fail2ban')
);
if (count($messages)) {
$alt = true;
foreach ($messages as $message) {
printf(
'| %s Z | %s | %s |
',
$alt ? 'alternate' : '',
$message['dt'],
strtolower($message['lvl']),
$message['lvl'],
$message['msg']
);
$alt = !$alt;
}
} else {
printf('| %s |
', __('No messages found.', 'wp-fail2ban'));
}
echo '';
if (null === ($tfoot = apply_filters(__METHOD__.'::tfoot', null))) {
$dismiss = 'wp-fail2ban-'.WP_FAIL2BAN_VER2.'-last-5-messages-upgrade';
if (array_key_exists($dismiss, $_GET)) {
update_site_option($dismiss, intval($_GET[$dismiss]));
}
if (get_site_option($dismiss, 1) ||
array_key_exists($dismiss.'-debug', $_GET))
{
$tfoot .= sprintf(
'| %s |
',
network_admin_url('admin.php?page=wp-fail2ban-menu-pricing'),
__('Upgrade for a full log of new events', 'wp-fail2ban'),
network_admin_url("?{$dismiss}=0"),
'Dismiss',
''
);
}
}
echo "{$tfoot}";
echo '';
}
/**
* Helper: get last messages data
*
* @since 4.4.0 Add return type
* @since 4.3.4.0
*
* @return array
*/
function dashboard_widget_last_messages_data(): array
{
$data = [];
if (!is_array($messages = get_site_option('wp-fail2ban-messages', []))) {
$messages = [];
}
foreach ($messages as $message) {
$data[] = [
'dt' => str_replace(' ', ' ', $message['dt']),
'lvl' => $message['lvl'],
'msg' => str_replace(':', ':', htmlentities($message['msg'], ENT_SUBSTITUTE|ENT_HTML5, 'UTF-8'))
];
}
return $data;
}
/**
* Hook: heartbeat_received
*
* @since 5.0.0 Remove return type and $response type to handle other broken plugins
* @since 4.4.0 Add return type
* @since 4.3.4.0
*
* @param array $response
* @param array $data
*
* @return array
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
function heartbeat_received($response, array $data, string $screen_id)
{
if (isset($data['wp_fail2ban']) && 'wp_fail2ban_last_messages' == $data['wp_fail2ban']) {
$response['wp-fail2ban-last-messages'] = dashboard_widget_last_messages_data();
}
return $response;
}
add_filter('heartbeat_received', __NAMESPACE__.'\heartbeat_received', 10, 3);
/**
* wp_dashboard_setup action hook
*
* @since 4.4.0 Add return type
* @since 4.3.0
*
* @return void
*
* @see https://codex.wordpress.org/Function_Reference/wp_add_dashboard_widget
*/
function wp_dashboard_setup(): void
{
if ((!is_multisite() && current_user_can('manage_options')) ||
(is_network_admin() && current_user_can('manage_network_options')))
{
wp_add_dashboard_widget(
'wp_fail2ban_last_messages',
__('[WPf2b] Last 5 Messages', 'wp-fail2ban'),
__NAMESPACE__.'\dashboard_widget_last_messages'
);
wp_enqueue_style('wp-fail2ban-last-messages', plugins_url('css/widgets.css', __FILE__));
wp_enqueue_script('wp-fail2ban-last-messages', plugins_url('js/widgets.js', __FILE__), ['jquery']);
}
}
add_action('wp_dashboard_setup', __NAMESPACE__.'\wp_dashboard_setup');
add_action('wp_network_dashboard_setup', __NAMESPACE__.'\wp_dashboard_setup');