PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / ServiceProvider.php
give / src / Donors Last commit date
Actions 7 months ago CustomFields 1 year ago DataTransferObjects 1 year ago Endpoints 5 months ago Exceptions 2 years ago Factories 1 year ago ListTable 7 months ago Migrations 1 year ago Models 1 year ago Repositories 8 months ago ValueObjects 9 months ago resources 5 months ago DonorStatisticsQuery.php 9 months ago DonorsAdminPage.php 5 months ago DonorsQuery.php 5 months ago ServiceProvider.php 5 months ago
ServiceProvider.php
159 lines
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