PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.19.7
GiveWP – Donation Plugin and Fundraising Platform v2.19.7
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
208 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',
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 * @return Donor
79 */
80 public static function whereEmail($email)
81 {
82 return give()->donors->getByEmail($email);
83 }
84
85 /**
86 * @since 2.19.6
87 *
88 * @param int $userId
89 * @return Donor
90 */
91 public static function whereUserId($userId)
92 {
93 return give()->donors->getByWpUserId($userId);
94 }
95
96 /**
97 * @since 2.19.6
98 *
99 * @param array $attributes
100 *
101 * @return Donor
102 *
103 * @throws Exception|InvalidArgumentException
104 */
105 public static function create(array $attributes)
106 {
107 $donor = new static($attributes);
108
109 return give()->donors->insert($donor);
110 }
111
112 /**
113 * @since 2.19.6
114 *
115 * @return Donor
116 *
117 * @throws Exception|InvalidArgumentException
118 */
119 public function save()
120 {
121 if (!$this->id) {
122 return give()->donors->insert($this);
123 }
124
125 return give()->donors->update($this);
126 }
127
128 /**
129 * @since 2.19.6
130 *
131 * @throws Exception
132 */
133 public function delete()
134 {
135 return give()->donors->delete($this);
136 }
137
138 /**
139 * @since 2.19.6
140 *
141 * @return ModelQueryBuilder<Donation>
142 */
143 public function donations()
144 {
145 return give()->donations->queryByDonorId($this->id);
146 }
147
148 /**
149 * @since 2.19.6
150 *
151 * @return ModelQueryBuilder<Subscription>
152 */
153 public function subscriptions()
154 {
155 return give()->subscriptions->queryByDonorId($this->id);
156 }
157
158 /**
159 * @since 2.19.6
160 *
161 * @return int
162 */
163 public function totalDonations()
164 {
165 return give()->donations->getTotalDonationCountByDonorId($this->id);
166 }
167
168 /**
169 * @since 2.19.6
170 *
171 * @return int
172 */
173 public function totalAmountDonated()
174 {
175 return array_sum(array_column($this->donations, DonationMetaKeys::AMOUNT()->getKeyAsCamelCase()));
176 }
177
178 /**
179 * @since 2.19.6
180 *
181 * @return ModelQueryBuilder<Donor>
182 */
183 public static function query()
184 {
185 return give()->donors->prepareQuery();
186 }
187
188 /**
189 * @since 2.19.6
190 *
191 * @param object $object
192 * @return Donor
193 */
194 public static function fromQueryBuilderObject($object)
195 {
196 return DonorQueryData::fromObject($object)->toDonor();
197 }
198
199 /**
200 * @return ModelFactory<Donor>
201 */
202 public static function factory()
203 {
204 return new DonorFactory(static::class);
205 }
206
207 }
208