<?php

defined('ABSPATH') || exit;
function get_rocket_wpml_langs_for_admin_bar()
{
    global $sitepress;
    $langlinks = [];
    foreach ($sitepress->get_active_languages() as $lang) {
        $flag = $sitepress->get_flag($lang['code']);
        if ($flag->from_template) {
            $wp_upload_dir = wp_upload_dir();
            $flag_url = $wp_upload_dir['baseurl'] . '/flags/' . $flag->flag;
        } else {
            $flag_url = ICL_PLUGIN_URL . '/res/flags/' . $flag->flag;
        }
        $langlinks[] = ['code' => $lang['code'], 'current' => $lang['code'] === $sitepress->get_current_language(), 'anchor' => $lang['display_name'], 'flag' => '<img class="icl_als_iclflag" src="' . esc_url($flag_url) . '" alt="' . esc_attr($lang['code']) . '" width="18" height="12" />'];
    }
    if (isset($_GET['lang']) && 'all' === $_GET['lang']) {
        array_unshift($langlinks, ['code' => 'all', 'current' => 'all' === $sitepress->get_current_language(), 'anchor' => __('All languages', 'rocket'), 'flag' => '<img class="icl_als_iclflag" src="' . ICL_PLUGIN_URL . '/res/img/icon16.png" alt="all" width="16" height="16" />']);
    } else {
        array_push($langlinks, ['code' => 'all', 'current' => 'all' === $sitepress->get_current_language(), 'anchor' => __('All languages', 'rocket'), 'flag' => '<img class="icl_als_iclflag" src="' . ICL_PLUGIN_URL . '/res/img/icon16.png" alt="all" width="16" height="16" />']);
    }
    return $langlinks;
}
function get_rocket_qtranslate_langs_for_admin_bar($fork = '')
{
    global $q_config;
    $langlinks = [];
    $currentlang = [];
    foreach ($q_config['enabled_languages'] as $lang) {
        $langlinks[$lang] = ['code' => $lang, 'anchor' => $q_config['language_name'][$lang], 'flag' => '<img src="' . esc_url(trailingslashit(WP_CONTENT_URL) . $q_config['flag_location'] . $q_config['flag'][$lang]) . '" alt="' . esc_attr($q_config['language_name'][$lang]) . '" width="18" height="12" />'];
    }
    if (isset($_GET['lang'])) {
        $lang = sanitize_key($_GET['lang']);
        if ('x' === $fork) {
            if (qtranxf_isEnabled($lang)) {
                $currentlang[$lang] = $langlinks[$lang];
                unset($langlinks[$lang]);
                $langlinks = $currentlang + $langlinks;
            }
        } elseif (qtrans_isEnabled($lang)) {
            $currentlang[$lang] = $langlinks[$lang];
            unset($langlinks[$lang]);
            $langlinks = $currentlang + $langlinks;
        }
    }
    return $langlinks;
}
function get_rocket_polylang_langs_for_admin_bar()
{
    global $polylang;
    $langlinks = [];
    $currentlang = [];
    $langs = [];
    $img = '';
    $pll = function_exists('PLL') ? PLL() : $polylang;
    if (isset($pll)) {
        $langs = $pll->model->get_languages_list();
        if (!empty($langs)) {
            foreach ($langs as $lang) {
                if (!empty($lang->flag)) {
                    $img = strpos($lang->flag, 'img') !== false ? $lang->flag . '&nbsp;' : $lang->flag;
                }
                if (isset($pll->curlang->slug) && $lang->slug === $pll->curlang->slug) {
                    $currentlang[$lang->slug] = ['code' => $lang->slug, 'anchor' => $lang->name, 'flag' => $img];
                } else {
                    $langlinks[$lang->slug] = ['code' => $lang->slug, 'anchor' => $lang->name, 'flag' => $img];
                }
            }
        }
    }
    return $currentlang + $langlinks;
}
function rocket_has_i18n()
{
    global $sitepress, $q_config, $polylang;
    if (!empty($sitepress) && is_object($sitepress) && method_exists($sitepress, 'get_active_languages')) {
        return 'wpml';
    }
    if (!empty($polylang) && function_exists('pll_languages_list')) {
        $languages = pll_languages_list();
        if (empty($languages)) {
            return false;
        }
        return 'polylang';
    }
    if (!empty($q_config) && is_array($q_config)) {
        if (function_exists('qtranxf_convertURL')) {
            return 'qtranslate-x';
        }
        if (function_exists('qtrans_convertURL')) {
            return 'qtranslate';
        }
    }
    return false;
}
function get_rocket_i18n_code()
{
    $i18n_plugin = rocket_has_i18n();
    if (!$i18n_plugin) {
        return false;
    }
    if ('wpml' === $i18n_plugin) {
        return array_keys($GLOBALS['sitepress']->get_active_languages());
    }
    if ('qtranslate' === $i18n_plugin || 'qtranslate-x' === $i18n_plugin) {
        return !empty($GLOBALS['q_config']['enabled_languages']) ? $GLOBALS['q_config']['enabled_languages'] : [];
    }
    if ('polylang' === $i18n_plugin) {
        return pll_languages_list();
    }
    return false;
}
function get_rocket_i18n_host()
{
    $langs_host = [];
    $langs = get_rocket_i18n_uri();
    if ($langs) {
        foreach ($langs as $lang) {
            $langs_host[] = rocket_extract_url_component($lang, PHP_URL_HOST);
        }
    }
    return $langs_host;
}
function get_rocket_i18n_uri()
{
    $i18n_plugin = rocket_has_i18n();
    $urls = [];
    if ('wpml' === $i18n_plugin) {
        foreach (get_rocket_i18n_code() as $lang) {
            $urls[] = $GLOBALS['sitepress']->language_url($lang);
        }
    } elseif ('qtranslate' === $i18n_plugin || 'qtranslate-x' === $i18n_plugin) {
        foreach (get_rocket_i18n_code() as $lang) {
            if ('qtranslate' === $i18n_plugin) {
                $urls[] = qtrans_convertURL(home_url(), $lang, true);
            } else {
                $urls[] = qtranxf_convertURL(home_url(), $lang, true);
            }
        }
    } elseif ('polylang' === $i18n_plugin) {
        $pll = function_exists('PLL') ? PLL() : $GLOBALS['polylang'];
        if (!empty($pll) && is_object($pll)) {
            $urls = wp_list_pluck($pll->model->get_languages_list(), 'search_url');
        }
    }
    if (empty($urls)) {
        $urls[] = home_url();
    }
    return $urls;
}
function get_rocket_i18n_to_preserve($current_lang, $cache_path = '')
{
    if (empty($current_lang)) {
        return [];
    }
    if (!is_string($current_lang)) {
        return [];
    }
    $i18n_plugin = rocket_has_i18n();
    if (!$i18n_plugin) {
        return [];
    }
    $langs = get_rocket_i18n_code();
    if (empty($langs)) {
        return [];
    }
    $langs = array_diff($langs, [$current_lang]);
    if ('' === $cache_path) {
        $cache_path = _rocket_get_wp_rocket_cache_path();
    }
    $langs_to_preserve = [];
    foreach ($langs as $lang) {
        $parse_url = get_rocket_parse_url(get_rocket_i18n_home_url($lang));
        $langs_to_preserve[] = _rocket_normalize_path("{$cache_path}{$parse_url['host']}(.*)/" . trim($parse_url['path'], '/'), true);
    }
    return (array) apply_filters('rocket_langs_to_preserve', $langs_to_preserve);
}
function get_rocket_i18n_subdomains()
{
    $i18n_plugin = rocket_has_i18n();
    if (!$i18n_plugin) {
        return [];
    }
    switch ($i18n_plugin) {
        case 'wpml':
            $option = get_option('icl_sitepress_settings');
            if (2 === (int) $option['language_negotiation_type']) {
                return get_rocket_i18n_uri();
            }
            break;
        case 'qtranslate':
            if (3 === (int) $GLOBALS['q_config']['url_mode']) {
                return get_rocket_i18n_uri();
            }
            break;
        case 'qtranslate-x':
            if (3 === (int) $GLOBALS['q_config']['url_mode'] || 4 === (int) $GLOBALS['q_config']['url_mode']) {
                return get_rocket_i18n_uri();
            }
            break;
        case 'polylang':
            $pll = function_exists('PLL') ? PLL() : $GLOBALS['polylang'];
            if (!empty($pll) && is_object($pll) && (2 === (int) $pll->options['force_lang'] || 3 === (int) $pll->options['force_lang'])) {
                return get_rocket_i18n_uri();
            }
    }
    return [];
}
function get_rocket_i18n_home_url($lang = '')
{
    $i18n_plugin = rocket_has_i18n();
    if (!$i18n_plugin) {
        return home_url();
    }
    switch ($i18n_plugin) {
        case 'wpml':
            return $GLOBALS['sitepress']->language_url($lang);
        case 'qtranslate':
            return qtrans_convertURL(home_url(), $lang, true);
        case 'qtranslate-x':
            return qtranxf_convertURL(home_url(), $lang, true);
        case 'polylang':
            $pll = function_exists('PLL') ? PLL() : $GLOBALS['polylang'];
            if (!empty($pll->options['force_lang']) && isset($pll->links)) {
                return pll_home_url($lang);
            }
    }
    return home_url();
}
function get_rocket_i18n_translated_post_urls($post_id, $post_type = 'page', $regex = null)
{
    $path = wp_parse_url(get_permalink($post_id), PHP_URL_PATH);
    if (empty($path)) {
        return [];
    }
    $i18n_plugin = rocket_has_i18n();
    $urls = [];
    switch ($i18n_plugin) {
        case 'wpml':
            $langs = get_rocket_i18n_code();
            if ($langs) {
                foreach ($langs as $lang) {
                    $urls[] = wp_parse_url(get_permalink(icl_object_id($post_id, $post_type, true, $lang)), PHP_URL_PATH) . $regex;
                }
            }
            break;
        case 'qtranslate':
        case 'qtranslate-x':
            $langs = $GLOBALS['q_config']['enabled_languages'];
            $langs = array_diff($langs, [$GLOBALS['q_config']['default_language']]);
            $urls[] = wp_parse_url(get_permalink($post_id), PHP_URL_PATH) . $regex;
            if ($langs) {
                $url = get_permalink($post_id);
                foreach ($langs as $lang) {
                    if ('qtranslate' === $i18n_plugin) {
                        $urls[] = wp_parse_url(qtrans_convertURL($url, $lang, true), PHP_URL_PATH) . $regex;
                    } elseif ('qtranslate-x' === $i18n_plugin) {
                        $urls[] = wp_parse_url(qtranxf_convertURL($url, $lang, true), PHP_URL_PATH) . $regex;
                    }
                }
            }
            break;
        case 'polylang':
            if (function_exists('PLL') && is_object(PLL()->model)) {
                $translations = pll_get_post_translations($post_id);
            } elseif (!empty($GLOBALS['polylang']->model) && is_object($GLOBALS['polylang']->model)) {
                $translations = $GLOBALS['polylang']->model->get_translations('page', $post_id);
            }
            if (!empty($translations)) {
                foreach ($translations as $post_id) {
                    $urls[] = wp_parse_url(get_permalink($post_id), PHP_URL_PATH) . $regex;
                }
            }
    }
    if (trim($path, '/') !== '') {
        $urls[] = $path . $regex;
    }
    $urls = array_unique($urls);
    return $urls;
}
function rocket_get_home_url($path = '')
{
    global $wpml_url_filters;
    static $home_url = array();
    static $has_wpml;
    if (isset($home_url[$path])) {
        return $home_url[$path];
    }
    if (!isset($has_wpml)) {
        $has_wpml = $wpml_url_filters && is_object($wpml_url_filters) && method_exists($wpml_url_filters, 'home_url_filter');
    }
    if ($has_wpml) {
        remove_filter('home_url', [$wpml_url_filters, 'home_url_filter'], -10);
    }
    $home_url[$path] = home_url($path);
    if ($has_wpml) {
        add_filter('home_url', [$wpml_url_filters, 'home_url_filter'], -10, 4);
    }
    return $home_url[$path];
}
function rocket_get_current_language()
{
    $i18n_plugin = rocket_has_i18n();
    if (!$i18n_plugin) {
        return false;
    }
    if ('polylang' === $i18n_plugin && function_exists('pll_current_language')) {
        return pll_current_language();
    } elseif ('wpml' === $i18n_plugin) {
        return apply_filters('wpml_current_language', null);
    }
    return false;
}