870 lines
22 KiB
PHP
870 lines
22 KiB
PHP
<?php
|
|
|
|
use WPML\TM\Editor\ClassicEditorActions;
|
|
use function WPML\Container\make;
|
|
use WPML\TM\Jobs\Query\LimitQueryHelper;
|
|
use WPML\TM\Jobs\Query\OrderQueryHelper;
|
|
use WPML\TM\Jobs\Query\PostQuery;
|
|
use WPML\TM\Jobs\Query\QueryBuilder;
|
|
use WPML\TM\Jobs\Query\PackageQuery;
|
|
use WPML\TM\Jobs\Query\StringQuery;
|
|
use WPML\TM\Jobs\Query\StringsBatchQuery;
|
|
use WPML\TM\Jobs\Query\CompositeQuery;
|
|
|
|
|
|
/**
|
|
* @return WPML_TM_Element_Translations
|
|
*/
|
|
function wpml_tm_load_element_translations() {
|
|
global $wpml_tm_element_translations, $wpdb, $wpml_post_translations, $wpml_term_translations;
|
|
|
|
if ( ! isset( $wpml_tm_element_translations ) ) {
|
|
require_once WPML_TM_PATH . '/inc/core/wpml-tm-element-translations.class.php';
|
|
$tm_records = new WPML_TM_Records( $wpdb, $wpml_post_translations, $wpml_term_translations );
|
|
$wpml_tm_element_translations = new WPML_TM_Element_Translations( $tm_records );
|
|
$wpml_tm_element_translations->init_hooks();
|
|
}
|
|
|
|
return $wpml_tm_element_translations;
|
|
}
|
|
|
|
function wpml_tm_load_status_display_filter() {
|
|
global $wpml_tm_status_display_filter, $iclTranslationManagement, $sitepress, $wpdb;
|
|
|
|
$blog_translators = wpml_tm_load_blog_translators();
|
|
$tm_api = new WPML_TM_API( $blog_translators, $iclTranslationManagement );
|
|
$tm_api->init_hooks();
|
|
if ( ! isset( $wpml_tm_status_display_filter ) ) {
|
|
$status_helper = wpml_get_post_status_helper();
|
|
$job_factory = wpml_tm_load_job_factory();
|
|
$wpml_tm_status_display_filter = new WPML_TM_Translation_Status_Display(
|
|
$wpdb,
|
|
$sitepress,
|
|
$status_helper,
|
|
$job_factory,
|
|
$tm_api
|
|
);
|
|
}
|
|
|
|
$wpml_tm_status_display_filter->init();
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_TM_Page_Builders_Hooks
|
|
*/
|
|
function wpml_tm_page_builders_hooks() {
|
|
static $page_builder_hooks;
|
|
if ( ! $page_builder_hooks ) {
|
|
global $sitepress;
|
|
$page_builder_hooks = new WPML_TM_Page_Builders_Hooks( null, $sitepress );
|
|
}
|
|
|
|
return $page_builder_hooks;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_TM_Custom_XML_Factory
|
|
*/
|
|
function wpml_tm_custom_xml_factory() {
|
|
static $tm_custom_xml_factory;
|
|
// @fixme `class_exists` check is most likely not needed anymore
|
|
if ( class_exists( 'WPML_TM_Custom_XML_Factory' ) && ! $tm_custom_xml_factory ) {
|
|
$tm_custom_xml_factory = new WPML_TM_Custom_XML_Factory();
|
|
}
|
|
|
|
return $tm_custom_xml_factory;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_TM_Custom_XML_UI_Hooks
|
|
*/
|
|
function wpml_tm_custom_xml_ui_hooks() {
|
|
static $tm_custom_xml_ui_hooks;
|
|
// @fixme `class_exists` checks are most likely not needed anymore
|
|
if ( class_exists( 'WPML_TM_Custom_XML_UI_Hooks' ) && ! $tm_custom_xml_ui_hooks ) {
|
|
global $sitepress;
|
|
$factory = wpml_tm_custom_xml_factory();
|
|
if ( $factory ) {
|
|
$tm_custom_xml_ui_hooks = new WPML_TM_Custom_XML_UI_Hooks( $factory->create_ui(), $factory->create_resources( $sitepress->get_wp_api() ), $factory->create_ajax() );
|
|
}
|
|
}
|
|
|
|
return $tm_custom_xml_ui_hooks;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_Translations_Queue_Factory
|
|
*/
|
|
function wpml_tm_translation_queue_factory() {
|
|
static $translation_queue_factory;
|
|
if ( ! $translation_queue_factory ) {
|
|
$translation_queue_factory = new WPML_Translations_Queue_Factory();
|
|
}
|
|
|
|
return $translation_queue_factory;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_UI_Screen_Options_Factory
|
|
*/
|
|
function wpml_ui_screen_options_factory() {
|
|
static $screen_options_factory;
|
|
if ( ! $screen_options_factory ) {
|
|
global $sitepress;
|
|
$screen_options_factory = new WPML_UI_Screen_Options_Factory( $sitepress );
|
|
}
|
|
|
|
return $screen_options_factory;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_TM_Loader
|
|
*/
|
|
function wpml_tm_loader() {
|
|
static $tm_loader;
|
|
if ( ! $tm_loader ) {
|
|
$tm_loader = new WPML_TM_Loader();
|
|
}
|
|
|
|
return $tm_loader;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_TP_Translator
|
|
*/
|
|
function wpml_tm_translator() {
|
|
static $tm_translator;
|
|
if ( ! $tm_translator ) {
|
|
$tm_translator = new WPML_TP_Translator();
|
|
}
|
|
|
|
return $tm_translator;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of \WPML_Translation_Management.
|
|
*
|
|
* @return \WPML_Translation_Management
|
|
*/
|
|
function wpml_translation_management() {
|
|
global $WPML_Translation_Management;
|
|
if ( ! $WPML_Translation_Management ) {
|
|
global $sitepress;
|
|
$WPML_Translation_Management = new WPML_Translation_Management( $sitepress, wpml_tm_loader(), wpml_load_core_tm(), wpml_tm_translator() );
|
|
}
|
|
|
|
return $WPML_Translation_Management;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_Translation_Basket
|
|
*/
|
|
function wpml_translation_basket() {
|
|
static $translation_basket;
|
|
if ( ! $translation_basket ) {
|
|
global $wpdb;
|
|
$translation_basket = new WPML_Translation_Basket( $wpdb );
|
|
}
|
|
|
|
return $translation_basket;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML_TM_Translate_Independently
|
|
*/
|
|
function wpml_tm_translate_independently() {
|
|
static $translate_independently;
|
|
if ( ! $translate_independently ) {
|
|
global $sitepress;
|
|
|
|
$translate_independently = new WPML_TM_Translate_Independently( wpml_load_core_tm(), wpml_translation_basket(), $sitepress );
|
|
}
|
|
|
|
return $translate_independently;
|
|
}
|
|
|
|
/**
|
|
* @return WPML_Translation_Proxy_Basket_Networking
|
|
*/
|
|
function wpml_tm_load_basket_networking() {
|
|
global $iclTranslationManagement, $wpdb;
|
|
|
|
require_once WPML_TM_PATH . '/inc/translation-proxy/wpml-translationproxy-basket-networking.class.php';
|
|
|
|
$basket = new WPML_Translation_Basket( $wpdb );
|
|
|
|
return new WPML_Translation_Proxy_Basket_Networking( $basket, $iclTranslationManagement );
|
|
}
|
|
|
|
/**
|
|
* @return WPML_Translation_Proxy_Networking
|
|
*/
|
|
function wpml_tm_load_tp_networking() {
|
|
global $wpml_tm_tp_networking;
|
|
|
|
if ( ! isset( $wpml_tm_tp_networking ) ) {
|
|
$tp_lock_factory = new WPML_TP_Lock_Factory();
|
|
$wpml_tm_tp_networking = new WPML_Translation_Proxy_Networking( new WP_Http(), $tp_lock_factory->create() );
|
|
}
|
|
|
|
return $wpml_tm_tp_networking;
|
|
}
|
|
|
|
/**
|
|
* @return WPML_TM_Blog_Translators
|
|
*/
|
|
function wpml_tm_load_blog_translators() {
|
|
global $wpdb, $sitepress, $wpml_post_translations, $wpml_term_translations, $wpml_cache_factory;
|
|
static $instance;
|
|
|
|
if ( ! $instance ) {
|
|
$tm_records = new WPML_TM_Records( $wpdb, $wpml_post_translations, $wpml_term_translations );
|
|
$translator_records = new WPML_Translator_Records( $wpdb, new WPML_WP_User_Query_Factory(), wp_roles() );
|
|
|
|
$instance = new WPML_TM_Blog_Translators( $sitepress, $tm_records, $translator_records, $wpml_cache_factory );
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* @return WPML_TM_Translators_Dropdown
|
|
*/
|
|
function wpml_tm_get_translators_dropdown() {
|
|
static $instance;
|
|
|
|
if ( ! $instance ) {
|
|
$instance = new WPML_TM_Translators_Dropdown( wpml_tm_load_blog_translators() );
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* @return WPML_TM_Mail_Notification
|
|
*/
|
|
function wpml_tm_init_mail_notifications() {
|
|
global $wpml_tm_mailer, $sitepress, $wpdb, $iclTranslationManagement, $wpml_translation_job_factory, $wp_api;
|
|
|
|
if ( null === $wp_api ) {
|
|
$wp_api = new WPML_WP_API();
|
|
}
|
|
|
|
if ( is_admin() ) {
|
|
$blog_translators = wpml_tm_load_blog_translators();
|
|
$email_twig_factory = new WPML_TM_Email_Twig_Template_Factory();
|
|
$batch_report = new WPML_TM_Batch_Report( $blog_translators );
|
|
$batch_report_email_template = new WPML_TM_Email_Jobs_Summary_View(
|
|
$email_twig_factory->create(),
|
|
$blog_translators,
|
|
$sitepress
|
|
);
|
|
$batch_report_email_builder = new WPML_TM_Batch_Report_Email_Builder(
|
|
$batch_report,
|
|
$batch_report_email_template
|
|
);
|
|
$batch_report_email_process = new WPML_TM_Batch_Report_Email_Process(
|
|
$batch_report,
|
|
$batch_report_email_builder
|
|
);
|
|
$batch_report_hooks = new WPML_TM_Batch_Report_Hooks( $batch_report, $batch_report_email_process );
|
|
$batch_report_hooks->add_hooks();
|
|
|
|
$wpml_tm_unsent_jobs = new WPML_TM_Unsent_Jobs( $blog_translators, $sitepress );
|
|
$wpml_tm_unsent_jobs->add_hooks();
|
|
|
|
$wpml_tm_unsent_jobs_notice = new WPML_TM_Unsent_Jobs_Notice( $wp_api );
|
|
$wpml_tm_unsent_jobs_notice_hooks = new WPML_TM_Unsent_Jobs_Notice_Hooks(
|
|
$wpml_tm_unsent_jobs_notice,
|
|
$wp_api,
|
|
WPML_Notices::DISMISSED_OPTION_KEY
|
|
);
|
|
$wpml_tm_unsent_jobs_notice_hooks->add_hooks();
|
|
|
|
$user_jobs_notification_settings = new WPML_User_Jobs_Notification_Settings();
|
|
$user_jobs_notification_settings->add_hooks();
|
|
|
|
$email_twig_factory = new WPML_Twig_Template_Loader( array( WPML_TM_PATH . '/templates/user-profile/' ) );
|
|
$notification_template = new WPML_User_Jobs_Notification_Settings_Template( $email_twig_factory->get_template() );
|
|
|
|
$user_jobs_notification_settings_render = new WPML_User_Jobs_Notification_Settings_Render( $notification_template );
|
|
$user_jobs_notification_settings_render->add_hooks();
|
|
}
|
|
|
|
if ( ! isset( $wpml_tm_mailer ) ) {
|
|
$iclTranslationManagement = $iclTranslationManagement ? $iclTranslationManagement : wpml_load_core_tm();
|
|
if ( empty( $iclTranslationManagement->settings ) ) {
|
|
$iclTranslationManagement->init();
|
|
}
|
|
$settings = isset( $iclTranslationManagement->settings['notification'] ) ? $iclTranslationManagement->settings['notification'] : array();
|
|
|
|
$email_twig_factory = new WPML_TM_Email_Twig_Template_Factory();
|
|
$email_notification_view = new WPML_TM_Email_Notification_View( $email_twig_factory->create() );
|
|
|
|
$has_active_remote_service = TranslationProxy::is_current_service_active_and_authenticated();
|
|
|
|
$wpml_tm_mailer = new WPML_TM_Mail_Notification(
|
|
$sitepress,
|
|
$wpdb,
|
|
$wpml_translation_job_factory,
|
|
$email_notification_view,
|
|
$settings,
|
|
$has_active_remote_service
|
|
);
|
|
}
|
|
$wpml_tm_mailer->init();
|
|
|
|
return $wpml_tm_mailer;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return WPML_Dashboard_Ajax
|
|
*/
|
|
function wpml_tm_load_tm_dashboard_ajax() {
|
|
global $wpml_tm_dashboard_ajax, $sitepress;
|
|
|
|
if ( ! isset( $wpml_tm_dashboard_ajax ) ) {
|
|
require_once WPML_TM_PATH . '/menu/dashboard/wpml-tm-dashboard-ajax.class.php';
|
|
$wpml_tm_dashboard_ajax = new WPML_Dashboard_Ajax( new WPML_Super_Globals_Validation() );
|
|
|
|
if ( defined( 'OTG_TRANSLATION_PROXY_URL' ) && defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
|
$wpml_tp_api = wpml_tm_get_tp_project_api();
|
|
|
|
$wpml_tp_api_ajax = new WPML_TP_Refresh_Language_Pairs( $wpml_tp_api );
|
|
$wpml_tp_api_ajax->add_hooks();
|
|
|
|
$sync_jobs_ajax_handler = new WPML_TP_Sync_Ajax_Handler(
|
|
wpml_tm_get_tp_sync_jobs(),
|
|
new WPML_TM_Sync_Installer_Wrapper(),
|
|
new WPML_TM_Last_Picked_Up( $sitepress )
|
|
);
|
|
$sync_jobs_ajax_handler->add_hooks();
|
|
}
|
|
}
|
|
|
|
return $wpml_tm_dashboard_ajax;
|
|
}
|
|
|
|
function wpml_tm_load_and_intialize_dashboard_ajax() {
|
|
if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
|
if ( defined( 'DOING_AJAX' ) ) {
|
|
$wpml_tm_dashboard_ajax = wpml_tm_load_tm_dashboard_ajax();
|
|
add_action( 'init', array( $wpml_tm_dashboard_ajax, 'init_ajax_actions' ) );
|
|
} elseif (
|
|
is_admin() && isset( $_GET['page'] ) && WPML_TM_FOLDER . '/menu/main.php' === $_GET['page'] && ( ! isset( $_GET['sm'] ) || $_GET['sm'] === 'dashboard' )
|
|
) {
|
|
$wpml_tm_dashboard_ajax = wpml_tm_load_tm_dashboard_ajax();
|
|
add_action( 'wpml_tm_scripts_enqueued', array( $wpml_tm_dashboard_ajax, 'enqueue_js' ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
add_action( 'plugins_loaded', 'wpml_tm_load_and_intialize_dashboard_ajax' );
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return WPML_Translation_Job_Factory
|
|
*/
|
|
function wpml_tm_load_job_factory() {
|
|
global $wpml_translation_job_factory, $wpdb, $wpml_post_translations, $wpml_term_translations;
|
|
|
|
if ( ! $wpml_translation_job_factory ) {
|
|
$tm_records = new WPML_TM_Records( $wpdb, $wpml_post_translations, $wpml_term_translations );
|
|
$wpml_translation_job_factory = new WPML_Translation_Job_Factory( $tm_records );
|
|
$wpml_translation_job_factory->init_hooks();
|
|
}
|
|
|
|
return $wpml_translation_job_factory;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return WPML_TM_XLIFF_Factory
|
|
*/
|
|
function wpml_tm_xliff_factory() {
|
|
static $xliff_factory;
|
|
|
|
if ( ! $xliff_factory ) {
|
|
$xliff_factory = new WPML_TM_XLIFF_Factory();
|
|
}
|
|
|
|
return $xliff_factory;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return WPML_TM_XLIFF_Shortcodes
|
|
*/
|
|
function wpml_tm_xliff_shortcodes() {
|
|
static $xliff_shortcodes;
|
|
|
|
if ( ! $xliff_shortcodes ) {
|
|
$xliff_shortcodes = new WPML_TM_XLIFF_Shortcodes();
|
|
}
|
|
|
|
return $xliff_shortcodes;
|
|
}
|
|
|
|
/**
|
|
* It returns an instance of the class.
|
|
*
|
|
* @return \WPML_TM_Old_Jobs_Editor
|
|
*/
|
|
function wpml_tm_load_old_jobs_editor() {
|
|
static $instance;
|
|
|
|
if ( ! $instance ) {
|
|
$instance = new WPML_TM_Old_Jobs_Editor( wpml_tm_load_job_factory() );
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
function tm_after_load() {
|
|
global $wpml_tm_translation_status, $wpdb, $wpml_post_translations, $wpml_term_translations;
|
|
|
|
if ( ! isset( $wpml_tm_translation_status ) ) {
|
|
require_once WPML_TM_PATH . '/inc/translation-proxy/translationproxy.class.php';
|
|
require_once WPML_TM_PATH . '/inc/ajax.php';
|
|
|
|
( new ClassicEditorActions() )->addHooks();
|
|
|
|
wpml_tm_load_job_factory();
|
|
wpml_tm_init_mail_notifications();
|
|
wpml_tm_load_element_translations();
|
|
$wpml_tm_translation_status = make( WPML_TM_Translation_Status::class );
|
|
$wpml_tm_translation_status->init();
|
|
add_action( 'wpml_pre_status_icon_display', 'wpml_tm_load_status_display_filter' );
|
|
require_once WPML_TM_PATH . '/inc/wpml-private-actions.php';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* It returns an instance of the class.
|
|
*
|
|
* @return WPML_TM_Records
|
|
*/
|
|
function wpml_tm_get_records() {
|
|
global $wpdb, $wpml_post_translations, $wpml_term_translations;
|
|
|
|
return new WPML_TM_Records( $wpdb, $wpml_post_translations, $wpml_term_translations );
|
|
}
|
|
|
|
/**
|
|
* It returns an instance of the class.
|
|
*
|
|
* @return WPML_TM_Xliff_Frontend
|
|
*/
|
|
function setup_xliff_frontend() {
|
|
global $xliff_frontend;
|
|
|
|
$xliff_factory = new WPML_TM_XLIFF_Factory();
|
|
$xliff_frontend = $xliff_factory->create_frontend();
|
|
|
|
add_action( 'init', array( $xliff_frontend, 'init' ), $xliff_frontend->get_init_priority() );
|
|
|
|
return $xliff_frontend;
|
|
}
|
|
|
|
/**
|
|
* It returns an instance of the class.
|
|
*
|
|
* @param int $job_id The ID of the job.
|
|
* @param int $rid
|
|
*
|
|
* @return WPML_TM_ATE_Models_Job_Create
|
|
*/
|
|
function wpml_tm_create_ATE_job_creation_model( $job_id, $rid ) {
|
|
$job_factory = wpml_tm_load_job_factory();
|
|
$translation_job = $job_factory->get_translation_job( $job_id, false, 0, true );
|
|
|
|
$job = new WPML_TM_ATE_Models_Job_Create();
|
|
$job->source_id = $rid;
|
|
$job->source_language->code = $translation_job->get_source_language_code();
|
|
$job->source_language->name = $translation_job->get_source_language_code( true );
|
|
$job->target_language->code = $translation_job->get_language_code();
|
|
$job->target_language->name = $translation_job->get_language_code( true );
|
|
$job->deadline = strtotime( $translation_job->get_deadline_date() );
|
|
|
|
$job->permalink = '#';
|
|
if ( 'Post' === $translation_job->get_type() ) {
|
|
$job->permalink = get_permalink( $translation_job->get_original_element_id() );
|
|
}
|
|
|
|
$job->notify_enabled = true;
|
|
$job->notify_url = WPML_TM_REST_ATE_Public::get_receive_ate_job_url( $job_id );
|
|
|
|
$job->site_identifier = wpml_get_site_id( WPML_TM_ATE::SITE_ID_SCOPE );
|
|
|
|
$encoded_xliff = base64_encode( wpml_tm_get_job_xliff( $job_id ) );
|
|
|
|
$job->file->type = 'data:application/x-xliff;base64';
|
|
$job->file->name = $translation_job->get_title();
|
|
|
|
$job->file->content = $encoded_xliff;
|
|
|
|
return $job;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @param int $job_id The ID of the job.
|
|
*
|
|
* @return string
|
|
*/
|
|
function wpml_tm_get_job_xliff( $job_id ) {
|
|
static $xliff_writer;
|
|
|
|
if ( ! $xliff_writer ) {
|
|
$job_factory = wpml_tm_load_job_factory();
|
|
$xliff_writer = new WPML_TM_Xliff_Writer( $job_factory );
|
|
}
|
|
|
|
return $xliff_writer->generate_job_xliff( $job_id );
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_Rest
|
|
*/
|
|
function wpml_tm_get_wpml_rest() {
|
|
static $wpml_rest;
|
|
|
|
if ( ! $wpml_rest ) {
|
|
$http = new WP_Http();
|
|
$wpml_rest = new WPML_Rest( $http );
|
|
}
|
|
|
|
return $wpml_rest;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TP_API_Client
|
|
*/
|
|
function wpml_tm_get_tp_api_client() {
|
|
static $client;
|
|
|
|
if ( ! $client ) {
|
|
$client = new WPML_TP_API_Client(
|
|
OTG_TRANSLATION_PROXY_URL,
|
|
new WP_Http(),
|
|
new WPML_TP_Lock( new WPML_WP_API() ),
|
|
new WPML_TP_HTTP_Request_Filter()
|
|
);
|
|
}
|
|
|
|
return $client;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TP_Project
|
|
*/
|
|
function wpml_tm_get_tp_project() {
|
|
static $project;
|
|
|
|
if ( ! $project ) {
|
|
global $sitepress;
|
|
|
|
$translation_service = $sitepress->get_setting( 'translation_service' );
|
|
$translation_projects = $sitepress->get_setting( 'icl_translation_projects' );
|
|
$project = new WPML_TP_Project( $translation_service, $translation_projects );
|
|
}
|
|
|
|
return $project;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TP_Jobs_API
|
|
*/
|
|
function wpml_tm_get_tp_jobs_api() {
|
|
static $api;
|
|
|
|
if ( ! $api ) {
|
|
$api = new WPML_TP_Jobs_API(
|
|
wpml_tm_get_tp_api_client(),
|
|
wpml_tm_get_tp_project(),
|
|
new WPML_TM_Log()
|
|
);
|
|
}
|
|
|
|
return $api;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TP_Project_API
|
|
*/
|
|
function wpml_tm_get_tp_project_api() {
|
|
static $api;
|
|
|
|
if ( ! $api ) {
|
|
$api = new WPML_TP_Project_API(
|
|
wpml_tm_get_tp_api_client(),
|
|
wpml_tm_get_tp_project(),
|
|
new WPML_TM_Log()
|
|
);
|
|
}
|
|
|
|
return $api;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TP_XLIFF_API
|
|
*/
|
|
function wpml_tm_get_tp_xliff_api() {
|
|
static $api;
|
|
|
|
if ( ! $api ) {
|
|
$api = new WPML_TP_XLIFF_API(
|
|
wpml_tm_get_tp_api_client(),
|
|
wpml_tm_get_tp_project(),
|
|
new WPML_TM_Log(),
|
|
new WPML_TP_Xliff_Parser()
|
|
);
|
|
}
|
|
|
|
return $api;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TM_Jobs_Repository
|
|
*/
|
|
function wpml_tm_get_jobs_repository() {
|
|
static $repository;
|
|
|
|
if ( ! $repository ) {
|
|
global $wpdb;
|
|
|
|
$limit_helper = new LimitQueryHelper();
|
|
$order_helper = new OrderQueryHelper();
|
|
|
|
$subqueries = array(
|
|
new PostQuery( $wpdb, new QueryBuilder( $limit_helper, $order_helper ) ),
|
|
);
|
|
if ( defined( 'WPML_ST_VERSION' ) && get_option( 'wpml-package-translation-db-updates-run' ) ) {
|
|
$subqueries[] = new PackageQuery(
|
|
$wpdb,
|
|
new QueryBuilder( $limit_helper, $order_helper )
|
|
);
|
|
$subqueries[] = new StringQuery(
|
|
$wpdb,
|
|
new QueryBuilder( $limit_helper, $order_helper )
|
|
);
|
|
$subqueries[] = new StringsBatchQuery(
|
|
$wpdb,
|
|
new QueryBuilder( $limit_helper, $order_helper )
|
|
);
|
|
}
|
|
|
|
$repository = new WPML_TM_Jobs_Repository(
|
|
$wpdb,
|
|
new CompositeQuery(
|
|
$subqueries,
|
|
$limit_helper,
|
|
$order_helper
|
|
),
|
|
new WPML_TM_Job_Elements_Repository( $wpdb )
|
|
);
|
|
}
|
|
|
|
return $repository;
|
|
}
|
|
|
|
/**
|
|
* It returns an instance of the class.
|
|
*
|
|
* @return WPML_TM_ATE_Job_Repository
|
|
*/
|
|
function wpml_tm_get_ate_jobs_repository() {
|
|
static $instance;
|
|
|
|
if ( ! $instance ) {
|
|
return new WPML_TM_ATE_Job_Repository(
|
|
wpml_tm_get_jobs_repository()
|
|
);
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* @return \WPML\TM\ATE\JobRecords
|
|
*/
|
|
function wpml_tm_get_ate_job_records() {
|
|
global $wpdb;
|
|
static $instance;
|
|
|
|
if ( ! $instance ) {
|
|
$instance = new WPML\TM\ATE\JobRecords( $wpdb );
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TP_Sync_Jobs
|
|
*/
|
|
function wpml_tm_get_tp_sync_jobs() {
|
|
static $sync_jobs;
|
|
|
|
if ( ! $sync_jobs ) {
|
|
global $wpdb, $sitepress;
|
|
|
|
$sync_jobs = new WPML_TP_Sync_Jobs(
|
|
new WPML_TM_Sync_Jobs_Status( wpml_tm_get_jobs_repository(), wpml_tm_get_tp_jobs_api() ),
|
|
new WPML_TM_Sync_Jobs_Revision( wpml_tm_get_jobs_repository(), wpml_tm_get_tp_jobs_api() ),
|
|
new WPML_TP_Sync_Update_Job( $wpdb, $sitepress )
|
|
);
|
|
}
|
|
|
|
return $sync_jobs;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TP_Translations_Repository
|
|
*/
|
|
function wpml_tm_get_tp_translations_repository() {
|
|
static $repository;
|
|
|
|
if ( ! $repository ) {
|
|
$repository = new WPML_TP_Translations_Repository(
|
|
wpml_tm_get_tp_xliff_api(),
|
|
wpml_tm_get_jobs_repository()
|
|
);
|
|
}
|
|
|
|
return $repository;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_WP_User_Query_Factory
|
|
*/
|
|
function wpml_tm_get_wp_user_query_factory() {
|
|
static $wp_user_query_factory;
|
|
|
|
if ( ! $wp_user_query_factory ) {
|
|
$wp_user_query_factory = new WPML_WP_User_Query_Factory();
|
|
}
|
|
|
|
return $wp_user_query_factory;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_WP_User_Factory
|
|
*/
|
|
function wpml_tm_get_wp_user_factory() {
|
|
static $wp_user_factory;
|
|
|
|
if ( ! $wp_user_factory ) {
|
|
$wp_user_factory = new WPML_WP_User_Factory();
|
|
}
|
|
|
|
return $wp_user_factory;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TM_Email_Twig_Template_Factory
|
|
*/
|
|
function wpml_tm_get_email_twig_template_factory() {
|
|
static $email_twig_template_factory;
|
|
|
|
if ( ! $email_twig_template_factory ) {
|
|
$email_twig_template_factory = new WPML_TM_Email_Twig_Template_Factory();
|
|
}
|
|
|
|
return $email_twig_template_factory;
|
|
}
|
|
|
|
/**
|
|
* It returns a single instance of the class.
|
|
*
|
|
* @return \WPML_TM_AMS_ATE_Factories
|
|
*/
|
|
function wpml_tm_ams_ate_factories() {
|
|
static $tm_ams_ate_factories;
|
|
|
|
if ( ! $tm_ams_ate_factories ) {
|
|
$tm_ams_ate_factories = new WPML_TM_AMS_ATE_Factories();
|
|
}
|
|
|
|
return $tm_ams_ate_factories;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
* @throws \Auryn\InjectionException
|
|
*/
|
|
function wpml_tm_get_ams_ate_console_url() {
|
|
/** @var WPML_TM_Admin_Sections $admin_sections */
|
|
$admin_sections = WPML\Container\make( 'WPML_TM_Admin_Sections' );
|
|
|
|
return $admin_sections->get_item_url( WPML_TM_AMS_ATE_Console_Section::SLUG );
|
|
}
|
|
|
|
function wpml_tm_ate_ams_log( WPML\TM\ATE\Log\Entry $entry ) {
|
|
make( WPML\TM\ATE\Log\Storage::class )->add( $entry );
|
|
}
|
|
|
|
/**
|
|
* @param string $original
|
|
* @param string $translation
|
|
* @param bool $finished_state
|
|
*
|
|
* @return WPML_TM_Translated_Field
|
|
*/
|
|
function wpml_tm_create_translated_field( $original, $translation, $finished_state ) {
|
|
return new WPML_TM_Translated_Field( $original, $translation, $finished_state );
|
|
}
|
|
|
|
/**
|
|
* @param int $post_id
|
|
* @param \WP_Post $post
|
|
* @param bool $force_set_status
|
|
*/
|
|
function wpml_tm_save_post( $post_id, $post, $force_set_status = false ) {
|
|
global $wpdb, $wpml_post_translations, $wpml_term_translations;
|
|
|
|
if ( false === $force_set_status && get_post_meta( $post_id, '_icl_lang_duplicate_of', true ) ) {
|
|
$force_set_status = ICL_TM_DUPLICATE;
|
|
}
|
|
|
|
$action_helper = new WPML_TM_Action_Helper();
|
|
$blog_translators = wpml_tm_load_blog_translators();
|
|
$tm_records = new WPML_TM_Records( $wpdb, $wpml_post_translations, $wpml_term_translations );
|
|
$save_post_action = new WPML_TM_Post_Actions( $action_helper, $blog_translators, $tm_records );
|
|
if ( 'revision' === $post->post_type || 'auto-draft' === $post->post_status || isset( $_POST['autosave'] ) ) {
|
|
return;
|
|
}
|
|
$save_post_action->save_post_actions( $post_id, $post, $force_set_status );
|
|
}
|
|
|
|
add_action( 'wpml_tm_save_post', 'wpml_tm_save_post', 10, 3 );
|