PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | _inc/lib/components.php +134 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,134 @@
1 +<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 +
3 +use Automattic\Jetpack\Status;
4 +
5 +/**
6 + * Components Library
7 + *
8 + * Load and display a pre-rendered component
9 + */
10 +class Jetpack_Components {
11 + /**
12 + * Get the contents of a component file
13 + *
14 + * @since 14.7
15 + *
16 + * @param string $name Component name.
17 + * @return string The component markup
18 + */
19 + protected static function get_component_markup( $name ) {
20 + ob_start();
21 + // `include` fails gracefully and throws a warning, but doesn't halt execution.
22 + include JETPACK__PLUGIN_DIR . "_inc/blocks/$name.html";
23 + return ob_get_clean();
24 + }
25 +
26 + /**
27 + * Load and display a pre-rendered component
28 + *
29 + * @since 7.7.0
30 + *
31 + * @param string $name Component name.
32 + * @param array $props Component properties.
33 + *
34 + * @return string The component markup
35 + */
36 + public static function render_component( $name, $props ) {
37 +
38 + $rtl = is_rtl() ? '.rtl' : '';
39 + wp_enqueue_style( 'jetpack-components', plugins_url( "_inc/blocks/components{$rtl}.css", JETPACK__PLUGIN_FILE ), array( 'wp-components' ), JETPACK__VERSION );
40 +
41 + $markup = self::get_component_markup( $name );
42 +
43 + foreach ( $props as $key => $value ) {
44 + $markup = str_replace(
45 + "#$key#",
46 + $value,
47 + $markup
48 + );
49 +
50 + // Workaround, required to replace strings in `sprintf`-expressions.
51 + // See extensions/shared/i18n-to-php.jsx for more information.
52 + $markup = str_replace(
53 + "%($key)s",
54 + $value,
55 + $markup
56 + );
57 + }
58 +
59 + return $markup;
60 + }
61 +
62 + /**
63 + * Renders the frontend-nudge with the provided props.
64 + *
65 + * @param array $props Component properties.
66 + *
67 + * @return string The component markup.
68 + */
69 + public static function render_frontend_nudge( $props ) {
70 + return self::render_component(
71 + 'frontend-nudge',
72 + $props
73 + );
74 + }
75 +
76 + /**
77 + * Load and display a pre-rendered component
78 + *
79 + * @since 7.7.0
80 + *
81 + * @param array $props Component properties.
82 + *
83 + * @return string The component markup
84 + */
85 + public static function render_upgrade_nudge( $props ) {
86 + $plan_slug = $props['plan'];
87 + require_once JETPACK__PLUGIN_DIR . '_inc/lib/plans.php';
88 + $plan = Jetpack_Plans::get_plan( $plan_slug );
89 +
90 + if ( ! $plan ) {
91 + return self::render_component(
92 + 'upgrade-nudge',
93 + array(
94 + 'checkoutUrl' => '',
95 + )
96 + );
97 + }
98 +
99 + // WP.com plan objects have a dedicated `path_slug` field, Jetpack plan objects don't.
100 + $plan_path_slug = wp_startswith( $plan_slug, 'jetpack_' )
101 + ? $plan_slug
102 + : $plan->path_slug;
103 +
104 + $post_id = get_the_ID();
105 +
106 + $site_slug = ( new Status() )->get_site_suffix();
107 +
108 + // Post-checkout: redirect back to the editor.
109 + $redirect_to = add_query_arg(
110 + array(
111 + 'plan_upgraded' => 1,
112 + ),
113 + get_edit_post_link( $post_id )
114 + );
115 +
116 + // Decode the URL to avoid double encoding.
117 + $redirect_to = html_entity_decode( wp_unslash( $redirect_to ), ENT_QUOTES );
118 +
119 + $upgrade_url =
120 + $plan_path_slug
121 + ? add_query_arg(
122 + 'redirect_to',
123 + rawurlencode( $redirect_to ),
124 + "https://wordpress.com/checkout/{$site_slug}/{$plan_path_slug}"
125 + ) : '';
126 +
127 + return self::render_component(
128 + 'upgrade-nudge',
129 + array(
130 + 'checkoutUrl' => $upgrade_url,
131 + )
132 + );
133 + }
134 +}