Files
dostavka_vodi/wp-content/plugins/all-in-one-wp-security-and-firewall/admin/wp-security-admin-menu.php
User A0264400 a766acdc90 first commit
2026-04-01 23:20:16 +03:00

281 lines
9.2 KiB
PHP

<?php
/**
* Parent class for all admin menu classes
*/
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
}
abstract class AIOWPSecurity_Admin_Menu {
/**
* Specify the menu slug
*
* @var string
*/
protected $menu_page_slug;
/**
* Specify all the tabs of this menu
*
* @var array
*/
protected $menu_tabs;
/**
* Constructor adds a admin menu
*
* @param string $title - Title of menu to be rendered
*/
public function __construct($title) {
$this->setup_menu_tabs();
$this->render_page($title);
}
/**
* Render the menu page
*
* @param string $title - the page title
*
* @return void
*/
protected function render_page($title) {
$current_tab = $this->get_current_tab();
?>
<div class="wrap">
<h2><?php echo esc_html($title); ?></h2>
<?php $this->render_tabs($current_tab); ?>
<div id="poststuff">
<div id="post-body">
<?php call_user_func($this->menu_tabs[$current_tab]['render_callback']); ?>
</div>
</div>
</div>
<?php
}
/**
* Render the menu tabs for this page
*
* @param string $current_tab - the current tab
*
* @return void
*/
protected function render_tabs($current_tab) {
echo '<h2 class="nav-tab-wrapper">';
foreach ($this->menu_tabs as $tab_key => $tab_info) {
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
echo '<a class="nav-tab ' . esc_attr($active) . '" href="?page=' . esc_attr($this->menu_page_slug) . '&tab=' . esc_attr($tab_key) . '">' . esc_html($tab_info['title']) . '</a>';
}
echo '</h2>';
}
/**
* Get valid current tab slug.
*
* @return string - current valid tab slug or empty string
*/
protected function get_current_tab() {
if (is_array($this->menu_tabs) && !empty($this->menu_tabs)) {
$tab_keys = array_keys($this->menu_tabs);
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- PCP warning. No nonce available.
if (empty($_GET['tab'])) {
return $tab_keys[0];
} else {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- PCP warning. No nonce available.
$current_tab = sanitize_text_field(wp_unslash($_GET['tab']));
return in_array($current_tab, $tab_keys) ? $current_tab : $tab_keys[0];
}
} else {
return '';
}
}
/**
* This function checks to see if there is a display condition for the tab and if so runs it otherwise it returns true to display the tab
*
* @param array $tab_info - the tab information array contains keys like title, render_callback and display_condition_callback
*
* @return boolean - true if the tab should be displayed or false to hide it
*/
protected function should_display_tab($tab_info) {
return AIOWPSecurity_Utility::apply_callback_filter($tab_info, 'display_condition_callback');
}
/**
* Shows postbox for settings menu
*
* @param string $id - css ID for postbox
* @param string $title - title of the postbox section
* @param string $content - the content of the postbox
**/
protected function postbox_toggle($id, $title, $content) {
//Always send string with translation markers in it
?>
<div id="<?php echo esc_attr($id); ?>" class="postbox">
<div class="handlediv" title="<?php echo esc_html__('Press to toggle', 'all-in-one-wp-security-and-firewall'); ?>"><br /></div>
<h3 class="hndle"><span><?php echo esc_html($title); ?></span></h3>
<div class="inside">
<?php echo wp_kses_post($content); ?>
</div>
</div>
<?php
}
/**
* Display a postbox with a title and content.
*
* This function generates and outputs HTML markup for a postbox with a specified title
* and content. The title and content should be provided as parameters, and they will be
* automatically escaped for security. The function ensures that translation markers are
* included in the output strings.
*
* @param string $title - The title of the postbox.
* @param string $content - The content to be displayed inside the postbox.
*
* @return void
*/
public function postbox($title, $content) {
// Always send string with translation markers in it
?>
<div class="postbox">
<h3 class="hndle"><label for="title"><?php echo esc_html($title); ?></label></h3>
<div class="inside">
<?php echo wp_kses_post($content); ?>
</div>
</div>
<?php
}
/**
* Render settings successfully updated message
*
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
*
* @return string|void
*/
public function show_msg_settings_updated($return_instead_of_echo = false) {
$message = '<div id="aios_message" class="updated fade"><p><strong>';
$message .= esc_html__('The settings have been successfully updated.', 'all-in-one-wp-security-and-firewall');
$message .= '</strong></p></div>';
if ($return_instead_of_echo) return $message;
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Variable contains escaped HTML.
echo $message;
}
/**
* Render settings successfully updated message
*
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
*
* @return string|void
*/
public static function show_msg_settings_updated_st($return_instead_of_echo = false) {
$message = '<div id="aios_message" class="updated fade"><p><strong>';
$message .= esc_html__('The settings have been successfully updated.', 'all-in-one-wp-security-and-firewall');
$message .= '</strong></p></div>';
if ($return_instead_of_echo) return $message;
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Variable contains escaped HTML.
echo $message;
}
/**
* Renders record(s) successfully deleted message at top of page.
*
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
* @return mixed
*/
public static function show_msg_record_deleted_st($return_instead_of_echo = false) {
return AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected record(s) has been deleted successfully.', 'all-in-one-wp-security-and-firewall'), $return_instead_of_echo);
}
/**
* Renders record(s) unsuccessfully deleted message at top of page.
*
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
* @return mixed
*/
public static function show_msg_record_not_deleted_st($return_instead_of_echo = false) {
return AIOWPSecurity_Admin_Menu::show_msg_error_st(__('The selected record(s) have failed to delete.', 'all-in-one-wp-security-and-firewall'), $return_instead_of_echo);
}
/**
* Render successfully updated message
*
* @param string $msg - This contains the message to show
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
*
* @return string|void
*/
public function show_msg_updated($msg, $return_instead_of_echo = false) {
$message = '<div id="aios_message" class="updated fade"><p><strong>';
$message .= wp_kses_post($msg);
$message .= '</strong></p></div>';
if ($return_instead_of_echo) return $message;
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Variable contains escaped HTML.
echo $message;
}
/**
* Render successfully updated message
*
* @param string $msg - This contains the message to show
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
*
* @return string|void
*/
public static function show_msg_updated_st($msg, $return_instead_of_echo = false) {
$message = '<div id="aios_message" class="updated fade"><p><strong>';
$message .= wp_kses_post($msg);
$message .= '</strong></p></div>';
if ($return_instead_of_echo) return $message;
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Variable contains escaped HTML.
echo $message;
}
/**
* Render error message
*
* @param string $error_msg - This contains the message to show
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
*
* @return string|void
*/
public function show_msg_error($error_msg, $return_instead_of_echo = false) {
$message = '<div id="aios_message" class="error"><p><strong>';
$message .= wp_kses_post($error_msg);
$message .= '</strong></p></div>';
if ($return_instead_of_echo) return $message;
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Variable contains escaped HTML.
echo $message;
}
/**
* Render error message
*
* @param string $error_msg - This contains the message to show
* @param bool $return_instead_of_echo - This is used for when the function needs to return the message
*
* @return string|void
*/
public static function show_msg_error_st($error_msg, $return_instead_of_echo = false) {
$message = '<div id="aios_message" class="error"><p><strong>';
$message .= wp_kses_post($error_msg);
$message .= '</strong></p></div>';
if ($return_instead_of_echo) return $message;
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Variable contains escaped HTML.
echo $message;
}
protected function start_buffer() {
ob_start();
}
protected function end_buffer_and_collect() {
$output = ob_get_contents();
ob_end_clean();
return $output;
}
}