File: /home/deshuvsd/www/wp-content/plugins/cartflows/admin-core/api/home-page.php
<?php
/**
* CartFlows Common Settings Data Query.
*
* @package CartFlows
*/
namespace CartflowsAdmin\AdminCore\Api;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use CartflowsAdmin\AdminCore\Api\ApiBase;
use CartflowsAdmin\AdminCore\Inc\AdminHelper;
/**
* Class Admin_Query.
*/
class HomePage extends ApiBase {
/**
* Route base.
*
* @var string
*/
protected $rest_base = '/admin/homepage/';
/**
* Route base.
*
* @var string
*/
protected $rest_base_setup = '/admin/setup-checklist/';
/**
* Instance
*
* @access private
* @var object Class object.
* @since 1.0.0
*/
private static $instance;
/**
* Initiator
*
* @since 1.0.0
* @return object initialized object of class.
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Init Hooks.
*
* @since 1.0.0
* @return void
*/
public function register_routes() {
$namespace = $this->get_api_namespace();
register_rest_route(
$namespace,
$this->rest_base,
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( $this, 'get_home_page_settings' ),
'permission_callback' => array( $this, 'get_items_permissions_check' ),
'args' => array(),
),
'schema' => array( $this, 'get_public_item_schema' ),
)
);
register_rest_route(
$namespace,
$this->rest_base_setup,
array(
array(
'methods' => 'POST', // WP_REST_Server::READABLE.
'callback' => array( $this, 'get_setup_details' ),
'permission_callback' => array( $this, 'get_items_permissions_check' ),
'args' => array(), // get_collection_params may use.
),
'schema' => array( $this, 'get_public_item_schema' ),
)
);
}
/**
* Get common settings.
*
* @param WP_REST_Request $request Full details about the request.
*/
public function get_home_page_settings( $request ) {
$boxes_settings = AdminHelper::get_admin_settings_option( $request['wcf_box_id'] );
$home_page_settings = array(
'is_hidden' => $boxes_settings,
);
return $home_page_settings;
}
/**
* Get items
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response
*/
public function get_setup_details( $request ) {
// Get only the checkout steps.
$checkout_steps = get_posts(
array(
'post_type' => CARTFLOWS_STEP_POST_TYPE,
'post_status' => array( 'publish' ),
'orderby' => 'ID',
'order' => 'DESC',
'meta_query' => array( //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
array(
'key' => 'wcf-step-type',
'value' => 'checkout',
'compare' => '===',
),
),
'fields' => 'ids',
'numberposts' => 10,
)
);
// Select the first checkout step from the array.
$first_checkout_id = ! empty( $checkout_steps ) && is_array( $checkout_steps ) ? reset( $checkout_steps ) : '';
// Get the flow ID from the checkout step from the first selected checkout ID from the array.
$first_step_flow_id = ! empty( $first_checkout_id ) ? (int) wcf()->utils->get_flow_id_from_step_id( $first_checkout_id ) : '';
// Prepare the data for the free version and use the filter to add the PRO related data.
$setup_data = apply_filters(
'cartflows_onboarding_setup_details',
array(
'flow_exists' => intval( wp_count_posts( CARTFLOWS_FLOW_POST_TYPE )->publish ),
'checkout_step_id' => $first_checkout_id,
'checkout_flow_id' => $first_step_flow_id,
),
$checkout_steps
);
$response = new \WP_REST_Response( $setup_data );
$response->set_status( 200 );
return $response;
}
/**
* Check whether a given request has permission to read notes.
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_Error|boolean
*/
public function get_items_permissions_check( $request ) {
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
return new \WP_Error( 'cartflows_rest_cannot_view', __( 'Sorry, you cannot list resources.', 'cartflows' ), array( 'status' => rest_authorization_required_code() ) );
}
return true;
}
}