PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.8.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.8.1
4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 All 254 releases
give / src / Subscriptions / SubscriptionQuery.php

SubscriptionQuery.php in GiveWP – Donation Plugin and Fundraising Platform 4.16.8.1, at src/Subscriptions/SubscriptionQuery.php

188 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Subscriptions;
4
5 use Give\Donations\ValueObjects\DonationMetaKeys;
6 use Give\Donors\ValueObjects\DonorMetaKeys;
7 use Give\Framework\Models\ModelQueryBuilder;
8 use Give\Framework\QueryBuilder\JoinQueryBuilder;
9 use Give\Subscriptions\Models\Subscription;
10
11 /**
12 * @since 4.8.0
13 */
14 class SubscriptionQuery
15 {
16 /**
17 * @var ModelQueryBuilder<Subscription>
18 */
19 protected $query;
20
21 /**
22 * @since 4.8.0
23 */
24 public function __construct()
25 {
26 $this->query = Subscription::query();
27 }
28
29 /**
30 * Clone the query with all current conditions applied
31 *
32 * @since 4.8.0
33 */
34 public function clone(): self
35 {
36 $cloned = new self();
37
38 // Copy the internal query state by cloning the ModelQueryBuilder
39 $cloned->query = clone $this->query;
40
41 return $cloned;
42 }
43
44 /**
45 * Delegates methods not defined locally to the underlying query.
46 *
47 * @since 4.8.0
48 *
49 * @return mixed
50 */
51 public function __call(string $method, array $args)
52 {
53 if (method_exists($this, $method)) {
54 return $this->$method(...$args);
55 }
56
57 return $this->query->$method(...$args);
58 }
59
60 /**
61 * @since 4.8.0
62 */
63 public function selectDonorNames(): self
64 {
65 $this->query->attachMeta(
66 'give_donormeta',
67 'customer_id',
68 'donor_id',
69 [DonorMetaKeys::FIRST_NAME, 'firstName'],
70 [DonorMetaKeys::LAST_NAME, 'lastName']
71 );
72
73 return $this;
74 }
75
76 /**
77 * @since 4.8.0
78 */
79 public function whereCampaignId(int $campaignId): self
80 {
81 $this->query->join(function (JoinQueryBuilder $builder) use ($campaignId) {
82 $builder->innerJoin('give_donationmeta', 'donationMetaCampaignId')
83 ->on('donationMetaCampaignId.meta_key', DonationMetaKeys::CAMPAIGN_ID, true)
84 ->andOn('donationMetaCampaignId.meta_value', $campaignId, true)
85 ->andOn('donationMetaCampaignId.donation_id', 'parent_payment_id');
86 });
87
88 return $this;
89 }
90
91 /**
92 * @since 4.8.0
93 */
94 public function excludeAnonymousDonors(): self
95 {
96 $this->query->join(function (JoinQueryBuilder $builder) {
97 $builder->innerJoin('give_donationmeta', 'donationMetaAnonymous')
98 ->on('donationMetaAnonymous.meta_key', DonationMetaKeys::ANONYMOUS, true)
99 ->andOn('donationMetaAnonymous.meta_value', '0')
100 ->andOn('donationMetaAnonymous.donation_id', 'parent_payment_id');
101 });
102
103 return $this;
104 }
105
106 /**
107 * @since 4.8.0
108 */
109 public function whereDonorId(int $donorId): self
110 {
111 $this->query->where('customer_id', $donorId);
112
113 return $this;
114 }
115
116 /**
117 * @since 4.8.0
118 */
119 public function whereMode(string $mode): self
120 {
121 $this->query->where('payment_mode', $mode);
122
123 return $this;
124 }
125
126 /**
127 * @since 4.8.0
128 *
129 * @param $status string|array
130 */
131 public function whereStatus($status): self
132 {
133 if (is_array($status)) {
134 $this->query->whereIn('status', $status);
135 } else {
136 $this->query->where('status', $status);
137 }
138
139 return $this;
140 }
141
142 /**
143 * @since 4.8.0
144 */
145 public function limit(int $limit): self
146 {
147 $this->query->limit($limit);
148
149 return $this;
150 }
151
152 /**
153 * @since 4.8.0
154 */
155 public function offset(int $offset): self
156 {
157 $this->query->offset($offset);
158
159 return $this;
160 }
161
162 /**
163 * @since 4.8.0
164 */
165 public function orderBy(string $column, string $direction = 'ASC'): self
166 {
167 $this->query->orderBy($column, $direction);
168
169 return $this;
170 }
171
172 /**
173 * @since 4.8.0
174 */
175 public function getAll(): array
176 {
177 return $this->query->getAll() ?? [];
178 }
179
180 /**
181 * @since 4.8.0
182 */
183 public function count(): int
184 {
185 return $this->query->count();
186 }
187 }
188