File: /home/agritoday/public_html/wp-content/plugins-x/wordpress-seo/src/loader.php
<?php
/**
* Yoast SEO Plugin File.
*
* @package Yoast\WP\SEO
*/
namespace Yoast\WP\SEO;
use YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Class that manages loading integrations if and only if all their conditionals are met.
*/
class Loader {
/**
* The registered integrations.
*
* @var string[]
*/
protected $integrations = [];
/**
* The registered integrations.
*
* @var string[]
*/
protected $initializers = [];
/**
* The registered routes.
*
* @var string[]
*/
protected $routes = [];
/**
* The registered commands.
*
* @var string[]
*/
protected $commands = [];
/**
* The dependency injection container.
*
* @var \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerInterface
*/
protected $container;
/**
* Loader constructor.
*
* @param \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerInterface $container The dependency injection container.
*/
public function __construct( ContainerInterface $container ) {
$this->container = $container;
}
/**
* Registers an integration.
*
* @param string $class The class name of the integration to be loaded.
*
* @return void
*/
public function register_integration( $class ) {
$this->integrations[] = $class;
}
/**
* Registers an initializer.
*
* @param string $class The class name of the initializer to be loaded.
*
* @return void
*/
public function register_initializer( $class ) {
$this->initializers[] = $class;
}
/**
* Registers a route.
*
* @param string $class The class name of the route to be loaded.
*
* @return void
*/
public function register_route( $class ) {
$this->routes[] = $class;
}
/**
* Registers a command.
*
* @param string $class The class name of the command to be loaded.
*
* @return void
*/
public function register_command( $class ) {
$this->commands[] = $class;
}
/**
* Loads all registered classes if their conditionals are met.
*
* @return void
*/
public function load() {
$this->load_initializers();
$this->load_integrations();
\add_action( 'rest_api_init', [ $this, 'load_routes' ] );
if ( defined( 'WP_CLI' ) && WP_CLI ) {
$this->load_commands();
}
}
/**
* Loads all registered commands.
*
* @return void
*/
protected function load_commands() {
foreach ( $this->commands as $class ) {
$command = $this->container->get( $class );
\WP_CLI::add_command( $class::get_namespace(), $command );
}
}
/**
* Loads all registered initializers if their conditionals are met.
*
* @return void
*/
protected function load_initializers() {
foreach ( $this->initializers as $class ) {
if ( ! $this->conditionals_are_met( $class ) ) {
continue;
}
$this->container->get( $class )->initialize();
}
}
/**
* Loads all registered integrations if their conditionals are met.
*
* @return void
*/
protected function load_integrations() {
foreach ( $this->integrations as $class ) {
if ( ! $this->conditionals_are_met( $class ) ) {
continue;
}
$this->container->get( $class )->register_hooks();
}
}
/**
* Loads all registered routes if their conditionals are met.
*
* @return void
*/
public function load_routes() {
foreach ( $this->routes as $class ) {
if ( ! $this->conditionals_are_met( $class ) ) {
continue;
}
$this->container->get( $class )->register_routes();
}
}
/**
* Checks if all conditionals of a given integration are met.
*
* @param Loadable_Interface $class The class name of the integration.
*
* @return bool Whether or not all conditionals of the integration are met.
*/
protected function conditionals_are_met( $class ) {
$conditionals = $class::get_conditionals();
foreach ( $conditionals as $conditional ) {
if ( ! $this->container->get( $conditional )->is_met() ) {
return false;
}
}
return true;
}
}