HEX
Server: nginx/1.24.0
System: Linux iZm5eic9piryinoecjybjoZ 3.10.0-1160.114.2.el7.x86_64 #1 SMP Wed Mar 20 15:54:52 UTC 2024 x86_64
User: www (1000)
PHP: 8.2.28
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/h3.iyingtaos.cn/wp-content/plugins/bulk-delete/include/base/class-bd-base-page.php
<?php
/**
 * Base class for all Pages.
 *
 * @since   5.5.4
 *
 * @author  Sudar
 *
 * @package BulkDelete\Base\Page
 */
defined( 'ABSPATH' ) || exit; // Exit if accessed directly

/**
 * Base class for Pages.
 *
 * @abstract
 *
 * @since 5.5.4
 */
abstract class BD_Base_Page {
	/**
	 * @var string Page Slug.
	 */
	protected $page_slug;

	/**
	 * @var string Menu action.
	 */
	protected $menu_action = 'bd_after_primary_menus';

	/**
	 * @var string Minimum capability needed for viewing this page.
	 */
	protected $capability = 'manage_options';

	// TODO: Remove property after confirming on `class-bd-settings-page.php` file.
	/**
	 * @var bool Whether sidebar is needed or not.
	 */
	protected $render_sidebar = false;

	/**
	 * @var string The screen variable for this page.
	 */
	protected $screen;

	/**
	 * @var array Labels used in this page.
	 */
	protected $label = array();

	/**
	 * @var array Messages shown to the user.
	 */
	protected $messages = array();

	/**
	 * @var array Actions used in this page.
	 */
	protected $actions = array();

	/**
	 * Initialize and setup variables.
	 *
	 * @since 5.5.4
	 * @abstract
	 *
	 * @return void
	 */
	abstract protected function initialize();

	/**
	 * Render body content.
	 *
	 * @since 5.5.4
	 * @abstract
	 *
	 * @return void
	 */
	abstract protected function render_body();

	/**
	 * Use `factory()` method to create instance of this class.
	 * Don't create instances directly.
	 *
	 * @since 5.5.4
	 * @see factory()
	 */
	public function __construct() {
		$this->setup();
	}

	/**
	 * Setup the module.
	 *
	 * @since 5.5.4
	 */
	protected function setup() {
		$this->initialize();
		$this->setup_hooks();
	}

	/**
	 * Setup hooks.
	 *
	 * @since 5.5.4
	 */
	protected function setup_hooks() {
		add_action( $this->menu_action, array( $this, 'add_menu' ) );
		add_action( "bd_admin_footer_for_{$this->page_slug}", array( $this, 'modify_admin_footer' ) );

		add_filter( 'bd_action_nonce_check', array( $this, 'nonce_check' ), 10, 2 );
		add_filter( 'bd_admin_help_tabs', array( $this, 'render_help_tab' ), 10, 2 );
	}

	/**
	 * Add menu.
	 *
	 * @since 5.5.4
	 */
	public function add_menu() {
		$this->screen = add_submenu_page(
			Bulk_Delete::POSTS_PAGE_SLUG,
			$this->label['page_title'],
			$this->label['menu_title'],
			$this->capability,
			$this->page_slug,
			array( $this, 'render_page' )
		);
	}

	/**
	 * Check for nonce before executing the action.
	 *
	 * @since 5.5.4
	 *
	 * @param bool   $result The current result.
	 * @param string $action Action name.
	 */
	public function nonce_check( $result, $action ) {
		if ( in_array( $action, $this->actions ) ) {
			if ( check_admin_referer( "bd-{$this->page_slug}", "bd-{$this->page_slug}-nonce" ) ) {
				return true;
			}
		}

		return $result;
	}

	/**
	 * Modify help tabs for the current page.
	 *
	 * @since 5.5.4
	 *
	 * @param array  $help_tabs Current list of help tabs.
	 * @param string $screen    Current screen name.
	 *
	 * @return array Modified list of help tabs.
	 */
	public function render_help_tab( $help_tabs, $screen ) {
		if ( $this->screen == $screen ) {
			$help_tabs = $this->add_help_tab( $help_tabs );
		}

		return $help_tabs;
	}

	/**
	 * Add help tabs.
	 * Help tabs can be added by overriding this function in the child class.
	 *
	 * @since 5.5.4
	 *
	 * @param array $help_tabs Current list of help tabs.
	 *
	 * @return array List of help tabs.
	 */
	protected function add_help_tab( $help_tabs ) {
		return $help_tabs;
	}

	/**
	 * Render the page.
	 *
	 * @since 5.5.4
	 */
	public function render_page() {
?>
		<div class="wrap">
			<h2><?php echo $this->label['page_title'];?></h2>
			<?php settings_errors(); ?>

			<form method = "post">
			<?php $this->render_nonce_fields(); ?>

			<div id = "poststuff">
				<div id="post-body" class="metabox-holder columns-1">

					<?php $this->render_header(); ?>

					<div id="postbox-container-2" class="postbox-container">
						<?php $this->render_body(); ?>
					</div> <!-- #postbox-container-2 -->

				</div> <!-- #post-body -->
			</div><!-- #poststuff -->
			</form>
		</div><!-- .wrap -->
<?php
		$this->render_footer();
	}

	/**
	 * Print nonce fields.
	 *
	 * @since 5.5.4
	 */
	protected function render_nonce_fields() {
		wp_nonce_field( "bd-{$this->page_slug}", "bd-{$this->page_slug}-nonce" );
	}

	/**
	 * Render header for the page.
	 *
	 * If sidebar is enabled, then it is rendered as well.
	 *
	 * @since 5.5.4
	 */
	protected function render_header() {
?>
		<div class="notice notice-warning">
			<p><strong><?php echo $this->messages['warning_message']; ?></strong></p>
		</div>
<?php
	}

	/**
	 * Render footer.
	 *
	 * @since 5.5.4
	 */
	protected function render_footer() {
		/**
		 * Runs just before displaying the footer text in the admin page.
		 *
		 * This action is primarily for adding extra content in the footer of admin page.
		 *
		 * @since 5.5.4
		 */
		do_action( "bd_admin_footer_for_{$this->page_slug}" );
	}

	/**
	 * Modify admin footer in Bulk Delete plugin pages.
	 */
	public function modify_admin_footer() {
		add_filter( 'admin_footer_text', 'bd_add_rating_link' );
	}

	/**
	 * Getter for screen.
	 *
	 * @return string Current value of screen
	 */
	public function get_screen() {
		return $this->screen;
	}

	/**
	 * Getter for page_slug.
	 *
	 * @return string Current value of page_slug
	 */
	public function get_page_slug() {
		return $this->page_slug;
	}
}
?>