PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.4
GiveWP – Donation Plugin and Fundraising Platform v3.19.4
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 / Onboarding / Routes / FeaturesRoute.php
give / src / Onboarding / Routes Last commit date
AddonsRoute.php 4 years ago CurrencyRoute.php 3 years ago FeaturesRoute.php 1 year ago FormRoute.php 4 years ago LocationRoute.php 4 years ago SettingsRoute.php 4 years ago
FeaturesRoute.php
184 lines
1 <?php
2
3 namespace Give\Onboarding\Routes;
4
5 use Give\API\RestRoute;
6 use Give\DonationForms\Models\DonationForm;
7 use Give\Framework\Exceptions\Primitives\Exception;
8 use Give\Onboarding\BlockFactory;
9 use Give\Onboarding\SettingsRepository;
10 use Give\Onboarding\SettingsRepositoryFactory;
11 use WP_REST_Request;
12
13 /**
14 * @since 2.8.0
15 */
16 class FeaturesRoute implements RestRoute
17 {
18
19 /** @var string */
20 protected $endpoint = 'onboarding/settings/features';
21
22 /**
23 * @var SettingsRepository
24 */
25 protected $settingsRepository;
26
27 /**
28 * @since 2.8.0
29 *
30 * @param SettingsRepositoryFactory $settingsRepositoryFactory
31 */
32 public function __construct(SettingsRepositoryFactory $settingsRepositoryFactory)
33 {
34 $this->settingsRepository = $settingsRepositoryFactory->make('give_onboarding');
35 }
36
37 /**
38 * @inheritDoc
39 */
40 public function registerRoute(): void
41 {
42 register_rest_route(
43 'give-api/v2',
44 $this->endpoint,
45 [
46 [
47 'methods' => 'POST',
48 'callback' => [$this, 'handleRequest'],
49 'permission_callback' => function () {
50 return current_user_can('manage_options');
51 },
52 'args' => [
53 'value' => [
54 'type' => 'string',
55 'required' => true,
56 // 'validate_callback' => [ $this, 'validateSetting' ],
57 'sanitize_callback' => 'sanitize_text_field',
58 ],
59 ],
60 ],
61 'schema' => [$this, 'getSchema'],
62 ]
63 );
64 }
65
66 /**
67 * @since 2.8.0
68 * @return array
69 *
70 */
71 public function getSchema(): array
72 {
73 return [
74 // This tells the spec of JSON Schema we are using which is draft 4.
75 '$schema' => 'http://json-schema.org/draft-04/schema#',
76 // The title property marks the identity of the resource.
77 'title' => 'onboarding',
78 'type' => 'object',
79 // In JSON Schema you can specify object properties in the properties attribute.
80 'properties' => [
81 'setting' => [
82 'description' => esc_html__('The reference name for the setting being updated.', 'give'),
83 'type' => 'string',
84 ],
85 'value' => [
86 'description' => esc_html__('The value of the setting being updated.', 'give'),
87 'type' => 'string',
88 ],
89 ],
90 ];
91 }
92
93 /**
94 * @since 3.15.0 Handle v3 form features.
95 * @since 2.8.0
96 *
97 * @param WP_REST_Request $request
98 *
99 * @return array
100 *
101 * @throws Exception
102 */
103 public function handleRequest(WP_REST_Request $request)
104 {
105 $features = json_decode($request->get_param('value'));
106
107 $formID = $this->settingsRepository->get('form_id');
108
109 $this->handleFormFeatures($formID, $features);
110
111 return [
112 'data' => [
113 'setting' => 'features',
114 'value' => $features,
115 'formID' => $formID,
116 ],
117 ];
118 }
119
120 /**
121 * @since 3.15.0 Update the v3 form features based on Wizard settings.
122 *
123 * @param $formID
124 * @param $features
125 *
126 * @return void
127 * @throws Exception
128 */
129 public function handleFormFeatures($formID, $features): void
130 {
131 $donationForm = DonationForm::find($formID);
132
133 if (!$donationForm) {
134 return;
135 }
136
137 // Donation Goal
138 $donationForm->settings->enableDonationGoal = in_array('donation-goal', $features, true);
139
140 // Offline Donations
141 $gateways = give_get_option('gateways_v3', []);
142 if(in_array('offline-donations', $features, true)) {
143 $gateways['offline'] = 1;
144 } else {
145 unset($gateways['offline']);
146 }
147 give_update_option('gateways_v3', $gateways);
148
149 // Donation Comment
150 $commentBlockExists = $donationForm->blocks->findByName('givewp/donor-comments');
151 if (!in_array('donation-comments', $features, true) ) {
152 $donationForm->blocks->remove('givewp/donor-comments');
153 } elseif (!$commentBlockExists) {
154 $donationForm->blocks->insertAfter('givewp/email', BlockFactory::donorComments());
155 }
156
157 // Terms and Conditions
158 $termsBlockExists = $donationForm->blocks->findByName('givewp/terms-and-conditions');
159 if (!in_array('terms-conditions', $features, true)) {
160 $donationForm->blocks->remove('givewp/terms-and-conditions');
161 } elseif (!$termsBlockExists) {
162 $donationForm->blocks->insertBefore('givewp/payment-gateways', BlockFactory::termsAndConditions());
163 }
164
165 // Anonymous Donations
166 $anonymousBlockExists = $donationForm->blocks->findByName('givewp/anonymous');
167 if (!in_array('anonymous-donations', $features, true)) {
168 $donationForm->blocks->remove('givewp/anonymous');
169 } elseif (!$anonymousBlockExists) {
170 $donationForm->blocks->insertAfter('givewp/email', BlockFactory::anonymousDonations());
171 }
172
173 // Company Donations
174 $companyBlockExists = $donationForm->blocks->findByName('givewp/company');
175 if (!in_array('company-donations', $features, true)) {
176 $donationForm->blocks->remove('givewp/company');
177 } elseif (!$companyBlockExists) {
178 $donationForm->blocks->insertAfter('givewp/email', BlockFactory::company());
179 }
180
181 $donationForm->save();
182 }
183 }
184