Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/translation-feedback/utils/wpml-tf-backend-document-information.php
2023-09-12 21:41:04 +02:00

216 lines
4.7 KiB
PHP

<?php
/**
* Class WPML_TF_Backend_Document_Information
*
* @author OnTheGoSystems
*/
class WPML_TF_Backend_Document_Information extends WPML_TF_Document_Information {
/** @var WPML_TP_Client_Factory|null $tp_client_factory */
private $tp_client_factory;
/** @var WPML_TP_Client|null $tp_client */
private $tp_client;
/**
* WPML_TF_Backend_Document_Information constructor.
*
* @param SitePress $sitepress
* @param WPML_TP_Client_Factory $tp_client_factory
*/
public function __construct( SitePress $sitepress, WPML_TP_Client_Factory $tp_client_factory = null ) {
parent::__construct( $sitepress );
$this->tp_client_factory = $tp_client_factory;
}
/**
* @return false|null|string
*/
public function get_url() {
$url = null;
if ( $this->is_post_document() ) {
$url = get_permalink( $this->id );
}
return $url;
}
/**
* @return null|string
*/
public function get_title() {
$title = null;
if ( $this->is_post_document() ) {
$title = $this->get_post_title( $this->id );
}
return $title;
}
/**
* @return bool
*/
private function is_post_document() {
return 0 === strpos( $this->type, 'post_' );
}
/**
* @param string $language_code
*
* @return string
*/
public function get_flag_url( $language_code ) {
return $this->sitepress->get_flag_url( $language_code );
}
/**
* @return string
*/
public function get_edit_url() {
$this->load_link_to_translation_tm_filters();
$url = 'post.php?' . http_build_query(
array(
'lang' => $this->get_language(),
'action' => 'edit',
'post_type' => $this->type,
'post' => $this->id,
)
);
return apply_filters( 'wpml_link_to_translation', $url, $this->get_source_id(), $this->get_language(), $this->get_trid() );
}
private function load_link_to_translation_tm_filters() {
if ( ! did_action( 'wpml_pre_status_icon_display' ) ) {
do_action( 'wpml_pre_status_icon_display' );
}
}
/**
* @return null|int
*/
public function get_source_id() {
$source_id = null;
$translations = $this->get_translations();
if ( isset( $translations[ $this->get_source_language() ]->element_id ) ) {
$source_id = (int) $translations[ $this->get_source_language() ]->element_id;
}
return $source_id;
}
/**
* @return null|string
*/
public function get_source_url() {
$url = null;
if ( $this->get_source_id() ) {
$url = get_the_permalink( $this->get_source_id() );
}
return $url;
}
/**
* @return null|string
*/
public function get_source_title() {
$title = null;
if ( $this->get_source_id() ) {
$title = $this->get_post_title( $this->get_source_id() );
}
return $title;
}
/**
* @return array|bool|mixed
*/
private function get_translations() {
return $this->sitepress->get_element_translations( $this->get_trid(), $this->type );
}
/**
* @param int $job_id
*
* @return string
*/
public function get_translator_name( $job_id ) {
$translation_job = $this->get_translation_job( $job_id );
if ( isset( $translation_job->translation_service ) ) {
if ( 'local' === $translation_job->translation_service && isset( $translation_job->translator_id ) ) {
$translator_name = get_the_author_meta( 'display_name', $translation_job->translator_id );
$translator_name .= ' (' . __( 'local translator', 'sitepress' ) . ')';
} else {
$translator_name = __( 'Unknown remote translation service', 'sitepress' );
$tp_client = $this->get_tp_client();
if ( $tp_client ) {
$translator_name = $tp_client->services()->get_name( $translation_job->translation_service );
}
}
} else {
$post_author_id = get_post_field( 'post_author', $this->id );
$translator_name = get_the_author_meta( 'display_name', $post_author_id );
}
return $translator_name;
}
/**
* @param string $from
* @param string $to
*
* @return array
*/
public function get_available_translators( $from, $to ) {
$translators = array();
if ( function_exists( 'wpml_tm_load_blog_translators' ) ) {
$args = array(
'from' => $from,
'to' => $to,
);
$users = wpml_tm_load_blog_translators()->get_blog_translators( $args );
$translators = wp_list_pluck( $users, 'display_name', 'ID' );
}
return $translators;
}
/**
* @param int $post_id
*
* @return null|string
*/
private function get_post_title( $post_id ) {
$title = null;
$post = get_post( $post_id );
if ( isset( $post->post_title ) ) {
$title = $post->post_title;
}
return $title;
}
/** @return null|WPML_TP_Client */
private function get_tp_client() {
if ( ! $this->tp_client && $this->tp_client_factory ) {
$this->tp_client = $this->tp_client_factory->create();
}
return $this->tp_client;
}
}