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