PluginProbe
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz / 1.7.0
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz v1.7.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 / rest-api.php
rest-api.php
218 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 * Rest API Manager Class.
4 *
5 * @package sureforms.
6 */
7
8 namespace SRFM\Inc;
9
10 use SRFM\Inc\AI_Form_Builder\AI_Auth;
11 use SRFM\Inc\AI_Form_Builder\AI_Form_Builder;
12 use SRFM\Inc\AI_Form_Builder\Field_Mapping;
13 use SRFM\Inc\Database\Tables\Entries;
14 use SRFM\Inc\Traits\Get_Instance;
15
16 if ( ! defined( 'ABSPATH' ) ) {
17 exit; // Exit if accessed directly.
18 }
19
20 /**
21 * Rest API handler class.
22 *
23 * @since 0.0.7
24 */
25 class Rest_Api {
26 use Get_Instance;
27
28 /**
29 * Constructor
30 *
31 * @since 0.0.7
32 * @return void
33 */
34 public function __construct() {
35 add_action( 'rest_api_init', [ $this, 'register_endpoints' ] );
36 }
37
38 /**
39 * Register endpoints
40 *
41 * @since 0.0.7
42 * @return void
43 */
44 public function register_endpoints() {
45
46 $prefix = 'sureforms';
47 $version_slug = 'v1';
48
49 $endpoints = $this->get_endpoints();
50
51 foreach ( $endpoints as $endpoint => $args ) {
52 register_rest_route(
53 $prefix . '/' . $version_slug,
54 $endpoint,
55 $args
56 );
57 }
58 }
59
60 /**
61 * Check if user can edit posts
62 *
63 * @since 0.0.7
64 * @return bool
65 */
66 public function can_edit_posts() {
67 return current_user_can( 'edit_posts' );
68 }
69
70 /**
71 * Checks whether the value is boolean or not.
72 *
73 * @param mixed $value value to be checked.
74 * @since 0.0.8
75 * @return bool
76 */
77 public function sanitize_boolean_field( $value ) {
78 return filter_var( $value, FILTER_VALIDATE_BOOLEAN );
79 }
80
81 /**
82 * Get the data for generating entries chart.
83 *
84 * @param \WP_REST_Request $request Full details about the request.
85 * @since 1.0.0
86 * @return array<mixed>
87 */
88 public function get_entries_chart_data( $request ) {
89 $nonce = Helper::get_string_value( $request->get_header( 'X-WP-Nonce' ) );
90
91 if ( ! wp_verify_nonce( sanitize_text_field( $nonce ), 'wp_rest' ) ) {
92 wp_send_json_error( __( 'Nonce verification failed.', 'sureforms' ) );
93 }
94
95 $params = $request->get_params();
96
97 if ( empty( $params ) ) {
98 wp_send_json_error( __( 'Request could not be processed.', 'sureforms' ) );
99 }
100
101 $after = is_array( $params ) && ! empty( $params['after'] ) ? sanitize_text_field( Helper::get_string_value( $params['after'] ) ) : '';
102 $before = is_array( $params ) && ! empty( $params['before'] ) ? sanitize_text_field( Helper::get_string_value( $params['before'] ) ) : '';
103
104 if ( empty( $after ) || empty( $before ) ) {
105 wp_send_json_error( __( 'Invalid date.', 'sureforms' ) );
106 }
107
108 $form = is_array( $params ) && ! empty( $params['form'] ) ? sanitize_text_field( Helper::get_string_value( $params['form'] ) ) : '';
109
110 $where = [
111 [
112 [
113 'key' => 'created_at',
114 'value' => $after,
115 'compare' => '>=',
116 ],
117 [
118 'key' => 'created_at',
119 'value' => $before,
120 'compare' => '<=',
121 ],
122 ],
123 ];
124
125 if ( ! empty( $form ) ) {
126 $where[0][] = [
127 'key' => 'form_id',
128 'value' => $form,
129 'compare' => '=',
130 ];
131 }
132
133 return Entries::get_instance()->get_results(
134 $where,
135 'created_at',
136 [ 'ORDER BY created_at DESC' ]
137 );
138 }
139
140 /**
141 * Get the data for all the forms.
142 *
143 * @param \WP_REST_Request $request Full details about the request.
144 * @since 1.7.0
145 * @return array<mixed>
146 */
147 public function get_form_data( $request ) {
148 $nonce = Helper::get_string_value( $request->get_header( 'X-WP-Nonce' ) );
149
150 if ( ! wp_verify_nonce( sanitize_text_field( $nonce ), 'wp_rest' ) ) {
151 wp_send_json_error( __( 'Nonce verification failed.', 'sureforms' ) );
152 }
153
154 $forms = Helper::get_instance()->get_sureforms();
155
156 return ! empty( $forms ) ? $forms : [];
157 }
158
159 /**
160 * Get endpoints
161 *
162 * @since 0.0.7
163 * @return array<array<mixed>>
164 */
165 private function get_endpoints() {
166 /*
167 * @internal This filter is used to add custom endpoints.
168 * @since 1.2.0
169 * @param array<array<mixed>> $endpoints Endpoints.
170 */
171 return apply_filters(
172 'srfm_rest_api_endpoints',
173 [
174 'generate-form' => [
175 'methods' => 'POST',
176 'callback' => [ AI_Form_Builder::get_instance(), 'generate_ai_form' ],
177 'permission_callback' => [ $this, 'can_edit_posts' ],
178 'args' => [
179 'use_system_message' => [
180 'sanitize_callback' => [ $this, 'sanitize_boolean_field' ],
181 ],
182 ],
183 ],
184 // This route is used to map the AI response to SureForms fields markup.
185 'map-fields' => [
186 'methods' => 'POST',
187 'callback' => [ Field_Mapping::get_instance(), 'generate_gutenberg_fields_from_questions' ],
188 'permission_callback' => [ $this, 'can_edit_posts' ],
189 ],
190 // This route is used to initiate auth process when user tries to authenticate on billing portal.
191 'initiate-auth' => [
192 'methods' => 'GET',
193 'callback' => [ AI_Auth::get_instance(), 'get_auth_url' ],
194 'permission_callback' => [ $this, 'can_edit_posts' ],
195 ],
196 // This route is to used to decrypt the access key and save it in the database.
197 'handle-access-key' => [
198 'methods' => 'POST',
199 'callback' => [ AI_Auth::get_instance(), 'handle_access_key' ],
200 'permission_callback' => [ $this, 'can_edit_posts' ],
201 ],
202 // This route is to get the form submissions for the last 30 days.
203 'entries-chart-data' => [
204 'methods' => 'GET',
205 'callback' => [ $this, 'get_entries_chart_data' ],
206 'permission_callback' => [ $this, 'can_edit_posts' ],
207 ],
208 // This route is to get all forms data.
209 'form-data' => [
210 'methods' => 'GET',
211 'callback' => [ $this, 'get_form_data' ],
212 'permission_callback' => [ $this, 'can_edit_posts' ],
213 ],
214 ]
215 );
216 }
217 }
218