PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / DonorDashboards / Profile.php
give / src / DonorDashboards Last commit date
Admin 4 years ago Exceptions 4 years ago Factories 4 years ago Helpers 4 months ago Pipeline 1 year ago Repositories 3 years ago Routes 2 weeks ago Tabs 9 months ago resources 4 months ago App.php 1 year ago Block.php 1 year ago Helpers.php 1 year ago Profile.php 1 year ago RequestHandler.php 5 months ago ServiceProvider.php 2 years ago Shortcode.php 2 years ago
Profile.php
202 lines
1 <?php
2
3 namespace Give\DonorDashboards;
4
5 use Exception;
6 use Give\DonorDashboards\Factories\DonorFactory;
7 use Give\DonorDashboards\Helpers as DonorDashboardHelpers;
8 use Give\DonorDashboards\Pipeline\DonorProfilePipeline;
9 use Give\DonorDashboards\Pipeline\Stages\UpdateDonorAddresses;
10 use Give\DonorDashboards\Pipeline\Stages\UpdateDonorAnonymousGiving;
11 use Give\DonorDashboards\Pipeline\Stages\UpdateDonorAvatar;
12 use Give\DonorDashboards\Pipeline\Stages\UpdateDonorCompany;
13 use Give\Donors\Models\Donor;
14 use Give\Framework\Support\Facades\DateTime\Temporal;
15
16 /**
17 * @since 2.10.0
18 */
19 class Profile
20 {
21
22 protected $donor;
23 protected $id;
24
25 public function __construct()
26 {
27 $donorId = DonorDashboardHelpers::getCurrentDonorId();
28 if ($donorId) {
29 $donorFactory = new DonorFactory;
30 $this->donor = $donorFactory->make($donorId);
31 }
32 }
33
34 /**
35 * Handles updating relevant profile fields in donor database and meta database
36 *
37 * @since 2.27.3 Use Donor model to update data used by webhooks addon to prevent multiple events creation
38 * @since 2.10.0
39 *
40 * @param object $data Object representing profile data to update
41 *
42 * @return array
43 *
44 * @throws Exception
45 */
46 public function update($data)
47 {
48 $donor = Donor::find($this->donor->id);
49
50 $donor->email = $data['primaryEmail'];
51 $donor->additionalEmails = $data['additionalEmails'] ?: [];
52
53 if ( ! empty($data['firstName']) && ! empty($data['lastName'])) {
54 $firstName = $data['firstName'];
55 $lastName = $data['lastName'];
56 $donor->name = "{$firstName} {$lastName}";
57 $donor->firstName = $firstName;
58 $donor->lastName = $lastName;
59 }
60
61 $donor->save();
62
63 $pipeline = (new DonorProfilePipeline)
64 ->pipe(new UpdateDonorCompany)
65 ->pipe(new UpdateDonorAvatar)
66 ->pipe(new UpdateDonorAddresses)
67 ->pipe(new UpdateDonorAnonymousGiving);
68
69 $pipeline->process(
70 [
71 'data' => $data,
72 'donor' => $this->donor,
73 ]
74 );
75
76 // Return updated donor profile data
77 return $this->getProfileData();
78 }
79
80 /**
81 * Return array of donor profile data
82 *
83 * @since 3.20.0 Replace strtotime() with Temporal::getDateTimestamp() to prevent the use of dates with wrong timezones
84 * @since 2.10.0
85 *
86 * @return array
87 */
88 public function getProfileData()
89 {
90 if ( ! $this->donor) {
91 return null;
92 }
93
94 $titlePrefix = Give()->donor_meta->get_meta($this->donor->id, '_give_donor_title_prefix', true);
95
96 return [
97 'name' => give_get_donor_name_with_title_prefixes($titlePrefix, $this->donor->name),
98 'firstName' => $this->donor->get_first_name(),
99 'lastName' => $this->donor->get_last_name(),
100 'emails' => $this->donor->emails,
101 'sinceLastDonation' => ! empty($this->donor->get_last_donation_date()) ? human_time_diff(
102 Temporal::getDateTimestamp($this->donor->get_last_donation_date())
103 ) : '',
104 'avatarUrl' => $this->getAvatarUrl(),
105 'avatarId' => $this->getAvatarId(),
106 'sinceCreated' => human_time_diff(Temporal::getDateTimestamp($this->donor->date_created)),
107 'company' => $this->donor->get_company_name(),
108 'initials' => $this->donor->get_donor_initals(),
109 'titlePrefix' => $this->getTitlePrefix(),
110 'addresses' => $this->donor->address,
111 'isAnonymous' => $this->donor->get_meta('_give_anonymous_donor', true) !== '0' ? '1' : '0',
112 ];
113 }
114
115 /**
116 * Returns profile model's donor id
117 *
118 * @since 2.10.0
119 * @return int
120 *
121 */
122 public function getId()
123 {
124 if ( ! $this->donor) {
125 return null;
126 }
127
128 return $this->donor->id;
129 }
130
131 /**
132 * Returns donor's title prefix
133 * *
134 * @since 2.10.0
135 * @return string
136 *
137 */
138 public function getTitlePrefix()
139 {
140 return Give()->donor_meta->get_meta($this->donor->id, '_give_donor_title_prefix', true);
141 }
142
143 /**
144 * Returns profile's avatar URL
145 * *
146 * @since 2.10.0
147 * @return string
148 *
149 */
150 public function getAvatarUrl()
151 {
152 $avatarId = $this->getAvatarId();
153 if ($avatarId) {
154 return wp_get_attachment_url($avatarId);
155 } else {
156 return give_validate_gravatar($this->donor->email) ? get_avatar_url($this->donor->email, ['size' => 140]
157 ) : null;
158 }
159 }
160
161 /**
162 * Returns profile's avatar media ID
163 * *
164 * @since 2.10.0
165 * @return int
166 *
167 */
168 public function getAvatarId()
169 {
170 return $this->donor->get_meta('_give_donor_avatar_id');
171 }
172
173 /**
174 * Returns profile's stored country, or global default if none is set
175 * *
176 * @since 2.10.0
177 * @return string
178 *
179 */
180 public function getCountry()
181 {
182 if ( ! $this->donor) {
183 return give_get_country();
184 }
185
186 $address = $this->donor->get_donor_address();
187 if ($address) {
188 return $address['country'];
189 } else {
190 return give_get_country();
191 }
192 }
193
194 /**
195 * @since 3.14.2
196 */
197 public function avatarBelongsToCurrentUser(?int $avatarId = null): bool
198 {
199 return (int)get_post_field("post_author", $avatarId ?? $this->getAvatarId()) === get_current_user_id();
200 }
201 }
202