PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 weeks ago buttons 7 months ago logged-out-view 1 year ago login-button 7 months ago subscriber-view 1 year ago premium-content.php 2 weeks ago
premium-content.php
174 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
29 require_once JETPACK__PLUGIN_DIR . '/modules/memberships/class-jetpack-memberships.php';
30 if ( \Jetpack_Memberships::should_enable_monetize_blocks_in_editor() ) {
31 Blocks::jetpack_register_block(
32 __DIR__,
33 array(
34 'render_callback' => __NAMESPACE__ . '\render_block',
35 'provides_context' => array(
36 'premium-content/planId' => 'selectedPlanId', // Deprecated.
37 'premium-content/planIds' => 'selectedPlanIds',
38 'isPremiumContentChild' => 'isPremiumContentChild',
39 ),
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 add_action( 'template_redirect', __NAMESPACE__ . '\prewarm_premium_content_session_cookie' );
74
75 /**
76 * Render callback.
77 *
78 * @param array $attributes Array containing the block attributes.
79 * @param string $content String containing the block content.
80 *
81 * @return string
82 */
83 function render_block( $attributes, $content ) {
84 if ( ! pre_render_checks() ) {
85 return '';
86 }
87
88 // Render the Stripe nudge when Stripe is unconnected
89 if ( ! membership_checks() ) {
90 $stripe_nudge = render_stripe_nudge();
91 return $stripe_nudge . $content;
92 }
93
94 // We don't use FEATURE_NAME here because styles are not in /container folder.
95 Jetpack_Gutenberg::load_assets_as_required( 'premium-content' );
96 return $content;
97 }
98
99 /**
100 * Server-side rendering for the stripe connection nudge.
101 *
102 * @return string Final content to render.
103 */
104 function render_stripe_nudge() {
105 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
106 \require_lib( 'memberships' );
107 $blog_id = get_current_blog_id();
108 $settings = (array) \get_memberships_settings_for_site( $blog_id );
109
110 return stripe_nudge(
111 $settings['connect_url'],
112 __( 'Connect to Stripe to use this block on your site.', 'jetpack' ),
113 __( 'Connect', 'jetpack' )
114 );
115 } else {
116 // On WoA sites, the Stripe connection url is not easily available
117 // server-side, so we redirect them to the post in the editor in order
118 // to connect.
119 return stripe_nudge(
120 get_edit_post_link( get_the_ID() ),
121 __( 'Connect to Stripe in the editor to use this block on your site.', 'jetpack' ),
122 __( 'Edit post', 'jetpack' )
123 );
124 }
125 }
126
127 /**
128 * Render the stripe nudge.
129 *
130 * @param string $checkout_url Url for the CTA.
131 * @param string $description Text of the nudge.
132 * @param string $button_text Text of the button.
133 *
134 * @return string Final content to render.
135 */
136 function stripe_nudge( $checkout_url, $description, $button_text ) {
137 require_once JETPACK__PLUGIN_DIR . '_inc/lib/components.php';
138 return \Jetpack_Components::render_frontend_nudge(
139 array(
140 'checkoutUrl' => $checkout_url,
141 'description' => $description,
142 'buttonText' => $button_text,
143 )
144 );
145 }
146
147 /**
148 * Add a meta to prevent publication on firehose, ES AI or Reader
149 *
150 * @param int $post_id Post id.
151 * @param WP_Post $post Post being saved.
152 * @return void
153 */
154 function add_paid_content_post_meta( int $post_id, WP_Post $post ) {
155 if ( $post->post_type !== 'post' && $post->post_type !== 'page' ) {
156 return;
157 }
158
159 $contains_paid_content = has_block( 'premium-content/container', $post );
160 if ( $contains_paid_content ) {
161 update_post_meta(
162 $post_id,
163 META_NAME_CONTAINS_PAID_CONTENT,
164 $contains_paid_content
165 );
166 }
167 if ( ! $contains_paid_content ) {
168 delete_post_meta(
169 $post_id,
170 META_NAME_CONTAINS_PAID_CONTENT
171 );
172 }
173 }
174