PluginProbe ʕ •ᴥ•ʔ
Responsive Lightbox & Gallery / 2.5.4
Responsive Lightbox & Gallery v2.5.4
2.7.8 trunk 1.0.0 1.0.1 1.0.1.1 1.0.2 1.0.3 1.0.4 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4.0 1.4.0.1 1.4.1 1.4.11 1.4.12 1.4.13 1.4.14 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3.1 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7
responsive-lightbox / includes / class-multilang.php
responsive-lightbox / includes Last commit date
providers 1 year ago class-fast-image.php 2 years ago class-folders.php 7 months ago class-frontend.php 7 months ago class-galleries.php 7 months ago class-multilang.php 2 years ago class-remote-library-api.php 1 year ago class-remote-library.php 1 year ago class-settings.php 1 year ago class-tour.php 2 years ago class-welcome.php 2 years ago class-widgets.php 2 years ago functions.php 3 years ago
class-multilang.php
324 lines
1 <?php
2 if ( ! defined( 'ABSPATH' ) )
3 exit;
4
5 new Responsive_Lightbox_Multilang();
6
7 /**
8 * Responsive Lightbox Multilang class.
9 *
10 * @class Responsive_Lightbox_Multilang
11 */
12 class Responsive_Lightbox_Multilang {
13
14 private $multilang = false;
15 private $languages = [];
16 private $default_lang = '';
17 private $current_lang = '';
18 private $active_plugin = '';
19
20 /**
21 * Class constructor.
22 *
23 * @global object $sitepress
24 *
25 * @return void
26 */
27 public function __construct() {
28 // set instance
29 Responsive_Lightbox()->multilang = $this;
30
31 // check if WPML or Polylang is active
32 include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
33
34 // Polylang support
35 if ( ( is_plugin_active( 'polylang/polylang.php' ) || is_plugin_active( 'polylang-pro/polylang.php' ) ) && function_exists( 'PLL' ) ) {
36 $this->multilang = true;
37 $this->active_plugin = 'polylang';
38
39 // get registered languages
40 $registered_languages = PLL()->model->get_languages_list();
41
42 if ( ! empty( $registered_languages ) ) {
43 foreach ( $registered_languages as $language )
44 $this->languages[$language->slug] = $language->name;
45 }
46
47 // get default language
48 $this->default_lang = pll_default_language();
49
50 // filters
51 add_filter( 'rl_count_attachments', [ $this, 'count_attachments' ], 9 );
52 // WPML support
53 } elseif ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) && class_exists( 'SitePress' ) ) {
54 $this->multilang = true;
55 $this->active_plugin = 'wpml';
56
57 global $sitepress;
58
59 // get registered languages
60 $registered_languages = icl_get_languages();
61
62 if ( ! empty( $registered_languages ) ) {
63 foreach ( $registered_languages as $language )
64 $this->languages[$language['code']] = $language['display_name'];
65 }
66
67 // get default language
68 $this->default_lang = $sitepress->get_default_language();
69
70 // if galleries enabled
71 if ( Responsive_Lightbox()->options['builder']['gallery_builder'] )
72 add_action( 'admin_init', [ $this, 'hide_thumbnail' ] );
73 }
74
75 // multilang?
76 if ( $this->multilang ) {
77 // ations
78 add_action( 'admin_init', [ $this, 'media_url_redirect' ] );
79
80 // filters
81 add_filter( 'setup_theme', [ $this, 'get_current_admin_language' ], 11 );
82 add_filter( 'rl_root_folder_query_args', [ $this, 'root_folder_query_args' ] );
83 add_filter( 'rl_gallery_query_args', [ $this, 'gallery_featured_query_args' ] );
84 add_filter( 'rl_folders_query_args', [ $this, 'gallery_folders_query_args' ] );
85 add_filter( 'rl_get_gallery_images_attachments', [ $this, 'update_gallery_images_attachments' ] );
86 add_filter( 'rl_folders_media_folder_url', [ $this, 'media_folder_url' ] );
87 }
88 }
89
90 /**
91 * Avoid duplicating hidden internal thumbnail.
92 *
93 * @return void
94 */
95 public function hide_thumbnail() {
96 // get thumbnail
97 $thumbnail_id = Responsive_Lightbox()->galleries->maybe_generate_thumbnail();
98
99 add_post_meta( $thumbnail_id, 'wpml_media_processed', 1, true );
100 }
101
102 /**
103 * Get current admin language.
104 *
105 * @return void
106 */
107 public function get_current_admin_language() {
108 if ( $this->active_plugin === 'polylang' )
109 $this->current_lang = (string) pll_current_language( 'slug' );
110 else
111 $this->current_lang = ICL_LANGUAGE_CODE === 'all' ? '' : ICL_LANGUAGE_CODE;
112 }
113
114 /**
115 * Update gallery attachments.
116 *
117 * @param array $attachments Attachment IDs
118 * @return array
119 */
120 public function update_gallery_images_attachments( $attachments ) {
121 $new_attachments = [];
122
123 foreach ( $attachments as $attachment_id ) {
124 if ( $this->active_plugin === 'polylang' )
125 $new_attachments[] = pll_get_post( $attachment_id, $this->current_lang );
126 else
127 $new_attachments[] = (int) apply_filters( 'wpml_object_id', $attachment_id, 'attachment', true, $this->current_lang );
128 }
129
130 return $attachments;
131 }
132
133 /**
134 * Root folder WP Query arguments.
135 *
136 * @param array args
137 * @return void
138 */
139 public function root_folder_query_args( $args ) {
140 $args['lang'] = $this->current_lang;
141
142 return $args;
143 }
144
145 /**
146 * Get the number of attachments per language.
147 * Based on count_posts function from Polylang plugin (/include/model.php)
148 *
149 * @global object $wpdb
150 *
151 * @param int number
152 * @return int
153 */
154 public function count_attachments( $number ) {
155 // active language?
156 if ( $this->current_lang !== '' ) {
157 // remove internal WP counter to avoid unwanted query
158 remove_filter( 'rl_count_attachments', [ Responsive_Lightbox()->folders, 'count_attachments' ], 10 );
159 // if not let internal WP counter do the job
160 } else
161 return $number;
162
163 // get taxonomies
164 $taxonomies = PLL()->model->get_filtered_taxonomies_query_vars();
165
166 // prepare defaults
167 $defaults = [
168 'author' => '',
169 'author_name' => '',
170 'monthnum' => '',
171 'day' => '',
172 'year' => '',
173 'm' => ''
174 ];
175
176 // add additional taxonomies
177 foreach ( $taxonomies as $tax ) {
178 $defaults[$tax] = '';
179 }
180
181 // prepare data
182 $args = array_intersect_key( array_merge( $defaults, wp_unslash( $_REQUEST ) ), $defaults );
183
184 global $wpdb;
185
186 $select = "SELECT pll_tr.term_taxonomy_id, COUNT( * ) AS count FROM " . $wpdb->posts;
187 $join = PLL()->model->post->join_clause();
188 $where = " WHERE post_status = 'inherit'";
189 $where .= " AND " . $wpdb->posts . ".post_type = 'attachment'";
190 $where .= PLL()->model->post->where_clause( $this->current_lang );
191 $groupby = ' GROUP BY pll_tr.term_taxonomy_id';
192
193 if ( ! empty( $args['m'] ) ) {
194 $args['m'] = '' . preg_replace( '|[^0-9]|', '', $args['m'] );
195 $where .= $wpdb->prepare( " AND YEAR( " . $wpdb->posts . ".post_date ) = %d", substr( $args['m'], 0, 4 ) );
196
197 if ( strlen( $args['m'] ) > 5 )
198 $where .= $wpdb->prepare( " AND MONTH( " . $wpdb->posts . ".post_date ) = %d", substr( $args['m'], 4, 2 ) );
199
200 if ( strlen( $args['m'] ) > 7 )
201 $where .= $wpdb->prepare( " AND DAYOFMONTH( " . $wpdb->posts . ".post_date ) = %d", substr( $args['m'], 6, 2 ) );
202 }
203
204 if ( ! empty( $args['year'] ) )
205 $where .= $wpdb->prepare( " AND YEAR( " . $wpdb->posts . ".post_date ) = %d", $args['year'] );
206
207 if ( ! empty( $args['monthnum'] ) )
208 $where .= $wpdb->prepare( " AND MONTH( " . $wpdb->posts . ".post_date ) = %d", $args['monthnum'] );
209
210 if ( ! empty( $args['day'] ) )
211 $where .= $wpdb->prepare( " AND DAYOFMONTH( " . $wpdb->posts . ".post_date ) = %d", $args['day'] );
212
213 if ( ! empty( $args['author_name'] ) ) {
214 $author = get_user_by( 'slug', sanitize_title_for_query( $args['author_name'] ) );
215
216 if ( $author )
217 $args['author'] = $author->ID;
218 }
219
220 if ( ! empty( $args['author'] ) )
221 $where .= $wpdb->prepare( " AND " . $wpdb->posts . ".post_author = %d", $args['author'] );
222
223 // filtered taxonomies ( post_format )
224 foreach ( $taxonomies as $tax_qv ) {
225 if ( ! empty( $args[ $tax_qv ] ) ) {
226 $join .= " INNER JOIN " . $wpdb->term_relationships . " AS tr ON tr.object_id = " . $wpdb->posts . ".ID";
227 $join .= " INNER JOIN " . $wpdb->term_taxonomy . " AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id";
228 $join .= " INNER JOIN " . $wpdb->terms . " AS t ON t.term_id = tt.term_id";
229 $where .= $wpdb->prepare( ' AND t.slug = %s', $args[ $tax_qv ] );
230 }
231 }
232
233 // get result
234 $result = $wpdb->get_row( $select . $join . $where . $groupby, ARRAY_A );
235
236 return empty( $result['count'] ) ? 0 : (int) $result['count'];
237 }
238
239 /**
240 * Featured gallery query arguments.
241 *
242 * @param array $args
243 * @return array
244 */
245 public function gallery_featured_query_args( $args ) {
246 // set active language
247 $args['lang'] = $this->current_lang;
248
249 return $args;
250 }
251
252 /**
253 * Folders gallery query arguments.
254 *
255 * @param array $args
256 * @return array
257 */
258 public function gallery_folders_query_args( $args ) {
259 // set active language
260 $args['lang'] = $this->current_lang;
261
262 return $args;
263 }
264
265 /**
266 * Update media folders URLs.
267 *
268 * @param string $url
269 * @return string
270 */
271 public function media_folder_url( $url ) {
272 // active language?
273 if ( $this->current_lang !== '' )
274 $url = add_query_arg( 'lang', $this->current_lang, $url );
275
276 return $url;
277 }
278
279 /**
280 * Redirect to equivalent media folder in specified language.
281 *
282 * @global string $pagenow
283 *
284 * @return void
285 */
286 public function media_url_redirect() {
287 global $pagenow;
288
289 // get main instance
290 $rl = Responsive_Lightbox();
291
292 // only for media with selected language
293 if ( $pagenow === 'upload.php' && $this->current_lang !== '' && $rl->options['folders']['active'] ) {
294 // get taxonomy
295 $taxonomy = $rl->options['folders']['media_taxonomy'];
296
297 // parse URL
298 $params = parse_url( html_entity_decode( urldecode( add_query_arg( '', '' ) ) ) );
299
300 if ( isset( $params['query'] ) ) {
301 // parse query string
302 parse_str( $params['query'], $args );
303
304 if ( isset( $args['lang'], $args[$taxonomy] ) ) {
305 // cast term ID
306 $term_id = (int) $args[$taxonomy];
307
308 if ( $this->active_plugin === 'polylang' )
309 $new_term_id = pll_get_term( $term_id, $args['lang'] );
310 else
311 $new_term_id = apply_filters( 'wpml_object_id', $term_id, $taxonomy, true, $args['lang'] );
312
313 // different ID?
314 if ( $term_id !== $new_term_id ) {
315 wp_safe_redirect( add_query_arg( $taxonomy, $new_term_id ) );
316
317 exit;
318 }
319 }
320 }
321 }
322 }
323 }
324