/**
 *
 * @return  WPML_Redirection
 *
 */
function _wpml_get_redirect_helper()
{
    global $wpml_url_converter, $wpml_request_handler, $wpml_language_resolution, $sitepress;
    $lang_neg_type = wpml_get_setting_filter(false, 'language_negotiation_type');
    switch ($lang_neg_type) {
        case 1:
            global $wpml_url_filters;
            if ($wpml_url_filters->frontend_uses_root() !== false) {
                require_once ICL_PLUGIN_PATH . '/inc/request-handling/redirection/wpml-rootpage-redirect-by-subdir.class.php';
                $redirect_helper = new WPML_RootPage_Redirect_By_Subdir(wpml_get_setting_filter(array(), 'urls'), $wpml_request_handler, $wpml_url_converter, $wpml_language_resolution);
            } else {
                require_once ICL_PLUGIN_PATH . '/inc/request-handling/redirection/wpml-redirect-by-subdir.class.php';
                $redirect_helper = new WPML_Redirect_By_Subdir($wpml_url_converter, $wpml_request_handler, $wpml_language_resolution);
            }
            break;
        case 2:
            require_once ICL_PLUGIN_PATH . '/inc/request-handling/redirection/wpml-redirect-by-domain.class.php';
            $wp_api = new WPML_WP_API();
            $redirect_helper = new WPML_Redirect_By_Domain(icl_get_setting('language_domains'), $wp_api, $wpml_request_handler, $wpml_url_converter, $wpml_language_resolution);
            break;
        case 3:
        default:
            $redirect_helper = new WPML_Redirect_By_Param(icl_get_setting('taxonomies_sync_option', array()), $wpml_url_converter, $wpml_request_handler, $wpml_language_resolution, $sitepress);
            $redirect_helper->init_hooks();
    }
    return $redirect_helper;
}
 public function pre_update_option_settings_filter($old_value, $new_value)
 {
     // This is special handling for Blog Title and Tagline.
     global $switched;
     if (!$switched || $switched && wpml_get_setting_filter(false, 'setup_complete')) {
         $current_language = $this->st_instance->get_current_string_language($this->option_name);
         WPML_Config::load_config_run();
         $result = $this->update_translation($this->option_name, $current_language, $new_value, ICL_TM_COMPLETE);
         if ($result) {
             return $old_value;
         }
     }
     return $new_value;
 }
 /**
  * @param Array $settings
  * @param WPML_Post_Translation $post_translations
  */
 public function __construct(&$settings, &$post_translations)
 {
     $this->post_translations = $post_translations;
     $this->sync_delete = isset($settings['sync_delete']) ? $settings['sync_delete'] : false;
     $this->sync_parent = isset($settings['sync_page_parent']) ? $settings['sync_page_parent'] : false;
     $this->sync_ping_status = isset($settings['sync_ping_status']) ? $settings['sync_ping_status'] : false;
     $this->sync_post_date = isset($settings['sync_post_date']) ? $settings['sync_post_date'] : false;
     $this->sync_post_format = isset($settings['sync_post_format']) ? $settings['sync_post_format'] : false;
     $this->sync_sticky_flag = isset($settings['sync_sticky_flag']) ? $settings['sync_sticky_flag'] : false;
     $this->sync_comment_status = isset($settings['sync_comment_status']) ? $settings['sync_comment_status'] : false;
     $this->sync_page_template = isset($settings['sync_page_template']) ? $settings['sync_page_template'] : false;
     $this->sync_private_flag = isset($settings['sync_private_flag']) ? $settings['sync_private_flag'] : false;
     $this->language_order = isset($settings['languages_order']) && $settings['languages_order'] ? $settings['languages_order'] : wpml_get_setting_filter(false, 'active_languages');
     $this->sync_menu_order = isset($settings['sync_page_ordering']) ? $settings['sync_page_ordering'] : array();
 }
 /**
  * create translation package
  *
  * @param object|int $post
  *
  * @return array
  */
 function create_translation_package($post)
 {
     global $sitepress, $iclTranslationManagement;
     if (empty($iclTranslationManagement->settings)) {
         $iclTranslationManagement->init();
     }
     $package = array();
     if (is_numeric($post)) {
         $post = get_post($post);
     }
     $post_type = $post->post_type;
     if (apply_filters('wpml_is_external', false, $post)) {
         foreach ($post->string_data as $key => $value) {
             $package['contents'][$key] = array('translate' => 1, 'data' => $iclTranslationManagement->encode_field_data($value, 'base64'), 'format' => 'base64');
         }
         $package['contents']['original_id'] = array('translate' => 0, 'data' => $post->post_id);
     } else {
         $home_url = get_home_url();
         if ($post_type == 'page') {
             $package['url'] = htmlentities($home_url . '?page_id=' . $post->ID);
         } else {
             $package['url'] = htmlentities($home_url . '?p=' . $post->ID);
         }
         $package['contents']['title'] = array('translate' => 1, 'data' => $iclTranslationManagement->encode_field_data($post->post_title, 'base64'), 'format' => 'base64');
         if (wpml_get_setting_filter(false, 'translated_document_page_url') === 'translate') {
             $package['contents']['URL'] = array('translate' => 1, 'data' => $iclTranslationManagement->encode_field_data($post->post_name, 'base64'), 'format' => 'base64');
         }
         $package['contents']['body'] = array('translate' => 1, 'data' => $iclTranslationManagement->encode_field_data($post->post_content, 'base64'), 'format' => 'base64');
         if (!empty($post->post_excerpt)) {
             $package['contents']['excerpt'] = array('translate' => 1, 'data' => base64_encode($post->post_excerpt), 'format' => 'base64');
         }
         $package['contents']['original_id'] = array('translate' => 0, 'data' => $post->ID);
         if (!empty($iclTranslationManagement->settings['custom_fields_translation'])) {
             $package = $this->add_custom_field_contents($package, $post, $iclTranslationManagement->settings['custom_fields_translation']);
         }
         foreach ((array) $sitepress->get_translatable_taxonomies(true, $post_type) as $taxonomy) {
             $terms = get_the_terms($post->ID, $taxonomy);
             if (!empty($terms)) {
                 foreach ($terms as $term) {
                     $package['contents']['t_' . $term->term_taxonomy_id] = array('translate' => 1, 'data' => $iclTranslationManagement->encode_field_data($term->name, 'csv_base64'), 'format' => 'csv_base64');
                 }
             }
         }
     }
     return $package;
 }
 public function filter_include_url($result)
 {
     $domains = wpml_get_setting_filter(array(), 'language_domains');
     $domains = preg_replace('#^(http(?:s?))://#', '', array_map('untrailingslashit', $domains));
     if ((bool) $domains === true) {
         $php_host_in_domain = parse_url($result, PHP_URL_HOST);
         $domains[] = parse_url($this->get_unfiltered_home(), PHP_URL_HOST);
         foreach ($domains as $dom) {
             if (strpos(trailingslashit($php_host_in_domain), trailingslashit($dom)) === 0) {
                 $http_host_parts = explode(':', $this->requested_host);
                 unset($http_host_parts[1]);
                 $http_host_without_port = implode($http_host_parts);
                 $result = str_replace($php_host_in_domain, $http_host_without_port, $result);
                 break;
             }
         }
     }
     return $result;
 }
 /**
  * create translation package
  *
  * @param object|int $post
  *
  * @return array
  */
 public function create_translation_package($post)
 {
     global $sitepress;
     $package = array();
     $post = is_numeric($post) ? get_post($post) : $post;
     $post_type = $post->post_type;
     if (apply_filters('wpml_is_external', false, $post)) {
         /** @var stdClass $post */
         $post_contents = (array) $post->string_data;
         $original_id = $post->post_id;
         $type = 'external';
     } else {
         $home_url = get_home_url();
         $package['url'] = htmlentities($home_url . '?' . ($post_type === 'page' ? 'page_id' : 'p') . '=' . $post->ID);
         $post_contents = array('title' => $post->post_title, 'body' => $post->post_content, 'excerpt' => $post->post_excerpt);
         if (wpml_get_setting_filter(false, 'translated_document_page_url') === 'translate') {
             $post_contents['URL'] = $post->post_name;
         }
         $original_id = $post->ID;
         $cf_translation_settings = $this->get_tm_setting(array('custom_fields_translation'));
         if (!empty($cf_translation_settings)) {
             $package = $this->add_custom_field_contents($package, $post, $cf_translation_settings);
         }
         foreach ((array) $sitepress->get_translatable_taxonomies(true, $post_type) as $taxonomy) {
             $terms = get_the_terms($post->ID, $taxonomy);
             if (is_array($terms)) {
                 foreach ($terms as $term) {
                     $post_contents['t_' . $term->term_taxonomy_id] = $term->name;
                 }
             }
         }
         $type = 'post';
     }
     $package['contents']['original_id'] = array('translate' => 0, 'data' => $original_id);
     $package['type'] = $type;
     foreach ($post_contents as $key => $entry) {
         $package['contents'][$key] = array('translate' => 1, 'data' => base64_encode($entry), 'format' => 'base64');
     }
     return apply_filters('wpml_tm_translation_job_data', $package, $post);
 }
