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 +246 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,246 @@
1 +<?php
2 +/**
3 + * Main Publicize class.
4 + *
5 + * @package automattic/jetpack
6 + */
7 +
8 +namespace Automattic\Jetpack\Publicize;
9 +
10 +use Automattic\Jetpack\Current_Plan;
11 +use Automattic\Jetpack\Status;
12 +use Automattic\Jetpack\Status\Host;
13 +
14 +/**
15 + * The class to configure and initialize the publicize package.
16 + */
17 +class Publicize_Setup {
18 +
19 + /**
20 + * Whether to update the plan information from WPCOM when initialising the package.
21 + *
22 + * @var bool
23 + */
24 + public static $refresh_plan_info = false;
25 +
26 + /**
27 + * Whether the class has been initialized.
28 + *
29 + * @var bool
30 + */
31 + public static $initialized = false;
32 +
33 + /**
34 + * To configure the publicize package, when called via the Config package.
35 + */
36 + public static function configure() {
37 + add_action( 'jetpack_feature_publicize_enabled', array( __CLASS__, 'on_jetpack_feature_publicize_enabled' ) );
38 + }
39 +
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 + /**
113 + * To configure the publicize package, when called via the Config package.
114 + */
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 +
135 + global $publicize_ui;
136 +
137 + if ( ! isset( $publicize_ui ) ) {
138 + $publicize_ui = new Publicize_UI();
139 + }
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 + }
162 + }
163 +
164 + add_action( 'current_screen', array( self::class, 'add_filters_and_actions_for_screen' ), 5 );
165 +
166 + ( new Social_Image_Generator\Setup() )->init();
167 + }
168 +
169 + /**
170 + * If the current_screen has 'edit' as the base, add filter to change the post list tables.
171 + *
172 + * @param object $current_screen The current screen.
173 + */
174 + public static function add_filters_and_actions_for_screen( $current_screen ) {
175 + if ( 'edit' !== $current_screen->base ) {
176 + return;
177 + }
178 +
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 );
194 +
195 + if ( $show_share_action ) {
196 + self::maybe_add_share_action( $current_screen->post_type );
197 + }
198 + }
199 +
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 + }
214 +
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;
226 + }
227 +
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 ) );
234 +
235 + return $post_actions;
236 + }
237 +
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' );
245 + }
246 +}