PluginProbe
FileBird – WordPress Media Library Folders & File Manager / 6.3.2
FileBird – WordPress Media Library Folders & File Manager v6.3.2
6.5.8 6.5.7 6.5.5 6.5.4 trunk 4.3.1 5.1.6 5.3 5.3.2 5.4.3 5.4.4 5.4.5 5.5 5.5.3 5.5.5 5.5.8 5.5.8.1 5.6 5.6.1 5.6.2 5.6.3 5.6.4 6.2.3 6.2.5 6.3 All 36 releases
filebird / includes / Support / Polylang.php

Polylang.php in FileBird – WordPress Media Library Folders & File Manager 6.3.2, at includes/Support/Polylang.php

156 lines 5.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace FileBird\Support;
3
4 use FileBird\Controller\Controller;
5
6 defined( 'ABSPATH' ) || exit;
7
8 class Polylang extends Controller {
9 private $active;
10 private $lang;
11 private $lang_id = null;
12
13 public function __construct() {
14 global $polylang;
15
16 $this->active = function_exists( 'pll_get_post_translations' );
17 if ( $this->active ) {
18 if ( $polylang->options['media_support'] == 1 ) {
19 $this->lang = PLL()->model->get_language( get_user_meta( get_current_user_id(), 'pll_filter_content', true ) );
20 if ( $this->lang ) {
21 $this->lang_id = $this->lang->term_id;
22 }
23 if ( $this->lang_id != null ) {
24 add_filter( 'fbv_speedup_get_count_query', '__return_true' );
25 }
26 add_filter( 'fbv_ids_assigned_to_folder', array( $this, 'assigned_to_folder' ), 10, 2 );
27 add_filter( 'fbv_get_count_query', array( $this, 'fbv_get_count_query' ), 10, 3 );
28 add_filter( 'fbv_all_folders_and_count', array( $this, 'all_folders_and_count_query' ), 10, 2 );
29 add_filter( 'fbv_data', array( $this, 'fbv_data' ), 10, 1 );
30 }
31 }
32 }
33
34 public function fbv_data( $data ) {
35 $data['pll_lang'] = \pll_current_language( 'slug' );
36 $data['icl_lang'] = '';
37
38 return $data;
39 }
40
41 private function all_langs_where() {
42 $term_taxonomy_ids = array();
43
44 $all_langs = \pll_languages_list();
45
46 foreach ( $all_langs as $slug ) {
47 $term_taxonomy_ids[] = $this->get_preferred_language( $slug );
48 }
49
50 return implode( ',', array_map( 'intval', $term_taxonomy_ids ) );
51 }
52
53 public function assigned_to_folder( $attachmentIds ) {
54 $idArr = array();
55
56 foreach ( $attachmentIds as $id ) {
57 $translatedPostIds = \pll_get_post_translations( $id );
58 foreach ( $translatedPostIds as $trid ) {
59 array_push( $idArr, intval( $trid ) );
60 }
61 }
62
63 return empty( $idArr ) ? $attachmentIds : $idArr;
64 }
65
66 public function get_preferred_language( $lang ) {
67 $pll_lang = PLL()->model->get_language( $lang );
68
69 if ( $pll_lang ) {
70 if ( version_compare( POLYLANG_VERSION, '3.4', '>=' ) ) {
71 return $pll_lang->get_tax_prop( 'language', 'term_taxonomy_id' );
72 } else {
73 return $pll_lang->term_props['language']['term_taxonomy_id'];
74 }
75 }
76 return $this->lang_id;
77 }
78
79 public function fbv_get_count_query( $q, $folder_id, $lang ) {
80 $lang_id = $this->lang_id;
81
82 if ( $lang ) {
83 $lang_id = $this->get_preferred_language( $lang );
84 }
85
86 global $wpdb;
87 if ( is_null( $lang_id ) ) {
88 return $q;
89 } else {
90 if ( $folder_id == -1 ) {
91 $q = "SELECT COUNT(tmp.ID) FROM
92 (
93 SELECT posts.ID
94 FROM $wpdb->posts AS posts
95 LEFT JOIN $wpdb->term_relationships AS trs
96 ON posts.ID = trs.object_id
97 WHERE posts.post_type = 'attachment'
98 AND posts.ID NOT IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_elementor_is_screenshot') ";
99 $q .= "AND trs.term_taxonomy_id IN ({$lang_id})";
100 $q .= "AND (posts.post_status = 'inherit' OR posts.post_status = 'private')
101 GROUP BY posts.ID
102 ) as tmp";
103 } else {
104 if ( $folder_id > 0 ) {
105 $q = "SELECT COUNT(tmp.ID) FROM
106 (
107 SELECT posts.ID
108 FROM $wpdb->posts AS posts
109 LEFT JOIN $wpdb->term_relationships AS trs ON posts.ID = trs.object_id
110 RIGHT JOIN {$wpdb->prefix}fbv_attachment_folder as fbv ON (posts.ID = fbv.attachment_id)
111 WHERE posts.post_type = 'attachment'
112 AND posts.ID NOT IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_elementor_is_screenshot')
113 AND fbv.folder_id = " . (int) $folder_id . ' ';
114 $q .= "AND trs.term_taxonomy_id IN ({$lang_id}) ";
115 $q .= "AND (posts.post_status = 'inherit' OR posts.post_status = 'private')
116 GROUP BY posts.ID
117 ) as tmp";
118 // exit($q);
119 }
120 }
121 return $q;
122 }
123 }
124
125 public function all_folders_and_count_query( $query, $lang ) {
126 global $wpdb;
127
128 $lang_id = $this->lang_id;
129
130 if ( $lang ) {
131 $lang_id = $this->get_preferred_language( $lang );
132 }
133
134 $select = '';
135 $join = '';
136 $where = '';
137 if ( is_null( $lang_id ) ) {
138 $select = "SELECT fbva.folder_id as folder_id, count(DISTINCT(fbva.attachment_id)) as counter
139 FROM {$wpdb->prefix}fbv_attachment_folder AS fbva";
140 } else {
141 $select = "SELECT fbva.folder_id as folder_id, count(fbva.attachment_id) as counter
142 FROM {$wpdb->prefix}fbv_attachment_folder AS fbva";
143 $join .= " INNER JOIN {$wpdb->term_relationships} AS trs ON fbva.attachment_id = trs.object_id ";
144 $where .= " AND trs.term_taxonomy_id IN ({$lang_id}) ";
145 }
146
147 $join .= " INNER JOIN {$wpdb->prefix}fbv as fbv ON fbv.id = fbva.folder_id ";
148 $join .= " INNER JOIN {$wpdb->posts} as posts ON posts.ID = fbva.attachment_id ";
149
150 $where .= " WHERE posts.post_type = 'attachment' AND (posts.post_status = 'inherit' OR posts.post_status = 'private') ";
151 $where .= $wpdb->prepare( ' AND fbv.created_by = %d GROUP BY fbva.folder_id', apply_filters( 'fbv_folder_created_by', '0' ) );
152
153 $query = $select . $join . $where;
154 return $query;
155 }
156 }