require_once 'embedded/wpml/commons/autoloader.php';
$wpml_auto_loader_instance = WPML_Auto_Loader::get_instance();
$wpml_auto_loader_instance->register(ICL_PLUGIN_PATH . '/');
require ICL_PLUGIN_PATH . '/inc/wpml-dependencies-check/wpml-bundle-check.class.php';
require ICL_PLUGIN_PATH . '/inc/wpml-private-actions.php';
require ICL_PLUGIN_PATH . '/inc/functions.php';
require ICL_PLUGIN_PATH . '/inc/functions-security.php';
require ICL_PLUGIN_PATH . '/inc/wpml-post-comments.class.php';
require ICL_PLUGIN_PATH . '/inc/icl-admin-notifier.php';
if (!function_exists('filter_input')) {
    wpml_set_plugin_as_inactive();
    add_action('admin_notices', 'wpml_missing_filter_input_notice');
    return;
}
$icl_plugin_url = untrailingslashit(plugin_dir_url(__FILE__));
if ((bool) wpml_get_setting_filter(array(), 'language_domains') === true && isset($_SERVER['HTTP_HOST'])) {
    global $wpdb, $wpml_include_url_filter;
    $wpml_include_url_filter = new WPML_Include_Url($wpdb, $_SERVER['HTTP_HOST']);
    $icl_plugin_url = $wpml_include_url_filter->filter_include_url($icl_plugin_url);
}
define('ICL_PLUGIN_URL', $icl_plugin_url);
if ((!defined('WPML_BYPASS_ICL_CHECK') || !WPML_BYPASS_ICL_CHECK) && wpml_version_is('3.2', '>=') && wpml_site_uses_icl()) {
    wpml_set_plugin_as_inactive();
    add_action('admin_notices', 'wpml_site_uses_icl_message_notice');
    if (is_admin()) {
        activate_installer();
    }
    return;
}
require ICL_PLUGIN_PATH . '/inc/template-functions.php';
require ICL_PLUGIN_PATH . '/inc/lang-data.php';
Example #8
0
/**
 * Get a WPML sub setting value
 * @uses  \wpml_get_setting_filter
 *
 * @param mixed|false $default     Required. The value to return if the settings key does not exist.
 *                                 (typically it's false, but you may want to use something else)
 * @param string      $key         The settings name key the sub key belongs to
 * @param string      $sub_key     The sub key to return the value of
 * @param mixed       $deprecated  Deprecated param
 *
 * @todo  [WPML 3.3] Remove deprecated argument
 *
 * @return mixed The value of the requested setting, or $default
 * @since 3.2
 * @use \SitePress::api_hooks
 */
