PluginProbe
Polylang / 2.9
Polylang v2.9
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
polylang / admin / admin.php

admin.php in Polylang 2.9, at admin/admin.php

199 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package Polylang
4 */
5
6 /**
7 * Admin side controller
8 * accessible in $polylang global object
9 *
10 * Properties:
11 * options => inherited, reference to Polylang options array
12 * model => inherited, reference to PLL_Model object
13 * links_model => inherited, reference to PLL_Links_Model object
14 * links => inherited, reference to PLL_Admin_Links object
15 * static_pages => inherited, reference to PLL_Admin_Static_Pages object
16 * filters_links => inherited, reference to PLL_Filters_Links object
17 * curlang => inherited, optional, current language used to filter the content (language of the post or term being edited, equal to filter_lang otherwise)
18 * filter_lang => inherited, optional, current status of the admin languages filter (in the admin bar)
19 * pref_lang => inherited, preferred language used as default when saving posts or terms
20 * posts => reference to PLL_CRUD_Posts object
21 * terms => reference to PLL_CRUD_Terms object
22 * filters => reference to PLL_Admin_Filters object
23 * filters_sanitization => reference to PLL_Filters_Sanitization object
24 * filters_columns => reference to PLL_Admin_Filters_Columns object
25 * filters_post => reference to PLL_Admin_Filters_Post object
26 * filters_term => reference to PLL_Admin_filters_Term object
27 * nav_menu => reference to PLL_Admin_Nav_Menu object
28 * block_editor => reference to PLL_Admin_Block_Editor object
29 * classic_editor => reference to PLL_Admin_Classic_Editor object
30 * filters_media => optional, reference to PLL_Admin_Filters_Media object
31 *
32 * @since 1.2
33 */
34 class PLL_Admin extends PLL_Admin_Base {
35 /**
36 * Instance of PLL_Admin_Filters
37 *
38 * @var PLL_Admin_Filters
39 */
40 public $filters;
41
42 /**
43 * Instance of PLL_Admin_Filters_Columns
44 *
45 * @var PLL_Admin_Filters_Columns
46 */
47 public $filters_columns;
48
49 /**
50 * Instance of PLL_Admin_Filters_Post
51 *
52 * @var PLL_Admin_Filters_Post
53 */
54 public $filters_post;
55
56 /**
57 * Instance of PLL_Admin_filters_Term
58 *
59 * @var PLL_Admin_filters_Term
60 */
61 public $filters_term;
62
63 /**
64 * Instance of PLL_Admin_Nav_Menu
65 *
66 * @var PLL_Admin_Nav_Menu
67 */
68 public $nav_menu;
69
70 /**
71 * Instance of PLL_Admin_Filters_Media
72 *
73 * @var PLL_Admin_Filters_Media
74 */
75 public $filters_media;
76
77 /**
78 * Instance of PLL_Filters_Sanitization
79 *
80 * @since 2.9
81 *
82 * @var PLL_Filters_Sanitization
83 */
84 public $filters_sanitization;
85
86 /**
87 * Loads the polylang text domain
88 * Setups filters and action needed on all admin pages and on plugins page
89 *
90 * @since 1.2
91 *
92 * @param object $links_model
93 */
94 public function __construct( &$links_model ) {
95 parent::__construct( $links_model );
96
97 // Adds a 'settings' link in the plugins table
98 add_filter( 'plugin_action_links_' . POLYLANG_BASENAME, array( $this, 'plugin_action_links' ) );
99 add_action( 'in_plugin_update_message-' . POLYLANG_BASENAME, array( $this, 'plugin_update_message' ), 10, 2 );
100 }
101
102 /**
103 * Setups filters and action needed on all admin pages and on plugins page
104 * Loads the settings pages or the filters base on the request
105 *
106 * @since 1.2
107 */
108 public function init() {
109 parent::init();
110
111 // Setup filters for admin pages
112 // Priority 5 to make sure filters are there before customize_register is fired
113 if ( $this->model->get_languages_list() ) {
114 add_action( 'wp_loaded', array( $this, 'add_filters' ), 5 );
115 }
116 }
117
118 /**
119 * Adds a 'settings' link in the plugins table
120 *
121 * @since 0.1
122 *
123 * @param array $links list of links associated to the plugin
124 * @return array modified list of links
125 */
126 public function plugin_action_links( $links ) {
127 array_unshift( $links, '<a href="admin.php?page=mlang">' . __( 'Settings', 'polylang' ) . '</a>' );
128 return $links;
129 }
130
131 /**
132 * Adds the upgrade notice in plugins table
133 *
134 * @since 1.1.6
135 *
136 * @param array $plugin_data Not used
137 * @param object $r Plugin update data
138 */
139 public function plugin_update_message( $plugin_data, $r ) {
140 if ( isset( $r->upgrade_notice ) ) {
141 printf( '<p style="margin: 3px 0 0 0; border-top: 1px solid #ddd; padding-top: 3px">%s</p>', esc_html( $r->upgrade_notice ) );
142 }
143 }
144
145 /**
146 * Setup filters for admin pages
147 *
148 * @since 1.2
149 * @since 2.7 instantiate a PLL_Bulk_Translate instance.
150 */
151 public function add_filters() {
152 $this->filters_sanitization = new PLL_Filters_Sanitization( $this->get_locale_for_sanitization() );
153 // All these are separated just for convenience and maintainability
154 $classes = array( 'Filters', 'Filters_Columns', 'Filters_Post', 'Filters_Term', 'Nav_Menu', 'Classic_Editor', 'Block_Editor' );
155
156 // Don't load media filters if option is disabled or if user has no right
157 if ( $this->options['media_support'] && ( $obj = get_post_type_object( 'attachment' ) ) && ( current_user_can( $obj->cap->edit_posts ) || current_user_can( $obj->cap->create_posts ) ) ) {
158 $classes[] = 'Filters_Media';
159 }
160
161 foreach ( $classes as $class ) {
162 $obj = strtolower( $class );
163
164 /**
165 * Filter the class to instantiate when loading admin filters
166 *
167 * @since 1.5
168 *
169 * @param string $class class name
170 */
171 $class = apply_filters( 'pll_' . $obj, 'PLL_Admin_' . $class );
172 $this->$obj = new $class( $this );
173 }
174 }
175 /**
176 * Retrieve the locale according to the current language instead of the language
177 * of the admin interface.
178 *
179 * @since 2.0
180 *
181 * @return string
182 */
183 public function get_locale_for_sanitization() {
184 $locale = get_locale();
185
186 if ( isset( $_POST['post_lang_choice'] ) && $lang = $this->model->get_language( sanitize_key( $_POST['post_lang_choice'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification
187 $locale = $lang->locale;
188 } elseif ( isset( $_POST['term_lang_choice'] ) && $lang = $this->model->get_language( sanitize_key( $_POST['term_lang_choice'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification
189 $locale = $lang->locale;
190 } elseif ( isset( $_POST['inline_lang_choice'] ) && $lang = $this->model->get_language( sanitize_key( $_POST['inline_lang_choice'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification
191 $locale = $lang->locale;
192 } elseif ( ! empty( $this->curlang ) ) {
193 $locale = $this->curlang->locale;
194 }
195
196 return $locale;
197 }
198 }
199