/** * Synchronizes language pairs with ICL * * @global object $sitepress * * @param $project * @param $language_pairs * */ public static function update_language_pairs($project, $language_pairs) { global $sitepress; $params = array('site_id' => $project->ts_id, 'accesskey' => $project->ts_access_key, 'create_account' => 0); $lang_server = array(); foreach ($sitepress->get_active_languages() as $lang) { $lang_server[$lang['code']] = WPML_Pro_Translation::server_languages_map($lang['english_name']); } // update account - add language pair $incr = 0; foreach ($language_pairs as $k => $v) { foreach ($v as $k2 => $v2) { $incr++; $params['from_language' . $incr] = $lang_server[$k]; $params['to_language' . $incr] = $lang_server[$k2]; } } require_once ICL_PLUGIN_PATH . '/lib/Snoopy.class.php'; require_once ICL_PLUGIN_PATH . '/lib/xml2array.php'; require_once ICL_PLUGIN_PATH . '/lib/icl_api.php'; $icl_query = new ICanLocalizeQuery(); $icl_query->updateAccount($params); }
/** * Get information about translators from current project. Works only for ICL as a Translation Service * * @param bool $force * * @return array|bool */ public static function get_icl_translator_status($force = false) { /** @var SitePress $sitepress */ /** @var WPML_Pro_Translation $ICL_Pro_Translation */ global $sitepress, $ICL_Pro_Translation; if (!$ICL_Pro_Translation) { $job_factory = wpml_tm_load_job_factory(); $ICL_Pro_Translation = new WPML_Pro_Translation($job_factory); } if (!TranslationProxy::translator_selection_available()) { return array(); } $project = TranslationProxy::get_current_project(); if (!$project) { return array(); } $cache_key = md5(serialize($project)); $cache_group = 'get_icl_translator_status'; $found = false; $result = wp_cache_get($cache_key, $cache_group, false, $found); if ($found) { return $result; } $translator_status = array(); $website_details = self::get_website_details(new TranslationProxy_Project(TranslationProxy::get_current_service()), $force); if (false === (bool) $website_details) { return array(); } $language_pairs = array(); if (isset($website_details['translation_languages']['translation_language'])) { $translation_languages = $website_details['translation_languages']['translation_language']; if (!isset($translation_languages[0])) { $buf = $translation_languages; $translation_languages = array(0 => $buf); } foreach ($translation_languages as $lang) { $translators = $_tr = array(); $max_rate = false; if (isset($lang['translators'], $lang['translators']['translator']) && !empty($lang['translators'])) { if (!isset($lang['translators']['translator'][0])) { $_tr[0] = $lang['translators']['translator']; } else { $_tr = $lang['translators']['translator']; } foreach ($_tr as $t) { if (false === $max_rate || $t['attr']['amount'] > $max_rate) { $max_rate = $t['attr']['amount']; } $translators[] = array('id' => $t['attr']['id'], 'nickname' => $t['attr']['nickname'], 'contract_id' => $t['attr']['contract_id']); } } $language_pairs[] = array('from' => $sitepress->get_language_code($ICL_Pro_Translation->server_languages_map($lang['attr']['from_language_name'], true)), 'to' => $sitepress->get_language_code($ICL_Pro_Translation->server_languages_map($lang['attr']['to_language_name'], true)), 'have_translators' => $lang['attr']['have_translators'], 'available_translators' => $lang['attr']['available_translators'], 'applications' => $lang['attr']['applications'], 'contract_id' => $lang['attr']['contract_id'], 'id' => $lang['attr']['id'], 'translators' => $translators, 'max_rate' => $max_rate); } } $translator_status['icl_lang_status'] = $language_pairs; if (isset($res['client']['attr'])) { $translator_status['icl_balance'] = $res['client']['attr']['balance']; $translator_status['icl_anonymous_user'] = $res['client']['attr']['anon']; } if (isset($res['html_status']['value'])) { $translator_status['icl_html_status'] = html_entity_decode($res['html_status']['value']); $translator_status['icl_html_status'] = preg_replace_callback('#<a([^>]*)href="([^"]+)"([^>]*)>#i', create_function('$matches', 'global $sitepress; return TranslationProxy_Popup::get_link($matches[2]);'), $translator_status['icl_html_status']); } if (isset($res['translators_management_info']['value'])) { $translator_status['translators_management_info'] = html_entity_decode($res['translators_management_info']['value']); $translator_status['translators_management_info'] = preg_replace_callback('#<a([^>]*)href="([^"]+)"([^>]*)>#i', create_function('$matches', 'global $sitepress; return TranslationProxy_Popup::get_link($matches[2]);'), $translator_status['translators_management_info']); } $translator_status['icl_support_ticket_id'] = null; if (isset($res['attr']['support_ticket_id'])) { $translator_status['icl_support_ticket_id'] = (int) $res['attr']['support_ticket_id']; } wp_cache_set($cache_key, $translator_status, $cache_group); return $translator_status; }