PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.5.0
GiveWP – Donation Plugin and Fundraising Platform v4.5.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 / Donors / DonorsQuery.php
give / src / Donors Last commit date
Actions 1 year ago CustomFields 1 year ago DataTransferObjects 1 year ago Endpoints 1 year ago Exceptions 2 years 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 11 months ago DonorStatisticsQuery.php 11 months ago DonorsAdminPage.php 1 year ago DonorsQuery.php 1 year ago ServiceProvider.php 1 year ago
DonorsQuery.php
141 lines
1 <?php
2
3 namespace Give\Donors;
4
5 use Give\Donations\ValueObjects\DonationMetaKeys;
6 use Give\Donors\Models\Donor;
7 use Give\Framework\Models\ModelQueryBuilder;
8 use Give\Framework\QueryBuilder\JoinQueryBuilder;
9 use Give\Framework\QueryBuilder\QueryBuilder;
10
11 /**
12 * @since 4.4.0
13 */
14 class DonorsQuery
15 {
16 /**
17 * @var ModelQueryBuilder<Donor>
18 */
19 protected $query;
20
21 /**
22 * @since 4.4.0
23 */
24 public function __construct()
25 {
26 $this->query = Donor::query();
27 }
28
29 /**
30 * Delegates methods not defined locally to the underlying query.
31 *
32 * @since 4.4.0
33 *
34 * @return mixed
35 */
36 public function __call(string $method, array $args)
37 {
38 if (method_exists($this, $method)) {
39 return $this->$method(...$args);
40 }
41
42 return $this->query->$method(...$args);
43 }
44
45 /**
46 * @since 4.4.0
47 */
48 public function whereDonorsHaveDonations(
49 string $mode = '',
50 int $campaignId = 0,
51 bool $excludeAnonymousDonors = true
52 ): self {
53 if (empty($mode)) {
54 $mode = give_is_test_mode() ? 'test' : 'live';
55 }
56
57 $this->query->join(function (JoinQueryBuilder $builder) use ($mode) {
58 // The donationmeta1.donation_id should be used in other "donationmeta" joins to make sure we are retrieving data from the proper donation
59 $builder->innerJoin('give_donationmeta', 'donationmeta1')
60 ->on('donationmeta1.meta_key', DonationMetaKeys::DONOR_ID, true)
61 ->andOn('donationmeta1.meta_value', 'ID');
62
63 // Include only current payment "mode"
64 $builder->innerJoin('give_donationmeta', 'donationmeta2')
65 ->on('donationmeta2.meta_key', DonationMetaKeys::MODE, true)
66 ->andOn('donationmeta2.meta_value', $mode, true)
67 ->andOn('donationmeta2.donation_id', 'donationmeta1.donation_id');
68 });
69
70 if ($campaignId) {
71 // Filter by CampaignId - Donors only can be filtered by campaignId if they donated to a campaign
72 $this->query->join(function (JoinQueryBuilder $builder) use ($campaignId) {
73 $builder->innerJoin('give_donationmeta', 'donationmeta3')
74 ->on('donationmeta3.meta_key', DonationMetaKeys::CAMPAIGN_ID, true)
75 ->andOn('donationmeta3.meta_value', $campaignId, true)
76 ->andOn('donationmeta3.donation_id', 'donationmeta1.donation_id');
77 });
78 }
79
80 if ($excludeAnonymousDonors) {
81 // Exclude anonymous donors from results - Donors only can be excluded if they made an anonymous donation
82 $this->query->join(function (JoinQueryBuilder $builder) {
83 $builder->innerJoin('give_donationmeta', 'donationmeta4')
84 ->on('donationmeta4.meta_key', DonationMetaKeys::ANONYMOUS, true)
85 ->andOn('donationmeta4.meta_value', '0')
86 ->andOn('donationmeta4.donation_id', 'donationmeta1.donation_id');
87 });
88 }
89
90 // Make sure the donation is valid
91 $this->query->whereIn('donationmeta1.donation_id', function (QueryBuilder $builder) {
92 $builder
93 ->select('ID')
94 ->from('posts')
95 ->where('post_type', 'give_payment')
96 ->whereIn('post_status', ['publish', 'give_subscription'])
97 ->whereRaw("AND ID = donationmeta1.donation_id");
98 });
99
100 return $this;
101 }
102
103 /**
104 * @since 4.4.0
105 */
106 public function limit(int $limit): self
107 {
108 $this->query->limit($limit);
109
110 return $this;
111 }
112
113 /**
114 * @since 4.4.0
115 */
116 public function offset(int $offset): self
117 {
118 $this->query->offset($offset);
119
120 return $this;
121 }
122
123 /**
124 * @since 4.4.0
125 */
126 public function orderBy(string $column, string $direction = 'ASC'): self
127 {
128 $this->query->orderBy($column, $direction);
129
130 return $this;
131 }
132
133 /**
134 * @since 4.4.0
135 */
136 public function getAll(): array
137 {
138 return $this->query->getAll() ?? [];
139 }
140 }
141