function wpml_get_sub_setting_filter($default, $key, $sub_key, $deprecated = null)
{
    $default = $deprecated !== null && !$default ? $deprecated : $default;
    $parent = wpml_get_setting_filter($key, array());
    return isset($parent[$sub_key]) ? $parent[$sub_key] : $default;
}
Example #9
0
 private function updated_active_languages()
 {
     global $sitepress;
     wp_cache_init();
     icl_cache_clear();
     $this->refresh_active_lang_cache(wpml_get_setting_filter(false, 'default_language'));
     wpml_reload_active_languages_setting(true);
     $active_langs = $sitepress->get_active_languages(true);
     $this->maybe_move_setup(3);
     if (count($active_langs) > 1) {
         icl_set_setting('dont_show_help_admin_notice', true);
     }
 }
 private function maybe_reload()
 {
     $this->default_lang = $this->default_lang ? $this->default_lang : wpml_get_setting_filter(false, 'default_language');
     $this->active_language_codes = (bool) $this->active_language_codes === true ? $this->active_language_codes : array_fill_keys(wpml_reload_active_languages_setting(true), 1);
 }
 function pre_update_option_settings($option, $value, $old_value)
 {
     global $sitepress, $sitepress_settings, $switched;
     if (!$switched || $switched && wpml_get_setting_filter(false, 'setup_complete')) {
         $current_language = $sitepress->get_current_language();
         $strings_language = $sitepress_settings['st']['strings_language'];
         if ($current_language == $strings_language) {
             return $value;
         }
         WPML_Config::load_config_run();
         $result = icl_update_string_translation($option, $current_language, $value, ICL_TM_COMPLETE);
         if ($result) {
             // returning old_value in place of value will stop update_option() processing.
             // do not remove it!
             return $old_value;
         }
     }
     return $value;
 }
 private function pre_option_page($type)
 {
     global $wpdb, $switched;
     static $results = array();
     if (!isset($results[$type]) && !$switched || $switched && wpml_get_setting_filter(false, 'setup_complete')) {
         $results[$type] = array();
         // Fetch for all languages and cache them.
         $values = $wpdb->get_results($wpdb->prepare("\tSELECT element_id, language_code\r\r\n\t\t\t\t\t\tFROM {$wpdb->prefix}icl_translations\r\r\n\t\t\t\t\t\tWHERE trid =\r\r\n\t\t\t\t\t\t\t(SELECT trid\r\r\n\t\t\t\t\t\t\t FROM {$wpdb->prefix}icl_translations\r\r\n\t\t\t\t\t\t\t WHERE element_type = 'post_page'\r\r\n\t\t\t\t\t\t\t AND element_id = (SELECT option_value\r\r\n\t\t\t\t\t\t\t\t\t\t\t   FROM {$wpdb->options}\r\r\n\t\t\t\t\t\t\t\t\t\t\t   WHERE option_name=%s\r\r\n\t\t\t\t\t\t\t\t\t\t\t   LIMIT 1))\r\r\n\t\t\t\t\t\t", $type));
         foreach ($values as $lang_result) {
             $results[$type][$lang_result->language_code] = $lang_result->element_id;
         }
     }
     return isset($results[$type][$this->this_lang]) ? $results[$type][$this->this_lang] : '';
 }
 /**
  * calculate post md5
  *
  * @param object|int $post
  *
  * @return string
  * @todo full support for custom posts and custom taxonomies
  */
 public function post_md5($post)
 {
     global $iclTranslationManagement, $wpdb, $sitepress_settings;
     //TODO: [WPML 3.2] Make it work with PackageTranslation: this is not the right way anymore
     if (isset($post->external_type) && $post->external_type) {
         $md5str = '';
         foreach ($post->string_data as $key => $value) {
             $md5str .= $key . $value;
         }
     } else {
         $post_tags = $post_categories = $custom_fields_values = array();
         if (is_numeric($post)) {
             $post = get_post($post);
         }
         foreach (wp_get_object_terms($post->ID, 'post_tag') as $tag) {
             $post_tags[] = $tag->name;
         }
         if (is_array($post_tags)) {
             sort($post_tags, SORT_STRING);
         }
         foreach (wp_get_object_terms($post->ID, 'category') as $cat) {
             $post_categories[] = $cat->name;
         }
         if (is_array($post_categories)) {
             sort($post_categories, SORT_STRING);
         }
         // get custom taxonomies
         $taxonomies = $wpdb->get_col($wpdb->prepare("\n\t\t\t\tSELECT DISTINCT tx.taxonomy\n\t\t\t\tFROM {$wpdb->term_taxonomy} tx JOIN {$wpdb->term_relationships} tr ON tx.term_taxonomy_id = tr.term_taxonomy_id\n\t\t\t\tWHERE tr.object_id =%d ", $post->ID));
         sort($taxonomies, SORT_STRING);
         if (isset($sitepress_settings['taxonomies_sync_option'])) {
             foreach ($taxonomies as $t) {
                 if (taxonomy_exists($t) && isset($sitepress_settings['taxonomies_sync_option'][$t]) && $sitepress_settings['taxonomies_sync_option'][$t] == 1) {
                     $taxs = array();
                     foreach (wp_get_object_terms($post->ID, $t) as $trm) {
                         $taxs[] = $trm->name;
                     }
                     if ($taxs) {
                         sort($taxs, SORT_STRING);
                         $all_taxs[] = '[' . $t . ']:' . join(',', $taxs);
                     }
                 }
             }
         }
         $custom_fields_values = array();
         if (isset($iclTranslationManagement->settings['custom_fields_translation']) && is_array($iclTranslationManagement->settings['custom_fields_translation'])) {
             foreach ($iclTranslationManagement->settings['custom_fields_translation'] as $cf => $op) {
                 if ($op == 2 || $op == 1) {
                     $value = get_post_meta($post->ID, $cf, true);
                     if (!is_array($value) && !is_object($value)) {
                         $custom_fields_values[] = $value;
                     }
                 }
             }
         }
         $md5str = $post->post_title . ';' . $post->post_content . ';' . join(',', $post_tags) . ';' . join(',', $post_categories) . ';' . join(',', $custom_fields_values);
         if (!empty($all_taxs)) {
             $md5str .= ';' . join(';', $all_taxs);
         }
         if (wpml_get_setting_filter(false, 'translated_document_page_url') === 'translate') {
             $md5str .= $post->post_name . ';';
         }
     }
     $md5 = md5($md5str);
     return $md5;
 }
