File "Ajax.php"

Full Path: /home/jovision/public_html/wp/wp-content/plugins/wpforms-lite/src/SetupChecklist/Ajax.php
File size: 1.96 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace WPForms\SetupChecklist;

/**
 * Setup Checklist AJAX endpoints.
 *
 * Handles the dismiss action the checklist page fires from the browser. The checklist
 * is never dismissed automatically — even once every step is complete — so the
 * user can keep exploring the addons, integrations, and recommended-plugins
 * grids; the footer "Complete Setup Checklist" link is the only way to dismiss
 * it entirely, and it routes here.
 *
 * @since 2.0.0
 */
class Ajax {

	/**
	 * Dismiss AJAX action and its nonce action.
	 *
	 * @since 2.0.0
	 *
	 * @var string
	 */
	public const DISMISS_ACTION = 'wpforms_setup_checklist_dismiss';

	/**
	 * Checklist model (source of the progress percentage captured at dismissal).
	 *
	 * @since 2.0.0
	 *
	 * @var Checklist
	 */
	private $checklist;

	/**
	 * Per-site state store.
	 *
	 * @since 2.0.0
	 *
	 * @var State
	 */
	private $state;

	/**
	 * Constructor.
	 *
	 * @since 2.0.0
	 *
	 * @param Checklist $checklist Checklist model.
	 * @param State     $state     Per-site state store.
	 */
	public function __construct( Checklist $checklist, State $state ) {

		$this->checklist = $checklist;
		$this->state     = $state;
	}

	/**
	 * Register hooks.
	 *
	 * @since 2.0.0
	 */
	public function hooks(): void {

		add_action( 'wp_ajax_' . self::DISMISS_ACTION, [ $this, 'dismiss' ] );
	}

	/**
	 * Dismiss the checklist for this site and return where to redirect next.
	 *
	 * @since 2.0.0
	 */
	public function dismiss(): void {

		check_ajax_referer( self::DISMISS_ACTION, 'nonce' );

		if ( ! current_user_can( wpforms_get_capability_manage_options() ) ) {
			wp_send_json_error(
				[ 'message' => esc_html__( 'You do not have permission to dismiss the checklist.', 'wpforms-lite' ) ],
				403
			);
		}

		$progress = $this->checklist->get_progress()['percent'];

		$this->state->dismiss( $progress );

		wp_send_json_success(
			[
				'redirect_url' => add_query_arg( 'page', 'wpforms-overview', admin_url( 'admin.php' ) ),
			]
		);
	}
}