Files
tysweld.com/wp-content/plugins/polylang-pro/services/admin-loader/admin-loader.php
2025-02-24 22:33:42 +01:00

115 lines
2.8 KiB
PHP

<?php
/**
* @package Polylang-Pro
*/
use WP_Syntex\Polylang_Pro\Modules\Machine_Translation;
/**
* Loads the correct class depending on the context.
*
* @since 2.8
*/
class PLL_Admin_Loader {
/**
* Reference to the Polylang object.
*
* @var object
*/
protected $polylang;
/**
* Name of the property to create.
*
* @var string
*/
protected $property;
/**
* Fully qualified name of the class to instantiate.
*
* @var array
*/
protected $args;
/**
* Constructor.
*
* @since 2.8
* @since 3.6 New parameter `$args`.
*
* @param PLL_Base $polylang Polylang object.
* @param string $property Name of the property to add to $polylang.
* @param array $args Optional. List of arguments to use when instantiating the class.
*
* @phpstan-param non-falsy-string $property
*/
public function __construct( &$polylang, $property, array $args = array() ) {
$this->polylang = &$polylang;
$this->property = $property;
$this->args = $args;
add_action( 'admin_init', array( $this, 'load' ), 20 ); // After fusion Builder.
}
/**
* Finds out if the block editor is in use and loads the correct class accordingly.
*
* @since 2.8
*
* @return void
*/
public function load() {
if ( 'post-new.php' === $GLOBALS['pagenow'] ) {
// We need to wait until we know which editor is in use
add_filter( 'use_block_editor_for_post', array( $this, '_load' ), 999 ); // After the plugin Classic Editor
} elseif ( 'post.php' === $GLOBALS['pagenow'] && isset( $_GET['action'], $_GET['post'] ) && 'edit' === $_GET['action'] && empty( $_GET['meta-box-loader'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
$this->_load( use_block_editor_for_post( (int) $_GET['post'] ) ); // phpcs:ignore WordPress.Security.NonceVerification
} else {
$this->_load( false );
}
}
/**
* Loads the correct class, depending on the editor in use.
*
* We must make sure to instantiate the class only once, as the function may be called from a filter,
*
* @since 2.8
*
* @param bool $is_block_editor Whether to use the block editor or not.
* @return bool
*/
public function _load( $is_block_editor ) {
$prop = $this->property;
if ( isset( $this->polylang->$prop ) ) {
return $is_block_editor;
}
switch ( $prop ) {
case 'machine_translation':
$classname = Machine_Translation\Button::class;
break;
default:
$classname = 'PLL_' . ucwords( $prop, '_' );
break;
}
if ( $is_block_editor && pll_use_block_editor_plugin() ) {
$classname = "{$classname}_REST";
}
$args = array( $this->polylang );
if ( ! empty( $this->args ) ) {
$args = array_merge( $args, array_values( $this->args ) );
}
$this->polylang->$prop = new $classname( ...$args );
return $is_block_editor;
}
}