PluginProbe
Polylang / 3.2.2
Polylang v3.2.2
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 / include / base.php

base.php in Polylang 3.2.2, at include/base.php

197 lines 5.3 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 * Base class for both admin and frontend
8 *
9 * @since 1.2
10 */
11 abstract class PLL_Base {
12 /**
13 * Stores the plugin options.
14 *
15 * @var array
16 */
17 public $options;
18
19 /**
20 * @var PLL_Model
21 */
22 public $model;
23
24 /**
25 * Instance of a child class of PLL_Links_Model.
26 *
27 * @var PLL_Links_Model
28 */
29 public $links_model;
30
31 /**
32 * Registers hooks on insert / update post related actions and filters.
33 *
34 * @var PLL_CRUD_Posts
35 */
36 public $posts;
37
38 /**
39 * Registers hooks on insert / update term related action and filters.
40 *
41 * @var PLL_CRUD_Terms
42 */
43 public $terms;
44
45 /**
46 * Constructor.
47 *
48 * @since 1.2
49 *
50 * @param PLL_Links_Model $links_model Links Model.
51 */
52 public function __construct( &$links_model ) {
53 $this->links_model = &$links_model;
54 $this->model = &$links_model->model;
55 $this->options = &$this->model->options;
56
57 $GLOBALS['l10n_unloaded']['pll_string'] = true; // Short-circuit _load_textdomain_just_in_time() for 'pll_string' domain in WP 4.6+
58
59 add_action( 'widgets_init', array( $this, 'widgets_init' ) );
60
61 // User defined strings translations
62 add_action( 'pll_language_defined', array( $this, 'load_strings_translations' ), 5 );
63 add_action( 'change_locale', array( $this, 'load_strings_translations' ) ); // Since WP 4.7
64 add_action( 'personal_options_update', array( $this, 'load_strings_translations' ), 1, 0 ); // Before WP, for confirmation request when changing the user email.
65
66 // Switch_to_blog
67 add_action( 'switch_blog', array( $this, 'switch_blog' ), 10, 2 );
68 }
69
70 /**
71 * Instantiates classes reacting to CRUD operations on posts and terms,
72 * only when at least one language is defined.
73 *
74 * @since 2.6
75 *
76 * @return void
77 */
78 public function init() {
79 if ( $this->model->get_languages_list() ) {
80 $this->posts = new PLL_CRUD_Posts( $this );
81 $this->terms = new PLL_CRUD_Terms( $this );
82
83 // WordPress options.
84 new PLL_Translate_Option( 'blogname', array(), array( 'context' => 'WordPress' ) );
85 new PLL_Translate_Option( 'blogdescription', array(), array( 'context' => 'WordPress' ) );
86 new PLL_Translate_Option( 'date_format', array(), array( 'context' => 'WordPress' ) );
87 new PLL_Translate_Option( 'time_format', array(), array( 'context' => 'WordPress' ) );
88 }
89 }
90
91 /**
92 * Registers our widgets
93 *
94 * @since 0.1
95 *
96 * @return void
97 */
98 public function widgets_init() {
99 register_widget( 'PLL_Widget_Languages' );
100
101 // Overwrites the calendar widget to filter posts by language
102 if ( ! defined( 'PLL_WIDGET_CALENDAR' ) || PLL_WIDGET_CALENDAR ) {
103 unregister_widget( 'WP_Widget_Calendar' );
104 register_widget( 'PLL_Widget_Calendar' );
105 }
106 }
107
108 /**
109 * Loads user defined strings translations
110 *
111 * @since 1.2
112 * @since 2.1.3 $locale parameter added.
113 *
114 * @param string $locale Locale. Defaults to current locale.
115 * @return void
116 */
117 public function load_strings_translations( $locale = '' ) {
118 if ( empty( $locale ) ) {
119 $locale = ( is_admin() && ! Polylang::is_ajax_on_front() ) ? get_user_locale() : get_locale();
120 }
121
122 $language = $this->model->get_language( $locale );
123
124 if ( ! empty( $language ) ) {
125 $mo = new PLL_MO();
126 $mo->import_from_db( $language );
127 $GLOBALS['l10n']['pll_string'] = &$mo;
128 } else {
129 unset( $GLOBALS['l10n']['pll_string'] );
130 }
131 }
132
133 /**
134 * Resets some variables when the blog is switched.
135 * Applied only if Polylang is active on the new blog.
136 *
137 * @since 1.5.1
138 *
139 * @param int $new_blog_id New blog ID.
140 * @param int $prev_blog_id Previous blog ID.
141 * @return void
142 */
143 public function switch_blog( $new_blog_id, $prev_blog_id ) {
144 if ( $this->is_active_on_new_blog( $new_blog_id, $prev_blog_id ) ) {
145 $this->options = get_option( 'polylang' ); // Needed for menus.
146 remove_action( 'pre_option_rewrite_rules', array( $this->links_model, 'prepare_rewrite_rules' ) );
147 $this->links_model = $this->model->get_links_model();
148 }
149 }
150
151 /**
152 * Checks if Polylang is active on the new blog when the blog is switched.
153 *
154 * @since 3.0
155 *
156 * @param int $new_blog_id New blog ID.
157 * @param int $prev_blog_id Previous blog ID.
158 * @return bool
159 */
160 protected function is_active_on_new_blog( $new_blog_id, $prev_blog_id ) {
161 $plugins = ( $sitewide_plugins = get_site_option( 'active_sitewide_plugins' ) ) && is_array( $sitewide_plugins ) ? array_keys( $sitewide_plugins ) : array();
162 $plugins = array_merge( $plugins, get_option( 'active_plugins', array() ) );
163
164 /*
165 * The 2nd test is needed when Polylang is not networked activated.
166 * The 3rd test is needed when Polylang is networked activated and a new site is created.
167 */
168 return $new_blog_id !== $prev_blog_id && in_array( POLYLANG_BASENAME, $plugins ) && get_option( 'polylang' );
169 }
170
171 /**
172 * Check if the customize menu should be removed or not.
173 *
174 * @since 3.2
175 *
176 * @return bool True if it should be removed, false otherwise.
177 */
178 public function should_customize_menu_be_removed() {
179 // Exit if a block theme isn't activated.
180 if ( ! function_exists( 'wp_is_block_theme' ) || ! wp_is_block_theme() ) {
181 return false;
182 }
183
184 global $wp_filter;
185 if ( empty( $wp_filter['customize_register'] ) ) {
186 return false;
187 }
188
189 $customize_register_hooks = count( array_merge( ...array_values( $wp_filter['customize_register']->callbacks ) ) );
190 if ( $customize_register_hooks > 1 ) {
191 return false;
192 }
193
194 return true;
195 }
196 }
197