private function build_translation_options() { global $sitepress, $wpdb; $basket_items_number = TranslationProxy_Basket::get_basket_items_count(true); $basket_name_max_length = TranslationProxy::get_current_service_batch_name_max_length(); if ($basket_items_number > 0) { $source_language = TranslationProxy_Basket::get_source_language(); $basket_name_placeholder = sprintf(__("%s|WPML|%s", 'wpml-translation-management'), get_option('blogname'), $source_language); $basket = new WPML_Translation_Basket($wpdb); $basket_name_placeholder = esc_attr($basket->get_unique_basket_name($basket_name_placeholder, $basket_name_max_length)); ?> <h3>2. <?php _e('Choose translation options', 'wpml-translation-management'); ?> </h3> <form method="post" id="translation-jobs-translators-form" name="translation-jobs-translators" action=""> <input type="hidden" name="icl_tm_action" value="send_all_jobs"/> <label for="basket_name"><strong><?php _e('Batch name', 'wpml-translation-management'); ?> :</strong></label> <input id="basket_name" name="basket_name" type="text" style="width: 40%;" value="<?php echo $basket_name_placeholder; ?> " maxlength="<?php echo $basket_name_max_length; ?> " placeholder="<?php echo $basket_name_placeholder; ?> "> <br/><span class="description"><?php _e('Give a name to the batch. If omitted, the default name will be applied.', 'wpml-translation-management'); ?> </span> <table class="widefat fixed" id="icl-translation-translators" cellspacing="0"> <thead> <tr> <th scope="col" width="15%"><?php _e('Language', 'wpml-translation-management'); ?> </th> <th scope="col"><?php _e('Translator', 'wpml-translation-management'); ?> </th> </tr> </thead> <tfoot> <tr> <th scope="col"><?php _e('Language', 'wpml-translation-management'); ?> </th> <th scope="col"><?php _e('Translator', 'wpml-translation-management'); ?> </th> </tr> </tfoot> <?php $basket_languages = TranslationProxy_Basket::get_target_languages(); if ($basket_languages) { ?> <tbody> <?php $target_languages = $sitepress->get_active_languages(); foreach ($target_languages as $key => $lang) { if (!in_array($lang['code'], $basket_languages)) { unset($target_languages[$key]); } } foreach ($target_languages as $lang) { if ($lang['code'] === TranslationProxy_Basket::get_source_language()) { continue; } ?> <tr> <td><strong><?php echo $lang['display_name']; ?> </strong></td> <td> <label for="<?php echo esc_attr('translator[' . $lang['code'] . ']'); ?> "> <?php _e('Translate by', 'wpml-translation-management'); ?> </label> <?php $selected_translator = isset($icl_selected_translators[$lang['code']]) ? $icl_selected_translators[$lang['code']] : false; if ($selected_translator === false) { $selected_translator = TranslationProxy_Service::get_wpml_translator_id(); } $args = array('from' => TranslationProxy_Basket::get_source_language(), 'to' => $lang['code'], 'name' => 'translator[' . $lang['code'] . ']', 'selected' => $selected_translator, 'services' => array('local', TranslationProxy::get_current_service_id())); TranslationManagement::translators_dropdown($args); ?> <a href="admin.php?page=<?php echo WPML_TM_FOLDER; ?> /menu/main.php&sm=translators"><?php _e('Manage translators', 'wpml-translation-management'); ?> </a> </td> </tr> <?php } ?> </tbody> <?php } ?> </table> <br> <?php echo TranslationProxy_Basket::get_basket_extra_fields_section(); ?> <?php wp_nonce_field('send_basket_items_nonce', '_icl_nonce_send_basket_items'); ?> <?php wp_nonce_field('send_basket_item_nonce', '_icl_nonce_send_basket_item'); ?> <?php wp_nonce_field('send_basket_commit_nonce', '_icl_nonce_send_basket_commit'); ?> <?php wp_nonce_field('check_basket_name_nonce', '_icl_nonce_check_basket_name'); ?> <input type="submit" class="button-primary" name="send-all-jobs-for-translation" value="<?php _e('Send all items for translation', 'wpml-translation-management'); ?> "> </form> <?php } do_action('wpml_translation_basket_page_after'); }
/** * Ajax handler for checking if a current basket/batch name is valid for use with the currently used translation * service. * * @uses \WPML_Translation_Basket::check_basket_name */ function check_basket_name() { $basket_name = filter_input(INPUT_POST, 'basket_name', FILTER_SANITIZE_STRING); $basket_name_max_length = TranslationProxy::get_current_service_batch_name_max_length(); wp_send_json_success($this->basket->check_basket_name($basket_name, $basket_name_max_length)); }
public function check_basket_name() { $basket_name = filter_input(INPUT_POST, 'basket_name', FILTER_SANITIZE_STRING); $basket_name_max_length = TranslationProxy::get_current_service_batch_name_max_length(); $result = array('modified' => false, 'valid' => true, 'message' => '', 'new_value' => ''); $old_value = $basket_name; $basket_name = strip_tags($basket_name); if ($old_value != $basket_name) { $result['modified'] = true; $result['new_value'] = $basket_name; } if (strlen($basket_name) > $basket_name_max_length) { $result['valid'] = false; $result['message'] = sprintf(__('The length of the batch name exceeds the maximum length of %s', 'wpml-translation-management'), $basket_name_max_length); } elseif (TranslationProxy::get_batch_id_from_name($basket_name)) { $result['valid'] = true; $result['modified'] = true; $result['new_value'] = TranslationProxy_Basket::get_unique_basket_name($basket_name, $basket_name_max_length); $result['message'] = __('This batch name already exists and was modified to ensure unique naming', 'wpml-translation-management'); } elseif (count($basket_name_array = explode('|', $basket_name)) == 1) { $result['valid'] = true; $result['modified'] = true; $result['new_value'] = TranslationProxy_Basket::get_unique_basket_name($basket_name, $basket_name_max_length); $result['message'] = __('The batch name was appended with the source language of its elements.', 'wpml-translation-management'); } wp_send_json_success($result); }
/** * Returns a unique name derived from an input name for a Translation Proxy Basket * * @param bool $basket_name * @param bool|int $max_length * * @return bool|string */ public static function get_unique_basket_name($basket_name = false, $max_length = false) { if (!$max_length) { $max_length = TranslationProxy::get_current_service_batch_name_max_length(); } $basket_name_array = explode('|', $basket_name); //if we just have some user entered string not in our format we add the information to it if (count($basket_name_array) == 1) { $basket_name = $basket_name . '|' . self::get_source_language(); } elseif (!is_numeric($basket_name_array[count($basket_name_array) - 1]) && $basket_name_array[count($basket_name_array) - 1] != self::get_source_language()) { //if we do not have a numeric suffix and also do not have the source language as the last entry we add it. $basket_name = $basket_name . '|' . self::get_source_language(); } elseif (is_numeric($basket_name_array[count($basket_name_array) - 1]) && $basket_name_array[count($basket_name_array) - 2] != self::get_source_language()) { //if we have a possible suffix we check whether the language has been added in the appropriate place if not we dont see it as a suffix and add our language at the end $basket_name = $basket_name . '|' . self::get_source_language(); } if (!$basket_name) { self::get_basket(); if (isset(self::$basket['name'])) { $basket_name = self::$basket['name']; } } if (strlen($basket_name) > $max_length) { $basket_name = self::sanitize_basket_name($basket_name, $max_length); } if (TranslationProxy::get_batch_id_from_name($basket_name)) { $suffix = 2; $basket_name = self::sanitize_basket_name($basket_name, $max_length - strlen((string) $suffix) - 1); while (TranslationProxy::get_batch_id_from_name($basket_name . '|' . $suffix)) { $suffix++; $basket_name = self::sanitize_basket_name($basket_name, $max_length - strlen((string) $suffix) - 1); } return $basket_name . '|' . $suffix; } return $basket_name; }