public static function update_translation_batch($batch_name = false, $tp_id = false)
 {
     global $wpdb;
     $batch_name = $batch_name ? $batch_name : ((bool) $tp_id === false || $tp_id === 'local' ? self::get_generic_batch_name() : TranslationProxy_Basket::get_basket_name());
     if (!$batch_name) {
         return null;
     }
     $cache_key = md5($batch_name);
     $cache_group = 'update_translation_batch';
     $cache_found = false;
     $batch_id = wp_cache_get($cache_key, $cache_group, false, $cache_found);
     if ($cache_found && $batch_id) {
         return $batch_id;
     }
     $batch_id_sql = "SELECT id FROM {$wpdb->prefix}icl_translation_batches WHERE batch_name=%s";
     $batch_id_prepared = $wpdb->prepare($batch_id_sql, array($batch_name));
     $batch_id = $wpdb->get_var($batch_id_prepared);
     if (!$batch_id) {
         $data = array('batch_name' => $batch_name, 'last_update' => date('Y-m-d H:i:s'));
         if ($tp_id) {
             if ($tp_id === 'local') {
                 $tp_id = 0;
             }
             $data['tp_id'] = $tp_id;
         }
         $wpdb->insert($wpdb->prefix . 'icl_translation_batches', $data);
         $batch_id = $wpdb->insert_id;
         wp_cache_set($cache_key, $batch_id, $cache_group);
     }
     return $batch_id;
 }
 /**
  * @param array  $allowed_langs
  * @param int    $element_id
  * @param string $element_type_prefix
  *
  * @return array
  */
 public function filter_target_langs($allowed_langs, $element_id, $element_type_prefix)
 {
     if (TranslationProxy_Basket::anywhere_in_basket($element_id, $element_type_prefix)) {
         $allowed_langs = array();
     } elseif ((bool) ($trid = $this->tm_records->icl_translations_by_element_id_and_type_prefix($element_id, $element_type_prefix)->trid()) === true) {
         foreach ($allowed_langs as $key => $lang_code) {
             $element = $this->tm_records->icl_translations_by_trid_and_lang($trid, $lang_code);
             if ($element->element_id() && !$element->source_language_code() || $this->is_in_active_job($element_id, $lang_code, $element_type_prefix)) {
                 unset($allowed_langs[$key]);
             }
         }
     }
     return $allowed_langs;
 }
 /**
  * @param array  $allowed_langs
  * @param int    $element_id
  * @param string $element_type_prefix
  *
  * @return array
  */
 public function filter_target_langs($allowed_langs, $element_id, $element_type_prefix)
 {
     if (TranslationProxy_Basket::anywhere_in_basket($element_id, $element_type_prefix)) {
         $allowed_langs = array();
     } else {
         $src_lang = SitePress::get_source_language_by_trid($this->get_element_trid($element_id, $element_type_prefix));
         foreach ($allowed_langs as $key => $lang_code) {
             if ($lang_code === $src_lang || $this->is_in_active_job($element_id, $lang_code, $element_type_prefix)) {
                 unset($allowed_langs[$key]);
             }
         }
     }
     return $allowed_langs;
 }
 /**
  * @param string[] $allowed_langs
  * @param int      $element_id
  * @param string   $element_type_prefix
  *
  * @return string[]
  */
 public function filter_target_langs($allowed_langs, $element_id, $element_type_prefix)
 {
     if (TranslationProxy_Basket::anywhere_in_basket($element_id, $element_type_prefix)) {
         $allowed_langs = array();
     } elseif ($element_type_prefix === 'post') {
         if ((bool) $this->post_translations->get_element_lang_code($element_id) === true) {
             $allowed_langs = array_fill_keys($allowed_langs, 1);
             $translations = $this->tm_records->icl_translations_by_element_id_and_type_prefix($element_id, 'post')->translations();
             foreach ($translations as $lang_code => $element) {
                 if (isset($allowed_langs[$lang_code]) && ($element->element_id() && !$element->source_language_code() || $this->tm_status->is_in_active_job($element_id, $lang_code, 'post'))) {
                     unset($allowed_langs[$lang_code]);
                 }
             }
             $allowed_langs = array_keys($allowed_langs);
         }
     }
     return $allowed_langs;
 }
    /**
     * Add hidden fields to TM basket.
     * #icl_duplicate_post_in_basket with list of ids in basket.
     * #icl_disconnect_nonce nonce for AJAX call.
     */
    public function add_hidden_field()
    {
        if (class_exists('TranslationProxy_Basket')) {
            $basket = TranslationProxy_Basket::get_basket(true);
            if (!isset($basket['post'])) {
                return;
            }
            $post_ids = array_map('intval', array_keys($basket['post']));
            if (true === $this->duplicated_posts_found($post_ids)) {
                ?>
				<input type="hidden" value="<?php 
                echo implode(',', $post_ids);
                ?>
" id="icl_duplicate_post_in_basket">
				<input type="hidden" value="<?php 
                echo wp_create_nonce('icl_disconnect_duplicates');
                ?>
" id="icl_disconnect_nonce">
				<?php 
            }
        }
    }
 public static function string_status_text_filter($text, $string_id)
 {
     if (TranslationProxy_Basket::is_string_in_basket_anywhere($string_id)) {
         $text = __('In the translation basket', 'wpml-translation-management');
     } else {
         global $wpdb;
         $translation_service = $wpdb->get_var($wpdb->prepare("\tSELECT translation_service\n\t\t\t\t\t\tFROM {$wpdb->prefix}icl_string_translations\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t    string_id = %d\n\t\t\t\t\t\t\tAND translation_service > 0\n\t\t\t\t\t\t\tAND status IN (%d, %d)\n\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t", $string_id, ICL_TM_WAITING_FOR_TRANSLATOR, ICL_TM_IN_PROGRESS));
         if ($translation_service) {
             $text = $text . " : " . sprintf(__('One or more strings sent to %s', 'wpml-translation-management'), TranslationProxy::get_service_name($translation_service));
         }
     }
     return $text;
 }
        /**
         * @param $data
         *
         * @return bool
         */
        private static function validate_data($data)
        {
            $data_is_valid = true;
            if (self::get_basket() && self::get_source_language()) {
                /*we do not add items that are not in the source language of the current basket
                		we cannot yet set its source language though since update_basket would set the basket
                		to false as long as we do not have any elements in the basket*/
                if (self::$translate_from != self::get_source_language()) {
                    self::$messages[] = array('type' => 'update', 'text' => __('You cannot add posts in this language to the basket since it already contains posts or strings of another source language!
						Either submit the current basket and then add the post or delete the posts of differing language in the current basket', 'wpml-translation-management'));
                    self::update_basket();
                    $data_is_valid = false;
                }
            }
            // no language selected ?
            if (!isset(self::$translation_action) || empty(self::$translation_action)) {
                self::$messages[] = array('type' => 'error', 'text' => __('Please select at least one language to translate into.', 'wpml-translation-management'));
                self::$dashboard_select = $data;
                // pre fill dashboard
                $data_is_valid = false;
            }
            if ($data_is_valid) {
                $data_is_valid = false;
                $basket_items_types = self::get_basket_items_types();
                // nothing selected ?
                foreach ($basket_items_types as $basket_items_type => $basket_type) {
                    if (isset($data[$basket_items_type]) && $data[$basket_items_type]) {
                        $data_is_valid = true;
                        break;
                    }
                }
            }
            if (!$data_is_valid) {
                self::$messages[] = array('type' => 'error', 'text' => __('Please select at least one document to translate.', 'wpml-translation-management'));
                self::$dashboard_select = $data;
                // pre-populate dashboard
                $data_is_valid = false;
                return $data_is_valid;
            }
            return $data_is_valid;
        }
 public function is_in_basket($target_lang)
 {
     if (class_exists('TranslationProxy_Basket')) {
         $basket = TranslationProxy_Basket::get_basket();
         return isset($basket['package'][$this->package->ID]['to_langs'][$target_lang]);
     } else {
         return false;
     }
 }
 private function build_dashboard_filter_arguments()
 {
     global $sitepress, $iclTranslationManagement;
     $this->current_language = $sitepress->get_current_language();
     $this->source_language = TranslationProxy_Basket::get_source_language();
     if (isset($_SESSION['translation_dashboard_filter'])) {
         $this->translation_filter = $_SESSION['translation_dashboard_filter'];
     }
     if ($this->source_language || !isset($this->translation_filter['from_lang'])) {
         if ($this->source_language) {
             $this->translation_filter['from_lang'] = $this->source_language;
         } else {
             $this->translation_filter['from_lang'] = isset($_GET['lang']) ? $_GET['lang'] : $this->current_language;
         }
     }
     if (!isset($this->translation_filter['to_lang'])) {
         $this->translation_filter['to_lang'] = isset($_GET['to_lang']) ? $_GET['to_lang'] : '';
     }
     if ($this->translation_filter['to_lang'] == $this->translation_filter['from_lang']) {
         $this->translation_filter['to_lang'] = false;
     }
     if (!isset($this->translation_filter['tstatus'])) {
         $this->translation_filter['tstatus'] = isset($_GET['tstatus']) ? $_GET['tstatus'] : -1;
         // -1 == All documents
     }
     if (!isset($this->translation_filter['sort_by']) || !$this->translation_filter['sort_by']) {
         $this->translation_filter['sort_by'] = 'date';
     }
     if (!isset($this->translation_filter['sort_order']) || !$this->translation_filter['sort_order']) {
         $this->translation_filter['sort_order'] = 'DESC';
     }
     $sort_order_next = $this->translation_filter['sort_order'] == 'ASC' ? 'DESC' : 'ASC';
     $this->dashboard_title_sort_link = 'admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&sm=dashboard&icl_tm_action=sort&sort_by=title&sort_order=' . $sort_order_next;
     $this->dashboard_date_sort_link = 'admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&sm=dashboard&icl_tm_action=sort&sort_by=date&sort_order=' . $sort_order_next;
     $this->post_statuses = array('publish' => __('Published', 'wpml-translation-management'), 'draft' => __('Draft', 'wpml-translation-management'), 'pending' => __('Pending Review', 'wpml-translation-management'), 'future' => __('Scheduled', 'wpml-translation-management'), 'private' => __('Private', 'wpml-translation-management'));
     $this->post_statuses = apply_filters('wpml_tm_dashboard_post_statuses', $this->post_statuses);
     // Get the document types that we can translate
     $this->post_types = $sitepress->get_translatable_documents();
     $this->post_types = apply_filters('wpml_tm_dashboard_translatable_types', $this->post_types);
     $this->build_external_types();
     $this->translation_filter['limit_no'] = isset($_GET['show_all']) && $_GET['show_all'] ? 10000 : ICL_TM_DOCS_PER_PAGE;
     if (!isset($this->translation_filter['parent_type'])) {
         $this->translation_filter['parent_type'] = 'any';
     }
     $this->selected_languages = array();
     if (!empty($iclTranslationManagement->dashboard_select)) {
         $this->selected_posts = $iclTranslationManagement->dashboard_select['post'];
         $this->selected_languages = $iclTranslationManagement->dashboard_select['translate_to'];
     }
     if (isset($this->translation_filter['icl_selected_posts'])) {
         parse_str($this->translation_filter['icl_selected_posts'], $this->selected_posts);
     }
     $this->filter_post_status = isset($this->translation_filter['status']) ? $this->translation_filter['status'] : false;
     if (isset($_GET['type'])) {
         $this->translation_filter['type'] = $_GET['type'];
     }
     $this->filter_translation_type = isset($this->translation_filter['type']) ? $this->translation_filter['type'] : false;
 }
 function reset_pro_translation_configuration()
 {
     $translation_service_name = $this->TranslationProxy->get_current_service_name();
     $this->sitepress->set_setting('content_translation_languages_setup', false);
     $this->sitepress->set_setting('content_translation_setup_complete', false);
     $this->sitepress->set_setting('content_translation_setup_wizard_step', false);
     $this->sitepress->set_setting('translator_choice', false);
     $this->sitepress->set_setting('icl_lang_status', false);
     $this->sitepress->set_setting('icl_balance', false);
     $this->sitepress->set_setting('icl_support_ticket_id', false);
     $this->sitepress->set_setting('icl_current_session', false);
     $this->sitepress->set_setting('last_get_translator_status_call', false);
     $this->sitepress->set_setting('last_icl_reminder_fetch', false);
     $this->sitepress->set_setting('icl_account_email', false);
     $this->sitepress->set_setting('translators_management_info', false);
     $this->sitepress->set_setting('site_id', false);
     $this->sitepress->set_setting('access_key', false);
     $this->sitepress->set_setting('ts_site_id', false);
     $this->sitepress->set_setting('ts_access_key', false);
     if (class_exists('TranslationProxy_Basket')) {
         //Cleaning the basket
         TranslationProxy_Basket::delete_all_items_from_basket();
     }
     $sql_for_remote_rids = $this->wpdb->prepare("FROM {$this->wpdb->prefix}icl_translation_status\n\t\t\t\t\t\t\t\t \t\t\t\tWHERE translation_service != 'local'\n\t\t\t\t\t\t\t\t \t\t\t\t\tAND translation_service != 0\n\t\t\t\t\t\t\t\t\t\t\t\t\tAND status IN ( %d, %d )", ICL_TM_WAITING_FOR_TRANSLATOR, ICL_TM_IN_PROGRESS);
     //Delete all translation service jobs with status "waiting for translator" or "in progress"
     $this->wpdb->query("DELETE FROM {$this->wpdb->prefix}icl_translate_job WHERE rid IN (SELECT rid {$sql_for_remote_rids})");
     //Delete all translation statuses with status "waiting for translator" or "in progress"
     $this->wpdb->query("DELETE {$sql_for_remote_rids}");
     //Cleaning up Translation Proxy settings
     $this->sitepress->set_setting('icl_html_status', false);
     $this->sitepress->set_setting('language_pairs', false);
     if (!$this->TranslationProxy->has_preferred_translation_service()) {
         $this->sitepress->set_setting('translation_service', false);
         $this->sitepress->set_setting('icl_translation_projects', false);
     }
     $this->sitepress->save_settings();
     $this->wpdb->query("TRUNCATE TABLE {$this->wpdb->prefix}icl_core_status");
     $this->wpdb->query("TRUNCATE TABLE {$this->wpdb->prefix}icl_content_status");
     $this->wpdb->query("TRUNCATE TABLE {$this->wpdb->prefix}icl_string_status");
     $this->wpdb->query("TRUNCATE TABLE {$this->wpdb->prefix}icl_node");
     $this->wpdb->query("TRUNCATE TABLE {$this->wpdb->prefix}icl_reminders");
     if ($this->TranslationProxy->has_preferred_translation_service() && $translation_service_name) {
         $confirm_message = 'The translation process with %1$s was reset.';
     } elseif ($translation_service_name) {
         $confirm_message = 'Your site was successfully disconnected from %1$s. Go to the translators tab to connect a new %1$s account or use a different translation service.';
     } else {
         $confirm_message = 'PRO translation has been reset.';
     }
     $response = sprintf(__($confirm_message, 'wpml-translation-management'), $translation_service_name);
     return $response;
 }
 private function get_data()
 {
     global $iclTranslationManagement;
     $translation_jobs_basket = TranslationProxy_Basket::get_basket();
     $basket_items_types = TranslationProxy_Basket::get_basket_items_types();
     foreach ($basket_items_types as $item_type_name => $item_type) {
         $translation_jobs_cart[$item_type_name] = false;
         if ($item_type == 'core') {
             if (!empty($translation_jobs_basket[$item_type_name])) {
                 $basket_type_items = $translation_jobs_basket[$item_type_name];
                 if ($item_type_name == 'string') {
                     $translation_jobs_cart[$item_type_name] = $iclTranslationManagement->get_translation_jobs_basket_strings($basket_type_items);
                 } else {
                     $translation_jobs_cart[$item_type_name] = $iclTranslationManagement->get_translation_jobs_basket_posts($basket_type_items);
                 }
                 $this->build_basket_items($translation_jobs_cart[$item_type_name], $item_type_name);
             }
         } elseif ($item_type == 'custom') {
             $translation_jobs_cart_externals = apply_filters('wpml_tm_translation_jobs_basket', array(), $translation_jobs_basket, $item_type_name);
             $this->build_basket_items($translation_jobs_cart_externals, $item_type_name);
         }
     }
 }
 /**
  * @param int[]    $string_ids
  * @param string   $source_language
  * @param string[] $target_languages
  */
 public function add_strings_to_basket($string_ids, $source_language, $target_languages)
 {
     TranslationProxy_Basket::add_strings_to_basket($string_ids, $source_language, $target_languages);
 }
 function send_strings_to_translation_service($string_ids, $target_language, $basket_name, $translator_id)
 {
     global $wpdb;
     // get all the untranslated strings
     $untranslated = array();
     foreach ($string_ids as $st_id) {
         $untranslated[] = $st_id;
     }
     if (sizeof($untranslated) > 0) {
         $project = TranslationProxy::get_current_project();
         $strings = array();
         $word_count = 0;
         $source_language = TranslationProxy_Basket::get_source_language();
         foreach ($untranslated as $string_id) {
             $string_data_query = "SELECT id, context, name, value FROM {$wpdb->prefix}icl_strings WHERE id=%d";
             $string_data_prepare = $wpdb->prepare($string_data_query, $string_id);
             $string_data = $wpdb->get_row($string_data_prepare);
             $word_count += $this->estimate_word_count($string_data->value, $source_language);
             $strings[] = $string_data;
         }
         $xliff = new WPML_TM_xliff();
         $file = $xliff->get_strings_xliff_file($strings, $source_language, $target_language);
         $title = "String Translations";
         $cms_id = '';
         $url = '';
         $timestamp = date('Y-m-d H:i:s');
         $res = $project->send_to_translation_batch_mode($file, $title, $cms_id, $url, $source_language, $target_language, $word_count);
         if ($res) {
             foreach ($strings as $string_data) {
                 $batch_id = TranslationProxy_Batch::update_translation_batch($basket_name);
                 $translation_service = TranslationProxy_Service::get_translator_data_from_wpml($translator_id);
                 $added = icl_add_string_translation($string_data->id, $target_language, null, ICL_TM_WAITING_FOR_TRANSLATOR, $translation_service['translator_id'], $translation_service['translation_service'], $batch_id);
                 if ($added) {
                     $data = array('rid' => $res, 'string_translation_id' => $added, 'timestamp' => $timestamp, 'md5' => md5($string_data->value));
                     $wpdb->insert($wpdb->prefix . 'icl_string_status', $data);
                     //insert rid
                 } else {
                     $this->add_message(sprintf(__('Unable to add "%s" string in tables', 'sitepress'), $string_data->name), 'error');
                     return 0;
                 }
             }
             $wpdb->insert($wpdb->prefix . 'icl_core_status', array('rid' => $res, 'module' => '', 'origin' => $source_language, 'target' => $target_language, 'status' => CMS_REQUEST_WAITING_FOR_PROJECT_CREATION));
             if ($project->errors && count($project->errors)) {
                 $res['errors'] = $project->errors;
             }
             return $res;
         }
     }
     return 0;
 }
 /**
  * @param string $state
  *
  * @return mixed
  */
 private function get_jobs($state = 'any')
 {
     $batch = TranslationProxy_Basket::get_batch_data();
     $params = array('project_id' => $this->id, 'accesskey' => $this->access_key, 'state' => $state);
     if ($batch) {
         $params['batch_id'] = $batch ? $batch->id : false;
         return TranslationProxy_Api::proxy_request('/batches/{batch_id}/jobs.json', $params);
     } else {
         //FIXME: remove this once TP will accept the TP Project ID: https://icanlocalize.basecamphq.com/projects/11113143-translation-proxy/todo_items/182251206/comments
         $params['project_id'] = $this->id;
     }
     return TranslationProxy_Api::proxy_request('/jobs.json', $params);
 }
 private function is_in_basket($element_id, $lang, $element_type_prefix)
 {
     return TranslationProxy_Basket::anywhere_in_basket($element_id, $element_type_prefix, array($lang => 1));
 }
Exemplo n.º 16
0
 public function rollback_basket_commit()
 {
     TranslationProxy_Basket::get_basket(true);
     $basket_name = TranslationProxy_Basket::get_basket_name();
     $basket_name = $basket_name ? $basket_name : filter_input(INPUT_POST, 'basket_name', FILTER_SANITIZE_STRING);
     $batch_id = TranslationProxy::get_batch_id_from_name($basket_name);
     if ($batch_id) {
         $batch = new WPML_Translation_Batch($batch_id);
         $batch->cancel_all_remote_jobs();
     }
 }
 static function reset_pro_translation_configuration()
 {
     //Todo: [WPML 3.3] Use settings APIs
     global $sitepress;
     $sitepress->set_setting('content_translation_languages_setup', false);
     $sitepress->set_setting('content_translation_setup_complete', false);
     $sitepress->set_setting('content_translation_setup_wizard_step', false);
     $sitepress->set_setting('site_id', false);
     $sitepress->set_setting('access_key', false);
     $sitepress->set_setting('translator_choice', false);
     $sitepress->set_setting('icl_lang_status', false);
     $sitepress->set_setting('icl_balance', false);
     $sitepress->set_setting('icl_support_ticket_id', false);
     $sitepress->set_setting('icl_current_session', false);
     $sitepress->set_setting('last_get_translator_status_call', false);
     $sitepress->set_setting('last_icl_reminder_fetch', false);
     $sitepress->set_setting('icl_account_email', false);
     $sitepress->set_setting('translators_management_info', false);
     if (class_exists('TranslationProxy_Basket')) {
         //Cleaning the basket
         TranslationProxy_Basket::delete_all_items_from_basket();
     }
     global $wpdb;
     $sql_for_remote_rids = $wpdb->prepare("FROM {$wpdb->prefix}icl_translation_status\n\t\t\t\t\t\t\t\t \t\t\t\tWHERE translation_service != 'local'\n\t\t\t\t\t\t\t\t \t\t\t\t\tAND translation_service != 0\n\t\t\t\t\t\t\t\t\t\t\t\t\tAND status IN ( %d, %d)", ICL_TM_WAITING_FOR_TRANSLATOR, ICL_TM_IN_PROGRESS);
     //Delete all translation service jobs with status "waiting for translator" or "in progress"
     $wpdb->query("\tDELETE FROM {$wpdb->prefix}icl_translate_job\n\t\t\t\t\t\tWHERE rid IN (SELECT rid {$sql_for_remote_rids})");
     //Delete all translation statuses with status "waiting for translator" or "in progress"
     $wpdb->query("DELETE {$sql_for_remote_rids}");
     //Cleaning up Translation Proxy settings
     $sitepress->set_setting('icl_html_status', false);
     $sitepress->set_setting('language_pairs', false);
     $sitepress->set_setting('icl_translation_projects', false);
     $sitepress->set_setting('translation_service', false);
     $sitepress->set_setting('site_id', false);
     $sitepress->set_setting('access_key', false);
     $sitepress->set_setting('ts_site_id', false);
     $sitepress->set_setting('ts_access_key', false);
     $sitepress->save_settings();
     $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}icl_core_status");
     $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}icl_content_status");
     $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}icl_string_status");
     $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}icl_node");
     $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}icl_reminders");
     $response = array('errors' => 0, 'message' => __('PRO translation has been reset.', 'sitepress'));
     return $response;
 }
 /**
  * @param string    $state
  * @param null|bool $include_archived `null` ignores this argument, `true` or `false` filters by this argument
  *
  * @return mixed
  */
 private function get_jobs($state = 'any', $include_archived = null)
 {
     $batch = TranslationProxy_Basket::get_batch_data();
     $params = array('project_id' => $this->id, 'accesskey' => $this->access_key, 'state' => $state);
     if (null !== $include_archived) {
         $params['archived'] = $include_archived;
     }
     if ($batch) {
         $params['batch_id'] = $batch ? $batch->id : false;
         return TranslationProxy_Api::proxy_request('/batches/{batch_id}/jobs.json', $params);
     } else {
         //FIXME: remove this once TP will accept the TP Project ID: https://icanlocalize.basecamphq.com/projects/11113143-translation-proxy/todo_items/182251206/comments
         $params['project_id'] = $this->id;
     }
     try {
         return TranslationProxy_Api::proxy_request('/jobs.json', $params);
     } catch (Exception $ex) {
         $this->add_error($ex->getMessage());
         return false;
     }
 }
 public function basket_extra_fields_refresh()
 {
     echo TranslationProxy_Basket::get_basket_extra_fields_inputs();
     die;
 }
 public function add_to_basket($data)
 {
     if (isset($data['tr_action'])) {
         $posts_ids = TranslationProxy_Basket::get_elements_ids($data, 'package');
         foreach ($posts_ids as $id) {
             $post_id = $id;
             $source_language = $data['translate_from'];
             $target_languages = $data['tr_action'];
             foreach ($target_languages as $translate_to => $translation_action) {
                 $package = new WPML_Package($post_id);
                 $tm = new WPML_Package_TM($package);
                 $tm->add_package_to_basket($translation_action, $source_language, $translate_to);
             }
         }
     }
 }
