geno/wp-content/plugins/cartflows/admin-core/ajax/flows.php
2024-02-01 11:54:18 +00:00

1112 lines
29 KiB
PHP

<?php
/**
* CartFlows Flows ajax actions.
*
* @package CartFlows
*/
namespace CartflowsAdmin\AdminCore\Ajax;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use CartflowsAdmin\AdminCore\Ajax\AjaxBase;
use CartflowsAdmin\AdminCore\Inc\AdminHelper;
use CartflowsAdmin\AdminCore\Inc\MetaOps;
/**
* Class Flows.
*/
class Flows extends AjaxBase {
/**
* 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;
}
/**
* Register ajax events.
*
* @since 1.0.0
* @return void
*/
public function register_ajax_events() {
$ajax_events = array(
'update_flow_title',
'clone_flow',
'delete_flow',
'trash_flow',
'restore_flow',
'reorder_flow_steps',
'trash_flows_in_bulk',
'update_flow_post_status',
'delete_flows_permanently',
'save_flow_meta_settings',
'export_flows_in_bulk',
'update_status',
'update_store_checkout_status',
);
$this->init_ajax_events( $ajax_events );
}
/**
* Export the flows and it's data.
*/
public function export_flows_in_bulk() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_export_flows_in_bulk', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
if ( ! isset( $_POST['flow_ids'] ) ) {
$response_data = array( 'message' => __( 'No Funnel IDs has been supplied to export!', 'cartflows' ) );
wp_send_json_error( $response_data );
}
$flow_ids = array_map( 'intval', explode( ',', sanitize_text_field( $_POST['flow_ids'] ) ) );
$flows = array();
$export = \CartFlows_Importer::get_instance();
foreach ( $flow_ids as $key => $flow_id ) {
$flows[] = $export->get_flow_export_data( $flow_id );
}
$response_data = array(
'message' => __( 'Funnel exported successfully', 'cartflows' ),
'flows' => $flows,
);
wp_send_json_success( $response_data );
}
/**
* Save flow meta data.
*/
public function save_flow_meta_settings() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_save_flow_meta_settings', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$response_data = array(
'status' => false,
'text' => __( 'Can\'t update the flow data', 'cartflows' ),
);
if ( isset( $_POST['flow_id'] ) ) {
$flow_id = intval( $_POST['flow_id'] );
if ( empty( $flow_id ) ) {
wp_send_json_error( $response_data );
}
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
wp_send_json_error( $response_data );
}
$new_flow_title = isset( $_POST['post_title'] ) ? sanitize_text_field( wp_unslash( $_POST['post_title'] ) ) : get_the_title( $flow_id );
if ( '' === $new_flow_title ) {
$new_flow_title = __( '(no title)', 'cartflows' );
}
$new_flow_slug = isset( $_POST['post_name'] ) ? sanitize_text_field( wp_unslash( $_POST['post_name'] ) ) : '';
$post_meta = wcf()->options->get_flow_fields( $flow_id );
MetaOps::save_meta_fields( $flow_id, $post_meta, 'cartflows_save_flow_meta_settings' );
$new_flow_data = array(
'ID' => $flow_id,
'post_title' => $new_flow_title,
'post_name' => $new_flow_slug,
);
wp_update_post( $new_flow_data );
}
$response_data = array(
'message' => __( 'Successfully saved the flow data!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Delete the flow and it's data.
*/
public function delete_flows_permanently() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_delete_flows_permanently', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$flow_ids = isset( $_POST['flow_ids'] ) ? array_map( 'intval', explode( ',', sanitize_text_field( $_POST['flow_ids'] ) ) ) : array();
foreach ( $flow_ids as $key => $flow_id ) {
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
continue;
}
/* Get Steps */
$steps = get_post_meta( $flow_id, 'wcf-steps', true );
/* delte All steps */
if ( $steps && is_array( $steps ) ) {
foreach ( $steps as $step ) {
/* Need to delete ab test data as well */
wp_delete_post( $step['id'], true );
}
}
/* Trash term */
$term_data = term_exists( 'flow-' . $flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
if ( is_array( $term_data ) ) {
wp_trash_post( $term_data['term_id'], CARTFLOWS_TAXONOMY_STEP_FLOW );
}
/* Finally trash flow post and it's data */
wp_delete_post( $flow_id, true );
}
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully deleted the Funnels!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Update flow status.
*/
public function update_flow_post_status() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_update_flow_post_status', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
if ( ! isset( $_POST['flow_ids'] ) ) {
$response_data = array( 'message' => __( 'No Funnel IDs has been supplied to delete!', 'cartflows' ) );
wp_send_json_error( $response_data );
}
$flow_ids = isset( $_POST['flow_ids'] ) ? array_map( 'intval', explode( ',', sanitize_text_field( $_POST['flow_ids'] ) ) ) : array();
$new_status = isset( $_POST['new_status'] ) ? sanitize_text_field( wp_unslash( $_POST['new_status'] ) ) : '';
foreach ( $flow_ids as $key => $flow_id ) {
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
continue;
}
/* Get Steps */
$steps = get_post_meta( $flow_id, 'wcf-steps', true );
/* Trash All steps */
if ( $steps && is_array( $steps ) ) {
foreach ( $steps as $step ) {
$my_post = array();
$my_post['ID'] = $step['id'];
$my_post['post_status'] = $new_status;
wp_update_post( wp_slash( $my_post ) );
}
}
/*
Trash term
// $term_data = term_exists( 'flow-' . $flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
// if ( is_array( $term_data ) ) {
// wp_trash_post( $term_data['term_id'], CARTFLOWS_TAXONOMY_STEP_FLOW );
// }
*/
/* Finally trash flow post and it's data */
$flow_post = array();
$flow_post['ID'] = $flow_id;
$flow_post['post_status'] = $new_status;
wp_update_post( $flow_post );
}
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully trashed the Funnels!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Trash the flows and it's data.
*/
public function trash_flows_in_bulk() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_trash_flows_in_bulk', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
if ( ! isset( $_POST['flow_ids'] ) ) {
$response_data = array( 'message' => __( 'No Funnel IDs has been supplied to delete!', 'cartflows' ) );
wp_send_json_error( $response_data );
}
$flow_ids = isset( $_POST['flow_ids'] ) ? array_map( 'intval', explode( ',', sanitize_text_field( $_POST['flow_ids'] ) ) ) : array();
foreach ( $flow_ids as $key => $flow_id ) {
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
continue;
}
/* Get Steps */
$steps = get_post_meta( $flow_id, 'wcf-steps', true );
/* Trash All steps */
if ( $steps && is_array( $steps ) ) {
foreach ( $steps as $step ) {
/* Need to delete ab test data as well */
wp_trash_post( $step['id'], true );
}
}
/* Trash term */
$term_data = term_exists( 'flow-' . $flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
if ( is_array( $term_data ) ) {
wp_trash_post( $term_data['term_id'], CARTFLOWS_TAXONOMY_STEP_FLOW );
}
/* Finally trash flow post and it's data */
wp_trash_post( $flow_id, true );
}
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully trashed the Funnels!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Update flow title.
*/
public function update_flow_title() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_update_flow_title', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$flow_id = isset( $_POST['flow_id'] ) ? intval( $_POST['flow_id'] ) : 0;
$new_flow_title = isset( $_POST['new_flow_title'] ) ? sanitize_text_field( $_POST['new_flow_title'] ) : '';
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
wp_send_json_error( array( 'message' => __( 'Invalid Funnel ID has been supplied to update title.', 'cartflows' ) ) );
}
$result = array(
'status' => false,
'text' => __( 'Can\'t update the flow title', 'cartflows' ),
);
if ( empty( $flow_id ) || empty( $new_flow_title ) ) {
wp_send_json( $result );
}
$new_flow_data = array(
'ID' => $flow_id,
'post_title' => $new_flow_title,
);
wp_update_post( $new_flow_data );
$result = array(
'status' => true,
/* translators: %s flow id */
'text' => sprintf( __( 'Funnel title updated - %s', 'cartflows' ), $flow_id ),
);
wp_send_json( $result );
}
/**
* Clone the Flow.
*/
public function clone_flow() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_clone_flow', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$response_data = array( 'message' => __( 'Invalid Funnel ID has been supplied to clone!', 'cartflows' ) );
/**
* Check flow id
*/
if ( empty( $_POST['id'] ) ) {
wp_send_json_error( $response_data );
}
/**
* Get the original post id
*/
$post_id = absint( $_POST['id'] );
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $post_id ) ) {
wp_send_json_error( $response_data );
}
/**
* And all the original post data then
*/
$post = get_post( $post_id );
/**
* Assign current user to be the new post author
*/
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
/**
* If post data not exists, throw error
*/
if ( ! isset( $post ) || null === $post ) {
$response_data = array( 'message' => __( 'Invalid Funnel ID has been supplied to duplicate!', 'cartflows' ) );
wp_send_json_error( $response_data );
}
global $wpdb;
/**
* Let's start cloning
*/
/**
* New post data array
*/
$args = array(
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $new_post_author,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_name' => $post->post_name,
'post_parent' => $post->post_parent,
'post_password' => $post->post_password,
'post_status' => $post->post_status,
'post_title' => $post->post_title . ' Clone',
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
'menu_order' => $post->menu_order,
);
/**
* Insert the post
*/
$new_flow_id = wp_insert_post( $args );
/**
* Get all current post terms ad set them to the new post
*
* Returns array of taxonomy names for post type, ex array("category", "post_tag");.
*/
$taxonomies = get_object_taxonomies( $post->post_type );
foreach ( $taxonomies as $taxonomy ) {
$post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
wp_set_object_terms( $new_flow_id, $post_terms, $taxonomy, false );
}
/**
* Duplicate all post meta just in two SQL queries
*/
// Using custom query to clone flow & step meta data as it is better than WP functions in case in large data.
$post_meta_infos = $wpdb->get_results( //phpcs:ignore WordPress.DB.DirectDatabaseQuery
$wpdb->prepare( "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=%d", $post_id )
);
if ( ! empty( $post_meta_infos ) ) {
$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
$sql_query_sel = array();
foreach ( $post_meta_infos as $meta_info ) {
$meta_key = $meta_info->meta_key;
if ( '_wp_old_slug' === $meta_key ) {
continue;
}
$sql_query_sel[] = $wpdb->prepare( '( %d, %s, %s )', $new_flow_id, $meta_key, $meta_info->meta_value );
}
$sql_query .= implode( ',', $sql_query_sel );
$wpdb->query( $sql_query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery
}
/* Steps Cloning */
$flow_steps = get_post_meta( $post_id, 'wcf-steps', true );
$new_flow_steps = array();
/* Set Steps Empty */
update_post_meta( $new_flow_id, 'wcf-steps', $new_flow_steps );
if ( is_array( $flow_steps ) && ! empty( $flow_steps ) ) {
foreach ( $flow_steps as $index => $step_data ) {
$step_id = $step_data['id'];
$step_type = get_post_meta( $step_id, 'wcf-step-type', true );
$step_object = get_post( $step_id );
/**
* New step post data array
*/
$step_args = array(
'comment_status' => $step_object->comment_status,
'ping_status' => $step_object->ping_status,
'post_author' => $new_post_author,
'post_content' => $step_object->post_content,
'post_excerpt' => $step_object->post_excerpt,
'post_name' => $step_object->post_name,
'post_parent' => $step_object->post_parent,
'post_password' => $step_object->post_password,
'post_status' => $step_object->post_status,
'post_title' => $step_object->post_title,
'post_type' => $step_object->post_type,
'to_ping' => $step_object->to_ping,
'menu_order' => $step_object->menu_order,
);
/**
* Insert the post
*/
$new_step_id = wp_insert_post( $step_args );
/**
* Duplicate all step meta
*/
$post_meta_infos = $wpdb->get_results( //phpcs:ignore WordPress.DB.DirectDatabaseQuery
$wpdb->prepare( "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=%d", $step_id )
);
if ( ! empty( $post_meta_infos ) ) {
$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
$sql_query_sel = array();
foreach ( $post_meta_infos as $meta_info ) {
$meta_key = $meta_info->meta_key;
$meta_value = $meta_info->meta_value;
$sql_query_sel[] = $wpdb->prepare( '( %d, %s, %s )', $new_step_id, $meta_key, $meta_value );
}
$sql_query .= implode( ',', $sql_query_sel );
$wpdb->query( $sql_query ); //phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery
}
// insert post meta.
update_post_meta( $new_step_id, 'wcf-flow-id', $new_flow_id );
update_post_meta( $new_step_id, 'wcf-step-type', $step_type );
/**
* @ to_do later
* delete split test connecctivity
*/
wp_set_object_terms( $new_step_id, $step_type, CARTFLOWS_TAXONOMY_STEP_TYPE );
wp_set_object_terms( $new_step_id, 'flow-' . $new_flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
/* Add New Flow Steps */
$new_flow_steps[] = array(
'id' => $new_step_id,
'title' => $step_object->post_title,
'type' => $step_type,
);
}
}
/* Update New Flow Step Post Meta */
update_post_meta( $new_flow_id, 'wcf-steps', $new_flow_steps );
/* Clear Page Builder Cache */
AdminHelper::clear_cache();
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully cloned the Funnel!', 'cartflows' ),
'redirect_url' => admin_url( 'post.php?action=edit&post=' . $new_flow_id ),
);
wp_send_json_success( $response_data );
}
/**
* Restore the flow and it's data.
*/
public function restore_flow() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_restore_flow', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$response_data = array( 'message' => __( 'Invalid Funnel ID has been supplied to restore!', 'cartflows' ) );
if ( ! isset( $_POST['flow_id'] ) ) {
wp_send_json_error( $response_data );
}
$flow_id = intval( $_POST['flow_id'] );
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
wp_send_json_error( $response_data );
}
/* Get Steps */
$steps = get_post_meta( $flow_id, 'wcf-steps', true );
/* Untrash All steps */
if ( $steps && is_array( $steps ) ) {
foreach ( $steps as $step ) {
/* Need to delete ab test data as well */
wp_untrash_post( $step['id'] );
}
}
/* Untrash term */
$term_data = term_exists( 'flow-' . $flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
if ( is_array( $term_data ) ) {
wp_untrash_post( $term_data['term_id'] );
}
/* Finally untrash flow post and it's data */
wp_untrash_post( $flow_id );
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully restored the Funnel!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Trash the flow and it's data.
*/
public function trash_flow() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_trash_flow', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$response_data = array( 'message' => __( 'Invalid Funnel ID has been supplied to trash!', 'cartflows' ) );
if ( ! isset( $_POST['flow_id'] ) ) {
wp_send_json_error( $response_data );
}
$flow_id = intval( $_POST['flow_id'] );
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
wp_send_json_error( $response_data );
}
/* Get Steps */
$steps = get_post_meta( $flow_id, 'wcf-steps', true );
/* Trash All steps */
if ( $steps && is_array( $steps ) ) {
foreach ( $steps as $step ) {
/* Need to delete ab test data as well */
wp_trash_post( $step['id'], true );
}
}
/* Trash term */
$term_data = term_exists( 'flow-' . $flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
if ( is_array( $term_data ) ) {
wp_trash_post( $term_data['term_id'], CARTFLOWS_TAXONOMY_STEP_FLOW );
}
/* Finally trash flow post and it's data */
wp_trash_post( $flow_id, true );
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully trashed the Funnel!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Delete the flow and it's data.
*/
public function delete_flow() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_delete_flow', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$response_data = array( 'message' => __( 'Invalid Funnel ID has been supplied to delete!', 'cartflows' ) );
if ( ! isset( $_POST['flow_id'] ) ) {
wp_send_json_error( $response_data );
}
$flow_id = intval( $_POST['flow_id'] );
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
wp_send_json_error( $response_data );
}
/* Get Steps */
$steps = get_post_meta( $flow_id, 'wcf-steps', true );
/* Delete All steps */
if ( $steps && is_array( $steps ) ) {
foreach ( $steps as $step ) {
/* Need to delete ab test data as well */
wp_delete_post( $step['id'], true );
}
}
/* Delete term */
$term_data = term_exists( 'flow-' . $flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
if ( is_array( $term_data ) ) {
wp_delete_term( $term_data['term_id'], CARTFLOWS_TAXONOMY_STEP_FLOW );
}
/* Finally delete flow post and it's data */
wp_delete_post( $flow_id, true );
do_action( 'cartflows_admin_after_delete_flow', $flow_id );
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully deleted the Funnel!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Update status.
*/
public function update_status() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_update_status', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$response_data = array( 'message' => __( 'Invalid Funnel IDs has been supplied to update status!', 'cartflows' ) );
if ( ! isset( $_POST['flow_id'] ) ) {
wp_send_json_error( $response_data );
}
$flow_id = isset( $_POST['flow_id'] ) ? intval( $_POST['flow_id'] ) : 0;
/* Check if CartFlows Post type */
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
wp_send_json_error( $response_data );
}
$new_status = isset( $_POST['new_status'] ) ? sanitize_text_field( wp_unslash( $_POST['new_status'] ) ) : '';
/* Get Steps */
$steps = get_post_meta( $flow_id, 'wcf-steps', true );
/* Trash All steps */
if ( $steps && is_array( $steps ) ) {
foreach ( $steps as $step ) {
$my_post = array();
$my_post['ID'] = $step['id'];
$my_post['post_status'] = $new_status;
wp_update_post( wp_slash( $my_post ) );
}
}
/*
Trash term
// $term_data = term_exists( 'flow-' . $flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
// if ( is_array( $term_data ) ) {
// wp_trash_post( $term_data['term_id'], CARTFLOWS_TAXONOMY_STEP_FLOW );
// }
*/
/* Finally trash flow post and it's data */
$flow_post = array();
$flow_post['ID'] = $flow_id;
$flow_post['post_status'] = $new_status;
wp_update_post( $flow_post );
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully updated the Funnel status!', 'cartflows' ),
);
wp_send_json_success( $response_data );
}
/**
* Enables / Disables Store Checkout on toggle click
*
* @return void
* @since X.X.X
*/
public function update_store_checkout_status() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_update_store_checkout_status', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
if ( ! isset( $_POST['enable_store_checkout'] ) ) {
$response_data = array( 'message' => __( 'No Funnel IDs has been supplied to delete!', 'cartflows' ) );
wp_send_json_error( $response_data );
}
$enable_store_checkout = isset( $_POST['enable_store_checkout'] ) ? sanitize_text_field( wp_unslash( $_POST['enable_store_checkout'] ) ) : '';
$checkout_id = isset( $_POST['checkout_id'] ) ? absint( wp_unslash( $_POST['checkout_id'] ) ) : '';
$old_global_checkout = get_option( '_cartflows_old_global_checkout ', false );
$checkout_id = $old_global_checkout ? absint( $old_global_checkout ) : $checkout_id;
$common_settings = \Cartflows_Helper::get_common_settings();
$override_status = 'enable';
if ( 'false' === $enable_store_checkout ) {
$checkout_id = '';
$override_status = 'disable';
}
$common_settings['global_checkout'] = $checkout_id;
$common_settings['override_global_checkout'] = $override_status;
update_option( '_cartflows_common', $common_settings );
do_action( 'cartflows_after_save_store_checkout' );
/**
* Redirect to the new flow edit screen
*/
$response_data = array(
'message' => __( 'Successfully updated the Funnel status!', 'cartflows' ),
'checkout_id' => $checkout_id,
);
wp_send_json_success( $response_data );
}
/**
* Prepare where items for query.
*/
public function reorder_flow_steps() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
/**
* Check permission
*/
if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) {
wp_send_json_error( $response_data );
}
/**
* Nonce verification
*/
if ( ! check_ajax_referer( 'cartflows_reorder_flow_steps', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$flow_id = false;
$step_ids = array();
if ( isset( $_POST['post_id'] ) && isset( $_POST['step_ids'] ) ) {
$flow_id = intval( $_POST['post_id'] );
$step_ids = explode( ',', sanitize_text_field( $_POST['step_ids'] ) );
$step_ids = array_map( 'intval', $step_ids );
}
$response_data = array(
'status' => false,
'text' => __( 'Invalid flow ID has been provided.', 'cartflows' ),
);
if ( ! $flow_id ) {
wp_send_json( $response_data );
}
if ( CARTFLOWS_FLOW_POST_TYPE !== get_post_type( $flow_id ) ) {
wp_send_json( $response_data );
}
if ( empty( $step_ids ) ) {
wp_send_json(
array(
'status' => false,
/* translators: %s flow id */
'text' => sprintf( __( 'Steps not sorted for flow - %s', 'cartflows' ), $flow_id ),
)
);
}
$flow_steps = get_post_meta( $flow_id, 'wcf-steps', true );
$flow_steps_map = array();
if ( is_array( $flow_steps ) ) {
foreach ( $flow_steps as $key => $value ) {
$flow_steps_map[ $value['id'] ] = $value;
}
}
$new_flow_steps = array();
foreach ( $step_ids as $index => $step_id ) {
$new_flow_step_data = array();
if ( isset( $flow_steps_map[ $step_id ] ) ) {
$new_flow_step_data = $flow_steps_map[ $step_id ];
}
$new_flow_step_data['id'] = intval( $step_id );
$new_flow_step_data['title'] = get_the_title( $step_id );
$new_flow_step_data['type'] = get_post_meta( $step_id, 'wcf-step-type', true );
$new_flow_steps[] = $new_flow_step_data;
}
update_post_meta( $flow_id, 'wcf-steps', $new_flow_steps );
/* Setup steps data */
$meta_options = AdminHelper::get_flow_meta_options( $flow_id );
$steps = AdminHelper::prepare_step_data( $flow_id, $meta_options );
$result = array(
'status' => true,
/* translators: %s flow id */
'text' => sprintf( __( 'Steps sorted for flow - %s', 'cartflows' ), $flow_id ),
'steps' => $steps,
);
wp_send_json( $result );
}
}