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