PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.20.0
GiveWP – Donation Plugin and Fundraising Platform v2.20.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 / Models / Donor.php
give / src / Donors / Models Last commit date
Donor.php 4 years ago
Donor.php
215 lines
1 <?php
2
3 namespace Give\Donors\Models;
4
5 use DateTime;
6 use Exception;
7 use Give\Donations\Models\Donation;
8 use Give\Donations\ValueObjects\DonationMetaKeys;
9 use Give\Donors\DataTransferObjects\DonorQueryData;
10 use Give\Donors\Factories\DonorFactory;
11 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
12 use Give\Framework\Models\Contracts\ModelCrud;
13 use Give\Framework\Models\Contracts\ModelHasFactory;
14 use Give\Framework\Models\Factories\ModelFactory;
15 use Give\Framework\Models\Model;
16 use Give\Framework\Models\ModelQueryBuilder;
17 use Give\Framework\Models\ValueObjects\Relationship;
18 use Give\Subscriptions\Models\Subscription;
19
20 /**
21 * Class Donor
22 *
23 * @since 2.19.6
24 *
25 * @property int $id
26 * @property int $userId
27 * @property DateTime $createdAt
28 * @property string $name
29 * @property string $prefix
30 * @property string $firstName
31 * @property string $lastName
32 * @property string $email
33 * @property string[] $additionalEmails
34 * @property Subscription[] $subscriptions
35 * @property Donation[] $donations
36 */
37 class Donor extends Model implements ModelCrud, ModelHasFactory
38 {
39 /**
40 * @inheritdoc
41 */
42 protected $properties = [
43 'id' => 'int',
44 'userId' => ['int', 0],
45 'createdAt' => DateTime::class,
46 'name' => 'string',
47 'firstName' => 'string',
48 'lastName' => 'string',
49 'email' => 'string',
50 'prefix' => 'string',
51 'additionalEmails' => 'array',
52 ];
53
54 /**
55 * @inheritdoc
56 */
57 protected $relationships = [
58 'donations' => Relationship::HAS_MANY,
59 'subscriptions' => Relationship::HAS_MANY,
60 ];
61
62 /**
63 * @since 2.19.6
64 *
65 * @param $id
66 *
67 * @return Donor
68 */
69 public static function find($id)
70 {
71 return give()->donors->getById($id);
72 }
73
74 /**
75 * @since 2.19.6
76 *
77 * @param string $email
78 *
79 * @return Donor
80 */
81 public static function whereEmail($email)
82 {
83 return give()->donors->getByEmail($email);
84 }
85
86 /**
87 * @since 2.19.6
88 *
89 * @param int $userId
90 *
91 * @return Donor
92 */
93 public static function whereUserId($userId)
94 {
95 return give()->donors->getByWpUserId($userId);
96 }
97
98 /**
99 * @since 2.20.0 return mutated model instance
100 * @since 2.19.6
101 *
102 * @param array $attributes
103 *
104 * @return Donor
105 *
106 * @throws Exception|InvalidArgumentException
107 */
108 public static function create(array $attributes)
109 {
110 $donor = new static($attributes);
111
112 give()->donors->insert($donor);
113
114 return $donor;
115 }
116
117 /**
118 * @since 2.20.0 mutate model and return void
119 * @since 2.19.6
120 *
121 * @return void
122 *
123 * @throws Exception|InvalidArgumentException
124 */
125 public function save()
126 {
127 if (!$this->id) {
128 give()->donors->insert($this);
129 } else {
130 give()->donors->update($this);
131 }
132 }
133
134 /**
135 * @since 2.19.6
136 *
137 * @throws Exception
138 */
139 public function delete()
140 {
141 return give()->donors->delete($this);
142 }
143
144 /**
145 * @since 2.19.6
146 *
147 * @return ModelQueryBuilder<Donation>
148 */
149 public function donations()
150 {
151 return give()->donations->queryByDonorId($this->id);
152 }
153
154 /**
155 * @since 2.19.6
156 *
157 * @return ModelQueryBuilder<Subscription>
158 */
159 public function subscriptions()
160 {
161 return give()->subscriptions->queryByDonorId($this->id);
162 }
163
164 /**
165 * @since 2.19.6
166 *
167 * @return int
168 */
169 public function totalDonations()
170 {
171 return give()->donations->getTotalDonationCountByDonorId($this->id);
172 }
173
174 /**
175 * @since 2.19.6
176 *
177 * @return int
178 */
179 public function totalAmountDonated()
180 {
181 return array_sum(array_column($this->donations, DonationMetaKeys::AMOUNT()->getKeyAsCamelCase()));
182 }
183
184 /**
185 * @since 2.19.6
186 *
187 * @return ModelQueryBuilder<Donor>
188 */
189 public static function query()
190 {
191 return give()->donors->prepareQuery();
192 }
193
194 /**
195 * @since 2.19.6
196 *
197 * @param object $object
198 *
199 * @return Donor
200 */
201 public static function fromQueryBuilderObject($object)
202 {
203 return DonorQueryData::fromObject($object)->toDonor();
204 }
205
206 /**
207 * @return ModelFactory<Donor>
208 */
209 public static function factory()
210 {
211 return new DonorFactory(static::class);
212 }
213
214 }
215