This commit introduces a more reliable and consistent approach to setting up the development environment using backups: - Add setup-from-backup.sh script for environment setup from existing backups - Standardize script naming and organization - Move obsolete scripts to bin/obsolete directory - Update documentation with new workflow instructions - Create migration guide for transitioning to new workflow - Update Memory Bank with workflow improvements The new workflow provides: - More reliable environment setup - Faster setup process - Offline development capability - Consistent development environments across team members Breaking changes: - setup-dev.sh is replaced by setup-from-backup.sh - sync-and-setup.sh is replaced by separate scripts - verify-with-wpcli.sh is no longer used Migration path is documented in MIGRATION_GUIDE.md
209 lines
5.8 KiB
PHP
209 lines
5.8 KiB
PHP
<?php
|
|
namespace SpectraPro;
|
|
|
|
use SpectraPro\Admin\License_Handler;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
/**
|
|
* Plugin Loader.
|
|
*
|
|
* @package spectra-pro
|
|
* @since 1.0.0
|
|
*/
|
|
class PluginLoader {
|
|
|
|
/**
|
|
* Instance
|
|
*
|
|
* @access private
|
|
* @var object Class Instance.
|
|
* @since 1.0.0
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Initiator
|
|
*
|
|
* @since 1.0.0
|
|
* @return object initialized object of class.
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Autoload classes.
|
|
*
|
|
* @param string $class class name.
|
|
*/
|
|
public function autoload( $class ) {
|
|
if ( 0 !== strpos( $class, __NAMESPACE__ ) ) {
|
|
return;
|
|
}
|
|
|
|
$class_to_load = $class;
|
|
|
|
$filename = preg_replace(
|
|
[ '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
|
|
[ '', '$1-$2', '-', DIRECTORY_SEPARATOR ],
|
|
$class_to_load
|
|
);
|
|
|
|
if ( is_string( $filename ) ) {
|
|
$filename = strtolower( $filename );
|
|
|
|
$file = SPECTRA_PRO_DIR . $filename . '.php';
|
|
|
|
// if the file redable, include it.
|
|
if ( is_readable( $file ) ) {
|
|
require_once $file;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function __construct() {
|
|
spl_autoload_register( [ $this, 'autoload' ] );
|
|
register_activation_hook( SPECTRA_PRO_FILE, array( $this, 'activation_reset' ) );
|
|
add_action( 'plugins_loaded', array( $this, 'on_plugin_init' ) );
|
|
}
|
|
|
|
/**
|
|
* After Finish loading UAG Free, then loaded pro core functionality
|
|
*
|
|
* Hooked - uagb_core_loaded
|
|
*
|
|
* @return void
|
|
* @since 1.0.0
|
|
*/
|
|
public function on_plugin_init() {
|
|
|
|
load_plugin_textdomain( 'spectra-pro', false, SPECTRA_PRO_DIR . '/languages' );
|
|
|
|
if ( ! defined( 'UAGB_VER' ) ) {
|
|
add_action( 'admin_notices', array( $this, 'spectra_pro_fail_load' ) );
|
|
return;
|
|
}
|
|
|
|
if ( ! did_action( 'spectra_core_loaded' ) || ! version_compare( UAGB_VER, SPECTRA_CORE_REQUIRED_VER, '>=' ) ) {
|
|
add_action( 'admin_notices', array( $this, 'spectra_pro_fail_load_out_of_date' ) );
|
|
return;
|
|
}
|
|
|
|
if ( is_admin() ) {
|
|
Core\Admin::init();
|
|
}
|
|
|
|
( new License_Handler() )->init();
|
|
Core\Base::init();
|
|
Core\Assets::init();
|
|
BlocksConfig\Config::init();
|
|
Core\Extensions_Manager::init();
|
|
|
|
}
|
|
|
|
/**
|
|
* Set Redirect flag on activation.
|
|
*
|
|
* @Hooked - register_activation_hook
|
|
*
|
|
* @return void
|
|
* @since 1.0.0
|
|
*/
|
|
public function activation_reset() {
|
|
update_option( '__spectra_pro_do_redirect', true );
|
|
}
|
|
|
|
/**
|
|
* Check spectra core is installed or not.
|
|
*
|
|
* @return bool
|
|
* @since 1.0.0
|
|
*/
|
|
public function is_spectra_core_installed() {
|
|
$path = 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php';
|
|
$plugins = get_plugins();
|
|
|
|
return isset( $plugins[ $path ] );
|
|
}
|
|
|
|
/**
|
|
* Admon Notice Callback if failed to load core.
|
|
*
|
|
* Hooked - admin_notices
|
|
*
|
|
* @return void
|
|
* @since 1.0.0
|
|
*/
|
|
public function spectra_pro_fail_load() {
|
|
$screen = get_current_screen();
|
|
if ( isset( $screen->parent_file ) && 'plugins.php' === $screen->parent_file && 'update' === $screen->id ) {
|
|
return;
|
|
}
|
|
|
|
$plugin = 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php';
|
|
|
|
if ( $this->is_spectra_core_installed() ) {
|
|
if ( ! current_user_can( 'activate_plugins' ) ) {
|
|
return;
|
|
}
|
|
|
|
$activation_url = wp_nonce_url( 'plugins.php?action=activate&plugin=' . $plugin . '&plugin_status=all&paged=1&s', 'activate-plugin_' . $plugin );
|
|
|
|
$message = '<h3>' . esc_html__( 'Activate the Spectra Plugin', 'spectra-pro' ) . '</h3>';
|
|
$message .= '<p>' . esc_html__( 'Before you can use all the features of Spectra Pro, you need to activate the Spectra plugin first.', 'spectra-pro' ) . '</p>';
|
|
$message .= '<p>' . sprintf( '<a href="%s" class="button-primary">%s</a>', $activation_url, esc_html__( 'Activate Now', 'spectra-pro' ) ) . '</p>';
|
|
} else {
|
|
if ( ! current_user_can( 'install_plugins' ) ) {
|
|
return;
|
|
}
|
|
|
|
$install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=ultimate-addons-for-gutenberg' ), 'install-plugin_ultimate-addons-for-gutenberg' );
|
|
|
|
$message = '<h3>' . esc_html__( 'Install and Activate the Spectra Plugin', 'spectra-pro' ) . '</h3>';
|
|
$message .= '<p>' . esc_html__( 'Before you can use all the features of Spectra Pro, you need to install and activate the Spectra plugin first.', 'spectra-pro' ) . '</p>';
|
|
$message .= '<p>' . sprintf( '<a href="%s" class="button-primary">%s</a>', $install_url, esc_html__( 'Install Spectra', 'spectra-pro' ) ) . '</p>';
|
|
}//end if
|
|
|
|
// Phpcs ignore comment is required as $message variable is already escaped.
|
|
echo '<div class="error">' . $message . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
}
|
|
|
|
/**
|
|
* Admon Notice Callback if failed to load updated core.
|
|
*
|
|
* Hooked - admin_notices
|
|
*
|
|
* @return void
|
|
* @since 1.0.0
|
|
*/
|
|
public function spectra_pro_fail_load_out_of_date() {
|
|
if ( ! current_user_can( 'update_plugins' ) ) {
|
|
return;
|
|
}
|
|
|
|
$file_path = 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php';
|
|
|
|
$upgrade_link = wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file_path, 'upgrade-plugin_' . $file_path );
|
|
$message = '<p>' . esc_html__( 'Spectra Pro is not working because you are using an old version of Spectra.', 'spectra-pro' ) . '</p>';
|
|
$message .= '<p>' . sprintf( '<a href="%s" class="button-primary">%s</a>', $upgrade_link, esc_html__( 'Update Spectra Now', 'spectra-pro' ) ) . '</p>';
|
|
|
|
// Phpcs ignore comment is required as $message variable is already escaped.
|
|
echo '<div class="error">' . $message . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Kicking this off by calling 'get_instance()' method
|
|
*/
|
|
PluginLoader::get_instance();
|