PluginProbe
Polylang / 3.1.4
Polylang v3.1.4
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 +74 -73 2.7.33.1.4 View file →
@@ -1,5 +1,8 @@
1 1 <?php
2 +/**
3 + * @package Polylang
4 + */
2 5
3 6 /**
4 7 * Base class for both admin and frontend
5 8 *
@@ -5,16 +8,47 @@
5 8 *
6 9 * @since 1.2
7 10 */
8 11 abstract class PLL_Base {
9 - public $links_model, $model, $options;
12 + /**
13 + * Stores the plugin options.
14 + *
15 + * @var array
16 + */
17 + public $options;
10 18
11 19 /**
12 - * Constructor
20 + * @var PLL_Model
21 + */
22 + public $model;
23 +
24 + /**
25 + * Instance of a child class of PLL_Links_Model.
13 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 + *
14 48 * @since 1.2
15 49 *
16 - * @param object $links_model
50 + * @param PLL_Links_Model $links_model Links Model.
17 51 */
18 52 public function __construct( &$links_model ) {
19 53 $this->links_model = &$links_model;
20 54 $this->model = &$links_model->model;
@@ -26,8 +60,9 @@
26 60
27 61 // User defined strings translations
28 62 add_action( 'pll_language_defined', array( $this, 'load_strings_translations' ), 5 );
29 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.
30 65
31 66 // Switch_to_blog
32 67 add_action( 'switch_blog', array( $this, 'switch_blog' ), 10, 2 );
33 68 }
@@ -32,33 +67,25 @@
32 67 add_action( 'switch_blog', array( $this, 'switch_blog' ), 10, 2 );
33 68 }
34 69
35 70 /**
36 - * Instantiate classes always needed
71 + * Instantiates classes reacting to CRUD operations on posts and terms,
72 + * only when at least one language is defined.
37 73 *
38 74 * @since 2.6
75 + *
76 + * @return void
39 77 */
40 78 public function init() {
41 - // REST API
42 - if ( class_exists( 'PLL_REST_API' ) ) {
43 - $this->rest_api = new PLL_REST_API( $this );
44 - }
45 -
46 79 if ( $this->model->get_languages_list() ) {
47 - // Used by content duplicate and post synchronization
48 - if ( class_exists( 'PLL_Sync_Content' ) ) {
49 - $this->sync_content = new PLL_Sync_Content( $this );
50 - }
80 + $this->posts = new PLL_CRUD_Posts( $this );
81 + $this->terms = new PLL_CRUD_Terms( $this );
51 82
52 - // Active languages
53 - if ( class_exists( 'PLL_Active_Languages' ) ) {
54 - $this->active_languages = new PLL_Active_Languages( $this );
55 - }
56 -
57 - // Share post slugs
58 - if ( get_option( 'permalink_structure' ) && $this->options['force_lang'] && class_exists( 'PLL_Share_Post_Slug' ) ) {
59 - $this->share_post_slug = new PLL_Share_Post_Slug( $this );
60 - }
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' ) );
61 88 }
62 89 }
63 90
64 91 /**
@@ -64,8 +91,10 @@
64 91 /**
65 92 * Registers our widgets
66 93 *
67 94 * @since 0.1
95 + *
96 + * @return void
68 97 */
69 98 public function widgets_init() {
70 99 register_widget( 'PLL_Widget_Languages' );
71 100
@@ -82,12 +111,13 @@
82 111 * @since 1.2
83 112 * @since 2.1.3 $locale parameter added.
84 113 *
85 114 * @param string $locale Locale. Defaults to current locale.
115 + * @return void
86 116 */
87 117 public function load_strings_translations( $locale = '' ) {
88 118 if ( empty( $locale ) ) {
89 - $locale = get_locale();
119 + $locale = ( is_admin() && ! Polylang::is_ajax_on_front() ) ? get_user_locale() : get_locale();
90 120 }
91 121
92 122 $language = $this->model->get_language( $locale );
93 123
@@ -100,70 +130,41 @@
100 130 }
101 131 }
102 132
103 133 /**
104 - * Resets some variables when switching blog
105 - * 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.
106 136 *
107 137 * @since 1.5.1
108 138 *
109 - * @param int $new_blog
110 - * @param int $old_blog
111 - * @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
112 142 */
113 - public function switch_blog( $new_blog, $old_blog ) {
114 - $plugins = ( $sitewide_plugins = get_site_option( 'active_sitewide_plugins' ) ) && is_array( $sitewide_plugins ) ? array_keys( $sitewide_plugins ) : array();
115 - $plugins = array_merge( $plugins, get_option( 'active_plugins', array() ) );
116 -
117 - // 2nd test needed when Polylang is not networked activated
118 - // 3rd test needed when Polylang is networked activated and a new site is created
119 - if ( $new_blog != $old_blog && in_array( POLYLANG_BASENAME, $plugins ) && get_option( 'polylang' ) ) {
120 - $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.
121 146 remove_action( 'pre_option_rewrite_rules', array( $this->links_model, 'prepare_rewrite_rules' ) );
122 147 $this->links_model = $this->model->get_links_model();
123 - return true;
124 148 }
125 - return false;
126 149 }
127 150
128 151 /**
129 - * Some backward compatibility with Polylang < 1.2
130 - * Allows for example to call $polylang->get_languages_list() instead of $polylang->model->get_languages_list()
131 - * 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.
132 153 *
133 - * @since 1.2
154 + * @since 3.0
134 155 *
135 - * @param string $func function name
136 - * @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
137 159 */
138 - public function __call( $func, $args ) {
139 - foreach ( $this as $prop => &$obj ) {
140 - if ( is_object( $obj ) && method_exists( $obj, $func ) ) {
141 - if ( WP_DEBUG ) {
142 - $debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
143 - $i = 1 + empty( $debug[1]['line'] ); // The file and line are in $debug[2] if the function was called using call_user_func
144 - trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
145 - sprintf(
146 - '%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",
147 - esc_html( $func ),
148 - esc_html( $prop ),
149 - esc_html( $debug[ $i ]['file'] ),
150 - absint( $debug[ $i ]['line'] )
151 - )
152 - );
153 - }
154 - return call_user_func_array( array( $obj, $func ), $args );
155 - }
156 - }
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() ) );
157 163
158 - $debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
159 - trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
160 - sprintf(
161 - 'Call to undefined function PLL()->%1$s() in %2$s on line %3$s' . "\nError handler",
162 - esc_html( $func ),
163 - esc_html( $debug[0]['file'] ),
164 - absint( $debug[0]['line'] )
165 - ),
166 - E_USER_ERROR
167 - );
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' );
168 169 }
169 170 }