Exemplo n.º 21
0
function icl_send_strings_action()
{
    if (wp_verify_nonce(filter_input(INPUT_POST, 'iclnonce', FILTER_SANITIZE_STRING), 'icl-string-translation')) {
        $_POST = stripslashes_deep($_POST);
        $string_ids = explode(',', $_POST['strings']);
        $translate_to = array();
        foreach ($_POST['translate_to'] as $lang_to => $one) {
            $translate_to[$lang_to] = $lang_to;
        }
        if (!empty($translate_to)) {
            global $WPML_String_Translation;
            TranslationProxy_Basket::add_strings_to_basket($string_ids, $WPML_String_Translation->get_strings_language(), $translate_to);
        }
    }
}
 /**
  * @param $job_details
  * @param $post_title
  * @param $language_name
  *
  * @return bool
  * @throws WPML_Package_Exception
  */
 private function validate_package_status($job_details, $post_title, $language_name)
 {
     $send_to_basket = true;
     $message_args = array();
     if ($job_details->status == ICL_TM_IN_PROGRESS) {
         $message_args = array('type' => 'update', 'text' => sprintf(__('Post "%s" will be ignored for %s, because translation is already in progress.', 'sitepress'), $post_title, $language_name));
         $send_to_basket = false;
     } elseif ($job_details->status == ICL_TM_WAITING_FOR_TRANSLATOR) {
         $message_args = array('type' => 'update', 'text' => sprintf(__('Post "%s" will be ignored for %s, because translation is already waiting for translator.', 'sitepress'), $post_title, $language_name));
         $send_to_basket = false;
     }
     if (!$send_to_basket) {
         TranslationProxy_Basket::add_message($message_args);
         TranslationProxy_Basket::update_basket();
     }
     return $send_to_basket;
 }
 private function get_source_language()
 {
     return TranslationProxy_Basket::get_source_language();
 }
 /**
  * @param $translators
  *
  * @return mixed
  */
 private function set_remote_target_languages($translators)
 {
     $this->remote_target_languages = array();
     $basket_items_types = TranslationProxy_Basket::get_basket_items_types();
     foreach ($basket_items_types as $item_type_name => $item_type) {
         // check target languages for strings
         if (!empty($this->translation_jobs_basket[$item_type_name])) {
             foreach ($this->translation_jobs_basket[$item_type_name] as $value) {
                 foreach ($value['to_langs'] as $target_language => $target_language_selected) {
                     //for remote strings
                     if ($value['from_lang'] != $target_language && !is_numeric($translators[$target_language])) {
                         if ($target_language_selected && !in_array($target_language, $this->remote_target_languages)) {
                             $this->remote_target_languages[] = $target_language;
                         }
                     }
                 }
             }
         }
     }
 }
 function display_basket_notification($position)
 {
     if (class_exists('ICL_AdminNotifier') && class_exists('TranslationProxy_Basket')) {
         $positions = TranslationProxy_Basket::get_basket_notification_positions();
         if (isset($positions[$position])) {
             ICL_AdminNotifier::display_messages('translation-basket-notification');
         }
     }
 }
 private function commit_basket($translation_id)
 {
     $basket_networking = wpml_tm_load_basket_networking();
     $translator_array = $this->build_translator_array($translation_id);
     if ($translator_array) {
         $basket_networking->commit_basket_chunk(array(), TranslationProxy_Basket::get_basket_name(), $translator_array);
     }
     $project = TranslationProxy::get_current_project();
     $project->commit_batch_job();
     TranslationProxy_Basket::delete_all_items_from_basket();
 }