You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
2.7 KiB
PHP

<?php
/**
* The Event Scheduler for Content AI to update the prompts and credits data.
*
* @since 1.0.123
* @package RankMath
* @subpackage RankMath\ContentAI
* @author Rank Math <support@rankmath.com>
*/
namespace RankMath\ContentAI;
use WP_Block_Type_Registry;
use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Traits\Hooker;
defined( 'ABSPATH' ) || exit;
/**
* Event_Scheduler class.
*/
class Event_Scheduler {
use Hooker;
/**
* The single instance of the class.
*
* @var Event_Scheduler
*/
protected static $instance = null;
/**
* Retrieve main Block_Command instance.
*
* Ensure only one instance is loaded or can be loaded.
*
* @return Event_Scheduler
*/
public static function get() {
if ( is_null( self::$instance ) && ! ( self::$instance instanceof Event_Scheduler ) ) {
self::$instance = new Event_Scheduler();
}
return self::$instance;
}
/**
* The Constructor.
*/
public function __construct() {
if ( ! Helper::is_site_connected() ) {
return;
}
$credits = get_option( 'rank_math_ca_credits' );
if ( ! empty( $credits['refresh_date'] ) ) {
wp_schedule_single_event( absint( $credits['refresh_date'] ) + 60, 'rank_math/content-ai/update_plan' );
}
$this->action( 'rank_math/content-ai/update_prompts', 'update_prompts_data' );
$this->action( 'rank_math/content-ai/update_plan', 'update_content_ai_plan' );
$this->action( 'admin_footer', 'update_prompts_on_new_site' );
}
/**
* Fetch and update the prompts data daily.
*
* @return void
*/
public function update_prompts_data() {
if ( ! Helper::get_credits() || ! Helper::get_content_ai_plan() ) {
return;
}
$prompt_data = [];
$data = wp_remote_get( CONTENT_AI_URL . '/ai/default_prompts' );
$response_code = wp_remote_retrieve_response_code( $data );
if ( is_wp_error( $data ) || 200 !== $response_code ) {
return;
}
update_option( 'rank_math_prompts_updated', true );
$data = wp_remote_retrieve_body( $data );
$data = json_decode( $data, true );
if ( empty( $data ) ) {
return;
}
Helper::save_default_prompts( $data );
}
/**
* Run the credits endpoint to update the plan on reset date.
*
* @return void
*/
public function update_content_ai_plan() {
Helper::get_content_ai_credits( true );
wp_clear_scheduled_hook( 'rank_math/content-ai/update_plan' );
}
/**
* Function to update Prompts data on new sites.
*
* @return void
*/
public function update_prompts_on_new_site() {
$prompts = Helper::get_prompts();
if ( get_option( 'rank_math_prompts_updated' ) || ! empty( $prompts ) ) {
return;
}
do_action( 'rank_math/content-ai/update_prompts' );
}
}