PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.7.2
Jetpack – WP Security, Backup, Speed, & Growth v13.7.2
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 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / extensions / blocks / premium-content / premium-content.php
jetpack / extensions / blocks / premium-content Last commit date
_inc 2 years ago buttons 3 years ago logged-out-view 2 years ago login-button 2 years ago subscriber-view 2 years ago premium-content.php 2 years ago
premium-content.php
173 lines
1 <?php
2 /**
3 * Premium Content Block.
4 *
5 * @package automattic/jetpack
6 */
7
8 namespace Automattic\Jetpack\Extensions\Premium_Content;
9
10 use Automattic\Jetpack\Blocks;
11 use Jetpack_Gutenberg;
12 use WP_Post;
13 use const Automattic\Jetpack\Extensions\Subscriptions\META_NAME_CONTAINS_PAID_CONTENT;
14
15 require_once __DIR__ . '/_inc/access-check.php';
16 require_once __DIR__ . '/logged-out-view/logged-out-view.php';
17 require_once __DIR__ . '/subscriber-view/subscriber-view.php';
18 require_once __DIR__ . '/buttons/buttons.php';
19 require_once __DIR__ . '/login-button/login-button.php';
20 require_once JETPACK__PLUGIN_DIR . 'extensions/blocks/subscriptions/constants.php';
21
22 /**
23 * Registers the block for use in Gutenberg
24 * This is done via an action so that we can disable
25 * registration if we need to.
26 */
27 function register_block() {
28 // Determine required `context` key based on Gutenberg version.
29 $deprecated = function_exists( 'gutenberg_get_post_from_context' );
30 $provides = $deprecated ? 'providesContext' : 'provides_context';
31
32 Blocks::jetpack_register_block(
33 __DIR__,
34 array(
35 'render_callback' => __NAMESPACE__ . '\render_block',
36 $provides => array(
37 'premium-content/planId' => 'selectedPlanId', // Deprecated.
38 'premium-content/planIds' => 'selectedPlanIds',
39 'isPremiumContentChild' => 'isPremiumContentChild',
40 ),
41 )
42 );
43
44 register_post_meta(
45 'post',
46 META_NAME_CONTAINS_PAID_CONTENT,
47 array(
48 'show_in_rest' => true,
49 'single' => true,
50 'type' => 'boolean',
51 'auth_callback' => function () {
52 return wp_get_current_user()->has_cap( 'edit_posts' );
53 },
54 )
55 );
56
57 // This ensures Jetpack will sync this post meta to WPCOM.
58 add_filter(
59 'jetpack_sync_post_meta_whitelist',
60 function ( $allowed_meta ) {
61 return array_merge(
62 $allowed_meta,
63 array(
64 META_NAME_CONTAINS_PAID_CONTENT,
65 )
66 );
67 }
68 );
69
70 add_action( 'wp_after_insert_post', __NAMESPACE__ . '\add_paid_content_post_meta', 99, 2 );
71 }
72 add_action( 'init', __NAMESPACE__ . '\register_block' );
73
74 /**
75 * Render callback.
76 *
77 * @param array $attributes Array containing the block attributes.
78 * @param string $content String containing the block content.
79 *
80 * @return string
81 */
82 function render_block( $attributes, $content ) {
83 if ( ! pre_render_checks() ) {
84 return '';
85 }
86
87 // Render the Stripe nudge when Stripe is unconnected
88 if ( ! membership_checks() ) {
89 $stripe_nudge = render_stripe_nudge();
90 return $stripe_nudge . $content;
91 }
92
93 // We don't use FEATURE_NAME here because styles are not in /container folder.
94 Jetpack_Gutenberg::load_assets_as_required( 'premium-content' );
95 return $content;
96 }
97
98 /**
99 * Server-side rendering for the stripe connection nudge.
100 *
101 * @return string Final content to render.
102 */
103 function render_stripe_nudge() {
104 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
105 \require_lib( 'memberships' );
106 $blog_id = get_current_blog_id();
107 $settings = (array) \get_memberships_settings_for_site( $blog_id );
108
109 return stripe_nudge(
110 $settings['connect_url'],
111 __( 'Connect to Stripe to use this block on your site.', 'jetpack' ),
112 __( 'Connect', 'jetpack' )
113 );
114 } else {
115 // On WoA sites, the Stripe connection url is not easily available
116 // server-side, so we redirect them to the post in the editor in order
117 // to connect.
118 return stripe_nudge(
119 get_edit_post_link( get_the_ID() ),
120 __( 'Connect to Stripe in the editor to use this block on your site.', 'jetpack' ),
121 __( 'Edit post', 'jetpack' )
122 );
123 }
124 }
125
126 /**
127 * Render the stripe nudge.
128 *
129 * @param string $checkout_url Url for the CTA.
130 * @param string $description Text of the nudge.
131 * @param string $button_text Text of the button.
132 *
133 * @return string Final content to render.
134 */
135 function stripe_nudge( $checkout_url, $description, $button_text ) {
136 require_once JETPACK__PLUGIN_DIR . '_inc/lib/components.php';
137 return \Jetpack_Components::render_frontend_nudge(
138 array(
139 'checkoutUrl' => $checkout_url,
140 'description' => $description,
141 'buttonText' => $button_text,
142 )
143 );
144 }
145
146 /**
147 * Add a meta to prevent publication on firehose, ES AI or Reader
148 *
149 * @param int $post_id Post id.
150 * @param WP_Post $post Post being saved.
151 * @return void
152 */
153 function add_paid_content_post_meta( int $post_id, WP_Post $post ) {
154 if ( $post->post_type !== 'post' && $post->post_type !== 'page' ) {
155 return;
156 }
157
158 $contains_paid_content = has_block( 'premium-content/container', $post );
159 if ( $contains_paid_content ) {
160 update_post_meta(
161 $post_id,
162 META_NAME_CONTAINS_PAID_CONTENT,
163 $contains_paid_content
164 );
165 }
166 if ( ! $contains_paid_content ) {
167 delete_post_meta(
168 $post_id,
169 META_NAME_CONTAINS_PAID_CONTENT
170 );
171 }
172 }
173