PluginProbe
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz / 1.3.0
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz v1.3.0
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
219 lines 5.5 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 ];
41
42 /**
43 * Constructor
44 *
45 * @since 0.0.1
46 */
47 public function __construct() {
48 add_action( 'wp_ajax_export_form', [ $this, 'handle_export_form' ] );
49 add_action( 'rest_api_init', [ $this, 'register_custom_endpoint' ] );
50 }
51
52 /**
53 * Handle Export form
54 *
55 * @since 0.0.1
56 * @return void
57 */
58 public function handle_export_form() {
59 if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'export_form_nonce' ) ) {
60 $error_message = __( 'Nonce verification failed.', 'sureforms' );
61
62 $error_data = [
63 'error' => $error_message,
64 ];
65 wp_send_json_error( $error_data );
66 }
67
68 // check if the user has permission to export forms.
69 if ( ! Helper::current_user_can( 'manage_options' ) ) {
70 wp_send_json_error(
71 [
72 'error' => __( 'You do not have permission to export forms.', 'sureforms' ),
73 ]
74 );
75 }
76
77 if ( isset( $_POST['post_id'] ) ) {
78 $post_ids = explode( ',', sanitize_text_field( wp_unslash( $_POST['post_id'] ) ) );
79 } else {
80 $post_ids = [];
81 }
82
83 $posts = [];
84
85 foreach ( $post_ids as $post_id ) {
86 $post_id = intval( $post_id );
87 $post = get_post( $post_id );
88 $post_meta = get_post_meta( $post_id );
89 $posts[] = [
90 'post' => $post,
91 'post_meta' => $post_meta,
92 ];
93 }
94
95 // Unserialize the post metas that are serialized.
96 // This is needed because the post metas are serialized before saving.
97 foreach ( $posts as $key => $post ) {
98 $post_metas = isset( $post['post_meta'] ) && is_array( $post['post_meta'] ) ? $post['post_meta'] : [];
99 foreach ( $this->unserialized_post_metas as $meta_key ) {
100 if ( isset( $post_metas[ $meta_key ] ) && is_array( $post_metas[ $meta_key ] ) ) {
101 $post_metas[ $meta_key ] = maybe_unserialize( $post_metas[ $meta_key ][0] );
102 }
103 }
104 $posts[ $key ]['post_meta'] = $post_metas;
105 }
106
107 wp_send_json( $posts );
108 }
109
110 /**
111 * Handle Import Form
112 *
113 * @param \WP_REST_Request $request Full details about the request.
114 *
115 * @since 0.0.1
116 * @return void
117 */
118 public function handle_import_form( $request ) {
119
120 $nonce = Helper::get_string_value( $request->get_header( 'X-WP-Nonce' ) );
121
122 if ( ! wp_verify_nonce( sanitize_text_field( $nonce ), 'wp_rest' ) ) {
123 wp_send_json_error(
124 [
125 'data' => __( 'Nonce verification failed.', 'sureforms' ),
126 'status' => false,
127 ]
128 );
129 }
130
131 // Get the raw POST data.
132 $post_data = file_get_contents( 'php://input' );
133 if ( ! $post_data ) {
134 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
135 }
136 $data = json_decode( $post_data, true );
137 $responses = [];
138 if ( ! is_iterable( $data ) ) {
139 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
140 }
141 foreach ( $data as $form_data ) {
142
143 // sanitize the data before saving.
144 $post_content = wp_kses_post( $form_data['post']['post_content'] );
145 $post_title = sanitize_text_field( $form_data['post']['post_title'] );
146 $post_meta = $form_data['post_meta'];
147 $post_type = sanitize_text_field( $form_data['post']['post_type'] );
148
149 $post_content = addslashes( $post_content );
150
151 // Check if sureforms/form exists in post_content.
152 if ( 'sureforms_form' === $post_type ) {
153 $new_post = [
154 'post_title' => $post_title,
155 'post_status' => 'draft',
156 'post_type' => 'sureforms_form',
157 ];
158
159 $post_id = wp_insert_post( $new_post );
160
161 // Update the post content formId to the new post id.
162 $post_content = str_replace( '\"formId\":' . $form_data['post']['ID'], '\"formId\":' . $post_id, $post_content );
163
164 // update the post content.
165 wp_update_post(
166 [
167 'ID' => $post_id,
168 'post_content' => $post_content,
169 ]
170 );
171
172 if ( ! $post_id ) {
173 http_response_code( 400 );
174 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
175 }
176 // Update post meta.
177 foreach ( $post_meta as $meta_key => $meta_value ) {
178 // Check if the meta key is one of the unserialized post metas then add it as is.
179 if ( in_array( $meta_key, $this->unserialized_post_metas, true ) ) {
180 add_post_meta( $post_id, $meta_key, $meta_value );
181 } else {
182 if ( is_array( $meta_value ) && isset( $meta_value[0] ) ) {
183 add_post_meta( $post_id, $meta_key, $meta_value[0] );
184 } else {
185 add_post_meta( $post_id, $meta_key, $meta_value );
186 }
187 }
188 }
189 } else {
190 http_response_code( 400 );
191 wp_send_json_error( __( 'Failed to import form.', 'sureforms' ) );
192 }
193 }
194
195 // Return the responses.
196 wp_send_json_success( $responses );
197 }
198
199 /**
200 * Add custom API Route submit-form
201 *
202 * @return void
203 * @since 0.0.1
204 */
205 public function register_custom_endpoint() {
206 register_rest_route(
207 'sureforms/v1',
208 '/sureforms_import',
209 [
210 'methods' => WP_REST_Server::EDITABLE,
211 'callback' => [ $this, 'handle_import_form' ],
212 'permission_callback' => static function () {
213 return Helper::current_user_can( 'manage_options' );
214 },
215 ]
216 );
217 }
218 }
219