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