PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.8
GiveWP – Donation Plugin and Fundraising Platform v4.16.8
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 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 / FormBuilder / Routes / RegisterFormBuilderPageRoute.php
give / src / FormBuilder / Routes Last commit date
CreateFormRoute.php 6 months ago EditFormRoute.php 1 year ago RegisterFormBuilderPageRoute.php 2 days ago RegisterFormBuilderRestRoutes.php 7 months ago
RegisterFormBuilderPageRoute.php
264 lines
1 <?php
2
3 namespace Give\FormBuilder\Routes;
4
5
6 use Give\Campaigns\Models\Campaign;
7 use Give\Framework\Permissions\Facades\UserPermissions;
8 use Give\FormBuilder\FormBuilderRouteBuilder;
9 use Give\FormBuilder\ViewModels\FormBuilderViewModel;
10 use Give\Framework\Views\View;
11 use Give\Helpers\Hooks;
12 use Give\Helpers\Language;
13 use Give\Log\Log;
14
15 use function wp_enqueue_style;
16
17 /**
18 * Add form builder page route and scripts
19 */
20 class RegisterFormBuilderPageRoute
21 {
22 /**
23 * Use add_submenu_page to register page within WP admin
24 *
25 * @since 4.14.0 update permission capability to use facade
26 * @since 4.3.2 update capability to edit_give_forms
27 * @since 4.0.0 set parent slug to empty string
28 * @since 3.0.0
29 *
30 * @return void
31 */
32 public function __invoke()
33 {
34 add_submenu_page(
35 '', // do not display in menu, just register page
36 'Visual Donation Form Builder', // ignored
37 'Add Form', // ignored
38 UserPermissions::donationForms()->editCap(),
39 FormBuilderRouteBuilder::SLUG,
40 [$this, 'renderPage'],
41 1
42 );
43
44 add_action("admin_print_styles", function () {
45 if (FormBuilderRouteBuilder::isRoute()) {
46 wp_enqueue_style('givewp-design-system-foundation');
47
48 $this->loadGutenbergScripts();
49
50 wp_enqueue_style(
51 '@givewp/form-builder/style-app',
52 GIVE_PLUGIN_URL . 'build/formBuilderApp.css'
53 );
54
55 wp_enqueue_style(
56 'givewp-form-builder-admin-styles',
57 GIVE_PLUGIN_URL . 'src/FormBuilder/resources/css/admin-form-builder.css'
58 );
59 }
60 });
61 }
62
63 /**
64 * Render page with scripts
65 *
66 * @since 4.16.8 Read the query args without assuming they are set.
67 * @since 3.22.0 Add locale support
68 * @since 3.1.0 set translations for scripts
69 * @since 3.0.0
70 *
71 * @return void
72 */
73 public function renderPage()
74 {
75 $formBuilderViewModel = new FormBuilderViewModel();
76
77 /*
78 * `abs()` raises a TypeError on an array or a non-numeric string, so the id cannot be read
79 * without checking its shape first. `absint()` is what the redirect guarding this route
80 * already uses, and anything it cannot make a number of falls to the check below.
81 */
82 $donationFormIdParam = $_GET['donationFormID'] ?? null;
83 $donationFormId = is_scalar($donationFormIdParam) ? absint($donationFormIdParam) : 0;
84
85 // validate form exists before proceeding
86 // TODO: improve on this validation
87 if (!get_post($donationFormId)) {
88 wp_die(__('Donation form does not exist.', 'give'));
89 }
90
91 $locale = give_clean($_GET['locale'] ?? '');
92 Language::switchToLocale($locale);
93
94 wp_enqueue_style(
95 '@givewp/form-builder/registrars',
96 GIVE_PLUGIN_URL . 'build/formBuilderRegistrars.css'
97 );
98
99 $registrarsScriptHandle = '@givewp/form-builder/registrars';
100 wp_enqueue_script(
101 $registrarsScriptHandle,
102 $formBuilderViewModel->jsPathToRegistrars(),
103 $this->getRegisteredFormBuilderJsDependencies(
104 $formBuilderViewModel->jsRegistrarsDependencies()
105 ),
106 GIVE_VERSION,
107 true
108 );
109
110 Language::setScriptTranslations($registrarsScriptHandle);
111
112 /**
113 * @since 3.1.0 set translations for scripts
114 * @since 3.0.0
115 * Using `wp_enqueue_script` instead of `new EnqueueScript` for more control over dependencies.
116 * The `EnqueueScript` class discovers the dependencies from the associated `asset.php` file,
117 * which might include dependencies that are not supported in some version of WordPress.
118 * @link https://github.com/impress-org/givewp-next-gen/pull/181#discussion_r1202686731
119 */
120 Hooks::doAction('givewp_form_builder_enqueue_scripts');
121
122 $formBuilderScriptPath = '@givewp/form-builder/script';
123 wp_enqueue_script(
124 '@givewp/form-builder/script',
125 $formBuilderViewModel->jsPathFromPluginRoot(),
126 $this->getRegisteredFormBuilderJsDependencies(
127 $formBuilderViewModel->jsDependencies()
128 ),
129 GIVE_VERSION,
130 true
131 );
132
133 Language::setScriptTranslations($formBuilderScriptPath);
134
135 wp_add_inline_script(
136 '@givewp/form-builder/script',
137 'window.giveStorageData = ' . json_encode($formBuilderViewModel->storageData($donationFormId)) . ';',
138 'before'
139 );
140
141 wp_localize_script('@givewp/form-builder/script', 'onboardingTourData', [
142 'actionUrl' => admin_url('admin-ajax.php?action=givewp_tour_completed'),
143 'autoStartDesignTour' => !get_user_meta(get_current_user_id(), 'givewp-form-builder-design-tour-completed', true),
144 'autoStartSchemaTour' => !get_user_meta(get_current_user_id(), 'givewp-form-builder-schema-tour-completed', true),
145 ]);
146
147 $migratedFormId = give_get_meta($donationFormId, 'migratedFormId', true);
148 $transferredFormId = give_get_meta($donationFormId, 'transferredFormId', true);
149
150 $showTransferModal = isset($_GET['showTransfer']) && (bool)$migratedFormId && !(bool)$transferredFormId;
151
152 wp_localize_script('@givewp/form-builder/script', 'migrationOnboardingData', [
153 'pluginUrl' => GIVE_PLUGIN_URL,
154 'formId' => $donationFormId,
155 'migrationActionUrl' => admin_url('admin-ajax.php?action=givewp_migration_hide_notice'),
156 'transferActionUrl' => admin_url('admin-ajax.php?action=givewp_transfer_hide_notice'),
157 'apiRoot' => esc_url_raw(rest_url('give-api/v2/admin/forms')),
158 'apiNonce' => wp_create_nonce('wp_rest'),
159 'isMigratedForm' => $migratedFormId,
160 'isTransferredForm' => $transferredFormId,
161 'showUpgradeDialog' => !$showTransferModal && (bool)$migratedFormId && !(bool)give_get_meta(
162 $donationFormId,
163 'givewp-form-builder-migration-hide-notice',
164 true
165 ),
166 'showTransferModal' => $showTransferModal,
167 'transferShowNotice' => (bool)$migratedFormId && !(bool)$transferredFormId && !(bool)give_get_meta(
168 $donationFormId,
169 'givewp-form-builder-transfer-hide-notice',
170 true
171 ),
172 ]);
173
174 wp_localize_script('@givewp/form-builder/script', 'goalNotificationData', [
175 'actionUrl' => admin_url('admin-ajax.php?action=givewp_goal_hide_notice'),
176 'isDismissed' => get_user_meta(get_current_user_id(), 'givewp-goal-notice-dismissed', true),
177 ]);
178
179 /**
180 * @since 3.16.2
181 */
182 wp_localize_script('@givewp/form-builder/script', 'additionalPaymentGatewaysNotificationData', [
183 'actionUrl' => admin_url('admin-ajax.php?action=givewp_additional_payment_gateways_hide_notice'),
184 'isDismissed' => get_user_meta(get_current_user_id(), 'givewp-additional-payment-gateways-notice-dismissed', true),
185 ]);
186
187 /**
188 * @since 4.14.2 updated logic with filter
189 * @since 4.0.0
190 */
191 $campaignUrl = '';
192 if ($campaign = Campaign::findByFormId($donationFormId)) {
193 $campaignUrl = admin_url('edit.php?post_type=give_forms&page=give-campaigns&id=' . $campaign->id);
194 }
195
196 /**
197 * Filters the campaign URL displayed in the form builder header.
198 * Allows add-ons (e.g., P2P) to provide their own campaign URL when
199 * the form belongs to a non-core campaign type.
200 *
201 * @since 4.14.2
202 *
203 * @param string $campaignUrl - The campaign admin URL, or empty string if not found.
204 * @param int $donationFormId - The donation form ID being edited.
205 */
206 $campaignUrl = apply_filters('givewp_form_builder_campaign_url', $campaignUrl, $donationFormId);
207
208 if ($campaignUrl) {
209 wp_localize_script('@givewp/form-builder/script', 'headerContainer', [
210 'campaignUrl' => $campaignUrl,
211 ]);
212 }
213
214
215 View::render('FormBuilder.admin-form-builder');
216 }
217
218 /**
219 * Load Gutenberg scripts and styles from core.
220 *
221 * @see https://github.com/Automattic/isolated-block-editor/blob/trunk/examples/wordpress-php/iso-gutenberg.php
222 *
223 * @since 3.0.0
224 */
225 public function loadGutenbergScripts()
226 {
227 wp_enqueue_editor();
228
229 // Gutenberg scripts
230 wp_enqueue_script('wp-block-library');
231 wp_enqueue_script('wp-format-library');
232 wp_enqueue_script('wp-editor');
233
234 // Gutenberg styles
235 wp_enqueue_style('wp-edit-post');
236 wp_enqueue_style('wp-format-library');
237 }
238
239 /**
240 * Loop through the form builder js dependencies and check if they are registered before adding to enqueue_script.
241 *
242 * @since 3.0.0
243 */
244 protected function getRegisteredFormBuilderJsDependencies(array $formBuilderJsDependencies): array
245 {
246 $scripts = wp_scripts();
247
248 return array_filter($formBuilderJsDependencies, static function ($dependency) use ($scripts) {
249 $isRegistered = $scripts->query($dependency, 'registered');
250
251 if (!$isRegistered) {
252 Log::error(
253 sprintf(
254 'Script %s is not registered. Please check the script dependencies.',
255 $dependency
256 )
257 );
258 }
259
260 return $isRegistered;
261 });
262 }
263 }
264