| Current File : /home/d/i/g/digitaw/www/wp-content/plugins/folders/includes/class-wpml.php |
<?php
/**
* Class Folders WPML
*
* @author : Premio <contact@premio.io>
* @license : GPL2
* */
if (! defined('ABSPATH')) {
exit;
}
class WCP_Folder_WPML
{
/**
* The Name of this plugin.
*
* @var string $isWPMLActive The Name of this plugin.
* @since 1.0.0
* @access private
*/
private $isWPMLActive;
/**
* The Name of this plugin.
*
* @var string $total Total number of taxonomies
* @since 1.0.0
* @access private
*/
private $total;
/**
* The Name of this plugin.
*
* @var string $lang Current Selected language
* @since 1.0.0
* @access private
*/
private $lang;
/**
* The Name of this plugin.
*
* @var string $tableIclTranslations WPML translation table
* @since 1.0.0
* @access private
*/
private $tableIclTranslations;
/**
* The Name of this plugin.
*
* @var string $tableIclTranslations WPML translated post
* @since 1.0.0
* @access protected
*/
protected $post_translations;
/**
* The Name of this plugin.
*
* @var string $sitepress sitepress
* @since 1.0.0
* @access protected
*/
private $sitepress;
/**
* The Name of this plugin.
*
* @var string $sitepress WPML Settings
* @since 1.0.0
* @access protected
*/
private $settings;
/**
* Define the core functionality of the plugin.
*
* Set the WPML installation status and settings.
* 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->isWPMLActive = false;
$this->total = 0;
add_action("admin_init", [$this, 'init']);
}//end __construct()
/**
* Check for the WPML settings and status
*
* @since 1.0.0
* @access public
* @return $isWPMLActive
*/
public function init()
{
global $sitepress, $wpdb;
$isWPMLActive = $sitepress !== null && get_class($sitepress) === "SitePress";
if ($isWPMLActive) {
$settings = $sitepress->get_setting('custom_posts_sync_option', []);
if ($sitepress->get_current_language() !== 'all') {
$this->isWPMLActive = true;
$this->settings = $settings;
$this->lang = $sitepress->get_current_language();
$this->tableIclTranslations = $wpdb->prefix.'icl_translations';
}
$this->sitepress = $sitepress;
$this->post_translations = $sitepress->post_translations();
$user_id = get_current_user_id();
$current = apply_filters('wpml_current_language', null);
$previous = get_user_meta($user_id, '_icl_admin_language_last', true);
$previous = $previous ? $previous : 'all';
$current = $current ? $current : 'all';
if ($previous !== $current) {
delete_transient("premio_folders_without_trash");
update_user_meta($user_id, '_icl_admin_language_last', $current);
}
}
if ($this->isWPMLActive) {
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);
}
}//end init()
/**
* Get the total taxonomies used in WPML
*
* @since 1.0.0
* @access public
* @return $total
*/
public function set_total($post_type)
{
if ($this->isWPMLActive && isset($this->settings[$post_type]) && $this->settings[$post_type]) {
global $wpdb;
$select = "SELECT COUNT(DISTINCT(P.id))
FROM {$this->tableIclTranslations} AS wpmlt
INNER JOIN {$wpdb->posts} AS P ON P.id = wpmlt.element_id";
$where = ["wpmlt.element_type = 'post_".esc_attr($post_type)."'"];
$where[] = "wpmlt.language_code = '%s'";
if ($post_type == 'attachment') {
$where[] = " (P.post_status = 'inherit' OR P.post_status = 'private')";
} else {
$where[] = " P.post_status != 'trash'";
}
$join = apply_filters( 'folders_count_join_query', "" );
$where = apply_filters( 'folders_count_where_query', $where );
$query = $select . $join . " WHERE ".implode( ' AND ', $where );
$query = $wpdb->prepare($query, [$this->lang]);
$this->total = (int) $wpdb->get_var($query);
}
}//end set_total()
/**
* To get the items in taxonomies
*
* @since 1.0.0
* @access public
* @return $total
*/
public function items_in_taxonomy($term_id, $arg=[])
{
$post_type = isset($arg['post_type']) ? $arg['post_type'] : "";
$taxonomy = isset($arg['taxonomy']) ? $arg['taxonomy'] : "";
if ($this->isWPMLActive && isset($this->settings[$post_type]) && $this->settings[$post_type]) {
global $wpdb;
$term_taxonomy_id = get_term_by('id', (int) $term_id, $taxonomy, OBJECT)->term_taxonomy_id;
$query = "SELECT count(wpmlt.element_id) as total_records FROM {$this->tableIclTranslations} AS wpmlt
INNER JOIN {$wpdb->term_relationships} AS term_rela ON term_rela.object_id = wpmlt.element_id
WHERE wpmlt.element_type = 'post_".esc_attr($post_type)."'
AND term_rela.term_taxonomy_id = '%s'
AND wpmlt.language_code = '%s'";
$query = $wpdb->prepare($query, [$term_taxonomy_id, $this->lang]);
$all_ids = $wpdb->get_var($query);
return !empty($all_ids) ? $all_ids : 0;
}//end if
return null;
}//end items_in_taxonomy()
/**
* To get the items in taxonomies in uncategorized
*
* @since 1.0.0
* @access public
* @return $total
*/
public function un_categorized_items($post_type, $taxonomy)
{
if ($this->isWPMLActive && isset($this->settings[$post_type]) && $this->settings[$post_type]) {
global $wpdb;
$subQuery = "SELECT * FROM {$this->tableIclTranslations} as wpmlt
INNER JOIN {$wpdb->posts} as p on p.id = wpmlt.element_id
WHERE wpmlt.element_type = 'post_".esc_attr($post_type)."'
and wpmlt.language_code = '%s'";
$select = "SELECT COUNT(DISTINCT(tmp_table.ID))
FROM ({$subQuery}) as tmp_table";
$join = " JOIN {$wpdb->term_relationships} as term_relationships on tmp_table.element_id = term_relationships.object_id ";
$join .= " JOIN {$wpdb->term_taxonomy} as term_taxonomy on term_relationships.term_taxonomy_id = term_taxonomy.term_taxonomy_id ";
$where = ["taxonomy = '%s'"];
if ( $this->sitepress->is_translated_taxonomy( $taxonomy ) ) {
$icl_taxonomies = "tax_" . $taxonomy;
$join .= " LEFT JOIN {$wpdb->prefix}icl_translations AS icl_t
ON icl_t.element_id = term_taxonomy.term_taxonomy_id
AND icl_t.element_type = '{$icl_taxonomies}'";
$where[] = " ( ( icl_t.element_type = '{$icl_taxonomies}' AND icl_t.language_code = '{$this->lang}' )
OR icl_t.element_type != '{$icl_taxonomies}' OR icl_t.element_type IS NULL ) ";
}
$query = $select . $join . " WHERE ".implode( ' AND ', $where );
$query = $wpdb->prepare($query, [$this->lang, $taxonomy]);
$fileInFolder = (int) $wpdb->get_var($query);
$this->set_total($post_type);
return ($this->total - $fileInFolder);
}
return null;
}//end un_categorized_items()
/**
* To get the items in taxonomies in all categories
*
* @since 1.0.0
* @access public
* @return $total
*/
public function all_categorized_items($post_type)
{
if ($this->isWPMLActive && isset($this->settings[$post_type]) && $this->settings[$post_type]) {
$this->set_total($post_type);
return $this->total;
}
return null;
}//end all_categorized_items()
}//end class
if (class_exists('WCP_Folder_WPML')) {
$folder_WPML = new WCP_Folder_WPML();
}