| 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 |
} |