<?php
/**
* Initializer base class.
*
* @package @automattic/jetpack-wordads
*/
namespace Automattic\Jetpack\WordAds;
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
use Automattic\Jetpack\Modules;
use WP_Error;
/**
* Base class for the initializer pattern.
*/
class Initializer {
/**
* Initialize the WordAds package.
*/
public static function init() {
// Set up package version hook.
add_filter( 'jetpack_package_versions', __NAMESPACE__ . '\Package::send_version_to_tracker' );
/**
* The filter allows abortion of the WordAds package initialization.
*
* @since 0.1.0
*
* @param boolean $init_wordads_package Default value is true.
*/
if ( ! apply_filters( 'jetpack_wordads_init_wordads_package', true ) ) {
/**
* Fires when the WordAds fails and would fallback to MySQL.
*
* @since Jetpack 7.9.0
* @param string $reason Reason for WordAds fallback.
* @param mixed $data Data associated with the request, such as attempted search parameters.
*/
do_action( 'jetpack_wordads_abort', 'jetpack_wordads_init_wordads_package_filter', null );
return;
}
static::init_before_connection();
// Check whether WordAds should be initialized in the first place .
if ( ! static::is_connected() || ! static::is_wordads_supported() ) {
/** This filter is documented in search/src/initalizers/class-initalizer.php */
do_action( 'jetpack_wordads_abort', 'inactive', null );
return;
}
$blog_id = Helper::get_wpcom_site_id();
if ( ! $blog_id ) {
/** This filter is documented in search/src/initalizers/class-initalizer.php */
do_action( 'jetpack_wordads_abort', 'no_blog_id', null );
return;
}
if ( ! ( new Modules() )->is_active( Package::SLUG ) ) {
/** This filter is documented in search/src/initalizers/class-initalizer.php */
do_action( 'jetpack_wordads_abort', 'module_inactive', null );
return;
}
/**
* Fires when the WordAds package has been initialized.
*
* @since 0.1.0
*/
do_action( 'jetpack_wordads_loaded' );
}
/**
* Init functionality required for connection.
*/
protected static function init_before_connection() {
// Set up WordAds API endpoints.
add_action( 'rest_api_init', array( new REST_Controller(), 'register_rest_routes' ) );
// The dashboard has to be initialized before connection.
( new Dashboard() )->init_hooks();
}
/**
* Register jetpack-wordads CLI if `\CLI` exists.
*
* @return void
*/
protected static function init_cli() {
if ( defined( 'WP_CLI' ) && \WP_CLI ) {
\WP_CLI::add_command( 'wordads', __NAMESPACE__ . '\CLI' );
}
}
/**
* Check if site has been connected.
*/
protected static function is_connected() {
return ( new Connection_Manager( Package::SLUG ) )->is_connected();
}
/**
* Check if wordads is supported by current plan.
* TODO.
*/
protected static function is_wordads_supported() {
return true;
}
/**
* Perform necessary initialization steps
*
* @deprecated
*/
public static function initialize() {
return new WP_Error(
'invalid-method',
/* translators: %s: Method name. */
sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'jetpack-wordads' ), __METHOD__ ),
array( 'status' => 405 )
);
}
}