PluginProbe
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz / 1.1.1
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz v1.1.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
← All changes | inc/forms-data.php +1 -146 2.10.11.1.1 View file →
@@ -7,9 +7,8 @@
7 7 */
8 8
9 9 namespace SRFM\Inc;
10 10
11 -use SRFM\Inc\Database\Tables\Entries;
12 11 use SRFM\Inc\Traits\Get_Instance;
13 12 use WP_Error;
14 13 use WP_REST_Response;
15 14
@@ -58,9 +57,9 @@
58 57 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
59 58 * @since 0.0.1
60 59 */
61 60 public function get_form_permissions_check() {
62 - if ( Helper::current_user_can( 'edit_posts' ) ) {
61 + if ( current_user_can( 'edit_posts' ) ) {
63 62 return true;
64 63 }
65 64
66 65 return new \WP_Error(
@@ -109,150 +108,6 @@
109 108 ];
110 109 }
111 110
112 111 return new WP_REST_Response( $data );
113 - }
114 -
115 - /**
116 - * Get forms list for the forms listing page.
117 - *
118 - * @param \WP_REST_Request $request Full details about the request.
119 - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
120 - * @since 2.0.0
121 - */
122 - public function get_forms_list( $request ) {
123 - $nonce = sanitize_text_field( Helper::get_string_value( $request->get_header( 'X-WP-Nonce' ) ) );
124 -
125 - Helper::verify_nonce_and_capabilities( 'rest', $nonce, 'wp_rest' );
126 -
127 - // Get and validate request parameters.
128 - $page = max( 1, Helper::get_integer_value( $request->get_param( 'page' ) ) );
129 - $status = sanitize_text_field( $request->get_param( 'status' ) );
130 -
131 - // Get per_page from option first, then request parameter, with fallback to 10.
132 - $saved_per_page = Helper::get_srfm_option( 'forms_per_page', 10 );
133 - $request_per_page = $request->get_param( 'per_page' );
134 - $per_page = $request_per_page ? min( 100, max( 1, Helper::get_integer_value( $request_per_page ) ) ) : $saved_per_page;
135 -
136 - // Save per_page to option if it came from request.
137 - if ( $request_per_page && 'trash' !== $status && 1 < $request_per_page ) {
138 - Helper::update_srfm_option( 'forms_per_page', $per_page );
139 - }
140 -
141 - $search = sanitize_text_field( $request->get_param( 'search' ) );
142 - $orderby = sanitize_text_field( $request->get_param( 'orderby' ) );
143 - $order = sanitize_text_field( $request->get_param( 'order' ) );
144 - $date_from = sanitize_text_field( $request->get_param( 'after' ) );
145 - $date_to = sanitize_text_field( $request->get_param( 'before' ) );
146 -
147 - // Build query arguments.
148 - $args = [
149 - 'post_type' => SRFM_FORMS_POST_TYPE,
150 - 'post_status' => 'any' === $status ? [ 'publish', 'draft' ] : $status,
151 - 'posts_per_page' => $per_page,
152 - 'paged' => $page,
153 - 'orderby' => $orderby,
154 - 'order' => $order,
155 - ];
156 -
157 - // Add date range filtering.
158 - if ( ! empty( $date_from ) || ! empty( $date_to ) ) {
159 - $date_query = [];
160 - // Handle 'after' date.
161 - if ( ! empty( $date_from ) ) {
162 - $date_query['after'] = $date_from;
163 - }
164 -
165 - // Handle 'before' date - add 1 day to include the full end date.
166 - if ( ! empty( $date_to ) ) {
167 - $end_date = new \DateTime( $date_to );
168 - $end_date->add( new \DateInterval( 'P1D' ) ); // Add 1 day.
169 - $date_query['before'] = $end_date->format( 'Y-m-d' );
170 - }
171 -
172 - $date_query['inclusive'] = true;
173 - $args['date_query'] = [ $date_query ];
174 - }
175 -
176 - // Add search parameter.
177 - if ( ! empty( $search ) ) {
178 - if ( is_numeric( $search ) ) {
179 - // Numeric search: match by form ID and title (e.g., "2024 Survey").
180 - $numeric_search = $search;
181 - $where_filter = static function ( $where, $query ) use ( $numeric_search ) {
182 - if ( ! $query->get( 'srfm_numeric_search' ) ) {
183 - return $where;
184 - }
185 - global $wpdb;
186 - $where .= $wpdb->prepare(
187 - " AND ({$wpdb->posts}.ID = %d OR {$wpdb->posts}.post_title LIKE %s)",
188 - absint( $numeric_search ),
189 - '%' . $wpdb->esc_like( $numeric_search ) . '%'
190 - );
191 - return $where;
192 - };
193 -
194 - add_filter( 'posts_where', $where_filter, 10, 2 );
195 - $args['srfm_numeric_search'] = true;
196 - } else {
197 - // Text search: match by title only.
198 - $args['s'] = $search;
199 - $args['search_columns'] = [ 'post_title' ];
200 - }
201 - }
202 -
203 - // Execute query — use try/finally to guarantee filter cleanup.
204 - try {
205 - $query = new \WP_Query( $args );
206 - } finally {
207 - if ( ! empty( $search ) && is_numeric( $search ) && isset( $where_filter ) ) {
208 - remove_filter( 'posts_where', $where_filter, 10 );
209 - }
210 - }
211 -
212 - $forms = [];
213 - /**
214 - * Post object from the query.
215 - *
216 - * @var \WP_Post $post */
217 - foreach ( $query->posts as $post ) {
218 - $forms[] = $this->prepare_form_for_listing( $post );
219 - }
220 -
221 - // Prepare response.
222 - $response_data = [
223 - 'forms' => $forms,
224 - 'total' => Helper::get_integer_value( $query->found_posts ),
225 - 'total_pages' => Helper::get_integer_value( $query->max_num_pages ),
226 - 'current_page' => $page,
227 - 'per_page' => $per_page,
228 - ];
229 -
230 - return new WP_REST_Response( $response_data, 200 );
231 - }
232 -
233 - /**
234 - * Prepare a single form for the listing response.
235 - *
236 - * @param \WP_Post $post Post object.
237 - * @return array<mixed> Prepared form data for listing.
238 - * @since 2.0.0
239 - */
240 - private function prepare_form_for_listing( $post ) {
241 - $form_id = $post->ID;
242 -
243 - // Get entries count.
244 - $entries_count = Helper::get_integer_value( Entries::get_total_entries_by_status( 'all', $form_id ) );
245 -
246 - return [
247 - 'id' => $form_id,
248 - 'title' => $post->post_title,
249 - 'status' => $post->post_status,
250 - 'date_created' => mysql_to_rfc3339( $post->post_date ),
251 - 'date_modified' => mysql_to_rfc3339( $post->post_modified ),
252 - 'entries_count' => $entries_count,
253 - 'shortcode' => "[sureforms id='{$form_id}']",
254 - 'edit_url' => admin_url( "post.php?post={$form_id}&action=edit" ),
255 - 'frontend_url' => get_permalink( $form_id ),
256 - ];
257 112 }
258 113 }