PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.22.3
GiveWP – Donation Plugin and Fundraising Platform v2.22.3
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / forms / class-give-forms-query.php
give / includes / forms Last commit date
class-give-forms-query.php 6 years ago functions.php 4 years ago template.php 3 years ago widget.php 6 years ago
class-give-forms-query.php
165 lines
1 <?php
2 /**
3 * Forms Query
4 *
5 * @package Give
6 * @subpackage Classes/Form
7 * @copyright Copyright (c) 2019, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 2.5.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Give_Forms_Query Class
19 * Note: only for internal use. This class is under development, so use it at your risk.
20 *
21 * This class is for retrieving forms data.
22 *
23 * @since 2.5.0
24 */
25 class Give_Forms_Query {
26 /**
27 * Preserve args
28 *
29 * @since 2.5.0
30 * @access public
31 *
32 * @var array
33 */
34 public $_args = array();
35
36 /**
37 * The args to pass to the give_get_forms() query
38 *
39 * @since 2.5.0
40 * @access public
41 *
42 * @var array
43 */
44 public $args = array();
45
46 /**
47 * The forms found based on the criteria set
48 *
49 * @since 2.5.0
50 * @access public
51 *
52 * @var array
53 */
54 public $forms = array();
55
56 /**
57 * Default query arguments.
58 *
59 * Not all of these are valid arguments that can be passed to WP_Query. The ones that are not, are modified before
60 * the query is run to convert them to the proper syntax.
61 *
62 * @since 2.5.0
63 * @access public
64 *
65 * @param $args array The array of arguments that can be passed in and used for setting up this form query.
66 */
67 public function __construct( $args = array() ) {
68 $defaults = array(
69 'output' => 'forms',
70 'post_type' => array( 'give_forms' ),
71 );
72
73 // We do not want WordPress to handle meta cache because WordPress stores in under `post_meta` key and cache object while we want it under `form_meta`.
74 // Similar for term cache
75 $args['update_post_meta_cache'] = false;
76
77 $this->args = $this->_args = wp_parse_args( $args, $defaults );
78 }
79
80 /**
81 * Retrieve forms.
82 *
83 * The query can be modified in two ways; either the action before the
84 * query is run, or the filter on the arguments (existing mainly for backwards
85 * compatibility).
86 *
87 * @since 2.5.0
88 * @access public
89 *
90 * @return array
91 */
92 public function get_forms() {
93 global $post;
94
95 $results = array();
96 $this->forms = array();
97 $cache_key = Give_Cache::get_key( 'give_form_query', $this->args, false );
98 $this->forms = Give_Cache::get_db_query( $cache_key );
99
100 // Return cached result.
101 if ( ! is_null( $this->forms ) ) {
102 return $this->forms;
103 }
104
105 /* @var WP_Query $query */
106 $query = new WP_Query( $this->args );
107
108 $custom_output = array(
109 'forms',
110 'give_forms',
111 );
112
113 if ( $query->have_posts() ) {
114 $this->update_meta_cache( wp_list_pluck( $query->posts, 'ID' ) );
115
116 if ( ! in_array( $this->args['output'], $custom_output ) ) {
117 $results = $query->posts;
118
119 } else {
120 $previous_post = $post;
121
122 while ( $query->have_posts() ) {
123 $query->the_post();
124
125 $form_id = get_post()->ID;
126 $form = new Give_Donate_Form( $form_id );
127
128 $this->forms[] = apply_filters( 'give_form', $form, $form_id, $this );
129 }
130
131 wp_reset_postdata();
132
133 // Prevent nest loop from producing unexpected results.
134 if ( $previous_post instanceof WP_Post ) {
135 $post = $previous_post;
136 setup_postdata( $post );
137 }
138
139 $results = $this->forms;
140 }
141 }
142
143 Give_Cache::set_db_query( $cache_key, $results );
144
145 return $results;
146 }
147
148 /**
149 * Update forms meta cache
150 *
151 * @since 2.5.0
152 * @access private
153 *
154 * @param $form_ids
155 */
156 public static function update_meta_cache( $form_ids ) {
157 // Exit.
158 if ( empty( $form_ids ) ) {
159 return;
160 }
161
162 update_meta_cache( Give()->form_meta->get_meta_type(), $form_ids );
163 }
164 }
165