PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.9.0
GiveWP – Donation Plugin and Fundraising Platform v3.9.0
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 / DonationMetricsData.php
give / src / Tracking / TrackingData Last commit date
ActiveDonationFormsData.php 4 years ago DonationData.php 4 years ago DonationFormsData.php 2 years ago DonationMetricsData.php 4 years ago EditedDonationFormsData.php 4 years ago GivePluginSettingsData.php 4 years ago PluginsData.php 4 years ago ServerData.php 4 years ago ThemeData.php 4 years ago WebsiteData.php 4 years ago WebsiteInfoData.php 4 years ago
DonationMetricsData.php
128 lines
1 <?php
2
3 namespace Give\Tracking\TrackingData;
4
5 use Give\Framework\Database\DB;
6 use Give\Tracking\Contracts\TrackData;
7 use Give\Tracking\Helpers\DonationStatuses;
8
9 /**
10 * Class DonationMetricsData
11 * @package Give\Tracking\TrackingData
12 *
13 * @since 2.10.2
14 */
15 class DonationMetricsData implements TrackData
16 {
17 /**
18 * @var array
19 */
20 private $donationData = [];
21
22 /**
23 * @var int
24 */
25 private $donorCount = 0;
26
27 /**
28 * @var int
29 */
30 private $formCount = 0;
31
32 /**
33 * @inheritdoc
34 * @return array|void
35 */
36 public function get()
37 {
38 $this->donorCount = $this->getDonorCount();
39 $this->formCount = $this->getDonationFormCount();
40 $this->donationData = (new DonationData())->get();
41
42 $data = [
43 'form_count' => $this->formCount,
44 'donor_count' => $this->donorCount,
45 'avg_donation_amount_by_donor' => $this->getAvgDonationAmountByDonor(),
46 ];
47
48 return array_merge($data, $this->donationData);
49 }
50
51 /**
52 * Returns donor count which donated greater then zero
53 *
54 * @since 2.10.0
55 * @return int
56 */
57 private function getDonorCount()
58 {
59 global $wpdb;
60
61 $statues = DonationStatuses::getCompletedDonationsStatues(true);
62
63 $donorCount = DB::get_var(
64 "
65 SELECT COUNT(DISTINCT dm.meta_value)
66 FROM {$wpdb->donationmeta} as dm
67 INNER JOIN {$wpdb->posts} as p ON dm.donation_id = p.ID
68 INNER JOIN {$wpdb->donationmeta} as dm2 ON dm.donation_id = dm2.donation_id
69 INNER JOIN {$wpdb->donors} as donor ON dm.meta_value = donor.id
70 WHERE p.post_status IN ({$statues})
71 AND p.post_type='give_payment'
72 AND dm2.meta_key='_give_payment_mode'
73 AND dm2.meta_value='live'
74 AND dm.meta_key='_give_payment_donor_id'
75 AND donor.purchase_value > 0
76 "
77 );
78
79 return (int)$donorCount;
80 }
81
82 /**
83 * Get average donation by donor.
84 *
85 * @since 2.10.0
86 * @return int
87 */
88 private function getAvgDonationAmountByDonor()
89 {
90 $amount = 0;
91
92 if ($this->donationData['revenue']) {
93 $amount = (int)($this->donationData['revenue'] / $this->donorCount);
94 }
95
96 return $amount;
97 }
98
99 /**
100 * Returns donation form count
101 *
102 * @since 2.10.0
103 * @return int
104 */
105 private function getDonationFormCount()
106 {
107 global $wpdb;
108
109 $statues = DonationStatuses::getCompletedDonationsStatues(true);
110
111 $formCount = DB::get_var(
112 "
113 SELECT COUNT(DISTINCT dm.meta_value)
114 FROM {$wpdb->donationmeta} as dm
115 INNER JOIN {$wpdb->posts} as p ON dm.donation_id = p.ID
116 INNER JOIN {$wpdb->donationmeta} as dm2 ON dm.donation_id = dm2.donation_id
117 WHERE p.post_status IN ({$statues})
118 AND p.post_type='give_payment'
119 AND dm2.meta_key='_give_payment_mode'
120 AND dm2.meta_value='live'
121 AND dm.meta_key='_give_payment_form_id'
122 "
123 );
124
125 return (int)$formCount;
126 }
127 }
128