*/
namespace RankMath\Admin;
use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Param;
use RankMath\Helpers\Security;
use RankMath\Google\Authentication;
defined( 'ABSPATH' ) || exit;
/**
 * Registration class.
 */
class Registration {
	use Hooker;
	/**
	 * Page slug.
	 *
	 * @var string
	 */
	private $slug = 'rank-math-registration';
	/**
	 * Hold current step.
	 *
	 * @var string
	 */
	protected $step = '';
	/**
	 * Current step slug.
	 *
	 * @var string
	 */
	protected $step_slug = '';
	/**
	 * The text string array.
	 *
	 * @var array
	 */
	protected $strings = null;
	/**
	 * Is registration invalid.
	 *
	 * @var bool
	 */
	public $invalid = false;
	/**
	 * The Constructor.
	 */
	public function __construct() {
		// Strings passed in from the config file.
		$this->strings = [
			'title'               => esc_html__( 'Rank Math Product Registration', 'rank-math' ),
			'return-to-dashboard' => esc_html__( 'Return to dashboard', 'rank-math' ),
		];
		$this->step      = 'register';
		$this->step_slug = 'register';
		$this->invalid   = Helper::is_invalid_registration();
		if ( $this->invalid ) {
			$this->action( 'admin_menu', 'admin_menu' );
			$this->action( 'admin_init', 'redirect_to_welcome' );
			$this->action( 'admin_post_rank_math_save_registration', 'save_registration' );
			$this->action( 'admin_post_rank_math_skip_wizard', 'skip_wizard' );
			$this->action( 'admin_init', 'render_page', 30 );
		}
		$this->action( 'admin_init', 'handle_registration' );
	}
	/**
	 * Check for activation.
	 */
	public function handle_registration() {
		// Bail if already connected.
		if ( Helper::is_site_connected() ) {
			return;
		}
		if ( ! Helper::has_cap( 'general' ) ) {
			return;
		}
		$nonce = Param::get( 'nonce' );
		if ( ! $nonce || ! wp_verify_nonce( $nonce, 'rank_math_register_product' ) ) {
			return;
		}
		$status = Param::get( 'rankmath_connect' );
		if ( $status && $redirect_to = $this->get_registration_url( $status ) ) { //phpcs:ignore
			Helper::redirect( $redirect_to );
			exit;
		}
	}
	/**
	 * Handle activation.
	 *
	 * @param  string $status Status parameter.
	 */
	private function get_registration_url( $status ) {
		if ( 'cancel' === $status ) {
			// User canceled activation.
			Helper::add_notification( __( 'Rank Math plugin could not be connected.', 'rank-math' ), [ 'type' => 'error' ] );
			return Security::remove_query_arg_raw( [ 'rankmath_connect', 'rankmath_auth' ] );
		}
		if ( 'banned' === $status ) {
			// User or site banned.
			Helper::add_notification( __( 'Unable to connect Rank Math.', 'rank-math' ), [ 'type' => 'error' ] );
			return Security::remove_query_arg_raw( [ 'rankmath_connect', 'rankmath_auth' ] );
		}
		if ( 'ok' === $status && $auth_data = $this->get_registration_params() ) { // phpcs:ignore
			Admin_Helper::get_registration_data(
				[
					'username'  => $auth_data['username'],
					'email'     => $auth_data['email'],
					'api_key'   => $auth_data['api_key'],
					'plan'      => $auth_data['plan'],
					'connected' => true,
					'site_url'  => Helper::get_home_url(),
				]
			);
			if ( 1 == Param::get( 'analytics' ) ) {
				wp_redirect( Authentication::get_auth_url() );
				exit;
			}
			// Redirect to the wizard is registration successful.
			if ( Param::get( 'page' ) === 'rank-math-registration' ) {
				return Helper::get_admin_url( 'wizard' );
			}
			return Security::remove_query_arg_raw( [ 'rankmath_connect', 'rankmath_auth', 'nonce' ] );
		}
		return false;
	}
	/**
	 * Check if 'rankmath_auth' contains all the data we need, in the
	 * correct format.
	 *
	 * @return bool|array Whether the input is valid.
	 */
	private function get_registration_params() {
		$params = Param::get( 'rankmath_auth' );
		if ( false === $params ) {
			return false;
		}
		$params = json_decode( base64_decode( $params ), true );
		if (
			! is_array( $params ) ||
			! isset( $params['username'] ) ||
			! isset( $params['email'] ) ||
			! isset( $params['api_key'] )
		) {
			return false;
		}
		return $params;
	}
	/**
	 * Redirect to welcome page.
	 *
	 * Redirect the user to the welcome page after plugin activation.
	 */
	public function redirect_to_welcome() {
		if ( ! $this->can_redirect() ) {
			return;
		}
		$url = '';
		if ( $this->invalid ) {
			$url = 'registration';
		} elseif ( ! get_option( 'rank_math_wizard_completed' ) ) {
			$url = 'wizard';
		}
		Helper::redirect( Helper::get_admin_url( $url ) );
		exit;
	}
	/**
	 * Add menu items.
	 */
	public function admin_menu() {
		add_menu_page(
			esc_html__( 'Rank Math', 'rank-math' ),
			esc_html__( 'Rank Math SEO', 'rank-math' ),
			'manage_options',
			$this->slug,
			[ $this, 'render_page' ]
		);
	}
	/**
	 * Output the admin page.
	 */
	public function render_page() {
		// Early bail if we're not on the right page.
		if ( Param::get( 'page' ) !== $this->slug ) {
			return;
		}
		if ( ob_get_length() ) {
			ob_end_clean();
		}
		$assets = new Assets();
		$assets->register();
		wp_styles()->done  = [];
		wp_scripts()->done = [];
		// Enqueue styles.
		\CMB2_Hookup::enqueue_cmb_css();
		\CMB2_Hookup::enqueue_cmb_js();
		// Wizard.
		wp_enqueue_style( 'rank-math-wizard', rank_math()->plugin_url() . 'assets/admin/css/setup-wizard.css', [ 'wp-admin', 'buttons', 'cmb2-styles', 'rank-math-common', 'rank-math-cmb2' ], rank_math()->version );
		$logo_url = '';
		ob_start();
		/**
		 * Start the actual page content.
		 */
		include_once $this->get_view( 'header' );
		include_once $this->get_view( 'content' );
		include_once $this->get_view( 'footer' );
		exit;
	}
	/**
	 * Render page body.
	 */
	protected function body() {
		?>
		
' . esc_html__( 'Read more by following this link.', 'rank-math' ) . '' ); ?>
redirect_to_connect( $_POST ); } /** * Skip wizard handler. */ public function skip_wizard() { check_admin_referer( 'rank-math-wizard', 'security' ); if ( ! Helper::has_cap( 'general' ) ) { exit; } add_option( 'rank_math_registration_skip', true ); Helper::redirect( Helper::get_admin_url( 'wizard' ) ); exit; } /** * Authenticate registration. * * @param array $values Array of values for the step to process. */ private function redirect_to_connect( $values ) { if ( ! isset( $values['rank_math_activate'] ) ) { Admin_Helper::deregister_user(); return; } $url = Admin_Helper::get_activate_url( Helper::get_admin_url( 'registration' ) ); wp_redirect( $url ); die(); } /** * Can redirect to setup/registration page after install. * * @return bool */ private function can_redirect() { if ( ! get_transient( '_rank_math_activation_redirect' ) ) { return false; } delete_transient( '_rank_math_activation_redirect' ); if ( ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], [ 'rank-math-registration', 'rank-math-wizard' ], true ) ) || ! current_user_can( 'manage_options' ) ) { return false; } return true; } /** * Get view file to display. * * @param string $view View to display. * @return string */ private function get_view( $view ) { if ( 'navigation' === $view ) { $view = 'no-navigation'; } return rank_math()->admin_dir() . "wizard/views/{$view}.php"; } /** * Print Javascript. */ private function print_script() { ?>