PluginProbe
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz / 1.7.1
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz v1.7.1
2.12.6 2.12.5 2.12.4 2.12.3 2.12.2 2.12.1 2.12.0 2.11.1 2.11.0 2.10.1 2.10.0 2.9.1 2.9.0 2.8.2 2.8.1 2.7.0 2.7.1 2.8.0 trunk 0.0.10 0.0.11 0.0.12 0.0.13 0.0.2 0.0.3 All 96 releases
sureforms / inc / export.php

export.php in SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz 1.7.1, at inc/export.php

231 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Sureforms export.
4 *
5 * @package sureforms.
6 * @since 0.0.1
7 */
8
9 namespace SRFM\Inc;
10
11 use SRFM\Inc\Traits\Get_Instance;
12 use WP_REST_Server;
13
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit; // Exit if accessed directly.
16 }
17
18 /**
19 * Load Defaults Class.
20 *
21 * @since 0.0.1
22 */
23 class Export {
24 use Get_Instance;
25
26 /**
27 * Unserialized post metas.
28 *
29 * @var array<string>
30 */
31 public $unserialized_post_metas = [
32 '_srfm_conditional_logic',
33 '_srfm_email_notification',
34 '_srfm_form_confirmation',
35 '_srfm_compliance',
36 '_srfm_forms_styling',
37 '_srfm_integrations_webhooks',
38 '_srfm_instant_form_settings',
39 '_srfm_page_break_settings',
40 '_srfm_conversational_form',
41 '_srfm_premium_common',
42 '_srfm_forms_styling_starter',
43 ];
44
45 /**
46 * Constructor
47 *
48 * @since 0.0.1
49 */
50 public function __construct() {
51 add_action( 'wp_ajax_export_form', [ $this, 'handle_export_form' ] );
52 add_action( 'rest_api_init', [ $this, 'register_custom_endpoint' ] );
53 }
54
55 /**
56 * Handle Export form
57 *
58 * @since 0.0.1
59 * @return void
60 */
61 public function handle_export_form() {
62 if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'export_form_nonce' ) ) {
63 $error_message = __( 'Nonce verification failed.', 'sureforms' );
64
65 $error_data = [
66 'error' => $error_message,
67 ];
68 wp_send_json_error( $error_data );
69 }
70
71 // check if the user has permission to export forms.
72 if ( ! Helper::current_user_can( 'manage_options' ) ) {
73 wp_send_json_error(
74 [
75 'error' => __( 'You do not have permission to export forms.', 'sureforms' ),
76 ]
77 );
78 }
79
80 if ( isset( $_POST['post_id'] ) ) {
81 $post_ids = explode( ',', sanitize_text_field( wp_unslash( $_POST['post_id'] ) ) );
82 } else {
83 $post_ids = [];
84 }
85
86 $posts = [];
87
88 foreach ( $post_ids as $post_id ) {
89 $post_id = intval( $post_id );
90 $post = get_post( $post_id );
91 $post_meta = get_post_meta( $post_id );
92 $posts[] = [
93 'post' => $post,
94 'post_meta' => $post_meta,
95 ];
96 }
97
98 // Unserialize the post metas that are serialized.
99 // This is needed because the post metas are serialized before saving.
100 foreach ( $posts as $key => $post ) {
101 $post_metas = isset( $post['post_meta'] ) && is_array( $post['post_meta'] ) ? $post['post_meta'] : [];
102 foreach ( $this->unserialized_post_metas as $meta_key ) {
103 if ( isset( $post_metas[ $meta_key ] ) && is_array( $post_metas[ $meta_key ] ) ) {
104 $post_metas[ $meta_key ] = maybe_unserialize( $post_metas[ $meta_key ][0] );
105 }
106 }
107 $posts[ $key ]['post_meta'] = $post_metas;
108 }
109
110 wp_send_json( $posts );
111 }
112
113 /**
114 * Handle Import Form
115 *
116 * @param \WP_REST_Request $request Full details about the request.
117 *
118 * @since 0.0.1
119 * @return void
120 */
121 public function handle_import_form( $request ) {
122
123 $nonce = Helper::get_string_value( $request->get_header( 'X-WP-Nonce' ) );
124
125 if ( ! wp_verify_nonce( sanitize_text_field( $nonce ), 'wp_rest' ) ) {
126 wp_send_json_error(
127 [
128 'data' => __( 'Nonce verification failed.', 'sureforms' ),
129 'status' => false,
130 ]
131 );
132 }
133
134 if ( ! current_user_can( 'manage_options' ) ) {
135 // Return error if user does not have permissions to manage options.
136 wp_send_json_error(
137 [
138 'data' => esc_html__( 'You do not have permissions to manage options.', 'sureforms' ),
139 'status' => false,
140 ]
141 );
142 }
143
144 // Get the raw POST data.
145 $post_data = file_get_contents( 'php://input' );
146 if ( ! $post_data ) {
147 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
148 }
149 $data = json_decode( $post_data, true );
150 if ( ! is_iterable( $data ) ) {
151 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
152 }
153 foreach ( $data as $form_data ) {
154
155 // sanitize the data before saving.
156 $post_content = wp_kses_post( $form_data['post']['post_content'] );
157 $post_title = sanitize_text_field( $form_data['post']['post_title'] );
158 $post_meta = $form_data['post_meta'];
159 $post_type = sanitize_text_field( $form_data['post']['post_type'] );
160
161 $post_content = addslashes( $post_content );
162
163 // Check if sureforms/form exists in post_content.
164 if ( 'sureforms_form' === $post_type ) {
165 $new_post = [
166 'post_title' => $post_title,
167 'post_status' => 'draft',
168 'post_type' => 'sureforms_form',
169 ];
170
171 $post_id = wp_insert_post( $new_post );
172
173 // Update the post content formId to the new post id.
174 $post_content = str_replace( '\"formId\":' . $form_data['post']['ID'], '\"formId\":' . $post_id, $post_content );
175
176 // update the post content.
177 wp_update_post(
178 [
179 'ID' => $post_id,
180 'post_content' => $post_content,
181 ]
182 );
183
184 if ( ! $post_id ) {
185 http_response_code( 400 );
186 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
187 }
188 // Update post meta.
189 foreach ( $post_meta as $meta_key => $meta_value ) {
190 // Check if the meta key is one of the unserialized post metas then add it as is.
191 if ( in_array( $meta_key, $this->unserialized_post_metas, true ) ) {
192 add_post_meta( $post_id, $meta_key, $meta_value );
193 } else {
194 if ( is_array( $meta_value ) && isset( $meta_value[0] ) ) {
195 add_post_meta( $post_id, $meta_key, $meta_value[0] );
196 } else {
197 add_post_meta( $post_id, $meta_key, $meta_value );
198 }
199 }
200 }
201 } else {
202 http_response_code( 400 );
203 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
204 }
205 }
206
207 // Return the responses.
208 wp_send_json_success();
209 }
210
211 /**
212 * Add custom API Route submit-form
213 *
214 * @return void
215 * @since 0.0.1
216 */
217 public function register_custom_endpoint() {
218 register_rest_route(
219 'sureforms/v1',
220 '/sureforms_import',
221 [
222 'methods' => WP_REST_Server::EDITABLE,
223 'callback' => [ $this, 'handle_import_form' ],
224 'permission_callback' => static function () {
225 return Helper::current_user_can( 'manage_options' );
226 },
227 ]
228 );
229 }
230 }
231