PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / DonationFormDataQuery.php
give / src / DonationForms Last commit date
Actions 4 months ago AsyncData 1 year ago Blocks 2 months ago Controllers 3 months ago DataTransferObjects 1 week ago Exceptions 1 year ago Factories 9 months ago FormDesigns 11 months ago FormPage 1 year ago Listeners 1 year ago Migrations 1 year ago Models 10 months ago OrphanedForms 1 year ago Properties 2 months ago Repositories 10 months ago Routes 5 months ago Rules 9 months ago Shortcodes 2 years ago V2 4 months ago ValueObjects 1 year ago ViewModels 2 months ago resources 1 month ago DonationFormDataQuery.php 11 months ago DonationFormsAdminPage.php 1 year ago DonationQuery.php 11 months ago ServiceProvider.php 7 months ago SubscriptionQuery.php 2 years ago
DonationFormDataQuery.php
128 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 * 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