PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.6.1
GiveWP – Donation Plugin and Fundraising Platform v4.6.1
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 / Donations / Actions / LoadDonationAdminOptions.php
give / src / Donations / Actions Last commit date
GeneratePurchaseKey.php 4 years ago LoadDonationAdminOptions.php 11 months ago LoadDonationDetailsAssets.php 11 months ago LoadDonationsListTableAssets.php 11 months ago RegisterDonationEntity.php 11 months ago
LoadDonationAdminOptions.php
193 lines
1 <?php
2
3 namespace Give\Donations\Actions;
4
5 use Give\API\REST\V3\Routes\Donations\ValueObjects\DonationRoute;
6 use Give\Donations\ValueObjects\DonationStatus;
7 use Give\Helpers\IntlTelInput;
8 use Give\BetaFeatures\Facades\FeatureFlag;
9 use Give\Framework\Database\DB;
10 use Give\Framework\PaymentGateways\PaymentGateway;
11
12 /**
13 * The purpose of this action is to have a centralized place for localizing options used on many different places
14 * by donation scripts (list tables, blocks, etc.)
15 *
16 * @since 4.6.1 Rename to LoadDonationAdminOptions
17 * @since 4.6.0
18 */
19 class LoadDonationAdminOptions
20 {
21 public function __invoke()
22 {
23 wp_register_script('give-donation-options', false);
24 wp_localize_script('give-donation-options', 'GiveDonationOptions', $this->getDonationOptions());
25 wp_enqueue_script('give-donation-options');
26 }
27
28 /**
29 * Get all donation options for localization
30 *
31 * @return array
32 * @since 4.6.0
33 */
34 private function getDonationOptions(): array
35 {
36 $isAdmin = is_admin();
37
38 return [
39 'isAdmin' => $isAdmin,
40 'adminUrl' => admin_url(),
41 'apiRoot' => rest_url(DonationRoute::NAMESPACE),
42 'apiNonce' => wp_create_nonce('wp_rest'),
43 'donationsAdminUrl' => admin_url('edit.php?post_type=give_forms&page=give-payment-history'),
44 'currency' => give_get_currency(),
45 'intlTelInputSettings' => IntlTelInput::getSettings(),
46 'nameTitlePrefixes' => give_get_option('title_prefixes', array_values(give_get_default_title_prefixes())),
47 'countries' => $this->decodeHtmlEntities(give_get_country_list()),
48 'states' => $this->getStatesData(),
49 'donationStatuses' => DonationStatus::labels(),
50 'campaignsWithForms' => $this->getCampaignsWithForms(),
51 'donors' => $this->getDonors(),
52 'isRecurringEnabled' => defined('GIVE_RECURRING_VERSION') ? GIVE_RECURRING_VERSION : null,
53 'admin' => $isAdmin ? [] : null,
54 'eventTicketsEnabled' => FeatureFlag::eventTickets(),
55 'isFeeRecoveryEnabled' => defined('GIVE_FEE_RECOVERY_VERSION'),
56 'mode' => give_is_test_mode() ? 'test' : 'live',
57 'gateways' => $this->getGateways(),
58 ];
59 }
60
61 /**
62 * Get states data with decoded HTML entities
63 *
64 * @since 4.6.0
65 */
66 private function getStatesData(): array
67 {
68 return [
69 'list' => $this->decodeHtmlEntities(give_states_list(), true),
70 'labels' => give_get_states_label(),
71 'noStatesCountries' => array_keys(give_no_states_country_list()),
72 'statesNotRequiredCountries' => array_keys(give_states_not_required_country_list()),
73 ];
74 }
75
76 /**
77 * Get campaigns with their forms using Campaign query builder
78 *
79 * @since 4.6.0
80 */
81 private function getCampaignsWithForms(): array
82 {
83 $campaignsWithForms = [];
84
85 $results = DB::table('give_campaigns', 'campaigns')
86 ->select(
87 ['campaigns.id', 'campaignId'],
88 ['campaigns.campaign_title', 'campaignTitle'],
89 ['campaigns.form_id', 'defaultFormId'],
90 ['posts.ID', 'formId'],
91 ['posts.post_title', 'formTitle']
92 )
93 ->leftJoin('give_campaign_forms', 'campaigns.id', 'campaign_forms.campaign_id', 'campaign_forms')
94 ->leftJoin('posts', 'campaign_forms.form_id', 'posts.ID', 'posts')
95 ->where('posts.post_type', 'give_forms')
96 ->orderBy('campaigns.id', 'DESC')
97 ->orderBy('posts.ID', 'DESC')
98 ->getAll(ARRAY_A);
99
100 foreach ($results as $row) {
101 [
102 'campaignId' => $campaignId,
103 'campaignTitle' => $campaignTitle,
104 'defaultFormId' => $defaultFormId,
105 'formId' => $formId,
106 'formTitle' => $formTitle
107 ] = $row;
108
109 if (!isset($campaignsWithForms[$campaignId])) {
110 $campaignsWithForms[$campaignId] = [
111 'title' => $campaignTitle,
112 'defaultFormId' => $defaultFormId,
113 'forms' => []
114 ];
115 }
116
117 if ($formId && $formTitle) {
118 $campaignsWithForms[$campaignId]['forms'][$formId] = $formTitle;
119 }
120 }
121
122 return $campaignsWithForms;
123 }
124
125 /**
126 * Decode HTML entities from an array of strings or nested arrays
127 *
128 * @since 4.6.0
129 */
130 private function decodeHtmlEntities(array $data, bool $isNested = false): array
131 {
132 if ($isNested) {
133 return array_map(function($nestedData) {
134 return $this->decodeHtmlEntities($nestedData);
135 }, $data);
136 }
137
138 return array_map(function($item) {
139 return html_entity_decode($item, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, 'UTF-8');
140 }, $data);
141 }
142
143 /**
144 * Get donor ids with their names
145 *
146 * @since 4.6.0
147 */
148 private function getDonors(): array
149 {
150 $results = DB::table('give_donors', 'donors')
151 ->select(
152 ['donors.id', 'donorId'],
153 ['donors.name', 'donorName'],
154 ['donors.email', 'donorEmail'],
155 )
156 ->orderBy('donors.id', 'DESC')
157 ->getAll(ARRAY_A);
158
159 $donors = [];
160
161 foreach ($results as $row) {
162 $donors[$row['donorId']] = $row['donorName'] . ' (' . $row['donorEmail'] . ')';
163 }
164
165 return $donors;
166 }
167
168 /**
169 * Get gateways
170 *
171 * @since 4.6.0
172 */
173 private function getGateways(): array
174 {
175 $enabledGateways = array_keys(give_get_enabled_payment_gateways());
176
177 $gateways = array_map(static function ($gatewayClass) use ($enabledGateways) {
178 /** @var PaymentGateway $gateway */
179 $gateway = give($gatewayClass);
180
181 return [
182 'id' => $gateway::id(),
183 'enabled' => in_array($gateway::id(), $enabledGateways, true),
184 'label' => $gateway->getName(),
185 'supportsSubscriptions' => $gateway->supportsSubscriptions(),
186 'supportsRefund' => $gateway->supportsRefund(),
187 ];
188 }, give()->gateways->getPaymentGateways());
189
190 return array_values($gateways);
191 }
192 }
193