PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 3.5.1
GiveWP – Donation Plugin and Fundraising Platform v3.5.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 2.31.0 2.31.1 All 253 releases
give / src / Donations / ServiceProvider.php
ServiceProvider.php
131 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Donations;
4
5 use Give\Donations\CustomFields\Controllers\DonationDetailsController;
6 use Give\Donations\LegacyListeners\ClearDonationPostCache;
7 use Give\Donations\LegacyListeners\DispatchDonationNoteEmailNotification;
8 use Give\Donations\LegacyListeners\DispatchGiveInsertPayment;
9 use Give\Donations\LegacyListeners\DispatchGivePreInsertPayment;
10 use Give\Donations\LegacyListeners\DispatchGiveRecurringAddSubscriptionPaymentAndRecordPayment;
11 use Give\Donations\LegacyListeners\DispatchGiveUpdatePaymentStatus;
12 use Give\Donations\LegacyListeners\InsertSequentialId;
13 use Give\Donations\LegacyListeners\RemoveSequentialId;
14 use Give\Donations\LegacyListeners\UpdateDonorPaymentIds;
15 use Give\Donations\ListTable\DonationsListTable;
16 use Give\Donations\Migrations\AddMissingDonorIdToDonationComments;
17 use Give\Donations\Migrations\MoveDonationCommentToDonationMetaTable;
18 use Give\Donations\Migrations\SetAutomaticFormattingOption;
19 use Give\Donations\Models\Donation;
20 use Give\Donations\Repositories\DonationNotesRepository;
21 use Give\Donations\Repositories\DonationRepository;
22 use Give\Framework\Migrations\MigrationsRegister;
23 use Give\Helpers\Hooks;
24 use Give\ServiceProviders\ServiceProvider as ServiceProviderInterface;
25
26 class ServiceProvider implements ServiceProviderInterface
27 {
28 /**
29 * @inheritDoc
30 */
31 public function register()
32 {
33 give()->singleton('donations', DonationRepository::class);
34 give()->singleton('donationNotes', DonationNotesRepository::class);
35 give()->singleton(DonationsListTable::class, function () {
36 $listTable = new DonationsListTable();
37 Hooks::doAction('givewp_donations_list_table', $listTable);
38
39 return $listTable;
40 });
41 }
42
43 /**
44 * @inheritDoc
45 */
46 public function boot()
47 {
48 $this->bootLegacyListeners();
49 $this->registerDonationsAdminPage();
50 $this->addCustomFieldsToDonationDetails();
51
52 give(MigrationsRegister::class)->addMigrations([
53 AddMissingDonorIdToDonationComments::class,
54 SetAutomaticFormattingOption::class,
55 MoveDonationCommentToDonationMetaTable::class,
56 ]);
57 }
58
59 /**
60 * Legacy Listeners
61 * @since 2.25.0 Call ClearDonationPostCache on the "givewp_donation_updated" hook
62 * @since 2.24.0 Remove UpdateSequentialId from "givewp_donation_updated" action hook.
63 * @since 2.19.6
64 */
65 private function bootLegacyListeners()
66 {
67 Hooks::addAction('givewp_donation_creating', DispatchGivePreInsertPayment::class);
68
69 add_action('givewp_donation_created', static function (Donation $donation) {
70 (new InsertSequentialId())($donation);
71 (new DispatchGiveInsertPayment())($donation);
72 (new UpdateDonorPaymentIds())($donation);
73
74 if ($donation->subscriptionId && $donation->type->isRenewal()) {
75 (new DispatchGiveRecurringAddSubscriptionPaymentAndRecordPayment())($donation);
76 }
77
78 /**
79 * @notice
80 * Anytime we call give_update_payment_status the donor purchase_value and purchase_count get affected.
81 * We are doing this in the gateway api and in many other places.
82 * The listener below matches the functionality but the count seems to be overwritten elsewhere.
83 * Leaving this commented out until resolved or needed.
84 */
85 //Call::invoke(UpdateDonorPurchaseValueAndCount::class, $donation);
86 });
87
88 add_action('givewp_donation_updated', function (Donation $donation) {
89 (new ClearDonationPostCache())($donation);
90 (new DispatchGiveUpdatePaymentStatus())($donation);
91 });
92
93 Hooks::addAction('givewp_donation_deleted', RemoveSequentialId::class);
94
95 add_action('givewp_donation_note_created', static function ($donationNote) {
96 if ($donationNote->type->isDonor()) {
97 (new DispatchDonationNoteEmailNotification())($donationNote);
98 }
99 });
100 }
101
102 /**
103 * Donations Admin page
104 *
105 * @since 2.20.0
106 */
107 private function registerDonationsAdminPage()
108 {
109 $userId = get_current_user_id();
110 $showLegacy = get_user_meta($userId, '_give_donations_archive_show_legacy', true);
111 // only register new admin page if user hasn't chosen to use the old one
112 if (empty($showLegacy)) {
113 Hooks::addAction('admin_menu', DonationsAdminPage::class, 'registerMenuItem', 20);
114
115 if (DonationsAdminPage::isShowing()) {
116 Hooks::addAction('admin_enqueue_scripts', DonationsAdminPage::class, 'loadScripts');
117 }
118 }
119 }
120
121 /**
122 * @since 3.0.0
123 */
124 private function addCustomFieldsToDonationDetails()
125 {
126 add_action('give_view_donation_details_billing_after', static function ($donationId) {
127 echo (new DonationDetailsController())->show($donationId);
128 });
129 }
130 }
131