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 / include / base.php

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

196 lines 5.6 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 * Instance of PLL_Model.
21 *
22 * @var PLL_Model
23 */
24 public $model;
25
26 /**
27 * Instance of a child class of PLL_Links_Model.
28 *
29 * @var PLL_Links_Model
30 */
31 public $links_model;
32
33 /**
34 * Registers hooks on insert / update post related actions and filters.
35 *
36 * @var PLL_CRUD_Posts
37 */
38 public $posts;
39
40 /**
41 * Registers hooks on insert / update term related action and filters.
42 *
43 * @var PLL_CRUD_Terms
44 */
45 public $terms;
46
47 /**
48 * Constructor
49 *
50 * @since 1.2
51 *
52 * @param object $links_model
53 */
54 public function __construct( &$links_model ) {
55 $this->links_model = &$links_model;
56 $this->model = &$links_model->model;
57 $this->options = &$this->model->options;
58
59 $GLOBALS['l10n_unloaded']['pll_string'] = true; // Short-circuit _load_textdomain_just_in_time() for 'pll_string' domain in WP 4.6+
60
61 add_action( 'widgets_init', array( $this, 'widgets_init' ) );
62
63 // User defined strings translations
64 add_action( 'pll_language_defined', array( $this, 'load_strings_translations' ), 5 );
65 add_action( 'change_locale', array( $this, 'load_strings_translations' ) ); // Since WP 4.7
66
67 // Switch_to_blog
68 add_action( 'switch_blog', array( $this, 'switch_blog' ), 10, 2 );
69 }
70
71 /**
72 * Instantiates classes reacting to CRUD operations on posts and terms,
73 * only when at least one language is defined.
74 *
75 * @since 2.6
76 */
77 public function init() {
78 if ( $this->model->get_languages_list() ) {
79 $this->posts = new PLL_CRUD_Posts( $this );
80 $this->terms = new PLL_CRUD_Terms( $this );
81
82 // WordPress options.
83 new PLL_Translate_Option( 'blogname', array(), array( 'context' => 'WorPress' ) );
84 new PLL_Translate_Option( 'blogdescription', array(), array( 'context' => 'WorPress' ) );
85 new PLL_Translate_Option( 'date_format', array(), array( 'context' => 'WorPress' ) );
86 new PLL_Translate_Option( 'time_format', array(), array( 'context' => 'WorPress' ) );
87 }
88 }
89
90 /**
91 * Registers our widgets
92 *
93 * @since 0.1
94 */
95 public function widgets_init() {
96 register_widget( 'PLL_Widget_Languages' );
97
98 // Overwrites the calendar widget to filter posts by language
99 if ( ! defined( 'PLL_WIDGET_CALENDAR' ) || PLL_WIDGET_CALENDAR ) {
100 unregister_widget( 'WP_Widget_Calendar' );
101 register_widget( 'PLL_Widget_Calendar' );
102 }
103 }
104
105 /**
106 * Loads user defined strings translations
107 *
108 * @since 1.2
109 * @since 2.1.3 $locale parameter added.
110 *
111 * @param string $locale Locale. Defaults to current locale.
112 */
113 public function load_strings_translations( $locale = '' ) {
114 if ( empty( $locale ) ) {
115 $locale = get_locale();
116 }
117
118 $language = $this->model->get_language( $locale );
119
120 if ( ! empty( $language ) ) {
121 $mo = new PLL_MO();
122 $mo->import_from_db( $language );
123 $GLOBALS['l10n']['pll_string'] = &$mo;
124 } else {
125 unset( $GLOBALS['l10n']['pll_string'] );
126 }
127 }
128
129 /**
130 * Resets some variables when switching blog
131 * Applies only if Polylang is active on the new blog
132 *
133 * @since 1.5.1
134 *
135 * @param int $new_blog
136 * @param int $old_blog
137 * @return bool not used by WP but by child class
138 */
139 public function switch_blog( $new_blog, $old_blog ) {
140 $plugins = ( $sitewide_plugins = get_site_option( 'active_sitewide_plugins' ) ) && is_array( $sitewide_plugins ) ? array_keys( $sitewide_plugins ) : array();
141 $plugins = array_merge( $plugins, get_option( 'active_plugins', array() ) );
142
143 // 2nd test needed when Polylang is not networked activated
144 // 3rd test needed when Polylang is networked activated and a new site is created
145 if ( $new_blog != $old_blog && in_array( POLYLANG_BASENAME, $plugins ) && get_option( 'polylang' ) ) {
146 $this->options = get_option( 'polylang' ); // Needed for menus
147 remove_action( 'pre_option_rewrite_rules', array( $this->links_model, 'prepare_rewrite_rules' ) );
148 $this->links_model = $this->model->get_links_model();
149 return true;
150 }
151 return false;
152 }
153
154 /**
155 * Some backward compatibility with Polylang < 1.2
156 * Allows for example to call $polylang->get_languages_list() instead of $polylang->model->get_languages_list()
157 * This works but should be slower than the direct call, thus an error is triggered in debug mode
158 *
159 * @since 1.2
160 *
161 * @param string $func function name
162 * @param array $args function arguments
163 */
164 public function __call( $func, $args ) {
165 foreach ( $this as $prop => &$obj ) {
166 if ( is_object( $obj ) && method_exists( $obj, $func ) ) {
167 if ( WP_DEBUG ) {
168 $debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
169 $i = 1 + empty( $debug[1]['line'] ); // The file and line are in $debug[2] if the function was called using call_user_func
170 trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
171 sprintf(
172 '%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",
173 esc_html( $func ),
174 esc_html( $prop ),
175 esc_html( $debug[ $i ]['file'] ),
176 absint( $debug[ $i ]['line'] )
177 )
178 );
179 }
180 return call_user_func_array( array( $obj, $func ), $args );
181 }
182 }
183
184 $debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
185 trigger_error( // phpcs:ignore WordPress.PHP.DevelopmentFunctions
186 sprintf(
187 'Call to undefined function PLL()->%1$s() in %2$s on line %3$s' . "\nError handler",
188 esc_html( $func ),
189 esc_html( $debug[0]['file'] ),
190 absint( $debug[0]['line'] )
191 ),
192 E_USER_ERROR
193 );
194 }
195 }
196