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 / modules / post-by-email / class-jetpack-post-by-email.php
jetpack / modules / post-by-email Last commit date
class-jetpack-post-by-email.php 7 months ago post-by-email-rtl.css 4 years ago post-by-email-rtl.min.css 9 years ago post-by-email.css 7 months ago post-by-email.js 5 years ago post-by-email.min.css 4 years ago
class-jetpack-post-by-email.php
257 lines
1 <?php
2 /**
3 * Class Jetpack_Post_By_Email
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Connection\Tokens;
9 use Automattic\Jetpack\Redirect;
10
11 /**
12 * Class Jetpack_Post_By_Email
13 */
14 class Jetpack_Post_By_Email {
15 /**
16 * Initialize PBE.
17 *
18 * @return Jetpack_Post_By_Email
19 */
20 public static function init() {
21 static $instance = null;
22
23 if ( ! $instance ) {
24 $instance = new Jetpack_Post_By_Email();
25 }
26
27 return $instance;
28 }
29
30 /**
31 * Singleton
32 */
33 private function __construct() {
34 add_action( 'init', array( $this, 'action_init' ) );
35 }
36
37 /**
38 * Adds hooks for PBE.
39 */
40 public function action_init() {
41 if ( ! current_user_can( 'edit_posts' ) ) {
42 return;
43 }
44
45 add_action( 'profile_personal_options', array( $this, 'user_profile' ) );
46 add_action( 'admin_print_scripts-profile.php', array( $this, 'profile_scripts' ) );
47
48 add_action( 'wp_ajax_jetpack_post_by_email_enable', array( $this, 'create_post_by_email_address' ) );
49 add_action( 'wp_ajax_jetpack_post_by_email_regenerate', array( $this, 'regenerate_post_by_email_address' ) );
50 add_action( 'wp_ajax_jetpack_post_by_email_disable', array( $this, 'delete_post_by_email_address' ) );
51 }
52
53 /**
54 * Enqueues scripts for user profile page.
55 */
56 public function profile_scripts() {
57 wp_enqueue_script( 'post-by-email', plugins_url( 'post-by-email.js', __FILE__ ), array( 'jquery' ), JETPACK__VERSION, true );
58 wp_localize_script(
59 'post-by-email',
60 'pbeVars',
61 array(
62 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
63 )
64 );
65 wp_enqueue_style( 'post-by-email', plugins_url( 'post-by-email.css', __FILE__ ), array(), JETPACK__VERSION );
66 // Inline styles. @see wp_maybe_inline_styles()
67 if ( is_rtl() ) {
68 wp_style_add_data( 'post-by-email', 'path', plugin_dir_path( __FILE__ ) . 'post-by-email-rtl.min.css' );
69 } else {
70 wp_style_add_data( 'post-by-email', 'path', plugin_dir_path( __FILE__ ) . 'post-by-email.min.css' );
71 }
72 }
73
74 /**
75 * Check if the user is connected.
76 *
77 * @return bool True if connected. False if not.
78 */
79 public function check_user_connection() {
80 $user_token = ( new Tokens() )->get_access_token( get_current_user_id() );
81
82 $is_user_connected = $user_token && ! is_wp_error( $user_token );
83
84 // If the user is already connected via Jetpack, then we're good.
85 if ( $is_user_connected ) {
86 return true;
87 }
88
89 return false;
90 }
91
92 /**
93 * Adds field to user profile page.
94 */
95 public function user_profile() {
96 $blog_name = get_bloginfo( 'blogname' );
97 if ( empty( $blog_name ) ) {
98 $blog_name = home_url( '/' );
99 }
100
101 ?>
102 <div id="post-by-email" class="jetpack-targetable">
103 <h3><?php esc_html_e( 'Post by Email', 'jetpack' ); ?></h3>
104 <table class="form-table">
105 <tr>
106 <th scope="row"><?php esc_html_e( 'Email Address', 'jetpack' ); ?><span id="jp-pbe-spinner" class="spinner"></span></th>
107 <td>
108 <div id="jp-pbe-error" class="jetpack-inline-error"></div>
109 <?php
110
111 if ( $this->check_user_connection() ) {
112 $email = $this->get_post_by_email_address();
113
114 $enable_button_style = empty( $email ) ? '' : 'display: none;';
115 $info_style = empty( $email ) ? 'display: none;' : '';
116 ?>
117
118 <input type="button" name="jp-pbe-enable" id="jp-pbe-enable" class="button" value="<?php esc_attr_e( 'Enable Post By Email', 'jetpack' ); ?>" style="<?php echo esc_attr( $enable_button_style ); ?>" />
119 <div id="jp-pbe-info" style="<?php echo esc_attr( $info_style ); ?>">
120 <p id="jp-pbe-email-wrapper">
121 <input type="text" id="jp-pbe-email" value="<?php echo esc_attr( $email ); ?>" readonly="readonly" class="regular-text" />
122 <span class="description"><a target="_blank" rel="noopener noreferrer" href="<?php echo esc_url( Redirect::get_url( 'jetpack-support-post-by-email' ) ); ?>"><?php esc_html_e( 'More information', 'jetpack' ); ?></a></span>
123 </p>
124 <p>
125 <input type="button" name="jp-pbe-regenerate" id="jp-pbe-regenerate" class="button" value="<?php esc_attr_e( 'Regenerate Address', 'jetpack' ); ?> " />
126 <input type="button" name="jp-pbe-disable" id="jp-pbe-disable" class="button" value="<?php esc_attr_e( 'Disable Post By Email', 'jetpack' ); ?> " />
127 </p>
128 </div>
129 <?php
130 } else {
131 $jetpack = Jetpack::init();
132 ?>
133
134 <p class="jetpack-inline-message">
135 <?php
136 printf(
137 /* translators: Placeholder is the site's name from WordPress settings. */
138 esc_html( wptexturize( __( 'To use Post By Email, you need to link your %s account to your WordPress.com account.', 'jetpack' ) ) ),
139 '<strong>' . esc_html( $blog_name ) . '</strong>'
140 );
141 ?>
142 <br />
143 <?php echo esc_html( wptexturize( __( "If you don't have a WordPress.com account yet, you can sign up for free in just a few seconds.", 'jetpack' ) ) ); ?>
144 </p>
145 <p>
146 <a href="<?php echo esc_url( $jetpack->build_connect_url( true, get_edit_profile_url( get_current_user_id() ) . '#post-by-email', 'unlinked-user-pbe' ) ); ?>" class="button button-connector" id="wpcom-connect"><?php esc_html_e( 'Link account with WordPress.com', 'jetpack' ); ?></a>
147 </p>
148 <?php
149 }
150 ?>
151 </td>
152 </tr>
153 </table>
154 </div>
155 <?php
156 }
157
158 /**
159 * XMLRPC Query to WP.com for PBE e-mail address for user.
160 *
161 * @return string|null PBE E-mail Address or null on error.
162 */
163 public function get_post_by_email_address() {
164 $xml = $this->init_rest_connection();
165
166 $xml->query( 'jetpack.getPostByEmailAddress' );
167
168 if ( $xml->isError() ) {
169 return null;
170 }
171
172 $response = $xml->getResponse();
173 if ( empty( $response ) ) {
174 return null;
175 }
176
177 return $response;
178 }
179
180 /**
181 * Process the REST API request to modify the "Post by Email" settings.
182 *
183 * @param string $action Allowed values: 'create', 'regenerate', 'delete'.
184 *
185 * @return array|false
186 */
187 public function process_api_request( $action ) {
188 $endpoint = null;
189 $error_message = esc_html__( 'Please try again later.', 'jetpack' );
190 $result = false;
191
192 switch ( $action ) {
193 case 'create':
194 $endpoint = 'jetpack.createPostByEmailAddress';
195 $error_message = esc_html__( 'Unable to create the Post by Email address. Please try again later.', 'jetpack' );
196 break;
197 case 'regenerate':
198 $endpoint = 'jetpack.regeneratePostByEmailAddress';
199 $error_message = esc_html__( 'Unable to regenerate the Post by Email address. Please try again later.', 'jetpack' );
200 break;
201 case 'delete':
202 $endpoint = 'jetpack.deletePostByEmailAddress';
203 $error_message = esc_html__( 'Unable to delete the Post by Email address. Please try again later.', 'jetpack' );
204 break;
205 }
206
207 if ( $endpoint ) {
208 $result = $this->process_rest_proxy_request( $endpoint, $error_message );
209 }
210
211 return $result;
212 }
213
214 /**
215 * Calls WPCOM through authenticated request to create, regenerate or delete the Post by Email address.
216 *
217 * @since 4.3.0
218 *
219 * @param string $endpoint Process to call on WPCOM to create, regenerate or delete the Post by Email address.
220 * @param string $error Error message to return.
221 *
222 * @return array
223 */
224 private function process_rest_proxy_request( $endpoint, $error ) {
225 if ( ! current_user_can( 'edit_posts' ) ) {
226 return array( 'message' => $error );
227 }
228
229 $xml = $this->init_rest_connection();
230
231 $xml->query( $endpoint );
232
233 if ( $xml->isError() ) {
234 return array( 'message' => $error );
235 }
236
237 $response = $xml->getResponse();
238 if ( empty( $response ) ) {
239 return array( 'message' => $error );
240 }
241
242 // Used only in Jetpack_Core_Json_Api_Endpoints::get_remote_value.
243 update_option( 'post_by_email_address' . get_current_user_id(), $response );
244
245 return $response;
246 }
247
248 /**
249 * Initialize the IXR client
250 *
251 * @return Jetpack_IXR_Client
252 */
253 private function init_rest_connection() {
254 return new Jetpack_IXR_Client( array( 'user_id' => get_current_user_id() ) );
255 }
256 }
257