Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 35 additions & 15 deletions admin/class-convertkit-admin-refresh-resources.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,45 @@ class ConvertKit_Admin_Refresh_Resources {
*/
public function __construct() {

add_action( 'wp_ajax_convertkit_admin_refresh_resources', array( $this, 'refresh_resources' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'rest_api_init', array( $this, 'register_routes' ) );

}

/**
* Register REST API routes.
*
* @since 3.1.0
*/
public function register_routes() {

// Register route to return all blocks registered by the Plugin.
register_rest_route(
'kit/v1',
'/resources/refresh/(?P<resource>[a-zA-Z0-9-_]+)',
array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => array( $this, 'refresh_resources' ),
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
)
);

}

/**
* Refreshes resources (forms, landing pages or tags) from the API, returning them as a JSON string.
*
* @since 1.9.8.0
*
* @param WP_REST_Request $request Request object.
* @return WP_REST_Response|WP_Error Response object.
*/
public function refresh_resources() {

// Check nonce.
check_ajax_referer( 'convertkit_admin_refresh_resources', 'nonce' );
public function refresh_resources( $request ) {

// Get resource type.
$resource = ( isset( $_REQUEST['resource'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['resource'] ) ) : '' );
$resource = $request->get_param( 'resource' );

// Fetch resources.
switch ( $resource ) {
Expand Down Expand Up @@ -74,7 +96,7 @@ public function refresh_resources() {

// Bail if an error occured.
if ( is_wp_error( $results_tags ) ) {
wp_send_json_error( $results_tags->get_error_message() );
return rest_ensure_response( $results_tags );
}

// Fetch Products.
Expand All @@ -83,17 +105,16 @@ public function refresh_resources() {

// Bail if an error occured.
if ( is_wp_error( $results_products ) ) {
wp_send_json_error( $results_products->get_error_message() );
return rest_ensure_response( $results_products );
}

// Return resources.
wp_send_json_success(
return rest_ensure_response(
array(
'tags' => array_values( $results_tags ),
'products' => array_values( $results_products ),
)
);
// no break as wp_send_json_success terminates.

default:
$results = new WP_Error(
Expand All @@ -108,11 +129,11 @@ public function refresh_resources() {

// Bail if an error occured.
if ( is_wp_error( $results ) ) {
wp_send_json_error( $results->get_error_message() );
return rest_ensure_response( $results );
}

// Return resources as a zero based sequential array, so that JS retains the order of resources.
wp_send_json_success( array_values( $results ) );
return rest_ensure_response( array_values( $results ) );

}

Expand Down Expand Up @@ -144,10 +165,9 @@ public function enqueue_scripts( $hook ) {
'convertkit-admin-refresh-resources',
'convertkit_admin_refresh_resources',
array(
'action' => 'convertkit_admin_refresh_resources',
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'ajaxurl' => rest_url( 'kit/v1/resources/refresh/' ),
'debug' => $settings->debug_enabled(),
'nonce' => wp_create_nonce( 'convertkit_admin_refresh_resources' ),
'nonce' => wp_create_nonce( 'wp_rest' ),
)
);

Expand Down
17 changes: 9 additions & 8 deletions includes/class-wp-convertkit.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,14 @@ private function initialize_admin() {
return;
}

$this->classes['admin_bulk_edit'] = new ConvertKit_Admin_Bulk_Edit();
$this->classes['admin_cache_plugins'] = new ConvertKit_Admin_Cache_Plugins();
$this->classes['admin_category'] = new ConvertKit_Admin_Category();
$this->classes['admin_landing_page'] = new ConvertKit_Admin_Landing_Page();
$this->classes['admin_notices'] = new ConvertKit_Admin_Notices();
$this->classes['admin_post'] = new ConvertKit_Admin_Post();
$this->classes['admin_quick_edit'] = new ConvertKit_Admin_Quick_Edit();
$this->classes['admin_refresh_resources'] = new ConvertKit_Admin_Refresh_Resources();
$this->classes['admin_bulk_edit'] = new ConvertKit_Admin_Bulk_Edit();
$this->classes['admin_cache_plugins'] = new ConvertKit_Admin_Cache_Plugins();
$this->classes['admin_category'] = new ConvertKit_Admin_Category();
$this->classes['admin_landing_page'] = new ConvertKit_Admin_Landing_Page();
$this->classes['admin_notices'] = new ConvertKit_Admin_Notices();
$this->classes['admin_post'] = new ConvertKit_Admin_Post();
$this->classes['admin_quick_edit'] = new ConvertKit_Admin_Quick_Edit();

$this->classes['admin_restrict_content'] = new ConvertKit_Admin_Restrict_Content();
$this->classes['admin_settings'] = new ConvertKit_Admin_Settings();
$this->classes['admin_setup_wizard_landing_page'] = new ConvertKit_Admin_Setup_Wizard_Landing_Page();
Expand Down Expand Up @@ -178,6 +178,7 @@ private function initialize_frontend() {
*/
private function initialize_global() {

$this->classes['admin_refresh_resources'] = new ConvertKit_Admin_Refresh_Resources();
$this->classes['ajax'] = new ConvertKit_AJAX();
$this->classes['blocks_convertkit_broadcasts'] = new ConvertKit_Block_Broadcasts();
$this->classes['blocks_convertkit_content'] = new ConvertKit_Block_Content();
Expand Down
20 changes: 8 additions & 12 deletions resources/backend/js/refresh-resources.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,12 @@ function convertKitRefreshResources(button) {
button.classList.add('is-refreshing');

// Perform AJAX request to refresh resource.
fetch(convertkit_admin_refresh_resources.ajaxurl, {
fetch(convertkit_admin_refresh_resources.ajaxurl + resource, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Type': 'application/json',
'X-WP-Nonce': convertkit_admin_refresh_resources.nonce,
},
body: new URLSearchParams({
action: 'convertkit_admin_refresh_resources',
nonce: convertkit_admin_refresh_resources.nonce,
resource, // e.g. forms, landing_pages, tags.
}),
})
.then(function (response) {
// Convert response JSON string to object.
Expand All @@ -70,9 +66,9 @@ function convertKitRefreshResources(button) {
}

// Show an error if the request wasn't successful.
if (!response.success) {
if (typeof response.code !== 'undefined') {
// Show error notice.
convertKitRefreshResourcesOutputErrorNotice(response.data);
convertKitRefreshResourcesOutputErrorNotice(response.message);

// Enable button and remove is-refreshing class.
button.disabled = false;
Expand Down Expand Up @@ -102,7 +98,7 @@ function convertKitRefreshResources(button) {
case 'restrict_content':
// Populate select `optgroup`` from response data, which comprises of Tags and Products.
// Tags.
response.data.tags.forEach(function (item) {
response.tags.forEach(function (item) {
document
.querySelector(
field + ' optgroup[data-resource=tags]'
Expand All @@ -118,7 +114,7 @@ function convertKitRefreshResources(button) {
});

// Products.
response.data.products.forEach(function (item) {
response.products.forEach(function (item) {
document
.querySelector(
field + ' optgroup[data-resource=products]'
Expand All @@ -136,7 +132,7 @@ function convertKitRefreshResources(button) {

default:
// Populate select options from response data.
response.data.forEach(function (item) {
response.forEach(function (item) {
// Define label.
let label = '';
switch (resource) {
Expand Down
Loading