| Current File : /home/d/i/g/digitaw/www/wp-content/plugins/folders/includes/class-polylang.php |
<?php
/**
* Class Folders PolyLang
*
* @author : Premio <contact@premio.io>
* @license : GPL2
* */
if (! defined('ABSPATH')) {
exit;
}
class WCP_Folder_PolyLang
{
/**
* The Name of this plugin.
*
* @var string $active Checking for Plugin is active or not
* @since 1.0.0
* @access public
*/
private $active;
/**
* The Name of this plugin.
*
* @var string $poly_lang_term_taxonomy_id Poly Lang taxonomy id
* @since 1.0.0
* @access public
*/
private $poly_lang_term_taxonomy_id;
/**
* The Name of this plugin.
*
* @var string $total total posts in taxonomy
* @since 1.0.0
* @access public
*/
private $total;
/**
* Define the core functionality of the plugin.
*
* Set the plugin name and the plugin version that can be used throughout the plugin.
* Load the dependencies, define the locale, and set the hooks for the admin area and
* the public-facing side of the site.
*
* @since 1.0.0
*/
public function __construct()
{
$this->active = false;
$this->total = 0;
add_action("admin_init", [$this, 'init']);
}//end __construct()
/**
* Filters the taxonomy data
*
* @since 1.0.0
* @access public
* @return
*/
public function init()
{
global $wpdb, $polylang, $typenow;
$this->active = function_exists("pll_get_post_translations") && function_exists("pll_is_translated_post_type");
if ($this->active) {
if (isset($polylang->curlang) && is_object($polylang->curlang)) {
if (method_exists($polylang->curlang, 'get_tax_prop')) {
$this->poly_lang_term_taxonomy_id = $polylang->curlang->get_tax_prop('language', 'term_taxonomy_id');
} else {
$this->poly_lang_term_taxonomy_id = $polylang->curlang->term_taxonomy_id;
}
add_filter('premio_folder_item_in_taxonomy', [$this, 'items_in_taxonomy'], 10, 2);
add_filter('premio_folder_un_categorized_items', [$this, 'un_categorized_items'], 10, 2);
add_filter('premio_folder_all_categorized_items', [$this, 'all_categorized_items'], 10, 2);
}
$user_id = get_current_user_id();
$current = pll_current_language();
$previous = get_user_meta($user_id, '_admin_lang_last', true);
$previous = $previous ? $previous : 'all';
$current = $current ? $current : 'all';
if ($previous !== $current) {
delete_transient("premio_folders_without_trash");
update_user_meta($user_id, '_admin_lang_last', $current);
}
}
}//end init()
/**
* Get total number on taxonomies used in Polylang
*
* @since 1.0.0
* @access public
* @return $total
*/
public function set_total($post_type)
{
if ($this->active) {
$where = "posts.post_status = 'inherit' OR posts.post_status = 'private'";
if ($post_type != 'attachment') {
$where = "post_status != 'trash'";
}
global $wpdb;
$query = "SELECT COUNT(tmp.ID) FROM
(
SELECT posts.ID
FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->term_relationships} AS trs
ON posts.ID = trs.object_id
LEFT JOIN {$wpdb->postmeta} AS postmeta
ON (posts.ID = postmeta.post_id AND postmeta.meta_key = '_wp_attached_file')
WHERE posts.post_type = '%s'
AND trs.term_taxonomy_id IN (%s)
AND ({$where})
GROUP BY posts.ID
) as tmp";
$query = $wpdb->prepare($query, [$post_type, $this->poly_lang_term_taxonomy_id]);
$this->total = (int) $wpdb->get_var($query);
}//end if
}//end set_total()
/**
* Check the items in taxonomies
*
* @since 1.0.0
* @access public
* @return $counter
*/
public function items_in_taxonomy($term_id, $arg=[])
{
if ($this->active) {
$post_type = isset($arg['post_type']) ? $arg['post_type'] : "";
$taxonomy = isset($arg['taxonomy']) ? $arg['taxonomy'] : "";
$where = "posts.post_status = 'inherit' OR posts.post_status = 'private'";
if ($post_type != 'attachment') {
$where = "post_status != 'trash'";
}
global $wpdb;
$term_taxonomy_id = get_term_by('id', (int) $term_id, $taxonomy, OBJECT)->term_taxonomy_id;
$query = "SELECT COUNT(tmp.ID) FROM
(
SELECT posts.ID FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->term_relationships} AS tr1
ON (posts.ID = tr1.object_id)
INNER JOIN {$wpdb->term_relationships} AS tr2
ON (posts.ID = tr2.object_id and tr2.term_taxonomy_id IN (%s))
LEFT JOIN {$wpdb->postmeta} AS postmeta ON ( posts.ID = postmeta.post_id AND postmeta.meta_key = '_wp_attached_file' )
WHERE (tr1.term_taxonomy_id IN (%s))
AND posts.post_type = '%s'
AND (({$where}))
GROUP BY posts.ID
) as tmp";
$query = $wpdb->prepare($query, [$term_taxonomy_id, $this->poly_lang_term_taxonomy_id, $post_type]);
$counter = (int) $wpdb->get_var($query);
return $counter ? $counter : 0;
}//end if
return null;
}//end items_in_taxonomy()
/**
* Check the items in uncategorized taxonomies
*
* @since 1.0.0
* @access public
* @return $counter
*/
public function un_categorized_items($post_type, $taxonomy)
{
if ($this->active) {
global $wpdb;
$where = "posts.post_status = 'inherit' OR posts.post_status = 'private'";
if ($post_type != 'attachment') {
$where = "post_status != 'trash'";
}
$query = "SELECT COUNT(tmp.ID) FROM
(
SELECT posts.ID
FROM {$wpdb->posts} AS posts
INNER JOIN {$wpdb->term_relationships} AS tr1
ON posts.ID = tr1.object_id AND tr1.term_taxonomy_id IN (%s)
INNER JOIN {$wpdb->term_relationships} AS tr2
ON (tr2.object_id = posts.ID)
JOIN {$wpdb->term_taxonomy} as tx
ON tx.term_taxonomy_id = tr2.term_taxonomy_id AND tx.taxonomy = '%s'
WHERE posts.post_type = '%s'
AND ({$where})
GROUP BY posts.ID
) as tmp";
$query = $wpdb->prepare($query, [$this->poly_lang_term_taxonomy_id, $taxonomy, $post_type]);
$fileInFolder = (int) $wpdb->get_var($query);
$fileInFolder = !($fileInFolder) ? 0 : $fileInFolder;
$this->set_total($post_type);
return ($this->total - $fileInFolder);
}//end if
return null;
}//end un_categorized_items()
/**
* Check the items in taxonomies
*
* @since 1.0.0
* @access public
* @return $counter
*/
public function all_categorized_items($post_type)
{
if ($this->active) {
$this->set_total($post_type);
return $this->total;
}
return null;
}//end all_categorized_items()
}//end class
if (class_exists('WCP_Folder_PolyLang')) {
$WCP_Folder_PolyLang = new WCP_Folder_PolyLang();
}