<?php /** * WP Multisite WaaS Add New Site Admin Page. * * @package WP_Ultimo * @subpackage Admin_Pages * @since 2.0.0 */ namespace WP_Ultimo\Admin_Pages\Customer_Panel; // Exit if accessed directly defined('ABSPATH') || exit; use WP_Ultimo\Admin_Pages\Base_Customer_Facing_Admin_Page; /** * WP Multisite WaaS Add New Site Admin Page. */ class Add_New_Site_Admin_Page extends Base_Customer_Facing_Admin_Page { /** * Holds the ID for this page, this is also used as the page slug. * * @var string */ protected $id = 'add-new-site'; /** * Is this a top-level menu or a submenu? * * @since 1.8.2 * @var string */ protected $type = 'submenu'; /** * Allows us to highlight another menu page, if this page has no parent page at all. * * @since 2.0.0 * @var boolean */ protected $highlight_menu_slug = 'sites'; /** * Menu position. This is only used for top-level menus * * @since 1.8.2 * @var integer */ protected $position = 101_010_101; /** * Dashicon to be used on the menu item. This is only used on top-level menus * * @since 1.8.2 * @var string */ protected $menu_icon = 'dashicons-wu-browser'; /** * If this number is greater than 0, a badge with the number will be displayed alongside the menu title * * @since 1.8.2 * @var integer */ protected $badge_count = 0; /** * Should we hide admin notices on this page? * * @since 2.0.0 * @var boolean */ protected $hide_admin_notices = true; /** * Holds the admin panels where this page should be displayed, as well as which capability to require. * * To add a page to the regular admin (wp-admin/), use: 'admin_menu' => 'capability_here' * To add a page to the network admin (wp-admin/network), use: 'network_admin_menu' => 'capability_here' * To add a page to the user (wp-admin/user) admin, use: 'user_admin_menu' => 'capability_here' * * @since 2.0.0 * @var array */ protected $supported_panels = [ 'admin_menu' => 'exist', 'user_admin_menu' => 'exist', ]; /** * The current customer instance. * * @since 2.0.0 * @var \WP_Ultimo\Models\Customer */ protected $customer; /** * The current site instance. * * @since 2.2.0 * @var \WP_Ultimo\Models\Site */ protected $current_site; /** * The current membership instance. * * @since 2.2.0 * @var \WP_Ultimo\Models\Membership|false */ protected $current_membership; /** * Checks if we need to add this page. * * @since 2.0.0 */ public function __construct() { $this->current_site = wu_get_current_site(); $this->current_membership = $this->current_site->get_membership(); $this->register_page_settings(); if ($this->current_site->get_type() === 'customer_owned') { parent::__construct(); } } /** * Loads the current site and membership. * * @since 1.8.2 * @return void */ public function page_loaded(): void { $this->customer = wu_get_current_customer(); } /** * Allow child classes to add hooks to be run once the page is loaded. * * @see https://codex.wordpress.org/Plugin_API/Action_Reference/load-(page) * @since 1.8.2 * @return void */ public function hooks() {} /** * Force the screen options so our customize options show up. * * @since 2.0.0 * @return void */ public function force_screen_options(): void { if ('toplevel_page_sites' !== get_current_screen()->id) { return; } // Forces Screen options so we can add our links. add_screen_option( 'wu_fix', [ 'option' => 'test', 'value' => true, ] ); } /** * Allow child classes to add screen options; Useful for pages that have list tables. * * @since 1.8.2 * @return void */ public function screen_options() {} /** * Allow child classes to register widgets, if they need them. * * @since 1.8.2 * @return void */ public function register_widgets(): void { \WP_Ultimo\UI\Simple_Text_Element::get_instance()->as_inline_content(get_current_screen()->id, 'wu_dash_before_metaboxes'); \WP_Ultimo\UI\Checkout_Element::get_instance()->as_inline_content( get_current_screen()->id, 'wu_dash_before_metaboxes', [ 'slug' => 'wu-add-new-site', 'membership_limitations' => ['sites'], ] ); } /** * Returns the title of the page. * * @since 2.0.0 * @return string Title of the page. */ public function get_title() { return __('Add New Site', 'wp-ultimo'); } /** * Returns the title of menu for this page. * * @since 2.0.0 * @return string Menu label of the page. */ public function get_menu_title() { return __('Add New Site', 'wp-ultimo'); } /** * Allows admins to rename the sub-menu (first item) for a top-level page. * * @since 2.0.0 * @return string False to use the title menu or string with sub-menu title. */ public function get_submenu_title() { return __('Add New Site', 'wp-ultimo'); } /** * Every child class should implement the output method to display the contents of the page. * * @since 1.8.2 * @return void */ public function output(): void { /* * Renders the base edit page layout, with the columns and everything else =) */ wu_get_template( 'base/dash', [ 'screen' => get_current_screen(), 'page' => $this, 'has_full_position' => false, ] ); } }