PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.15.5
GiveWP – Donation Plugin and Fundraising Platform v4.15.5
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.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 All 253 releases
give / src / DonationForms / DonationFormDataQuery.php
DonationFormDataQuery.php
128 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\DonationForms;
4
5 use Give\Donations\ValueObjects\DonationMetaKeys;
6 use Give\Framework\QueryBuilder\JoinQueryBuilder;
7 use Give\Framework\QueryBuilder\QueryBuilder;
8
9 /**
10 * Class used for loading the number of donors, donations and revenue amounts for multiple forms
11 *
12 * @since 4.3.0
13 */
14 class DonationFormDataQuery extends QueryBuilder
15 {
16 /**
17 * @since 4.3.0
18 */
19 private function __construct()
20 {
21 $this->select(['formId.meta_value', 'form_id']);
22 $this->whereIn('donation.post_status', ['publish', 'give_subscription']);
23 $this->groupBy('form_id');
24 }
25
26
27 /**
28 * Donations query for campaigns
29 *
30 * @param int[] $formIds
31 */
32 public static function donations(array $formIds): DonationFormDataQuery
33 {
34 return (new self())
35 ->from('posts', 'donation')
36 ->where('post_type', 'give_payment')
37 ->joinDonationMeta(DonationMetaKeys::FORM_ID, 'formId')
38 ->joinDonationMeta(DonationMetaKeys::MODE, 'paymentMode')
39 ->whereIn('formId.meta_value', $formIds)
40 ->where('paymentMode.meta_value', give_is_test_mode() ? 'test' : 'live');
41 }
42
43 /**
44 * Subscriptions query for forms
45 *
46 * @since 4.3.0
47 *
48 * @param int[] $formIds
49 */
50 public static function subscriptions(array $formIds): DonationFormDataQuery
51 {
52 return (new self())
53 ->from('give_subscriptions', 'subscription')
54 ->join(function (JoinQueryBuilder $builder) {
55 $builder
56 ->leftJoin('posts', 'donation')
57 ->on('subscription.parent_payment_id', 'donation.ID');
58 })
59 ->joinDonationMeta(DonationMetaKeys::FORM_ID, 'formId')
60 ->whereIn('formId.meta_value', $formIds)
61 ->where('payment_mode', give_is_test_mode() ? 'test' : 'live')
62 ->where('donation.post_type', 'give_payment');
63 }
64
65 /**
66 * Returns a calculated sum of the intended amounts (without recovered fees) for the donations.
67 *
68 * @since 4.3.0
69 */
70 public function collectIntendedAmounts(): ?array
71 {
72 return (clone $this)
73 ->select('SUM((IFNULL(amount.meta_value, 0) - IFNULL(feeAmountRecovered.meta_value, 0)) / IFNULL(exchangeRate.meta_value, 1)) as sum')
74 ->joinDonationMeta(DonationMetaKeys::AMOUNT, 'amount')
75 ->joinDonationMeta(DonationMetaKeys::FEE_AMOUNT_RECOVERED, 'feeAmountRecovered')
76 ->joinDonationMeta(DonationMetaKeys::EXCHANGE_RATE, 'exchangeRate')
77 ->getAll(ARRAY_A);
78 }
79
80 /**
81 * Returns a calculated sum of the initial amounts
82 *
83 * @since 4.3.0
84 */
85 public function collectInitialAmounts(): ?array
86 {
87 return (clone $this)
88 ->select('SUM(initial_amount) as sum')
89 ->getAll(ARRAY_A);
90 }
91
92 /**
93 * @since 4.3.0
94 */
95 public function collectDonations(): ?array
96 {
97 return (clone $this)
98 ->select('COUNT(donation.ID) as count')
99 ->getAll(ARRAY_A);
100 }
101
102 /**
103 * @since 4.3.0
104 */
105 public function collectDonors(): ?array
106 {
107 return (clone $this)
108 ->select('COUNT(DISTINCT donorId.meta_value) as count')
109 ->joinDonationMeta(DonationMetaKeys::DONOR_ID, 'donorId')
110 ->getAll(ARRAY_A);
111 }
112
113 /**
114 * @since 4.3.0
115 */
116 private function joinDonationMeta($key, $alias): self
117 {
118 $this->join(function (JoinQueryBuilder $builder) use ($key, $alias) {
119 $builder
120 ->leftJoin('give_donationmeta', $alias)
121 ->on('donation.ID', $alias . '.donation_id')
122 ->andOn($alias . '.meta_key', $key, true);
123 });
124
125 return $this;
126 }
127 }
128