PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.8.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.8.1
4.16.9 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 All 255 releases
give / src / Donors / ServiceProvider.php

ServiceProvider.php in GiveWP – Donation Plugin and Fundraising Platform 4.16.8.1, at src/Donors/ServiceProvider.php

159 lines 4.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Donors;
4
5 use Give\DonationForms\Models\DonationForm;
6 use Give\Donors\Actions\CreateUserFromDonor;
7 use Give\Donors\Actions\LoadDonorAdminOptions;
8 use Give\Donors\Actions\SendDonorUserRegistrationNotification;
9 use Give\Donors\Actions\UpdateAdminDonorDetails;
10 use Give\Donors\CustomFields\Controllers\DonorDetailsController;
11 use Give\Donors\Exceptions\FailedDonorUserCreationException;
12 use Give\Donors\ListTable\DonorsListTable;
13 use Give\Donors\Migrations\AddPhoneColumn;
14 use Give\Donors\Models\Donor;
15 use Give\Donors\Repositories\DonorNotesRepository;
16 use Give\Donors\Repositories\DonorRepositoryProxy;
17 use Give\Framework\Migrations\MigrationsRegister;
18 use Give\Helpers\Hooks;
19 use Give\Log\Log;
20 use Give\ServiceProviders\ServiceProvider as ServiceProviderInterface;
21 use Give_Donor as LegacyDonor;
22
23 /**
24 * @since 2.19.6
25 */
26 class ServiceProvider implements ServiceProviderInterface
27 {
28 /**
29 * @inheritDoc
30 */
31 public function register()
32 {
33 give()->singleton('donors', DonorRepositoryProxy::class);
34 give()->singleton('donorNotes', DonorNotesRepository::class);
35 give()->singleton(DonorsListTable::class, function () {
36 $listTable = new DonorsListTable();
37 Hooks::doAction('givewp_donors_list_table', $listTable);
38
39 return $listTable;
40 });
41 }
42
43 /**
44 * @inheritDoc
45 *
46 * @since 4.14.0 move donor page registration to methods to defer conditionals and DB queries to appropriate hooks.
47 * @since 3.7.0 Register "AddPhoneColumn" migration and add the "give_admin_donor_details_updating" action
48 */
49 public function boot()
50 {
51 $this->registerDonorsAdminPage();
52
53 $this->addCustomFieldsToDonorDetails();
54 $this->enforceDonorsAsUsers();
55
56 give(MigrationsRegister::class)->addMigrations([
57 AddPhoneColumn::class,
58 ]);
59
60 Hooks::addAction('give_admin_donor_details_updating', UpdateAdminDonorDetails::class, '__invoke', 10, 2);
61
62 $this->loadDonorAdminOptions();
63 }
64
65 /**
66 * Register the donors admin page, deferring conditionals and DB queries to appropriate hooks.
67 *
68 * @since 4.14.0
69 */
70 private function registerDonorsAdminPage()
71 {
72 // Register new admin page if user hasn't chosen to use the legacy one
73 add_action('admin_menu', function () {
74 if ($this->shouldShowLegacyDonorsPage()) {
75 return;
76 }
77
78 give(DonorsAdminPage::class)->registerMenuItem();
79 }, 30);
80
81 // Render the "Switch to New View" button on the legacy donors page
82 add_action('admin_head', function () {
83 if (!DonorsAdminPage::isShowing()) {
84 return;
85 }
86
87 if (!$this->shouldShowLegacyDonorsPage()) {
88 return;
89 }
90
91 give(DonorsAdminPage::class)->renderReactSwitch();
92 });
93 }
94
95 /**
96 * @since 4.14.0
97 */
98 private function shouldShowLegacyDonorsPage(): bool
99 {
100 if (DonorsAdminPage::isShowingNewDetailsPage()) {
101 return false;
102 }
103
104 $userId = get_current_user_id();
105
106 return (bool) get_user_meta($userId, '_give_donors_archive_show_legacy', true);
107 }
108
109 /**
110 * @since 3.0.0
111 */
112 private function addCustomFieldsToDonorDetails()
113 {
114 add_action('give_donor_after_tables', static function (LegacyDonor $legacyDonor) {
115 /** @var Donor $donor */
116 $donor = Donor::find($legacyDonor->id);
117
118 echo (new DonorDetailsController())->show($donor);
119 });
120 }
121
122 /**
123 * Hook into the donor creation process to ensure that donors are also users.
124 * @since 3.2.0
125 */
126 protected function enforceDonorsAsUsers()
127 {
128 add_action('givewp_donate_controller_donor_created', function (Donor $donor, $formId) {
129 if (!$donor->userId) {
130 try {
131 give(CreateUserFromDonor::class)->__invoke($donor);
132
133 if (DonationForm::find($formId)->settings->registrationNotification) {
134 give(SendDonorUserRegistrationNotification::class)->__invoke($donor);
135 }
136 } catch (FailedDonorUserCreationException $e) {
137 Log::error($e->getLogMessage(), [
138 'donor' => $donor,
139 'previous' => $e->getPrevious(),
140 ]);
141 }
142 }
143 }, 10, 2);
144 }
145
146 /**
147 * @since 4.6.1 Move to admin_enqueue_scripts hook
148 * @since 4.4.0
149 */
150 private function loadDonorAdminOptions()
151 {
152 add_action('admin_enqueue_scripts', function () {
153 if (DonorsAdminPage::isShowingDetailsPage()) {
154 give(LoadDonorAdminOptions::class)();
155 }
156 });
157 }
158 }
159