PluginProbe
Polylang / 3.2.6
Polylang v3.2.6
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 / links-model.php

links-model.php in Polylang 3.2.6, at include/links-model.php

226 lines 5.4 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 * Links model abstract class.
8 *
9 * @since 1.5
10 */
11 abstract class PLL_Links_Model {
12 /**
13 * True if the child class uses pretty permalinks, false otherwise.
14 *
15 * @var bool
16 */
17 public $using_permalinks;
18
19 /**
20 * Stores the plugin options.
21 *
22 * @var array
23 */
24 public $options;
25
26 /**
27 * @var PLL_Model
28 */
29 public $model;
30
31 /**
32 * Stores the home url before it is filtered.
33 *
34 * @var string
35 */
36 public $home;
37
38 /**
39 * Constructor.
40 *
41 * @since 1.5
42 *
43 * @param PLL_Model $model PLL_Model instance.
44 */
45 public function __construct( &$model ) {
46 $this->model = &$model;
47 $this->options = &$model->options;
48
49 $this->home = home_url();
50
51 add_filter( 'pll_languages_list', array( $this, 'pll_languages_list' ), 4 ); // After PLL_Static_Pages.
52 add_filter( 'pll_after_languages_cache', array( $this, 'pll_after_languages_cache' ) );
53
54 // Adds our domains or subdomains to allowed hosts for safe redirection.
55 add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
56 }
57
58 /**
59 * Adds the language code in url.
60 *
61 * @since 1.2
62 *
63 * @param string $url The url to modify.
64 * @param PLL_Language $lang The language object.
65 * @return string Modified url.
66 */
67 abstract public function add_language_to_link( $url, $lang );
68
69 /**
70 * Returns the url without language code.
71 *
72 * @since 1.2
73 *
74 * @param string $url The url to modify.
75 * @return string Modified url.
76 */
77 abstract public function remove_language_from_link( $url );
78
79 /**
80 * Returns the link to the first page.
81 *
82 * @since 1.2
83 *
84 * @param string $url The url to modify.
85 * @return string Modified url.
86 */
87 abstract public function remove_paged_from_link( $url );
88
89 /**
90 * Returns the link to a paged page.
91 *
92 * @since 1.5
93 *
94 * @param string $url The url to modify.
95 * @param int $page The page number.
96 * @return string Modified url.
97 */
98 abstract public function add_paged_to_link( $url, $page );
99
100 /**
101 * Returns the language based on language code in url.
102 *
103 * @since 1.2
104 * @since 2.0 add $url argument.
105 *
106 * @param string $url Optional, defaults to thej current url.
107 * @return string Language slug.
108 */
109 abstract public function get_language_from_url( $url = '' );
110
111 /**
112 * Returns the static front page url.
113 *
114 * @since 1.8
115 *
116 * @param PLL_Language $lang The language object.
117 * @return string The static front page url.
118 */
119 abstract public function front_page_url( $lang );
120
121 /**
122 * Changes the language code in url.
123 *
124 * @since 1.5
125 *
126 * @param string $url The url to modify.
127 * @param PLL_Language $lang The language object.
128 * @return string Modified url.
129 */
130 public function switch_language_in_link( $url, $lang ) {
131 $url = $this->remove_language_from_link( $url );
132 return $this->add_language_to_link( $url, $lang );
133 }
134
135 /**
136 * Get hosts managed on the website.
137 *
138 * @since 1.5
139 *
140 * @return string[] The list of hosts.
141 */
142 public function get_hosts() {
143 return array( wp_parse_url( $this->home, PHP_URL_HOST ) );
144 }
145
146 /**
147 * Returns the home url in a given language.
148 *
149 * @since 1.3.1
150 *
151 * @param PLL_Language $lang PLL_Language object.
152 * @return string
153 */
154 public function home_url( $lang ) {
155 $url = trailingslashit( $this->home );
156 return $this->options['hide_default'] && $lang->slug == $this->options['default_lang'] ? $url : $this->add_language_to_link( $url, $lang );
157 }
158
159 /**
160 * Sets the home urls in PLL_Language.
161 *
162 * @since 1.8
163 *
164 * @param PLL_Language $language PLL_Language object.
165 * @return void
166 */
167 protected function set_home_url( $language ) {
168 // We should always have a default language here, except, temporarily, in PHPUnit tests. The test here protects against PHP notices.
169 if ( isset( $this->options['default_lang'] ) ) {
170 $search_url = $this->home_url( $language );
171 $home_url = empty( $language->page_on_front ) || $this->options['redirect_lang'] ? $search_url : $this->front_page_url( $language );
172 $language->set_home_url( $search_url, $home_url );
173 }
174 }
175
176 /**
177 * Sets the home urls and flags before the languages are persistently cached.
178 *
179 * @since 1.8
180 *
181 * @param PLL_Language[] $languages Array of PLL_Language objects.
182 * @return PLL_Language[] Array of PLL_Language objects with home url and flag.
183 */
184 public function pll_languages_list( $languages ) {
185 foreach ( $languages as $language ) {
186 $this->set_home_url( $language );
187 $language->set_flag();
188 }
189 return $languages;
190 }
191
192 /**
193 * Sets the home urls when not cached.
194 * Sets the home urls scheme.
195 *
196 * @since 1.8
197 *
198 * @param PLL_Language[] $languages Array of PLL_Language objects.
199 * @return PLL_Language[] Array of PLL_Language objects.
200 */
201 public function pll_after_languages_cache( $languages ) {
202 foreach ( $languages as $language ) {
203 // Get the home urls when not cached.
204 if ( ( defined( 'PLL_CACHE_LANGUAGES' ) && ! PLL_CACHE_LANGUAGES ) || ( defined( 'PLL_CACHE_HOME_URL' ) && ! PLL_CACHE_HOME_URL ) ) {
205 $this->set_home_url( $language );
206 }
207
208 // Ensures that the ( possibly cached ) home and flag urls use the right scheme http or https.
209 $language->set_url_scheme();
210 }
211 return $languages;
212 }
213
214 /**
215 * Adds our domains or subdomains to allowed hosts for safe redirect.
216 *
217 * @since 1.4.3
218 *
219 * @param string[] $hosts Allowed hosts.
220 * @return string[] Modified list of allowed hosts.
221 */
222 public function allowed_redirect_hosts( $hosts ) {
223 return array_unique( array_merge( $hosts, array_values( $this->get_hosts() ) ) );
224 }
225 }
226