PluginProbe
Polylang / 1.5.2
Polylang v1.5.2
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/links-model.php +37 -186 3.01.5.2 View file →
@@ -1,225 +1,76 @@
1 1 <?php
2 -/**
3 - * @package Polylang
4 - */
5 2
6 -/**
7 - * Links model abstract class.
3 +/*
4 + * links model abstract class
8 5 *
9 6 * @since 1.5
10 7 */
11 8 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;
9 + public $model, $options;
10 + public $home; // used to avoid several calls to get_option('home')
18 11
19 - /**
20 - * Stores the plugin options.
12 + /*
13 + * constructor
21 14 *
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 15 * @since 1.5
42 16 *
43 - * @param PLL_Model $model PLL_Model instance.
17 + * @param object $model PLL_Model instance
44 18 */
45 - public function __construct( &$model ) {
46 - $this->model = &$model;
19 + public function __construct(&$model) {
20 + $this->model = &$model;
47 21 $this->options = &$model->options;
48 22
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' ) );
23 + $this->home = get_option('home');
56 24 }
57 25
58 - /**
59 - * Adds the language code in url.
26 + /*
27 + * returns the link to the first page when using pretty permalinks
60 28 *
61 29 * @since 1.2
62 30 *
63 - * @param string $url The url to modify.
64 - * @param PLL_Language $lang The language object.
65 - * @return string Modified url.
31 + * @param string $url url to modify
32 + * @return string modified url
66 33 */
67 - abstract public function add_language_to_link( $url, $lang );
34 + public function remove_paged_from_link($url) {
35 + return preg_replace('#\/page\/[0-9]+\/#', '/', $url); // FIXME trailing slash ?
36 + }
68 37
69 - /**
70 - * Returns the url without language code.
38 + /*
39 + * returns the link to the paged page when using pretty permalinks
71 40 *
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 41 * @since 1.5
93 42 *
94 - * @param string $url The url to modify.
95 - * @param int $page The page number.
96 - * @return string Modified url.
43 + * @param string $url url to modify
44 + * @param int $page
45 + * @return string modified url
97 46 */
98 - abstract public function add_paged_to_link( $url, $page );
47 + public function add_paged_to_link($url, $page) {
48 + return trailingslashit($url) . 'page/' . $page; // FIXME trailing slash ?
49 + }
99 50
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 51
111 - /**
112 - * Returns the static front page url.
52 + /*
53 + * changes the language code in url
113 54 *
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 55 * @since 1.5
125 56 *
126 - * @param string $url The url to modify.
127 - * @param PLL_Language $lang The language object.
128 - * @return string Modified url.
57 + * @param string $url url to modify
58 + * @param object $lang language
59 + * @return string modified url
129 60 */
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 );
61 + public function switch_language_in_link($url, $lang) {
62 + $url = $this->remove_language_from_link($url);
63 + return $this->add_language_to_link($url, $lang);
133 64 }
134 65
135 - /**
136 - * Get hosts managed on the website.
66 + /*
67 + * get hosts managed on the website
137 68 *
138 69 * @since 1.5
139 70 *
140 - * @return string[] The list of hosts.
71 + * @return array list of hosts
141 72 */
142 73 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() ) ) );
74 + return array(parse_url($this->home, PHP_URL_HOST));
224 75 }
225 76 }