PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.7.0
GiveWP – Donation Plugin and Fundraising Platform v4.7.0
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 10 months ago LoadDonationDetailsAssets.php 11 months ago LoadDonationsListTableAssets.php 11 months ago RegisterDonationEntity.php 11 months ago
LoadDonationAdminOptions.php
167 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 * @since 4.7.0 removed donors from the options
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 'isRecurringEnabled' => defined('GIVE_RECURRING_VERSION') ? GIVE_RECURRING_VERSION : null,
52 'admin' => $isAdmin ? [] : null,
53 'eventTicketsEnabled' => FeatureFlag::eventTickets(),
54 'isFeeRecoveryEnabled' => defined('GIVE_FEE_RECOVERY_VERSION'),
55 'mode' => give_is_test_mode() ? 'test' : 'live',
56 'gateways' => $this->getGateways(),
57 ];
58 }
59
60 /**
61 * Get states data with decoded HTML entities
62 *
63 * @since 4.6.0
64 */
65 private function getStatesData(): array
66 {
67 return [
68 'list' => $this->decodeHtmlEntities(give_states_list(), true),
69 'labels' => give_get_states_label(),
70 'noStatesCountries' => array_keys(give_no_states_country_list()),
71 'statesNotRequiredCountries' => array_keys(give_states_not_required_country_list()),
72 ];
73 }
74
75 /**
76 * Get campaigns with their forms using Campaign query builder
77 *
78 * @since 4.6.0
79 */
80 private function getCampaignsWithForms(): array
81 {
82 $campaignsWithForms = [];
83
84 $results = DB::table('give_campaigns', 'campaigns')
85 ->select(
86 ['campaigns.id', 'campaignId'],
87 ['campaigns.campaign_title', 'campaignTitle'],
88 ['campaigns.form_id', 'defaultFormId'],
89 ['posts.ID', 'formId'],
90 ['posts.post_title', 'formTitle']
91 )
92 ->leftJoin('give_campaign_forms', 'campaigns.id', 'campaign_forms.campaign_id', 'campaign_forms')
93 ->leftJoin('posts', 'campaign_forms.form_id', 'posts.ID', 'posts')
94 ->where('posts.post_type', 'give_forms')
95 ->orderBy('campaigns.id', 'DESC')
96 ->orderBy('posts.ID', 'DESC')
97 ->getAll(ARRAY_A);
98
99 foreach ($results as $row) {
100 [
101 'campaignId' => $campaignId,
102 'campaignTitle' => $campaignTitle,
103 'defaultFormId' => $defaultFormId,
104 'formId' => $formId,
105 'formTitle' => $formTitle
106 ] = $row;
107
108 if (!isset($campaignsWithForms[$campaignId])) {
109 $campaignsWithForms[$campaignId] = [
110 'title' => $campaignTitle,
111 'defaultFormId' => $defaultFormId,
112 'forms' => []
113 ];
114 }
115
116 if ($formId && $formTitle) {
117 $campaignsWithForms[$campaignId]['forms'][$formId] = $formTitle;
118 }
119 }
120
121 return $campaignsWithForms;
122 }
123
124 /**
125 * Decode HTML entities from an array of strings or nested arrays
126 *
127 * @since 4.6.0
128 */
129 private function decodeHtmlEntities(array $data, bool $isNested = false): array
130 {
131 if ($isNested) {
132 return array_map(function($nestedData) {
133 return $this->decodeHtmlEntities($nestedData);
134 }, $data);
135 }
136
137 return array_map(function($item) {
138 return html_entity_decode($item, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, 'UTF-8');
139 }, $data);
140 }
141
142 /**
143 * Get gateways
144 *
145 * @since 4.6.0
146 */
147 private function getGateways(): array
148 {
149 $enabledGateways = array_keys(give_get_enabled_payment_gateways());
150
151 $gateways = array_map(static function ($gatewayClass) use ($enabledGateways) {
152 /** @var PaymentGateway $gateway */
153 $gateway = give($gatewayClass);
154
155 return [
156 'id' => $gateway::id(),
157 'enabled' => in_array($gateway::id(), $enabledGateways, true),
158 'label' => $gateway->getName(),
159 'supportsSubscriptions' => $gateway->supportsSubscriptions(),
160 'supportsRefund' => $gateway->supportsRefund(),
161 ];
162 }, give()->gateways->getPaymentGateways());
163
164 return array_values($gateways);
165 }
166 }
167