| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <?php
- /**
- * Utilities related to the Jetpack Recommendations
- *
- * @package automattic/jetpack
- */
- use Automattic\Jetpack\Connection\Client;
- use Automattic\Jetpack\Connection\Manager as Connection_Manager;
- use Automattic\Jetpack\Status;
- /**
- * Contains utilities related to the Jetpack Recommendations.
- *
- * @package automattic/jetpack
- */
- /**
- * Jetpack_Recommendations class
- */
- class Jetpack_Recommendations {
- /**
- * Returns a boolean indicating if the Jetpack Recommendations are enabled.
- *
- * @since 9.3.0
- *
- * @return bool
- */
- public static function is_enabled() {
- // Shortcircuit early if Jetpack is not active or we are in offline mode.
- if ( ! Jetpack::is_connection_ready() || ( new Status() )->is_offline_mode() ) {
- return false;
- }
- // No recommendations for Atomic sites, they already get onboarded in Calypso.
- if ( jetpack_is_atomic_site() ) {
- return false;
- }
- self::initialize_jetpack_recommendations();
- return true;
- }
- /**
- * Returns a boolean indicating if the Jetpack Banner is enabled.
- *
- * @since 9.3.0
- *
- * @return bool
- */
- public static function is_banner_enabled() {
- // Shortcircuit early if the recommendations are not enabled at all.
- if ( ! self::is_enabled() ) {
- return false;
- }
- $recommendations_banner_enabled = Jetpack_Options::get_option( 'recommendations_banner_enabled', null );
- // If the option is already set, just return the cached value.
- // Otherwise calculate it and store it before returning it.
- if ( null !== $recommendations_banner_enabled ) {
- return $recommendations_banner_enabled;
- }
- if ( ! Jetpack::connection()->is_connected() ) {
- return new WP_Error( 'site_not_connected', esc_html__( 'Site not connected.', 'jetpack' ) );
- }
- $blog_id = Jetpack_Options::get_option( 'id' );
- $request_path = sprintf( '/sites/%s/jetpack-recommendations/site-registered-date', $blog_id );
- $result = Client::wpcom_json_api_request_as_blog(
- $request_path,
- 2,
- array(
- 'headers' => array( 'content-type' => 'application/json' ),
- ),
- null,
- 'wpcom'
- );
- $body = json_decode( wp_remote_retrieve_body( $result ) );
- if ( 200 === wp_remote_retrieve_response_code( $result ) ) {
- $site_registered_date = $body->site_registered_date;
- } else {
- $connection = new Connection_Manager( 'jetpack' );
- $site_registered_date = $connection->get_assumed_site_creation_date();
- }
- $recommendations_start_date = gmdate( 'Y-m-d H:i:s', strtotime( '2020-12-01 00:00:00' ) );
- $recommendations_banner_enabled = $site_registered_date > $recommendations_start_date;
- Jetpack_Options::update_option( 'recommendations_banner_enabled', $recommendations_banner_enabled );
- return $recommendations_banner_enabled;
- }
- /**
- * Initializes the Recommendations step according to the Setup Wizard state.
- */
- private static function initialize_jetpack_recommendations() {
- if ( Jetpack_Options::get_option( 'recommendations_step' ) ) {
- return;
- }
- $setup_wizard_status = Jetpack_Options::get_option( 'setup_wizard_status' );
- if ( 'completed' === $setup_wizard_status ) {
- Jetpack_Options::update_option( 'recommendations_banner_enabled', false );
- Jetpack_Options::update_option( 'recommendations_step', 'setup-wizard-completed' );
- }
- }
- /**
- * Get the data for the recommendations
- *
- * @return array Recommendations data
- */
- public static function get_recommendations_data() {
- self::initialize_jetpack_recommendations();
- return Jetpack_Options::get_option( 'recommendations_data', array() );
- }
- /**
- * Update the data for the recommendations
- *
- * @param WP_REST_Request $data The data.
- */
- public static function update_recommendations_data( $data ) {
- if ( ! empty( $data ) ) {
- Jetpack_Options::update_option( 'recommendations_data', $data );
- }
- }
- /**
- * Get the data for the recommendations
- *
- * @return array Recommendations data
- */
- public static function get_recommendations_step() {
- self::initialize_jetpack_recommendations();
- return array(
- 'step' => Jetpack_Options::get_option( 'recommendations_step', 'not-started' ),
- );
- }
- /**
- * Update the step for the recommendations
- *
- * @param WP_REST_Request $step The step.
- */
- public static function update_recommendations_step( $step ) {
- if ( ! empty( $step ) ) {
- Jetpack_Options::update_option( 'recommendations_step', $step );
- }
- }
- }
|