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

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

170 lines 5.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Base class for both admin and frontend
5 *
6 * @since 1.2
7 */
8 abstract class PLL_Base {
9 public $links_model, $model, $options;
10
11 /**
12 * Constructor
13 *
14 * @since 1.2
15 *
16 * @param object $links_model
17 */
18 public function __construct( &$links_model ) {
19 $this->links_model = &$links_model;
20 $this->model = &$links_model->model;
21 $this->options = &$this->model->options;
22
23 $GLOBALS['l10n_unloaded']['pll_string'] = true; // Short-circuit _load_textdomain_just_in_time() for 'pll_string' domain in WP 4.6+
24
25 add_action( 'widgets_init', array( $this, 'widgets_init' ) );
26
27 // User defined strings translations
28 add_action( 'pll_language_defined', array( $this, 'load_strings_translations' ), 5 );
29 add_action( 'change_locale', array( $this, 'load_strings_translations' ) ); // Since WP 4.7
30
31 // Switch_to_blog
32 add_action( 'switch_blog', array( $this, 'switch_blog' ), 10, 2 );
33 }
34
35 /**
36 * Instantiate classes always needed
37 *
38 * @since 2.6
39 */
40 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 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 }
51
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 }
61 }
62 }
63
64 /**
65 * Registers our widgets
66 *
67 * @since 0.1
68 */
69 public function widgets_init() {
70 register_widget( 'PLL_Widget_Languages' );
71
72 // Overwrites the calendar widget to filter posts by language
73 if ( ! defined( 'PLL_WIDGET_CALENDAR' ) || PLL_WIDGET_CALENDAR ) {
74 unregister_widget( 'WP_Widget_Calendar' );
75 register_widget( 'PLL_Widget_Calendar' );
76 }
77 }
78
79 /**
80 * Loads user defined strings translations
81 *
82 * @since 1.2
83 * @since 2.1.3 $locale parameter added.
84 *
85 * @param string $locale Locale. Defaults to current locale.
86 */
87 public function load_strings_translations( $locale = '' ) {
88 if ( empty( $locale ) ) {
89 $locale = get_locale();
90 }
91
92 $language = $this->model->get_language( $locale );
93
94 if ( ! empty( $language ) ) {
95 $mo = new PLL_MO();
96 $mo->import_from_db( $language );
97 $GLOBALS['l10n']['pll_string'] = &$mo;
98 } else {
99 unset( $GLOBALS['l10n']['pll_string'] );
100 }
101 }
102
103 /**
104 * Resets some variables when switching blog
105 * Applies only if Polylang is active on the new blog
106 *
107 * @since 1.5.1
108 *
109 * @param int $new_blog
110 * @param int $old_blog
111 * @return bool not used by WP but by child class
112 */
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
121 remove_action( 'pre_option_rewrite_rules', array( $this->links_model, 'prepare_rewrite_rules' ) );
122 $this->links_model = $this->model->get_links_model();
123 return true;
124 }
125 return false;
126 }
127
128 /**
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
132 *
133 * @since 1.2
134 *
135 * @param string $func function name
136 * @param array $args function arguments
137 */
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 }
157
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 );
168 }
169 }
170