PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 4 months ago EditFormRoute.php 1 year ago RegisterFormBuilderPageRoute.php 4 months ago RegisterFormBuilderRestRoutes.php 5 months ago
RegisterFormBuilderPageRoute.php
257 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 3.22.0 Add locale support
67 * @since 3.1.0 set translations for scripts
68 * @since 3.0.0
69 *
70 * @return void
71 */
72 public function renderPage()
73 {
74 $formBuilderViewModel = new FormBuilderViewModel();
75
76 $donationFormId = abs($_GET['donationFormID']);
77
78 // validate form exists before proceeding
79 // TODO: improve on this validation
80 if (!get_post($donationFormId)) {
81 wp_die(__('Donation form does not exist.', 'give'));
82 }
83
84 $locale = give_clean($_GET['locale']) ?? '';
85 Language::switchToLocale($locale);
86
87 wp_enqueue_style(
88 '@givewp/form-builder/registrars',
89 GIVE_PLUGIN_URL . 'build/formBuilderRegistrars.css'
90 );
91
92 $registrarsScriptHandle = '@givewp/form-builder/registrars';
93 wp_enqueue_script(
94 $registrarsScriptHandle,
95 $formBuilderViewModel->jsPathToRegistrars(),
96 $this->getRegisteredFormBuilderJsDependencies(
97 $formBuilderViewModel->jsRegistrarsDependencies()
98 ),
99 GIVE_VERSION,
100 true
101 );
102
103 Language::setScriptTranslations($registrarsScriptHandle);
104
105 /**
106 * @since 3.1.0 set translations for scripts
107 * @since 3.0.0
108 * Using `wp_enqueue_script` instead of `new EnqueueScript` for more control over dependencies.
109 * The `EnqueueScript` class discovers the dependencies from the associated `asset.php` file,
110 * which might include dependencies that are not supported in some version of WordPress.
111 * @link https://github.com/impress-org/givewp-next-gen/pull/181#discussion_r1202686731
112 */
113 Hooks::doAction('givewp_form_builder_enqueue_scripts');
114
115 $formBuilderScriptPath = '@givewp/form-builder/script';
116 wp_enqueue_script(
117 '@givewp/form-builder/script',
118 $formBuilderViewModel->jsPathFromPluginRoot(),
119 $this->getRegisteredFormBuilderJsDependencies(
120 $formBuilderViewModel->jsDependencies()
121 ),
122 GIVE_VERSION,
123 true
124 );
125
126 Language::setScriptTranslations($formBuilderScriptPath);
127
128 wp_add_inline_script(
129 '@givewp/form-builder/script',
130 'window.giveStorageData = ' . json_encode($formBuilderViewModel->storageData($donationFormId)) . ';',
131 'before'
132 );
133
134 wp_localize_script('@givewp/form-builder/script', 'onboardingTourData', [
135 'actionUrl' => admin_url('admin-ajax.php?action=givewp_tour_completed'),
136 'autoStartDesignTour' => !get_user_meta(get_current_user_id(), 'givewp-form-builder-design-tour-completed', true),
137 'autoStartSchemaTour' => !get_user_meta(get_current_user_id(), 'givewp-form-builder-schema-tour-completed', true),
138 ]);
139
140 $migratedFormId = give_get_meta($donationFormId, 'migratedFormId', true);
141 $transferredFormId = give_get_meta($donationFormId, 'transferredFormId', true);
142
143 $showTransferModal = isset($_GET['showTransfer']) && (bool)$migratedFormId && !(bool)$transferredFormId;
144
145 wp_localize_script('@givewp/form-builder/script', 'migrationOnboardingData', [
146 'pluginUrl' => GIVE_PLUGIN_URL,
147 'formId' => $donationFormId,
148 'migrationActionUrl' => admin_url('admin-ajax.php?action=givewp_migration_hide_notice'),
149 'transferActionUrl' => admin_url('admin-ajax.php?action=givewp_transfer_hide_notice'),
150 'apiRoot' => esc_url_raw(rest_url('give-api/v2/admin/forms')),
151 'apiNonce' => wp_create_nonce('wp_rest'),
152 'isMigratedForm' => $migratedFormId,
153 'isTransferredForm' => $transferredFormId,
154 'showUpgradeDialog' => !$showTransferModal && (bool)$migratedFormId && !(bool)give_get_meta(
155 $donationFormId,
156 'givewp-form-builder-migration-hide-notice',
157 true
158 ),
159 'showTransferModal' => $showTransferModal,
160 'transferShowNotice' => (bool)$migratedFormId && !(bool)$transferredFormId && !(bool)give_get_meta(
161 $donationFormId,
162 'givewp-form-builder-transfer-hide-notice',
163 true
164 ),
165 ]);
166
167 wp_localize_script('@givewp/form-builder/script', 'goalNotificationData', [
168 'actionUrl' => admin_url('admin-ajax.php?action=givewp_goal_hide_notice'),
169 'isDismissed' => get_user_meta(get_current_user_id(), 'givewp-goal-notice-dismissed', true),
170 ]);
171
172 /**
173 * @since 3.16.2
174 */
175 wp_localize_script('@givewp/form-builder/script', 'additionalPaymentGatewaysNotificationData', [
176 'actionUrl' => admin_url('admin-ajax.php?action=givewp_additional_payment_gateways_hide_notice'),
177 'isDismissed' => get_user_meta(get_current_user_id(), 'givewp-additional-payment-gateways-notice-dismissed', true),
178 ]);
179
180 /**
181 * @since 4.14.2 updated logic with filter
182 * @since 4.0.0
183 */
184 $campaignUrl = '';
185 if ($campaign = Campaign::findByFormId($donationFormId)) {
186 $campaignUrl = admin_url('edit.php?post_type=give_forms&page=give-campaigns&id=' . $campaign->id);
187 }
188
189 /**
190 * Filters the campaign URL displayed in the form builder header.
191 * Allows add-ons (e.g., P2P) to provide their own campaign URL when
192 * the form belongs to a non-core campaign type.
193 *
194 * @since 4.14.2
195 *
196 * @param string $campaignUrl - The campaign admin URL, or empty string if not found.
197 * @param int $donationFormId - The donation form ID being edited.
198 */
199 $campaignUrl = apply_filters('givewp_form_builder_campaign_url', $campaignUrl, $donationFormId);
200
201 if ($campaignUrl) {
202 wp_localize_script('@givewp/form-builder/script', 'headerContainer', [
203 'campaignUrl' => $campaignUrl,
204 ]);
205 }
206
207
208 View::render('FormBuilder.admin-form-builder');
209 }
210
211 /**
212 * Load Gutenberg scripts and styles from core.
213 *
214 * @see https://github.com/Automattic/isolated-block-editor/blob/trunk/examples/wordpress-php/iso-gutenberg.php
215 *
216 * @since 3.0.0
217 */
218 public function loadGutenbergScripts()
219 {
220 wp_enqueue_editor();
221
222 // Gutenberg scripts
223 wp_enqueue_script('wp-block-library');
224 wp_enqueue_script('wp-format-library');
225 wp_enqueue_script('wp-editor');
226
227 // Gutenberg styles
228 wp_enqueue_style('wp-edit-post');
229 wp_enqueue_style('wp-format-library');
230 }
231
232 /**
233 * Loop through the form builder js dependencies and check if they are registered before adding to enqueue_script.
234 *
235 * @since 3.0.0
236 */
237 protected function getRegisteredFormBuilderJsDependencies(array $formBuilderJsDependencies): array
238 {
239 $scripts = wp_scripts();
240
241 return array_filter($formBuilderJsDependencies, static function ($dependency) use ($scripts) {
242 $isRegistered = $scripts->query($dependency, 'registered');
243
244 if (!$isRegistered) {
245 Log::error(
246 sprintf(
247 'Script %s is not registered. Please check the script dependencies.',
248 $dependency
249 )
250 );
251 }
252
253 return $isRegistered;
254 });
255 }
256 }
257