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 | jetpack_vendor/automattic/jetpack-publicize/src/class-publicize-setup.php +188 -33 12.6.4 → 16.3 View file →
@@ -6,8 +6,12 @@
6 6 */
7 7
8 8 namespace Automattic\Jetpack\Publicize;
9 9
10 +use Automattic\Jetpack\Current_Plan;
11 +use Automattic\Jetpack\Status;
12 +use Automattic\Jetpack\Status\Host;
13 +
10 14 /**
11 15 * The class to configure and initialize the publicize package.
12 16 */
13 17 class Publicize_Setup {
@@ -14,13 +18,20 @@
14 18
15 19 /**
16 20 * Whether to update the plan information from WPCOM when initialising the package.
17 21 *
18 - * @var bool;
22 + * @var bool
19 23 */
20 24 public static $refresh_plan_info = false;
21 25
22 26 /**
27 + * Whether the class has been initialized.
28 + *
29 + * @var bool
30 + */
31 + public static $initialized = false;
32 +
33 + /**
23 34 * To configure the publicize package, when called via the Config package.
24 35 */
25 36 public static function configure() {
26 37 add_action( 'jetpack_feature_publicize_enabled', array( __CLASS__, 'on_jetpack_feature_publicize_enabled' ) );
@@ -26,66 +37,210 @@
26 37 add_action( 'jetpack_feature_publicize_enabled', array( __CLASS__, 'on_jetpack_feature_publicize_enabled' ) );
27 38 }
28 39
29 40 /**
41 + * Whether to load the Publicize module.
42 + *
43 + * @return bool
44 + */
45 + private static function should_load() {
46 +
47 + /**
48 + * We do not want to load Publicize on WPCOM private sites.
49 + */
50 + $is_wpcom_platform_private_site = ( new Host() )->is_wpcom_platform() && ( new Status() )->is_private_site();
51 +
52 + $should_load = ! $is_wpcom_platform_private_site;
53 +
54 + /**
55 + * Filters the flag to decide whether to load the Publicize module.
56 + *
57 + * @since 0.64.0
58 + *
59 + * @param bool $should_load Whether to load the Publicize module.
60 + */
61 + return (bool) apply_filters( 'jetpack_publicize_should_load', $should_load );
62 + }
63 +
64 + /**
65 + * Initialization of publicize logic that should always be loaded,
66 + * regardless of whether Publicize is enabled or not.
67 + *
68 + * You should justify everyting that is done here, as it will be loaded on every pageload.
69 + */
70 + public static function pre_initialization() {
71 + if ( ! self::should_load() ) {
72 + return;
73 + }
74 +
75 + $is_wpcom_simple = ( new Host() )->is_wpcom_simple();
76 +
77 + /**
78 + * Assets are to be loaded in all cases.
79 + *
80 + * To allow loading of admin page and
81 + * the editor placeholder when publicize is OFF.
82 + */
83 + Publicize_Assets::configure();
84 +
85 + /**
86 + * Social admin page is to be always registered.
87 + */
88 + Social_Admin_Page::init();
89 +
90 + /**
91 + * The connect popup (auth_flow=v2) is redirected back to a same-origin admin-post
92 + * endpoint that broadcasts the result to the opener, so it must always be available.
93 + */
94 + Keyring_Result_Handler::init();
95 +
96 + if ( ! $is_wpcom_simple ) {
97 + /**
98 + * We need this only on Jetpack sites for Google Site auto-verification.
99 + */
100 + add_action( 'init', array( Keyring_Helper::class, 'init' ), 9 );
101 + }
102 +
103 + if ( $is_wpcom_simple ) {
104 + /**
105 + * Publicize is always enabled on WPCOM,
106 + * we can call the initialization method directly.
107 + */
108 + add_action( 'plugins_loaded', array( self::class, 'on_jetpack_feature_publicize_enabled' ) );
109 + }
110 + }
111 +
112 + /**
30 113 * To configure the publicize package, when called via the Config package.
31 114 */
32 115 public static function on_jetpack_feature_publicize_enabled() {
116 + if ( self::$initialized || ! self::should_load() ) {
117 + return;
118 + }
119 +
120 + self::$initialized = true;
121 +
122 + $is_wpcom_simple = ( new Host() )->is_wpcom_simple();
123 +
124 + global $publicize;
125 + /**
126 + * If publicize is not initialzed on WPCOM,
127 + * it means that we are either on a public facing page
128 + * or a page where Publicize is not needed.
129 + * So, we will skip the whole set up here.
130 + */
131 + if ( $is_wpcom_simple && ! $publicize ) {
132 + return;
133 + }
134 +
33 135 global $publicize_ui;
34 136
35 137 if ( ! isset( $publicize_ui ) ) {
36 138 $publicize_ui = new Publicize_UI();
139 + }
37 140
141 + $rest_controllers = array(
142 + REST_API\Connections_Controller::class,
143 + REST_API\Connections_Post_Field::class,
144 + REST_API\Keyring_Result_Controller::class,
145 + REST_API\Scheduled_Actions_Controller::class,
146 + REST_API\Services_Controller::class,
147 + REST_API\Share_Post_Controller::class,
148 + REST_API\Share_Status_Controller::class,
149 + REST_API\Social_Image_Generator_Controller::class,
150 + REST_API\Render_Messages_Controller::class,
151 + REST_API\Message_Templates_Placeholders_Controller::class,
152 + Jetpack_Social_Settings\Settings::class,
153 + );
154 +
155 + // Load the REST controllers.
156 + foreach ( $rest_controllers as $controller ) {
157 + if ( $is_wpcom_simple ) {
158 + wpcom_rest_api_v2_load_plugin( $controller );
159 + } else {
160 + new $controller();
161 + }
38 162 }
39 163
40 - // Adding on a higher priority to make sure we're the first field registered.
41 - // The priority parameter can be removed once we deprecate WPCOM_REST_API_V2_Post_Publicize_Connections_Field
42 - add_action( 'rest_api_init', array( new Connections_Post_Field(), 'register_fields' ), 5 );
43 - add_action( 'rest_api_init', array( new REST_Controller(), 'register_rest_routes' ) );
44 - add_action( 'current_screen', array( static::class, 'init_sharing_limits' ) );
45 - add_action( 'rest_api_init', array( new Auto_Conversion\REST_Settings_Controller(), 'register_routes' ) );
164 + add_action( 'current_screen', array( self::class, 'add_filters_and_actions_for_screen' ), 5 );
46 165
47 166 ( new Social_Image_Generator\Setup() )->init();
48 167 }
49 168
50 169 /**
51 - * Retrieves the blog ID based on the environment we're running in.
170 + * If the current_screen has 'edit' as the base, add filter to change the post list tables.
52 171 *
53 - * @return int The WPCOM blog ID.
172 + * @param object $current_screen The current screen.
54 173 */
55 - public static function get_blog_id() {
56 - return defined( 'IS_WPCOM' ) && IS_WPCOM ? get_current_blog_id() : \Jetpack_Options::get_option( 'id' );
57 - }
58 -
59 - /**
60 - * Initialise share limits if they should be enabled.
61 - */
62 - public static function init_sharing_limits() {
63 - $current_screen = get_current_screen();
64 -
65 - if ( empty( $current_screen ) || $current_screen->base !== 'post' ) {
174 + public static function add_filters_and_actions_for_screen( $current_screen ) {
175 + if ( 'edit' !== $current_screen->base ) {
66 176 return;
67 177 }
68 178
69 - global $publicize;
179 + /**
180 + * Filter to enable/disable the Share action on the post list screen.
181 + *
182 + * The Share action allows users to reshare published posts via Jetpack Social.
183 + * It is automatically enabled for plans that support the 'republicize' feature,
184 + * but can be disabled via this filter.
185 + *
186 + * @since 0.2.0 Originally in jetpack-post-list package.
187 + * @since $$NEXT_VERSION$$ Moved to jetpack-publicize package.
188 + *
189 + * @param bool $show_share Whether to show the share action. Default true.
190 + * @param string $post_type The current post type.
191 + */
192 + $show_share_action = Current_Plan::supports( 'republicize' )
193 + && apply_filters( 'jetpack_post_list_display_share_action', true, $current_screen->post_type );
70 194
71 - if ( $publicize->has_paid_plan( self::$refresh_plan_info ) ) {
72 - return;
195 + if ( $show_share_action ) {
196 + self::maybe_add_share_action( $current_screen->post_type );
73 197 }
198 + }
74 199
75 - $info = $publicize->get_publicize_shares_info( self::get_blog_id() );
200 + /**
201 + * Add the Share action for post types that support publicize.
202 + *
203 + * @param string $post_type The post type.
204 + */
205 + public static function maybe_add_share_action( $post_type ) {
206 + if (
207 + post_type_supports( $post_type, 'publicize' ) &&
208 + use_block_editor_for_post_type( $post_type )
209 + ) {
210 + add_filter( 'post_row_actions', array( self::class, 'add_share_action' ), 20, 2 );
211 + add_filter( 'page_row_actions', array( self::class, 'add_share_action' ), 20, 2 );
212 + }
213 + }
76 214
77 - if ( is_wp_error( $info ) ) {
78 - return;
215 + /**
216 + * Add the Share action link to the post row actions.
217 + *
218 + * @param array $post_actions The current post actions.
219 + * @param \WP_Post $post The post object.
220 + * @return array Modified post actions.
221 + */
222 + public static function add_share_action( $post_actions, $post ) {
223 + $edit_url = get_edit_post_link( $post->ID, 'raw' );
224 + if ( ! $edit_url || 'publish' !== $post->post_status ) {
225 + return $post_actions;
79 226 }
80 227
81 - if ( empty( $info['is_share_limit_enabled'] ) ) {
82 - return;
83 - }
228 + $url = add_query_arg( 'jetpack-editor-action', 'share_post', $edit_url );
229 + $text = _x( 'Share', 'Share the post on social networks', 'jetpack-publicize-pkg' );
230 + $title = _draft_or_post_title( $post );
231 + /* translators: post title */
232 + $label = sprintf( __( 'Share "%s" via Jetpack Social', 'jetpack-publicize-pkg' ), $title );
233 + $post_actions['share'] = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( $url ), esc_attr( $label ), esc_html( $text ) );
84 234
85 - $connections = $publicize->get_filtered_connection_data();
86 - $shares_remaining = $info['shares_remaining'];
235 + return $post_actions;
236 + }
87 237
88 - $share_limits = new Share_Limits( $connections, $shares_remaining, ! $current_screen->is_block_editor() );
89 - $share_limits->enforce_share_limits();
238 + /**
239 + * Retrieves the blog ID based on the environment we're running in.
240 + *
241 + * @return int The WPCOM blog ID.
242 + */
243 + public static function get_blog_id() {
244 + return defined( 'IS_WPCOM' ) && IS_WPCOM ? get_current_blog_id() : \Jetpack_Options::get_option( 'id' );
90 245 }
91 246 }