PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.11.2
GiveWP – Donation Plugin and Fundraising Platform v2.11.2
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 / src / Tracking / TrackingData / DonationFormsData.php
give / src / Tracking / TrackingData Last commit date
ActiveDonationFormsData.php 5 years ago DonationData.php 5 years ago DonationFormsData.php 5 years ago DonationMetricsData.php 5 years ago EditedDonationFormsData.php 5 years ago GivePluginSettingsData.php 5 years ago PluginsData.php 5 years ago ServerData.php 5 years ago ThemeData.php 5 years ago WebsiteData.php 5 years ago WebsiteInfoData.php 5 years ago
DonationFormsData.php
231 lines
1 <?php
2 namespace Give\Tracking\TrackingData;
3
4 use Give\Framework\Database\DB;
5 use Give\Helpers\ArrayDataSet;
6 use Give\Helpers\Form\Template;
7 use Give\Tracking\Contracts\TrackData;
8 use Give\Tracking\Helpers\DonationStatuses;
9 use Give\Tracking\Repositories\TrackEvents;
10
11 /**
12 * Class DonationFormsData
13 *
14 * Represents donation forms data
15 *
16 * @since 2.10.0
17 * @package Give\Tracking\TrackingData
18 */
19 class DonationFormsData implements TrackData {
20 protected $formIds = [];
21 protected $formRevenues = [];
22 protected $formDonorCounts = [];
23
24 /**
25 * @var TrackEvents
26 */
27 protected $trackEvents;
28
29 /**
30 * DonationFormsData constructor.
31 *
32 * @param TrackEvents $trackEvents
33 */
34 public function __construct( TrackEvents $trackEvents ) {
35 $this->trackEvents = $trackEvents;
36 }
37
38 /**
39 * @inheritdoc
40 */
41 public function get() {
42 $this->setFormIds();
43
44 if ( ! $this->formIds ) {
45 return [];
46 }
47
48 $this->setRevenues()
49 ->setDonorCounts();
50
51 return $this->getData();
52 }
53
54 /**
55 * Get forms data.
56 *
57 * @since 2.10.0
58 * @return array
59 */
60 protected function getData() {
61 if ( ! $this->formIds ) {
62 return [];
63 }
64
65 $data = [];
66
67 foreach ( $this->formIds as $formId ) {
68 $formTemplate = Template::getActiveID( $formId );
69
70 $temp = [
71 'form_id' => (int) $formId,
72 'form_url' => untrailingslashit( get_permalink( $formId ) ),
73 'form_name' => get_post_field( 'post_name', $formId, 'db' ),
74 'form_type' => give()->form_meta->get_meta( $formId, '_give_price_option', true ),
75 'form_template' => ! $formTemplate || 'legacy' === $formTemplate ? 'legacy' : $formTemplate,
76 'donor_count' => $this->formDonorCounts[ $formId ],
77 'revenue' => $this->formRevenues[ $formId ],
78 ];
79
80 $this->addAddonsInformation( $temp, $formId );
81 $data[] = $temp;
82 }
83
84 return $data;
85 }
86
87 /**
88 * Set form ids.
89 *
90 * @since 2.10.0
91 * @return self
92 */
93 protected function setFormIds() {
94 global $wpdb;
95
96 $statues = DonationStatuses::getCompletedDonationsStatues( true );
97 $time = $this->trackEvents->getRequestTime();
98
99 $this->formIds = DB::get_col(
100 "
101 SELECT DISTINCT dm.meta_value
102 FROM {$wpdb->donationmeta} as dm
103 INNER JOIN {$wpdb->posts} as p ON dm.donation_id = p.ID
104 INNER JOIN {$wpdb->donationmeta} as dm2 ON dm.donation_id = dm2.donation_id
105 WHERE p.post_status IN ({$statues})
106 AND p.post_date>='{$time}'
107 AND p.post_type='give_payment'
108 AND dm2.meta_key='_give_payment_mode'
109 AND dm2.meta_value='live'
110 AND dm.meta_key='_give_payment_form_id'
111 "
112 );
113
114 return $this;
115 }
116
117 /**
118 * Set forms revenues.
119 *
120 * @since 2.10.0
121 * @return self
122 */
123 protected function setRevenues() {
124 global $wpdb;
125
126 $formIds = ArrayDataSet::getStringSeparatedByCommaEnclosedWithSingleQuote( $this->formIds );
127 $defaultResult = array_combine(
128 $this->formIds,
129 array_fill( 0, count( $this->formIds ), 0 ) // Set default revenue to 0
130 );
131
132 $result = DB::get_results(
133 "
134 SELECT SUM(r.amount) as amount, r.form_id
135 FROM {$wpdb->give_revenue} as r
136 INNER JOIN {$wpdb->donationmeta} as dm ON r.donation_id = dm.donation_id
137 WHERE dm.meta_key='_give_payment_mode'
138 AND dm.meta_value='live'
139 AND r.form_id IN ({$formIds})
140 GROUP BY form_id
141 ",
142 ARRAY_A
143 );
144
145 if ( $result ) {
146 $result = array_map(
147 'absint',
148 array_combine(
149 wp_list_pluck( $result, 'form_id' ),
150 wp_list_pluck( $result, 'amount' )
151 )
152 );
153 }
154
155 $this->formRevenues = array_replace( $defaultResult, $result );
156
157 return $this;
158 }
159
160 /**
161 * Set forms revenues till current date.
162 *
163 * @since 2.10.0
164 *
165 * @return self
166 */
167 protected function setDonorCounts() {
168 global $wpdb;
169
170 $formIds = ArrayDataSet::getStringSeparatedByCommaEnclosedWithSingleQuote( $this->formIds );
171 $statues = DonationStatuses::getCompletedDonationsStatues( true );
172 $defaultResult = array_combine(
173 $this->formIds,
174 array_fill( 0, count( $this->formIds ), 0 ) // Set default donor count to 0
175 );
176
177 $result = DB::get_results(
178 "
179 SELECT COUNT(DISTINCT dm2.meta_value) as donor_count, dm.meta_value as form_id
180 FROM {$wpdb->donationmeta} as dm
181 INNER JOIN {$wpdb->posts} as p ON donation_id = p.ID
182 INNER JOIN {$wpdb->donationmeta} as dm2 ON dm.donation_id = dm2.donation_id
183 INNER JOIN {$wpdb->donors} as donor ON dm2.meta_value = donor.id
184 INNER JOIN {$wpdb->donationmeta} as dm3 ON dm.donation_id = dm3.donation_id
185 WHERE p.post_status IN ({$statues})
186 AND dm3.meta_key='_give_payment_mode'
187 AND dm3.meta_value='live'
188 AND dm.meta_key='_give_payment_form_id'
189 AND dm.meta_value IN ({$formIds})
190 AND dm2.meta_key='_give_payment_donor_id'
191 AND donor.purchase_value > 0
192 GROUP BY dm.meta_value
193 ",
194 ARRAY_A
195 );
196
197 if ( $result ) {
198 $result = array_map(
199 'absint',
200 array_combine(
201 wp_list_pluck( $result, 'form_id' ),
202 wp_list_pluck( $result, 'donor_count' )
203 )
204 );
205 }
206
207 $this->formDonorCounts = array_replace( $defaultResult, $result );
208
209 return $this;
210 }
211
212 /**
213 * Add addon information whether or not they active for donation form.
214 *
215 * @since 2.10.0
216 *
217 * @param array $array
218 * @param int $formId
219 */
220 private function addAddonsInformation( &$array, $formId ) {
221 $array = array_merge(
222 $array,
223 [
224 'recurring_donations' => (int) apply_filters( 'give_telemetry_form_uses_addon_recurring', false, $formId ),
225 'fee_recovery' => (int) apply_filters( 'give_telemetry_form_uses_addon_fee_recovery', false, $formId ),
226 'form_field_manager' => (int) apply_filters( 'give_telemetry_form_uses_addon_form_field_manager', false, $formId ),
227 ]
228 );
229 }
230 }
231