oont-contents/plugins/jetpack-boost/app/modules/Module.php
2025-02-08 15:10:23 +01:00

73 lines
1.7 KiB
PHP

<?php
namespace Automattic\Jetpack_Boost\Modules;
use Automattic\Jetpack_Boost\Contracts\Has_Activate;
use Automattic\Jetpack_Boost\Contracts\Has_Deactivate;
use Automattic\Jetpack_Boost\Contracts\Has_Submodules;
use Automattic\Jetpack_Boost\Contracts\Optimization;
use Automattic\Jetpack_Boost\Contracts\Pluggable;
use Automattic\Jetpack_Boost\Lib\Status;
class Module {
/**
* @var Status
*/
private $status;
/**
* @var Pluggable
*/
public $feature;
public function __construct( Pluggable $feature ) {
$this->feature = $feature;
$this->status = new Status( $feature::get_slug() );
}
public function on_activate() {
return $this->feature instanceof Has_Activate ? $this->feature::activate() : true;
}
public function on_deactivate() {
return $this->feature instanceof Has_Deactivate ? $this->feature::deactivate() : true;
}
public function get_slug() {
return $this->feature::get_slug();
}
public function get_submodules() {
if ( $this->feature instanceof Has_Submodules ) {
return $this->feature->get_submodules();
}
return false;
}
public function update( $new_status ) {
return $this->status->set( $new_status );
}
public function is_enabled() {
$always_on = is_subclass_of( $this->feature, 'Automattic\Jetpack_Boost\Contracts\Is_Always_On' );
if ( $always_on ) {
return true;
}
return $this->status->get();
}
public function is_available() {
return $this->feature::is_available();
}
/**
* Check if the module is active and ready to serve optimized output.
*/
public function is_optimizing() {
if ( $this->feature instanceof Optimization && $this->is_enabled() && $this->feature->is_ready() ) {
return true;
}
}
}