geno/wp-content/themes/astra/admin/includes/class-astra-theme-builder-free.php
2024-02-01 11:54:18 +00:00

183 lines
5.4 KiB
PHP

<?php
/**
* Site Builder Free Version Preview.
*
* @package Astra
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
if ( ! class_exists( 'Astra_Theme_Builder_Free' ) ) {
define( 'ASTRA_THEME_BUILDER_FREE_DIR', ASTRA_THEME_DIR . 'admin/assets/theme-builder/' );
define( 'ASTRA_THEME_BUILDER_FREE_URI', ASTRA_THEME_URI . 'admin/assets/theme-builder/' );
/**
* Site Builder initial setup.
*
* @since 4.5.0
*/
class Astra_Theme_Builder_Free {
/**
* Member Variable
*
* @var null $instance
*/
private static $instance;
/**
* Initiator
*
* @since 4.5.0
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
/** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
self::$instance = new self();
/** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
}
return self::$instance;
}
/**
* Constructor
*
* @since 4.5.0
* @return void
*/
public function __construct() {
$is_astra_addon_active = ( defined( 'ASTRA_EXT_VER' ) );
if ( ! $is_astra_addon_active ) {
add_action( 'admin_enqueue_scripts', array( $this, 'theme_builder_admin_enqueue_scripts' ) );
add_action( 'admin_body_class', array( $this, 'admin_body_class' ) );
add_action( 'admin_menu', array( $this, 'setup_menu' ) );
add_action( 'admin_init', array( $this, 'astra_theme_builder_disable_notices' ) );
}
add_action( 'admin_page_access_denied', array( $this, 'astra_theme_builder_access_denied_redirect' ) );
}
/**
* Enqueue scripts and styles.
*
* @since 4.5.0
* @return void
*/
public function theme_builder_admin_enqueue_scripts() {
$file_prefix = '';
if ( is_rtl() ) {
$file_prefix .= '.rtl';
}
wp_enqueue_style( 'astra-theme-builder-style', ASTRA_THEME_BUILDER_FREE_URI . 'build/index' . $file_prefix . '.css', array(), ASTRA_THEME_VERSION );
wp_enqueue_script( 'astra-theme-builder-script', ASTRA_THEME_BUILDER_FREE_URI . 'build/index.js', array( 'wp-element' ), ASTRA_THEME_VERSION, true );
wp_enqueue_style( 'dashicons' );
$localized_data = array(
'title' => __( 'Site Builder', 'astra' ),
'rest_url' => '/wp-json/astra-addon/v1/custom-layouts/',
'new_custom_layout_base_url' => admin_url( 'post-new.php?post_type=astra-advanced-hook' ),
'astra_pricing_page_url' => 'https://wpastra.com/pricing/',
'astra_docs_page_url' => 'https://wpastra.com/docs/custom-layouts-pro/',
'admin_url' => admin_url(),
);
wp_localize_script( 'astra-theme-builder-script', 'astra_theme_builder', $localized_data );
}
/**
* Admin Body Classes
*
* @since 4.5.0
* @param string $classes Space separated class string.
*/
public function admin_body_class( $classes = '' ) {
$theme_builder_class = isset( $_GET['page'] ) && 'theme-builder-free' === $_GET['page'] ? 'ast-theme-builder' : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Fetching a $_GET value, no nonce available to validate.
$classes .= ' ' . $theme_builder_class . ' ';
return $classes;
}
/**
* Renders the admin settings.
*
* @since 4.5.0
* @return void
*/
public function render_theme_builder() {
?>
<div class="ast-tb-menu-page-wrapper">
<div id="ast-tb-menu-page">
<div class="ast-tb-menu-page-content">
<div id="ast-tb-app-root" class="ast-tb-app-root"></div>
</div>
</div>
</div>
<?php
}
/**
* Setup menu.
*
* @since 4.5.0
* @return void
*/
public function setup_menu() {
add_submenu_page( // phpcs:ignore WPThemeReview.PluginTerritory.NoAddAdminPages.add_menu_pages_add_submenu_page -- Taken the menu on top level
'astra',
__( 'Site Builder', 'astra' ),
__( 'Site Builder', 'astra' ),
'manage_options',
'theme-builder-free',
array( $this, 'render_theme_builder' ),
2
);
}
/**
* Disable notices for Site Builder page.
*
* @since 4.5.0
* @return void
*/
public function astra_theme_builder_disable_notices() {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Fetching a $_GET value, no nonce available to validate.
if ( isset( $_GET['page'] ) && 'theme-builder-free' === $_GET['page'] ) {
remove_all_actions( 'admin_notices' );
remove_all_actions( 'all_admin_notices' ); // For older versions of WordPress
}
}
/**
* Redirect to Site Builder pro from free preview if pro module is active.
*
* @since 4.5.0
* @return void
*/
public function astra_theme_builder_access_denied_redirect() {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Fetching a $_GET value, no nonce available to validate.
if ( isset( $_GET['page'] ) && 'theme-builder-free' === $_GET['page'] ) {
/** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$is_astra_addon_active = ( defined( 'ASTRA_EXT_VER' ) && Astra_Ext_Extension::is_active( 'advanced-hooks' ) );
/** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( $is_astra_addon_active ) {
wp_redirect( admin_url( 'admin.php?page=theme-builder' ) );
exit;
}
}
}
}
/**
* Kicking this off by calling 'get_instance()' method
*/
Astra_Theme_Builder_Free::get_instance();
}