public static function get_job_id_from_request()
 {
     /**
      * @var TranslationManagement $iclTranslationManagement
      * @var WPML_Post_Translation $wpml_post_translations
      */
     global $iclTranslationManagement, $wpml_post_translations, $wpml_translation_job_factory, $sitepress, $wpdb;
     $job_id = filter_input(INPUT_GET, 'job_id', FILTER_SANITIZE_NUMBER_INT);
     $trid = filter_input(INPUT_GET, 'trid', FILTER_SANITIZE_NUMBER_INT);
     $language_code = filter_input(INPUT_GET, 'language_code', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
     $source_language_code = filter_input(INPUT_GET, 'source_language_code', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
     if (!$job_id && $trid && $language_code) {
         $job_id = $iclTranslationManagement->get_translation_job_id($trid, $language_code);
         if (!$job_id) {
             if (!$source_language_code) {
                 $post_id = SitePress::get_original_element_id_by_trid($trid);
             } else {
                 $posts_in_trid = $wpml_post_translations->get_element_translations(false, $trid);
                 $post_id = isset($posts_in_trid[$source_language_code]) ? $posts_in_trid[$source_language_code] : false;
             }
             $blog_translators = wpml_tm_load_blog_translators();
             $args = array('lang_from' => $source_language_code, 'lang_to' => $language_code, 'job_id' => $job_id);
             if ($post_id && $blog_translators->is_translator($sitepress->get_current_user()->ID, $args)) {
                 $job_id = $wpml_translation_job_factory->create_local_post_job($post_id, $language_code);
             }
         }
     }
     return $job_id;
 }
 /**
  * @param  int                     $job_id
  * @param int|null                 $batch_id
  * @param WPML_TM_Blog_Translators $blog_translators
  */
 function __construct($job_id, $batch_id = null, &$blog_translators = null)
 {
     $this->job_id = $job_id;
     $batch_id = $batch_id ? $batch_id : $this->get_batch_id();
     $this->batch_id = $batch_id ? $batch_id : TranslationProxy_Batch::update_translation_batch();
     $this->blog_translators = $blog_translators ? $blog_translators : wpml_tm_load_blog_translators();
 }
function wpml_tm_save_post($post_id, $post, $force_set_status)
{
    global $wpdb;
    require_once WPML_TM_PATH . '/inc/actions/wpml-tm-post-actions.class.php';
    $action_helper = new WPML_TM_Action_Helper();
    $blog_translators = wpml_tm_load_blog_translators();
    $tm_records = new WPML_TM_Records($wpdb);
    $save_post_action = new WPML_TM_Post_Actions($action_helper, $blog_translators, $tm_records);
    if ($post->post_type == 'revision' || $post->post_status == 'auto-draft' || isset($_POST['autosave'])) {
        return;
    }
    $save_post_action->save_post_actions($post_id, $post, $force_set_status);
}
/**
 * @return WPML_TM_Mail_Notification
 */
function wpml_tm_init_mail_notifications()
{
    global $wpml_tm_mailer, $sitepress, $wpdb, $iclTranslationManagement, $wpml_translation_job_factory;
    if (!isset($wpml_tm_mailer)) {
        require WPML_TM_PATH . '/inc/local-translation/wpml-tm-mail-notification.class.php';
        $blog_translators = wpml_tm_load_blog_translators();
        $iclTranslationManagement = $iclTranslationManagement ? $iclTranslationManagement : wpml_load_core_tm();
        if (empty($iclTranslationManagement->settings)) {
            $iclTranslationManagement->init();
        }
        $settings = isset($iclTranslationManagement->settings['notification']) ? $iclTranslationManagement->settings['notification'] : array();
        $wpml_tm_mailer = new WPML_TM_Mail_Notification($sitepress, $wpdb, $wpml_translation_job_factory, $blog_translators, $settings);
    }
    $wpml_tm_mailer->init();
    return $wpml_tm_mailer;
}
    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>
                &nbsp;<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()));
                    $blog_translators = wpml_tm_load_blog_translators();
                    $translators_dropdown = new WPML_TM_Translators_Dropdown($blog_translators);
                    $translators_dropdown->render($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');
    }
<script type="text/html" id="table-listing-filter">
	<?php 
global $iclTranslationManagement, $sitepress, $wpdb;
$translation_services = array('local', TranslationProxy::get_current_service_id());
$args = array('name' => 'filter[translator_id]', 'default_name' => __('All', 'wpml-translation-management'), 'selected' => isset($icl_translation_filter['translator_id']) ? $icl_translation_filter['translator_id'] : '', 'services' => $translation_services, 'add_label' => true);
$blog_translators = wpml_tm_load_blog_translators();
$translators_dropdown = new WPML_TM_Translators_Dropdown($blog_translators);
$translators_dropdown->render($args);
?>
	&nbsp;	<label for="filter-job-status">
		<?php 
_e('Status', 'wpml-translation-management');
?>
</label>&nbsp;		<select id="filter-job-status" name="filter[status]">
		<option value=""><?php 
_e('All translation jobs', 'wpml-translation-management');
?>
</option>
		<option value="<?php 
echo ICL_TM_WAITING_FOR_TRANSLATOR;
?>
"><?php 
echo TranslationManagement::status2text(ICL_TM_WAITING_FOR_TRANSLATOR);
?>
</option>
		<option value="<?php 
echo ICL_TM_IN_PROGRESS;
?>
"><?php 
echo TranslationManagement::status2text(ICL_TM_IN_PROGRESS);
?>