Example #14
0
function wpml_reload_active_languages_setting($override = false)
{
    global $wpdb, $sitepress_settings;
    if ((bool) $sitepress_settings === true && ($override || wpml_get_setting_filter(false, 'setup_complete'))) {
        $active_languages = $wpdb->get_col("\tSELECT code\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tFROM {$wpdb->prefix}icl_languages\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE active = 1");
        $sitepress_settings['active_languages'] = $active_languages;
        icl_set_setting('active_languages', $active_languages, true);
    } else {
        $active_languages = array();
    }
    return (array) $active_languages;
}
Example #15
0
 function get_ls_languages($template_args = array())
 {
     /** @var $wp_query WP_Query */
     global $wp_query, $w_this_lang, $wpml_post_translations, $wpml_term_translations;
     $current_language = $this->get_current_language();
     $default_language = $this->get_default_language();
     $cache_key_args = $template_args ? array_filter($template_args) : array('default');
     $cache_key_args[] = $current_language;
     $cache_key_args[] = $default_language;
     $cache_key_args = array_filter($cache_key_args);
     $cache_key = md5(wp_json_encode($cache_key_args));
     $cache_group = 'ls_languages';
     $found = false;
     $ls_languages = wp_cache_get($cache_key, $cache_group, $found);
     if ($found) {
         return $ls_languages;
     }
     if (is_null($this->wp_query)) {
         $this->set_wp_query();
     }
     // use original wp_query for this
     // backup current $wp_query
     if (!isset($wp_query)) {
         return $this->get_active_languages();
     }
     $_wp_query_back = clone $wp_query;
     unset($wp_query);
     global $wp_query;
     // make it global again after unset
     $wp_query = clone $this->wp_query;
     $w_active_languages = $this->get_active_languages();
     $this_lang = $this->this_lang;
     if ($this_lang == 'all') {
         $w_this_lang = array('code' => 'all', 'english_name' => 'All languages', 'display_name' => __('All languages', 'sitepress'));
     } else {
         $w_this_lang = $this->get_language_details($this_lang);
     }
     if (isset($template_args['skip_missing'])) {
         //override default setting
         $icl_lso_link_empty = !$template_args['skip_missing'];
     } else {
         $icl_lso_link_empty = $this->settings['icl_lso_link_empty'];
     }
     $languages_helper = new WPML_Languages($wpml_term_translations, $this, $wpml_post_translations);
     list($translations, $wp_query) = $languages_helper->get_ls_translations($wp_query, $_wp_query_back, $this->wp_query);
     // 2. determine url
     foreach ($w_active_languages as $k => $lang) {
         $skip_lang = false;
         if (is_singular() || isset($_wp_query_back->query['name']) && isset($_wp_query_back->query['post_type']) || !empty($this->wp_query->queried_object_id) && $this->wp_query->queried_object_id == get_option('page_for_posts')) {
             $this_lang_tmp = $this->this_lang;
             $this->this_lang = $lang['code'];
             $lang_page_on_front = get_option('page_on_front');
             $lang_page_for_posts = get_option('page_for_posts');
             if ($lang_page_on_front) {
                 $lang_page_on_front = icl_object_id($lang_page_on_front, 'page', false, $lang['code']);
             }
             if ($lang_page_for_posts) {
                 $lang_page_for_posts = icl_object_id($lang_page_for_posts, 'page', false, $lang['code']);
             }
             if ('page' === get_option('show_on_front') && !empty($translations[$lang['code']]) && $translations[$lang['code']]->element_id == $lang_page_on_front) {
                 $lang['translated_url'] = $this->language_url($lang['code']);
             } elseif ('page' == get_option('show_on_front') && !empty($translations[$lang['code']]) && $translations[$lang['code']]->element_id && $translations[$lang['code']]->element_id == $lang_page_for_posts) {
                 if ($lang_page_for_posts) {
                     $lang['translated_url'] = get_permalink($lang_page_for_posts);
                 } else {
                     $lang['translated_url'] = $this->language_url($lang['code']);
                 }
             } else {
                 if (!empty($translations[$lang['code']]) && isset($translations[$lang['code']]->post_title)) {
                     $lang['translated_url'] = get_permalink($translations[$lang['code']]->element_id);
                     $lang['missing'] = 0;
                 } else {
                     if ($icl_lso_link_empty) {
                         if (!empty($template_args['link_empty_to'])) {
                             $lang['translated_url'] = str_replace('{%lang}', $lang['code'], $template_args['link_empty_to']);
                         } else {
                             $lang['translated_url'] = $this->language_url($lang['code']);
                         }
                     } else {
                         $skip_lang = true;
                     }
                     $lang['missing'] = 1;
                 }
             }
             $this->this_lang = $this_lang_tmp;
         } elseif (is_category() || is_tax() || is_tag()) {
             global $icl_adjust_id_url_filter_off;
             $icl_adjust_id_url_filter_off = true;
             list($lang, $skip_lang) = $languages_helper->add_tax_url_to_ls_lang($lang, $translations, $icl_lso_link_empty, $skip_lang);
             $icl_adjust_id_url_filter_off = false;
         } elseif (is_author()) {
             global $authordata;
             if (empty($authordata)) {
                 $authordata = get_userdata(get_query_var('author'));
             }
             remove_filter('home_url', array($this, 'home_url'), 1, 4);
             remove_filter('author_link', array($this, 'author_link'));
             list($lang, $skip_lang) = $languages_helper->add_author_url_to_ls_lang($lang, $authordata, $icl_lso_link_empty, $skip_lang);
             add_filter('home_url', array($this, 'home_url'), 1, 4);
             add_filter('author_link', array($this, 'author_link'));
         } elseif (is_archive() && !is_tag()) {
             global $icl_archive_url_filter_off;
             $icl_archive_url_filter_off = true;
             remove_filter('post_type_archive_link', array($this, 'post_type_archive_link_filter'), 10);
             list($lang, $skip_lang) = $languages_helper->add_date_or_cpt_url_to_ls_lang($lang, $this->wp_query, $icl_lso_link_empty, $skip_lang);
             add_filter('post_type_archive_link', array($this, 'post_type_archive_link_filter'), 10, 2);
             $icl_archive_url_filter_off = false;
         } elseif (is_search()) {
             $url_glue = strpos($this->language_url($lang['code']), '?') === false ? '?' : '&';
             $lang['translated_url'] = $this->language_url($lang['code']) . $url_glue . 's=' . urlencode($wp_query->query['s']);
         } else {
             global $icl_language_switcher_preview;
             if ($icl_lso_link_empty || is_home() || is_404() || 'page' === get_option('show_on_front') && ($this->wp_query->queried_object_id == get_option('page_on_front') || $this->wp_query->queried_object_id == get_option('page_for_posts')) || $icl_language_switcher_preview || WPML_Root_Page::is_current_request_root()) {
                 $lang['translated_url'] = $this->language_url($lang['code']);
                 $skip_lang = false;
             } else {
                 $skip_lang = true;
                 unset($w_active_languages[$k]);
             }
         }
         if (!$skip_lang) {
             $w_active_languages[$k] = $lang;
         } else {
             unset($w_active_languages[$k]);
         }
     }
     // 3.
     foreach ($w_active_languages as $k => $v) {
         $w_active_languages[$k] = $languages_helper->get_ls_language($k, $current_language, $w_active_languages[$k]);
     }
     // 4. pass GET parameters
     $parameters_copied = apply_filters('icl_lang_sel_copy_parameters', array_map('trim', explode(',', wpml_get_setting_filter('', 'icl_lang_sel_copy_parameters'))));
     if ($parameters_copied) {
         foreach ($_GET as $k => $v) {
             if (in_array($k, $parameters_copied)) {
                 $gets_passed[$k] = $v;
             }
         }
     }
     if (!empty($gets_passed)) {
         $gets_passed = http_build_query($gets_passed);
         foreach ($w_active_languages as $code => $al) {
             if (empty($al['missing'])) {
                 $glue = false !== strpos($w_active_languages[$code]['url'], '?') ? '&' : '?';
                 $w_active_languages[$code]['url'] .= $glue . $gets_passed;
             }
         }
     }
     // restore current $wp_query
     unset($wp_query);
     global $wp_query;
     // make it global again after unset
     $wp_query = clone $_wp_query_back;
     unset($_wp_query_back);
     $w_active_languages = apply_filters('icl_ls_languages', $w_active_languages);
     $w_active_languages = $languages_helper->sort_ls_languages($w_active_languages, $template_args);
     // Change the url, in case languages in subdomains are set.
     if ($this->settings['language_negotiation_type'] == 2) {
         foreach ($w_active_languages as $lang => $element) {
             $w_active_languages[$lang]['url'] = $this->convert_url($element['url'], $lang);
         }
     }
     wp_reset_query();
     wp_cache_set($cache_key, $w_active_languages, $cache_group);
     return $w_active_languages;
 }
 private function init_comments_synchronization()
 {
     if (wpml_get_setting_filter(null, 'sync_comments_on_duplicates')) {
         add_action('delete_comment', array($this, 'duplication_delete_comment'));
         add_action('edit_comment', array($this, 'duplication_edit_comment'));
         add_action('wp_set_comment_status', array($this, 'duplication_status_comment'), 10, 2);
         add_action('wp_insert_comment', array($this, 'duplication_insert_comment'), 100);
     }
 }
 public function enqueue_migration_in_tp()
 {
     global $sitepress;
     remove_filter('otgs_translation_get_services', 'filter_tp_services');
     $site_id = $sitepress->get_setting('site_id');
     $access_key = $sitepress->get_setting('access_key');
     $delivery = wpml_get_setting_filter(false, 'translation_pickup_method');
     $delivery = $delivery === 'polling' ? 'polling' : 'xmlrpc';
     $service = TranslationProxy_Service::get_service($this->get_icl_service_id());
     $params = array('project' => array('ts_accesskey' => $access_key, 'external_id' => $site_id, 'delivery_method' => $delivery, 'url' => get_option('siteurl'), 'name' => get_option('blogname'), 'description' => get_option('blogdescription'), 'suid' => isset($service->suid) ? $service->suid : ""));
     $project = false;
     $error_data = false;
     try {
         $response = TranslationProxy_Api::proxy_request('/projects/migrate.json', $params, 'POST');
         if (isset($response->project)) {
             $project = (array) $response->project;
             $project_index = $this->icl_project_hash_key();
             $projects = TranslationProxy::get_translation_projects();
             $projects[$project_index] = $project;
             icl_set_setting('icl_translation_projects', $projects, true);
             icl_set_setting('translation_service', TranslationProxy_Service::get_service($this->get_icl_service_id()), true);
         }
     } catch (Exception $e) {
         $error_data = $params;
     }
     if (!$error_data) {
         $this->move_finished_jobs_to_batch();
         if (defined('ICL_DEBUG_MODE') && ICL_DEBUG_MODE) {
             $this->regenerate_wrong_service_data();
         }
     }
     return array($project, $error_data);
 }