PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / DonationForms / Actions / IsolateEnqueuedFormViewAssets.php
give / src / DonationForms / Actions Last commit date
AddHoneyPotFieldToDonationForms.php 1 year ago ConvertConsentBlockToFieldsApi.php 2 years ago ConvertDonationAmountBlockToFieldsApi.php 1 month ago ConvertDonationFormBlocksToFieldsApi.php 6 months ago ConvertQueryDataToDonationForm.php 2 years ago DispatchDonateControllerDonationCreatedListeners.php 1 year ago DispatchDonateControllerSubscriptionCreatedListeners.php 2 years ago GenerateAuthUrl.php 2 years ago GenerateDonateRouteSignatureArgs.php 2 years ago GenerateDonateRouteUrl.php 2 years ago GenerateDonationConfirmationReceiptUrl.php 2 years ago GenerateDonationConfirmationReceiptViewRouteUrl.php 2 years ago GenerateDonationFormPreviewRouteUrl.php 2 years ago GenerateDonationFormValidationRouteUrl.php 2 years ago GenerateDonationFormViewRouteUrl.php 2 years ago GetOrCreateDonor.php 2 years ago IsolateEnqueuedFormViewAssets.php 5 days ago PrintFormMetaTags.php 1 year ago ReplaceGiveReceiptShortcodeViewWithDonationConfirmationIframe.php 1 year ago SanitizeDonationFormPreviewRequest.php 2 years ago StoreBackwardsCompatibleFormMeta.php 2 years ago ValidateDonationFormRequest.php 1 day ago ValidateReceiptViewPermission.php 1 year ago
IsolateEnqueuedFormViewAssets.php
94 lines
1 <?php
2
3 namespace Give\DonationForms\Actions;
4
5 use WP_Dependencies;
6
7 /**
8 * Pins the script and style queues to what has already been enqueued, so a form view route prints
9 * its own assets and nothing else.
10 *
11 * The form view routes render a standalone document by calling wp_print_styles(),
12 * wp_print_head_scripts() and wp_print_footer_scripts() directly. Each of those fires an action that
13 * plugins legitimately enqueue from, so the queues keep growing after the route has finished
14 * enqueuing. Constraining the handles at print time, instead of dequeuing on a hook, keeps the route
15 * independent of the priority the other plugin picked.
16 *
17 * @since 4.16.7
18 */
19 class IsolateEnqueuedFormViewAssets
20 {
21 /**
22 * @since 4.16.7
23 */
24 public function __invoke(): void
25 {
26 $this->pinQueue(wp_scripts(), 'print_scripts_array', 'scripts');
27 $this->pinQueue(wp_styles(), 'print_styles_array', 'styles');
28 }
29
30 /**
31 * @since 4.16.7
32 *
33 * @param WP_Dependencies $dependencies The queue to pin.
34 * @param string $filter Print-time filter the queue is constrained through.
35 * @param string $type Either "scripts" or "styles".
36 */
37 private function pinQueue(WP_Dependencies $dependencies, string $filter, string $type): void
38 {
39 $allowedHandles = $this->expandDependencies($dependencies, $dependencies->queue);
40
41 /**
42 * Filters the handles a donation form view route may print. Add a handle here to let an
43 * asset enqueued after the form has been prepared through to the rendered form.
44 *
45 * @since 4.16.7
46 *
47 * @param string[] $allowedHandles Handles the route will print.
48 * @param string $type Either "scripts" or "styles".
49 */
50 $allowedHandles = apply_filters(
51 'givewp_donation_form_view_allowed_asset_handles',
52 $allowedHandles,
53 $type
54 );
55
56 add_filter($filter, static function ($handles) use ($allowedHandles) {
57 return array_values(array_intersect($handles, $allowedHandles));
58 });
59 }
60
61 /**
62 * Resolves the given handles together with everything they depend on. Registered dependencies
63 * may be cyclic, so handles are only ever visited once.
64 *
65 * @since 4.16.7
66 *
67 * @param WP_Dependencies $dependencies Queue the handles are registered in.
68 * @param string[] $handles Handles to resolve.
69 *
70 * @return string[]
71 */
72 private function expandDependencies(WP_Dependencies $dependencies, array $handles): array
73 {
74 $resolved = [];
75
76 while ($handles) {
77 /* WordPress allows arguments to be appended to a queued handle. */
78 $handle = explode('?', (string)array_shift($handles))[0];
79
80 if (isset($resolved[$handle])) {
81 continue;
82 }
83
84 $resolved[$handle] = true;
85
86 if (isset($dependencies->registered[$handle])) {
87 $handles = array_merge($handles, $dependencies->registered[$handle]->deps);
88 }
89 }
90
91 return array_keys($resolved);
92 }
93 }
94