post_status = $post_status;
$this->sitepress = $sitepress;
$this->template_render = $template_render;
$this->super_globals = $super_globals;
$this->status_display = $status_display;
$this->element_factory = $element_factory;
$this->use_translation_editor = $use_translation_editor;
}
public function add_hooks() {
$request_get_trid = isset( $_GET['trid'] ) ?
filter_var( $_GET['trid'], FILTER_SANITIZE_NUMBER_INT ) :
'';
$request_get_post = isset( $_GET['post'] ) ?
filter_var( $_GET['post'], FILTER_SANITIZE_NUMBER_INT ) :
'';
$request_get_lang = isset( $_GET['lang'] ) ?
filter_var( $_GET['lang'], FILTER_SANITIZE_FULL_SPECIAL_CHARS ) :
'';
if ( ( $request_get_trid || $request_get_post ) && $request_get_lang ) {
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
add_action( 'admin_notices', array( $this, 'display_notices' ) );
}
add_action( 'wp_ajax_' . self::DO_NOT_SHOW_AGAIN_ACTION, array( $this, 'do_not_display_it_again' ) );
}
public function enqueue_assets() {
wp_enqueue_script(
'wpml-tm-post-edit-alert',
WPML_TM_URL . '/res/js/post-edit-alert.js',
array( 'jquery', 'jquery-ui-dialog' ),
WPML_TM_VERSION
);
}
public function display_notices() {
$trid = $this->super_globals->get( 'trid', FILTER_SANITIZE_NUMBER_INT, FILTER_NULL_ON_FAILURE );
$post_id = $this->super_globals->get( 'post', FILTER_SANITIZE_NUMBER_INT, FILTER_NULL_ON_FAILURE );
$lang = $this->super_globals->get( 'lang', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_NULL_ON_FAILURE );
if ( ! $post_id ) {
return;
}
$post_element = $this->element_factory->create( $post_id, 'post' );
$is_original = ! $post_element->get_source_language_code();
if ( ! $trid ) {
$trid = $post_element->get_trid();
}
if ( $trid ) {
$translation_status = (int) $this->post_status->get_status( $post_id, $trid, $lang );
if ( $this->is_translation_in_progress( $translation_status ) ) {
$model = array(
'warning' => sprintf(
__( '%sWarning:%s You are trying to edit a translation that is currently in the process of being added using WPML.', 'wpml-translation-management' ),
'',
''
),
'check_dashboard' => sprintf(
__( 'Please refer to the Translation Management dashboard for the exact status of this translation.', 'wpml-translation-management' ),
admin_url( 'admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&' )
),
);
echo $this->template_render->show( $model, self::TEMPLATE_TRANSLATION_IN_PROGRESS );
} elseif (
! $is_original &&
$this->use_translation_editor &&
apply_filters( 'wpml_tm_show_page_builders_translation_editor_warning', true, $post_id ) &&
$this->should_display_it()
) {
$model = array(
'warning' => sprintf(
__( '%sWarning:%s You are trying to edit a translation using the standard WordPress editor but your site is configured to use the WPML Translation Editor.', 'wpml-translation-management' ),
'',
''
),
'go_back_button' => __( 'Go back', 'wpml-translation-management' ),
'edit_anyway_button' => __( 'Edit anyway', 'wpml-translation-management' ),
'open_in_te_button' => __( 'Open in Translation Editor', 'wpml-translation-management' ),
'translation_editor_url' => $this->get_translation_editor_link( $post_element ),
'do_not_show_again' => __( "Don't show this warning again", 'wpml-translation-management' ),
'nonce' => wp_nonce_field(
self::DO_NOT_SHOW_AGAIN_ACTION,
self::DO_NOT_SHOW_AGAIN_ACTION,
true,
false
),
);
echo $this->template_render->show( $model, self::TEMPLATE_USE_PREFERABLY_TE );
}
} elseif ( $post_element->is_translatable() && $this->use_translation_editor ){
$model = array(
'warning' => sprintf(
__('%sWarning:%s You are trying to add a translation using the standard WordPress editor but your site is configured to use the WPML Translation Editor.' , 'wpml-translation-management'),
'',
''
),
'use_tm_dashboard' => sprintf(
__( 'You should use Translation management dashboard to send the original document to translation.' , 'wpml-translation-management' ),
admin_url( 'admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php' )
),
);
echo $this->template_render->show( $model, self::TEMPLATE_USE_PREFERABLY_TM_DASHBOARD );
}
}
public function do_not_display_it_again() {
update_option( self::DO_NOT_SHOW_AGAIN_ACTION, 1, false );
}
/**
* @return bool
*/
private function should_display_it() {
return false === get_option( self::DO_NOT_SHOW_AGAIN_ACTION );
}
/**
* @param int|null $translation_status
*
* @return bool
*/
private function is_translation_in_progress( $translation_status ) {
return ! is_null( $translation_status )
&& $translation_status > 0
&& $translation_status != ICL_TM_DUPLICATE
&& $translation_status < ICL_TM_COMPLETE;
}
/**
* @param WPML_Post_Element $post_element
*
* @return string
*/
private function get_translation_editor_link( WPML_Post_Element $post_element ) {
$post_id = $post_element->get_id();
$source_post_element = $post_element->get_source_element();
if ( $source_post_element ) {
$post_id = $source_post_element->get_id();
}
$url = $this->status_display->filter_status_link(
'#', $post_id, $post_element->get_language_code(), $post_element->get_trid()
);
return remove_query_arg( 'return_url', $url );
}
}