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 / Campaigns / CampaignsDataQuery.php
give / src / Campaigns Last commit date
Actions 1 month ago Blocks 3 days ago DataTransferObjects 1 year ago Factories 1 year ago ListTable 5 months ago Migrations 8 months ago Models 7 months ago Repositories 7 months ago Shortcodes 3 days ago ValueObjects 5 months ago resources 7 months ago CampaignDonationQuery.php 11 months ago CampaignSubscriptionQuery.php 1 year ago CampaignsAdminPage.php 5 months ago CampaignsDataQuery.php 11 months ago ServiceProvider.php 5 months ago
CampaignsDataQuery.php
136 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)) / IFNULL(exchangeRate.meta_value, 1)) as sum')
79 ->joinDonationMeta(DonationMetaKeys::AMOUNT, 'amount')
80 ->joinDonationMeta(DonationMetaKeys::FEE_AMOUNT_RECOVERED, 'feeAmountRecovered')
81 ->joinDonationMeta(DonationMetaKeys::EXCHANGE_RATE, 'exchangeRate')
82 ->getAll(ARRAY_A);
83 }
84
85 /**
86 * Returns a calculated sum of the initial amounts
87 *
88 * @since 4.0.0
89 *
90 * @return array|object|null
91 */
92 public function collectInitialAmounts()
93 {
94 return (clone $this)
95 ->select('SUM(initial_amount) as sum')
96 ->getAll(ARRAY_A);
97 }
98
99 /**
100 * @since 4.0.0
101 */
102 public function collectDonations()
103 {
104 return (clone $this)
105 ->select('COUNT(donation.ID) as count')
106 ->getAll(ARRAY_A);
107 }
108
109 /**
110 * @since 4.0.0
111 */
112 public function collectDonors()
113 {
114 return (clone $this)
115 ->select('COUNT(DISTINCT donorId.meta_value) as count')
116 ->joinDonationMeta(DonationMetaKeys::DONOR_ID, 'donorId')
117 ->getAll(ARRAY_A);
118 }
119
120 /**
121 * An opinionated join method for the donation meta table.
122 * @since 4.0.0
123 */
124 private function joinDonationMeta($key, $alias): self
125 {
126 $this->join(function (JoinQueryBuilder $builder) use ($key, $alias) {
127 $builder
128 ->leftJoin('give_donationmeta', $alias)
129 ->on('donation.ID', $alias . '.donation_id')
130 ->andOn($alias . '.meta_key', $key, true);
131 });
132
133 return $this;
134 }
135 }
136