PluginProbe
Polylang / 3.1
Polylang v3.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 | include/base.php +36 -55 2.83.1 View file →
@@ -16,10 +16,8 @@
16 16 */
17 17 public $options;
18 18
19 19 /**
20 - * Instance of PLL_Model.
21 - *
22 20 * @var PLL_Model
23 21 */
24 22 public $model;
25 23
@@ -44,13 +42,13 @@
44 42 */
45 43 public $terms;
46 44
47 45 /**
48 - * Constructor
46 + * Constructor.
49 47 *
50 48 * @since 1.2
51 49 *
52 - * @param object $links_model
50 + * @param PLL_Links_Model $links_model Links Model.
53 51 */
54 52 public function __construct( &$links_model ) {
55 53 $this->links_model = &$links_model;
56 54 $this->model = &$links_model->model;
@@ -62,8 +60,9 @@
62 60
63 61 // User defined strings translations
64 62 add_action( 'pll_language_defined', array( $this, 'load_strings_translations' ), 5 );
65 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.
66 65
67 66 // Switch_to_blog
68 67 add_action( 'switch_blog', array( $this, 'switch_blog' ), 10, 2 );
69 68 }
@@ -72,13 +71,21 @@
72 71 * Instantiates classes reacting to CRUD operations on posts and terms,
73 72 * only when at least one language is defined.
74 73 *
75 74 * @since 2.6
75 + *
76 + * @return void
76 77 */
77 78 public function init() {
78 79 if ( $this->model->get_languages_list() ) {
79 80 $this->posts = new PLL_CRUD_Posts( $this );
80 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' ) );
81 88 }
82 89 }
83 90
84 91 /**
@@ -84,8 +91,10 @@
84 91 /**
85 92 * Registers our widgets
86 93 *
87 94 * @since 0.1
95 + *
96 + * @return void
88 97 */
89 98 public function widgets_init() {
90 99 register_widget( 'PLL_Widget_Languages' );
91 100
@@ -102,12 +111,13 @@
102 111 * @since 1.2
103 112 * @since 2.1.3 $locale parameter added.
104 113 *
105 114 * @param string $locale Locale. Defaults to current locale.
115 + * @return void
106 116 */
107 117 public function load_strings_translations( $locale = '' ) {
108 118 if ( empty( $locale ) ) {
109 - $locale = get_locale();
119 + $locale = ( is_admin() && ! Polylang::is_ajax_on_front() ) ? get_user_locale() : get_locale();
110 120 }
111 121
112 122 $language = $this->model->get_language( $locale );
113 123
@@ -120,70 +130,41 @@
120 130 }
121 131 }
122 132
123 133 /**
124 - * Resets some variables when switching blog
125 - * Applies only if Polylang is active on the new blog
134 + * Resets some variables when the blog is switched.
135 + * Applied only if Polylang is active on the new blog.
126 136 *
127 137 * @since 1.5.1
128 138 *
129 - * @param int $new_blog
130 - * @param int $old_blog
131 - * @return bool not used by WP but by child class
139 + * @param int $new_blog_id New blog ID.
140 + * @param int $prev_blog_id Previous blog ID.
141 + * @return void
132 142 */
133 - public function switch_blog( $new_blog, $old_blog ) {
134 - $plugins = ( $sitewide_plugins = get_site_option( 'active_sitewide_plugins' ) ) && is_array( $sitewide_plugins ) ? array_keys( $sitewide_plugins ) : array();
135 - $plugins = array_merge( $plugins, get_option( 'active_plugins', array() ) );
136 -
137 - // 2nd test needed when Polylang is not networked activated
138 - // 3rd test needed when Polylang is networked activated and a new site is created
139 - if ( $new_blog != $old_blog && in_array( POLYLANG_BASENAME, $plugins ) && get_option( 'polylang' ) ) {
140 - $this->options = get_option( 'polylang' ); // Needed for menus
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.
141 146 remove_action( 'pre_option_rewrite_rules', array( $this->links_model, 'prepare_rewrite_rules' ) );
142 147 $this->links_model = $this->model->get_links_model();
143 - return true;
144 148 }
145 - return false;
146 149 }
147 150
148 151 /**
149 - * Some backward compatibility with Polylang < 1.2
150 - * Allows for example to call $polylang->get_languages_list() instead of $polylang->model->get_languages_list()
151 - * This works but should be slower than the direct call, thus an error is triggered in debug mode
152 + * Checks if Polylang is active on the new blog when the blog is switched.
152 153 *
153 - * @since 1.2
154 + * @since 3.0
154 155 *
155 - * @param string $func function name
156 - * @param array $args function arguments
156 + * @param int $new_blog_id New blog ID.
157 + * @param int $prev_blog_id Previous blog ID.
158 + * @return bool
157 159 */
158 - public function __call( $func, $args ) {
159 - foreach ( $this as $prop => &$obj ) {
160 - if ( is_object( $obj ) && method_exists( $obj, $func ) ) {
161 - if ( WP_DEBUG ) {
162 - $debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
163 - $i = 1 + empty( $debug[1]['line'] ); // The file and line are in $debug[2] if the function was called using call_user_func
164 - trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
165 - sprintf(
166 - '%1$s was called incorrectly in %3$s on line %4$s: the call to $polylang->%1$s() has been deprecated in Polylang 1.2, use PLL()->%2$s->%1$s() instead.' . "\nError handler",
167 - esc_html( $func ),
168 - esc_html( $prop ),
169 - esc_html( $debug[ $i ]['file'] ),
170 - absint( $debug[ $i ]['line'] )
171 - )
172 - );
173 - }
174 - return call_user_func_array( array( $obj, $func ), $args );
175 - }
176 - }
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() ) );
177 163
178 - $debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
179 - trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
180 - sprintf(
181 - 'Call to undefined function PLL()->%1$s() in %2$s on line %3$s' . "\nError handler",
182 - esc_html( $func ),
183 - esc_html( $debug[0]['file'] ),
184 - absint( $debug[0]['line'] )
185 - ),
186 - E_USER_ERROR
187 - );
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' );
188 169 }
189 170 }