PluginProbe
Polylang / 2.7
Polylang v2.7
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.7, at admin/admin.php

210 lines 7.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Admin side controller
5 * accessible in $polylang global object
6 *
7 * Properties:
8 * options => inherited, reference to Polylang options array
9 * model => inherited, reference to PLL_Model object
10 * links_model => inherited, reference to PLL_Links_Model object
11 * links => inherited, reference to PLL_Admin_Links object
12 * static_pages => inherited, reference to PLL_Admin_Static_Pages object
13 * filters_links => inherited, reference to PLL_Filters_Links object
14 * curlang => inherited, optional, current language used to filter the content (language of the post or term being edited, equal to filter_lang otherwise)
15 * filter_lang => inherited, optional, current status of the admin languages filter (in the admin bar)
16 * pref_lang => inherited, preferred language used as default when saving posts or terms
17 * posts => reference to PLL_CRUD_Posts object
18 * terms => reference to PLL_CRUD_Terms object
19 * filters => reference to PLL_Admin_Filters object
20 * filters_columns => reference to PLL_Admin_Filters_Columns object
21 * filters_post => reference to PLL_Admin_Filters_Post object
22 * filters_term => reference to PLL_Admin_filters_Term object
23 * nav_menu => reference to PLL_Admin_Nav_Menu object
24 * sync => reference to PLL_Admin_Sync object
25 * block_editor => reference to PLL_Admin_Block_Editor object
26 * classic_editor => reference to PLL_Admin_Classic_Editor object
27 * filters_media => optional, reference to PLL_Admin_Filters_Media object
28 * bulk_translate => reference, a PLL_Bulk_Translate subclass instance
29 * wizard => reference, a PLL_Wizard object
30 *
31 * @since 1.2
32 * @since 2.7 Added a reference to a PLL_Bulk_Translate instance.
33 * @since 2.7 Added a reference to a PLL_Wizard object.
34 */
35 class PLL_Admin extends PLL_Admin_Base {
36 public $filters, $filters_columns, $filters_post, $filters_term, $nav_menu, $sync, $filters_media;
37
38 /**
39 * Loads the polylang text domain
40 * Setups filters and action needed on all admin pages and on plugins page
41 *
42 * @since 1.2
43 *
44 * @param object $links_model
45 */
46 public function __construct( &$links_model ) {
47 parent::__construct( $links_model );
48
49 // Adds a 'settings' link in the plugins table
50 add_filter( 'plugin_action_links_' . POLYLANG_BASENAME, array( $this, 'plugin_action_links' ) );
51 add_action( 'in_plugin_update_message-' . POLYLANG_BASENAME, array( $this, 'plugin_update_message' ), 10, 2 );
52 }
53
54 /**
55 * Setups filters and action needed on all admin pages and on plugins page
56 * Loads the settings pages or the filters base on the request
57 *
58 * @since 1.2
59 */
60 public function init() {
61 parent::init();
62
63 // Setup filters for admin pages
64 // Priority 5 to make sure filters are there before customize_register is fired
65 if ( $this->model->get_languages_list() ) {
66 add_action( 'wp_loaded', array( $this, 'add_filters' ), 5 );
67 add_action( 'admin_init', array( $this, 'maybe_load_sync_post' ), 20 ); // After fusion Builder.
68 }
69 }
70
71 /**
72 * Adds a 'settings' link in the plugins table
73 *
74 * @since 0.1
75 *
76 * @param array $links list of links associated to the plugin
77 * @return array modified list of links
78 */
79 public function plugin_action_links( $links ) {
80 array_unshift( $links, '<a href="admin.php?page=mlang">' . __( 'Settings', 'polylang' ) . '</a>' );
81 return $links;
82 }
83
84 /**
85 * Adds the upgrade notice in plugins table
86 *
87 * @since 1.1.6
88 *
89 * @param array $plugin_data Not used
90 * @param object $r Plugin update data
91 */
92 public function plugin_update_message( $plugin_data, $r ) {
93 if ( isset( $r->upgrade_notice ) ) {
94 printf( '<p style="margin: 3px 0 0 0; border-top: 1px solid #ddd; padding-top: 3px">%s</p>', esc_html( $r->upgrade_notice ) );
95 }
96 }
97
98 /**
99 * Setup filters for admin pages
100 *
101 * @since 1.2
102 * @since 2.7 instantiate a PLL_Bulk_Translate instance.
103 */
104 public function add_filters() {
105 // All these are separated just for convenience and maintainability
106 $classes = array( 'Filters', 'Filters_Columns', 'Filters_Post', 'Filters_Term', 'Nav_Menu', 'Sync', 'Classic_Editor', 'Block_Editor' );
107
108 // Don't load media filters if option is disabled or if user has no right
109 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 ) ) ) {
110 $classes[] = 'Filters_Media';
111 }
112
113 foreach ( $classes as $class ) {
114 $obj = strtolower( $class );
115
116 /**
117 * Filter the class to instantiate when loading admin filters
118 *
119 * @since 1.5
120 *
121 * @param string $class class name
122 */
123 $class = apply_filters( 'pll_' . $obj, 'PLL_Admin_' . $class );
124 $this->$obj = new $class( $this );
125 }
126
127 $this->posts = new PLL_CRUD_Posts( $this );
128 $this->terms = new PLL_CRUD_Terms( $this );
129
130 // Bulk Translate
131 // Needs to be loaded before other modules.
132 if ( class_exists( 'PLL_Bulk_Translate' ) ) {
133 $this->bulk_translate = new PLL_Bulk_Translate( $this->model );
134 add_action( 'current_screen', array( $this->bulk_translate, 'init' ) );
135 }
136
137 // Advanced media
138 if ( $this->options['media_support'] && class_exists( 'PLL_Admin_Advanced_Media' ) ) {
139 $this->advanced_media = new PLL_Admin_Advanced_Media( $this );
140 }
141
142 // Share term slugs
143 if ( get_option( 'permalink_structure' ) && $this->options['force_lang'] && class_exists( 'PLL_Admin_Share_Term_Slug' ) ) {
144 $this->share_term_slug = new PLL_Admin_Share_Term_Slug( $this );
145 }
146
147 // Duplicate content
148 if ( class_exists( 'PLL_Duplicate' ) ) {
149 $this->duplicate = new PLL_Duplicate( $this );
150 }
151
152 if ( class_exists( 'PLL_Duplicate_REST' ) ) {
153 $this->duplicate_rest = new PLL_Duplicate_REST();
154 }
155
156 if ( class_exists( 'PLL_Sync_Post_Model' ) ) {
157 $this->sync_post_model = new PLL_Sync_Post_Model( $this );
158 }
159
160 // Block editor metabox
161 if ( pll_use_block_editor_plugin() ) {
162 $this->block_editor_plugin = new PLL_Block_Editor_Plugin( $this );
163 }
164
165 // FIXME: Specific for WP CRON and WP CLI as the action admin_init is not fired.
166 // Waiting for a better way to handle the cases without loading the complete admin.
167 if ( wp_doing_cron() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
168 $this->maybe_load_sync_post();
169 }
170
171 }
172
173 /**
174 * Load the post synchronization object, depending on the editor in use.
175 *
176 * @since 2.6
177 */
178 public function maybe_load_sync_post() {
179 // Post synchronization
180 if ( 'post-new.php' === $GLOBALS['pagenow'] && function_exists( 'use_block_editor_for_post' ) ) {
181 // We need to wait until we know which editor is in use
182 add_filter( 'use_block_editor_for_post', array( $this, '_maybe_load_sync_post' ), 999 ); // After the plugin Classic Editor
183 } elseif ( 'post.php' === $GLOBALS['pagenow'] && function_exists( 'use_block_editor_for_post' ) && isset( $_GET['post'] ) && empty( $_GET['meta-box-loader'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
184 $this->_maybe_load_sync_post( use_block_editor_for_post( (int) $_GET['post'] ) ); // phpcs:ignore WordPress.Security.NonceVerification
185 } else {
186 $this->_maybe_load_sync_post( false );
187 }
188 }
189
190 /**
191 * Load the post synchronization object, depending on the editor in use.
192 *
193 * @since 2.6
194 *
195 * @param bool $is_block_editor Whether to use the block editor or not.
196 * @return bool
197 */
198 public function _maybe_load_sync_post( $is_block_editor ) {
199 if ( ! isset( $this->sync_post ) ) { // Make sure to instantiate the class only once, as the function may be called from a filter.
200 if ( class_exists( 'PLL_Sync_Post_REST' ) && pll_use_block_editor_plugin() && $is_block_editor ) {
201 $this->sync_post = new PLL_Sync_Post_REST( $this );
202 } elseif ( class_exists( 'PLL_Sync_Post' ) ) {
203 $this->sync_post = new PLL_Sync_Post( $this );
204 }
205 }
206
207 return $is_block_editor;
208 }
209 }
210