PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.2
Jetpack – WP Security, Backup, Speed, & Growth v16.2
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 13.7.2 13.8.3 All 506 releases
jetpack / jetpack_vendor / automattic / jetpack-publicize / src / class-publicize-setup.php

class-publicize-setup.php in Jetpack – WP Security, Backup, Speed, & Growth 16.2, at jetpack_vendor/automattic/jetpack-publicize/src/class-publicize-setup.php

247 lines 7.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
247