| 1 |
<?php |
| 2 |
namespace FileBird\Support; |
| 3 |
|
| 4 |
use FileBird\Model\Folder as FolderModel; |
| 5 |
use FileBird\Controller\Controller; |
| 6 |
|
| 7 |
defined( 'ABSPATH' ) || exit; |
| 8 |
|
| 9 |
class Polylang extends Controller { |
| 10 |
private $active; |
| 11 |
private $lang; |
| 12 |
private $lang_id = null; |
| 13 |
|
| 14 |
public function __construct() { |
| 15 |
global $polylang; |
| 16 |
|
| 17 |
$this->active = function_exists( 'pll_get_post_translations' ); |
| 18 |
if ( $this->active ) { |
| 19 |
if ( $polylang->options['media_support'] == 1 ) { |
| 20 |
$this->lang = PLL()->model->get_language( get_user_meta( get_current_user_id(), 'pll_filter_content', true ) ); |
| 21 |
if ( $this->lang ) { |
| 22 |
$this->lang_id = $this->lang->term_id; |
| 23 |
} |
| 24 |
if ( $this->lang_id != null ) { |
| 25 |
add_filter( 'fbv_speedup_get_count_query', '__return_true' ); |
| 26 |
} |
| 27 |
add_action( 'pll_translate_media', array( $this, 'duplicateAttachmentToFolder' ), 10, 3 ); |
| 28 |
add_filter( 'fbv_get_count_query', array( $this, 'fbv_get_count_query' ), 10, 3 ); |
| 29 |
add_filter( 'fbv_all_folders_and_count', array( $this, 'all_folders_and_count_query' ), 10, 2 ); |
| 30 |
add_filter( 'fbv_pll_lang', array( $this, 'fbv_pll_lang' ), 10, 1 ); |
| 31 |
} |
| 32 |
} |
| 33 |
} |
| 34 |
|
| 35 |
public function get_preferred_language( $lang ) { |
| 36 |
$pll_lang = PLL()->model->get_language( $lang ); |
| 37 |
if ( $pll_lang ) { |
| 38 |
return $pll_lang->term_id; |
| 39 |
} |
| 40 |
return $this->lang_id; |
| 41 |
} |
| 42 |
|
| 43 |
public function fbv_pll_lang( $lang ) { |
| 44 |
if ( ! PLL_SETTINGS && ! PLL_ADMIN && PLL()->model->get_languages_list() ) { |
| 45 |
return true; |
| 46 |
} |
| 47 |
} |
| 48 |
|
| 49 |
public function fbv_get_count_query( $q, $folder_id, $lang ) { |
| 50 |
$lang_id = $this->lang_id; |
| 51 |
|
| 52 |
if ( $lang ) { |
| 53 |
$lang_id = $this->get_preferred_language( $lang ); |
| 54 |
} |
| 55 |
|
| 56 |
global $wpdb; |
| 57 |
if ( is_null( $lang_id ) ) { |
| 58 |
return $q; |
| 59 |
} else { |
| 60 |
if ( $folder_id == -1 ) { |
| 61 |
$q = "SELECT COUNT(tmp.ID) FROM |
| 62 |
( |
| 63 |
SELECT posts.ID |
| 64 |
FROM $wpdb->posts AS posts |
| 65 |
LEFT JOIN $wpdb->term_relationships AS trs |
| 66 |
ON posts.ID = trs.object_id |
| 67 |
WHERE posts.post_type = 'attachment' |
| 68 |
AND posts.ID NOT IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_elementor_is_screenshot') "; |
| 69 |
$q .= "AND trs.term_taxonomy_id IN ({$lang_id})"; |
| 70 |
$q .= "AND (posts.post_status = 'inherit' OR posts.post_status = 'private') |
| 71 |
GROUP BY posts.ID |
| 72 |
) as tmp"; |
| 73 |
} else { |
| 74 |
if ( $folder_id > 0 ) { |
| 75 |
$q = "SELECT COUNT(tmp.ID) FROM |
| 76 |
( |
| 77 |
SELECT posts.ID |
| 78 |
FROM $wpdb->posts AS posts |
| 79 |
LEFT JOIN $wpdb->term_relationships AS trs ON posts.ID = trs.object_id |
| 80 |
RIGHT JOIN {$wpdb->prefix}fbv_attachment_folder as fbv ON (posts.ID = fbv.attachment_id) |
| 81 |
WHERE posts.post_type = 'attachment' |
| 82 |
AND posts.ID NOT IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_elementor_is_screenshot') |
| 83 |
AND fbv.folder_id = " . (int) $folder_id . ' '; |
| 84 |
$q .= "AND trs.term_taxonomy_id IN ({$lang_id}) "; |
| 85 |
$q .= "AND (posts.post_status = 'inherit' OR posts.post_status = 'private') |
| 86 |
GROUP BY posts.ID |
| 87 |
) as tmp"; |
| 88 |
// exit($q); |
| 89 |
} |
| 90 |
} |
| 91 |
return $q; |
| 92 |
} |
| 93 |
} |
| 94 |
|
| 95 |
public function all_folders_and_count_query( $query, $lang ) { |
| 96 |
global $wpdb; |
| 97 |
|
| 98 |
$lang_id = $this->lang_id; |
| 99 |
|
| 100 |
if ( $lang ) { |
| 101 |
$lang_id = $this->get_preferred_language( $lang ); |
| 102 |
} |
| 103 |
|
| 104 |
$select = ''; |
| 105 |
$join = ''; |
| 106 |
$where = ''; |
| 107 |
if ( is_null( $lang_id ) ) { |
| 108 |
$select = "SELECT fbva.folder_id as folder_id, count(DISTINCT(fbva.attachment_id)) as count |
| 109 |
FROM {$wpdb->prefix}fbv_attachment_folder AS fbva"; |
| 110 |
} else { |
| 111 |
$select = "SELECT fbva.folder_id as folder_id, count(fbva.attachment_id) as count |
| 112 |
FROM {$wpdb->prefix}fbv_attachment_folder AS fbva"; |
| 113 |
$join .= " INNER JOIN {$wpdb->term_relationships} AS trs ON fbva.attachment_id = trs.object_id "; |
| 114 |
$where .= " AND trs.term_taxonomy_id IN ({$lang_id}) "; |
| 115 |
} |
| 116 |
|
| 117 |
$join .= " INNER JOIN {$wpdb->prefix}fbv as fbv ON fbv.id = fbva.folder_id "; |
| 118 |
$join .= " INNER JOIN {$wpdb->posts} as posts ON posts.ID = fbva.attachment_id "; |
| 119 |
|
| 120 |
$where .= " WHERE posts.post_type = 'attachment' AND (posts.post_status = 'inherit' OR posts.post_status = 'private') "; |
| 121 |
$where .= ' AND fbv.created_by = ' . apply_filters( 'fbv_in_not_in_created_by', '0' ) . ' GROUP BY fbva.folder_id'; |
| 122 |
|
| 123 |
$query = $select . $join . $where; |
| 124 |
return $query; |
| 125 |
} |
| 126 |
|
| 127 |
public function duplicateAttachmentToFolder( $post_id, $tr_id, $lang_slug ) { |
| 128 |
$folders_of_source = FolderModel::getFoldersOfPost( $post_id ); |
| 129 |
FolderModel::setFoldersForPosts( $tr_id, $folders_of_source ); |
| 130 |
} |
| 131 |
} |