PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.8.0
GiveWP – Donation Plugin and Fundraising Platform v4.8.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 11 months 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 9 months ago resources 9 months ago DonorStatisticsQuery.php 11 months ago DonorsAdminPage.php 11 months ago DonorsQuery.php 9 months ago ServiceProvider.php 11 months ago
DonorsQuery.php
142 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\Database\DB;
8 use Give\Framework\Models\ModelQueryBuilder;
9 use Give\Framework\QueryBuilder\JoinQueryBuilder;
10 use Give\Framework\QueryBuilder\QueryBuilder;
11
12 /**
13 * @since 4.4.0
14 */
15 class DonorsQuery
16 {
17 /**
18 * @var ModelQueryBuilder<Donor>
19 */
20 protected $query;
21
22 /**
23 * @since 4.4.0
24 */
25 public function __construct()
26 {
27 $this->query = Donor::query();
28 }
29
30 /**
31 * Delegates methods not defined locally to the underlying query.
32 *
33 * @since 4.4.0
34 *
35 * @return mixed
36 */
37 public function __call(string $method, array $args)
38 {
39 if (method_exists($this, $method)) {
40 return $this->$method(...$args);
41 }
42
43 return $this->query->$method(...$args);
44 }
45
46 /**
47 * @since 4.8.0 Fix subqueries to not return duplicate donors
48 * @since 4.4.0
49 */
50 public function whereDonorsHaveDonations(
51 string $mode = '',
52 int $campaignId = 0,
53 bool $excludeAnonymousDonors = true
54 ): self {
55 if (empty($mode)) {
56 $mode = give_is_test_mode() ? 'test' : 'live';
57 }
58
59 $this->query->whereExists(function (QueryBuilder $builder) use ($mode, $campaignId, $excludeAnonymousDonors) {
60 $builder
61 ->select('1')
62 ->from('give_donationmeta', 'dm1')
63 ->join(function (JoinQueryBuilder $joinBuilder) use ($mode) {
64 $joinBuilder
65 ->innerJoin('give_donationmeta', 'dm2')
66 ->on('dm2.donation_id', 'dm1.donation_id')
67 ->andOn('dm2.meta_key', DonationMetaKeys::MODE, true)
68 ->andOn('dm2.meta_value', $mode, true);
69 })
70 ->join(function (JoinQueryBuilder $joinBuilder) {
71 $joinBuilder
72 ->innerJoin('posts', 'p')
73 ->on('p.ID', 'dm1.donation_id')
74 ->andOn('p.post_type', 'give_payment', true);
75 })
76 ->whereIn('p.post_status', ['publish', 'give_subscription'])
77 ->where('dm1.meta_key', DonationMetaKeys::DONOR_ID)
78 ->whereRaw(sprintf('AND dm1.meta_value = %s', $this->query->prefixTable('give_donors.id')));
79
80 if ($campaignId) {
81 $builder->join(function (JoinQueryBuilder $joinBuilder) use ($campaignId) {
82 $joinBuilder
83 ->innerJoin('give_donationmeta', 'dm3')
84 ->on('dm3.donation_id', 'dm1.donation_id')
85 ->andOn('dm3.meta_key', DonationMetaKeys::CAMPAIGN_ID, true)
86 ->andOn('dm3.meta_value', $campaignId, true);
87 });
88 }
89
90 if ($excludeAnonymousDonors) {
91 $builder->join(function (JoinQueryBuilder $joinBuilder) {
92 $joinBuilder
93 ->innerJoin('give_donationmeta', 'dm4')
94 ->on('dm4.donation_id', 'dm1.donation_id')
95 ->andOn('dm4.meta_key', DonationMetaKeys::ANONYMOUS, true)
96 ->andOn('dm4.meta_value', '0', true);
97 });
98 }
99 });
100
101 return $this;
102 }
103
104 /**
105 * @since 4.4.0
106 */
107 public function limit(int $limit): self
108 {
109 $this->query->limit($limit);
110
111 return $this;
112 }
113
114 /**
115 * @since 4.4.0
116 */
117 public function offset(int $offset): self
118 {
119 $this->query->offset($offset);
120
121 return $this;
122 }
123
124 /**
125 * @since 4.4.0
126 */
127 public function orderBy(string $column, string $direction = 'ASC'): self
128 {
129 $this->query->orderBy($column, $direction);
130
131 return $this;
132 }
133
134 /**
135 * @since 4.4.0
136 */
137 public function getAll(): array
138 {
139 return $this->query->getAll() ?? [];
140 }
141 }
142