PluginProbe
Polylang / 3.7.1
Polylang v3.7.1
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | admin/admin-classic-editor.php +28 -21 3.0.33.7.1 View file →
@@ -2,8 +2,10 @@
2 2 /**
3 3 * @package Polylang
4 4 */
5 5
6 +defined( 'ABSPATH' ) || exit;
7 +
6 8 /**
7 9 * Manages filters and actions related to the classic editor
8 10 *
9 11 * @since 2.4
@@ -21,9 +23,9 @@
21 23
22 24 /**
23 25 * Current language (used to filter the content).
24 26 *
25 - * @var PLL_Language
27 + * @var PLL_Language|null
26 28 */
27 29 public $curlang;
28 30
29 31 /**
@@ -28,18 +30,18 @@
28 30
29 31 /**
30 32 * Preferred language to assign to new contents.
31 33 *
32 - * @var PLL_Language
34 + * @var PLL_Language|null
33 35 */
34 36 public $pref_lang;
35 37
36 38 /**
37 - * Constructor: setups filters and actions
39 + * Constructor: setups filters and actions.
38 40 *
39 41 * @since 2.4
40 42 *
41 - * @param object $polylang
43 + * @param object $polylang The Polylang object.
42 44 */
43 45 public function __construct( &$polylang ) {
44 46 $this->model = &$polylang->model;
45 47 $this->links = &$polylang->links;
@@ -158,37 +160,33 @@
158 160 public function post_lang_choice() {
159 161 check_ajax_referer( 'pll_language', '_pll_nonce' );
160 162
161 163 if ( ! isset( $_POST['post_id'], $_POST['lang'], $_POST['post_type'] ) ) {
162 - wp_die( 0 );
164 + wp_die( 'The request is missing the parameter "post_type", "lang" and/or "post_id".' );
163 165 }
164 166
165 167 global $post_ID; // Obliged to use the global variable for wp_popular_terms_checklist
166 168 $post_ID = (int) $_POST['post_id'];
167 - $lang = $this->model->get_language( sanitize_key( $_POST['lang'] ) );
169 + $lang_slug = sanitize_key( $_POST['lang'] );
170 + $lang = $this->model->get_language( $lang_slug );
168 171 $post_type = sanitize_key( $_POST['post_type'] );
169 172
170 - if ( empty( $lang ) || ! post_type_exists( $post_type ) ) {
171 - wp_die( 0 );
173 + if ( empty( $lang ) ) {
174 + wp_die( esc_html( "{$lang_slug} is not a valid language code." ) );
172 175 }
173 176
174 177 $post_type_object = get_post_type_object( $post_type );
175 178
176 179 if ( empty( $post_type_object ) ) {
177 - wp_die( 0 );
180 + wp_die( esc_html( "{$post_type} is not a valid post type." ) );
178 181 }
179 182
180 183 if ( ! current_user_can( $post_type_object->cap->edit_post, $post_ID ) ) {
181 - wp_die( -1 );
184 + wp_die( 'You are not allowed to edit this post.' );
182 185 }
183 186
184 - $this->model->post->set_language( $post_ID, $lang ); // Save language, useful to set the language when uploading media from post
187 + $this->model->post->set_language( $post_ID, $lang );
185 188
186 - // We also need to save the translations to match the language change
187 - $translations = $this->model->post->get_translations( $post_ID );
188 - $translations = array_diff( $translations, array( $post_ID ) );
189 - $this->model->post->save_translations( $post_ID, $translations );
190 -
191 189 ob_start();
192 190 if ( 'attachment' === $post_type ) {
193 191 include __DIR__ . '/view-translations-media.php';
194 192 } else {
@@ -249,11 +247,15 @@
249 247 'echo' => 0,
250 248 );
251 249
252 250 /** This filter is documented in wp-admin/includes/meta-boxes.php */
253 - $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post ); // Since WP 3.3
251 + $dropdown_args = (array) apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post ); // Since WP 3.3.
252 + $dropdown_args['echo'] = 0; // Make sure to not print it.
254 253
255 - $x->Add( array( 'what' => 'pages', 'data' => wp_dropdown_pages( $dropdown_args ) ) ); // phpcs:ignore WordPress.Security.EscapeOutput
254 + /** @var string $data */
255 + $data = wp_dropdown_pages( $dropdown_args ); // phpcs:ignore WordPress.Security.EscapeOutput
256 +
257 + $x->Add( array( 'what' => 'pages', 'data' => $data ) );
256 258 }
257 259 }
258 260
259 261 // Flag
@@ -331,11 +333,16 @@
331 333 * @param WP_Post $post The page being edited.
332 334 * @return array Modified arguments.
333 335 */
334 336 public function page_attributes_dropdown_pages_args( $dropdown_args, $post ) {
335 - $dropdown_args['lang'] = isset( $_POST['lang'] ) ? $this->model->get_language( sanitize_key( $_POST['lang'] ) ) : $this->model->post->get_language( $post->ID ); // phpcs:ignore WordPress.Security.NonceVerification
336 - if ( ! $dropdown_args['lang'] ) {
337 - $dropdown_args['lang'] = $this->pref_lang;
337 + $language = isset( $_POST['lang'] ) ? $this->model->get_language( sanitize_key( $_POST['lang'] ) ) : $this->model->post->get_language( $post->ID ); // phpcs:ignore WordPress.Security.NonceVerification
338 +
339 + if ( empty( $language ) ) {
340 + $language = $this->pref_lang;
341 + }
342 +
343 + if ( ! empty( $language ) ) {
344 + $dropdown_args['lang'] = $language->slug;
338 345 }
339 346
340 347 return $dropdown_args;
341 348 }