PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.12.2
GiveWP – Donation Plugin and Fundraising Platform v3.12.2
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 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 / DonationForms / DonationQuery.php
give / src / DonationForms Last commit date
Actions 2 years ago Blocks 2 years ago Controllers 2 years ago DataTransferObjects 2 years ago Exceptions 2 years ago Factories 2 years ago FormDesigns 2 years ago FormPage 2 years ago Listeners 2 years ago Migrations 2 years ago Models 2 years ago Properties 2 years ago Repositories 2 years ago Routes 2 years ago Rules 2 years ago Shortcodes 2 years ago V2 2 years ago ValueObjects 2 years ago ViewModels 2 years ago resources 2 years ago DonationQuery.php 2 years ago ServiceProvider.php 2 years ago SubscriptionQuery.php 2 years ago
DonationQuery.php
106 lines
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 * An opinionated Query Builder for GiveWP donations and meta fields.
11 *
12 * @since 3.12.0
13 *
14 * Example usage:
15 * (new DonationQuery)
16 * ->form(1816)
17 * ->between('2024-02-00', '2024-02-23')
18 * ->sumIntendedAmount();
19 */
20 class DonationQuery extends QueryBuilder
21 {
22 /**
23 * @since 3.12.0
24 */
25 public function __construct()
26 {
27 $this->from('posts', 'donation');
28 }
29
30 /**
31 * An opinionated join method for the donation meta table.
32 * @since 3.12.0
33 */
34 public function joinMeta($key, $alias)
35 {
36 $this->join(function (JoinQueryBuilder $builder) use ($key, $alias) {
37 $builder
38 ->leftJoin('give_donationmeta', $alias)
39 ->on('donation.ID', $alias . '.donation_id')
40 ->andOn($alias . '.meta_key', $key, true);
41 });
42 return $this;
43 }
44
45 /**
46 * An opinionated where method for the donation form ID meta field.
47 * @since 3.12.0
48 */
49 public function form($formId)
50 {
51 $this->joinMeta('_give_payment_form_id', 'formId');
52 $this->where('formId.meta_value', $formId);
53 return $this;
54 }
55
56
57 /**
58 * An opinionated where method for the multiple donation form IDs meta field.
59 * @since 3.12.0
60 */
61 public function forms(array $formIds)
62 {
63 $this->joinMeta('_give_payment_form_id', 'formId');
64 $this->whereIn('formId.meta_value', $formIds);
65 return $this;
66 }
67
68 /**
69 * An opinionated whereBetween method for the completed date meta field.
70 * @since 3.12.0
71 */
72 public function between($startDate, $endDate)
73 {
74 // If the dates are empty or invalid, they will fallback to January 1st, 1970.
75 // For the start date, this is exactly what we need, but for the end date, we should set it as the current date so that we have a correct date range.
76 $startDate = date('Y-m-d H:i:s', strtotime($startDate));
77 $endDate = empty($endDate)
78 ? date('Y-m-d H:i:s')
79 : date('Y-m-d H:i:s', strtotime($endDate));
80
81 $this->joinMeta('_give_completed_date', 'completed');
82 $this->whereBetween('completed.meta_value', $startDate, $endDate);
83 return $this;
84 }
85
86 /**
87 * Returns a calculated sum of the intended amounts (without recovered fees) for the donations.
88 * @since 3.12.0
89 * @return int|float
90 */
91 public function sumIntendedAmount()
92 {
93 $this->joinMeta('_give_payment_total', 'amount');
94 $this->joinMeta('_give_fee_donation_amount', 'intendedAmount');
95 return $this->sum(
96 'COALESCE(intendedAmount.meta_value, amount.meta_value)'
97 );
98 }
99
100 public function countDonors()
101 {
102 $this->joinMeta(DonationMetaKeys::DONOR_ID, 'donorId');
103 return $this->count('DISTINCT donorId.meta_value');
104 }
105 }
106