PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.4.0
GiveWP – Donation Plugin and Fundraising Platform v4.4.0
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 / Campaigns / CampaignsDataQuery.php
give / src / Campaigns Last commit date
Actions 1 year ago Blocks 1 year ago Controllers 1 year ago DataTransferObjects 1 year ago Factories 1 year ago ListTable 1 year ago Migrations 1 year ago Models 1 year ago Repositories 1 year ago ValueObjects 1 year ago ViewModels 1 year ago resources 1 year ago CampaignDonationQuery.php 1 year ago CampaignSubscriptionQuery.php 1 year ago CampaignsAdminPage.php 1 year ago CampaignsDataQuery.php 1 year ago ServiceProvider.php 1 year ago
CampaignsDataQuery.php
135 lines
1 <?php
2
3 namespace Give\Campaigns;
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 campaigns
11 *
12 * @since 4.0.0
13 */
14 class CampaignsDataQuery extends QueryBuilder
15 {
16 /**
17 * @since 4.0.0
18 *
19 * @param int[] $campaignIds
20 */
21 private function __construct(array $campaignIds)
22 {
23 $this->select('campaignId.meta_value as campaign_id');
24 $this->whereIn('donation.post_status', ['publish', 'give_subscription']);
25 $this->whereIn('campaignId.meta_value', $campaignIds);
26 $this->groupBy('campaign_id');
27 }
28
29
30 /**
31 * Donations query for campaigns
32 *
33 * @param int[] $campaignIds - campaign ids
34 *
35 * @return CampaignsDataQuery
36 */
37 public static function donations(array $campaignIds): CampaignsDataQuery
38 {
39 return (new self($campaignIds))
40 ->from('posts', 'donation')
41 ->where('post_type', 'give_payment')
42 ->joinDonationMeta(DonationMetaKeys::CAMPAIGN_ID, 'campaignId')
43 ->joinDonationMeta(DonationMetaKeys::MODE, 'paymentMode')
44 ->where('paymentMode.meta_value', give_is_test_mode() ? 'test' : 'live');
45 }
46
47 /**
48 * Subscriptions query for campaigns
49 *
50 * @param int[] $campaignIds - campaign ids
51 *
52 * @return CampaignsDataQuery
53 */
54 public static function subscriptions(array $campaignIds): CampaignsDataQuery
55 {
56 return (new self($campaignIds))
57 ->from('give_subscriptions', 'subscription')
58 ->join(function (JoinQueryBuilder $builder) {
59 $builder
60 ->leftJoin('posts', 'donation')
61 ->on('subscription.parent_payment_id', 'donation.ID');
62 })
63 ->joinDonationMeta(DonationMetaKeys::CAMPAIGN_ID, 'campaignId')
64 ->where('payment_mode', give_is_test_mode() ? 'test' : 'live')
65 ->where('donation.post_type', 'give_payment');
66 }
67
68 /**
69 * Returns a calculated sum of the intended amounts (without recovered fees) for the donations.
70 *
71 * @since 4.0.0
72 *
73 * @return array|object|null
74 */
75 public function collectIntendedAmounts()
76 {
77 return (clone $this)
78 ->select('SUM(IFNULL(amount.meta_value, 0) - IFNULL(feeAmountRecovered.meta_value, 0)) as sum')
79 ->joinDonationMeta(DonationMetaKeys::AMOUNT, 'amount')
80 ->joinDonationMeta(DonationMetaKeys::FEE_AMOUNT_RECOVERED, 'feeAmountRecovered')
81 ->getAll(ARRAY_A);
82 }
83
84 /**
85 * Returns a calculated sum of the initial amounts
86 *
87 * @since 4.0.0
88 *
89 * @return array|object|null
90 */
91 public function collectInitialAmounts()
92 {
93 return (clone $this)
94 ->select('SUM(initial_amount) as sum')
95 ->getAll(ARRAY_A);
96 }
97
98 /**
99 * @since 4.0.0
100 */
101 public function collectDonations()
102 {
103 return (clone $this)
104 ->select('COUNT(donation.ID) as count')
105 ->getAll(ARRAY_A);
106 }
107
108 /**
109 * @since 4.0.0
110 */
111 public function collectDonors()
112 {
113 return (clone $this)
114 ->select('COUNT(DISTINCT donorId.meta_value) as count')
115 ->joinDonationMeta(DonationMetaKeys::DONOR_ID, 'donorId')
116 ->getAll(ARRAY_A);
117 }
118
119 /**
120 * An opinionated join method for the donation meta table.
121 * @since 4.0.0
122 */
123 private function joinDonationMeta($key, $alias): self
124 {
125 $this->join(function (JoinQueryBuilder $builder) use ($key, $alias) {
126 $builder
127 ->leftJoin('give_donationmeta', $alias)
128 ->on('donation.ID', $alias . '.donation_id')
129 ->andOn($alias . '.meta_key', $key, true);
130 });
131
132 return $this;
133 }
134 }
135