/home/fdhrevqn/www/wp-content/plugins.disabled/lingotek-translation/include/group-string.php
<?php
if ( ! defined( 'ABSPATH' ) ) exit();
/*
* Translations groups for strings
*
* @since 0.2
*/
class Lingotek_Group_String extends Lingotek_Group {
/*
* assigns this object properties from the underlying term
*
* @since 0.2
*
* @param object $term term translation object
*/
protected function load( $term ) {
parent::load( $term );
$this->name = $term->name;
$this->md5 = &$this->desc_array['lingotek']['md5'];
}
/*
* updates the translation term in DB
*
* @since 0.2
*/
public function save() {
wp_update_term(
(int) $this->term_id,
$this->taxonomy,
array(
'slug' => $this->document_id,
'name' => $this->name,
'description' => serialize( $this->desc_array ),
)
);
}
/*
* set a translation term for a strings group
*
* @since 0.2
*
* @param string string group name
* @param object $language
* @param string $document_id translation term name (Lingotek document id)
*/
public static function create( $name, $language, $document_id ) {
$desc = array(
'lingotek' => array(
'type' => 'string',
'md5' => md5( self::get_content( $name ) ),
'source' => $language->mo_id,
'status' => 'importing',
'translations' => array(),
),
);
$terms = wp_get_object_terms( $language->mo_id, 'post_translations' );
// the translation already exists but was previously disassociated
if ( $key = array_search( $name, wp_list_pluck( $terms, 'name' ) ) ) {
wp_update_term(
(int) $terms[ $key ]->term_id,
'post_translations',
array(
'slug' => $document_id,
'name' => $name,
'description' => serialize( $desc ),
)
);
} else {
wp_insert_term(
$name,
'post_translations',
array(
'slug' => $document_id,
'description' => serialize( $desc ),
)
);
}//end if
// Add terms.
wp_set_object_terms( $language->mo_id, $document_id, 'post_translations', true );
}
/*
* uploads a modified source
*
* @since 0.2
*
* @param string $group group name
* @param string $empty used for compatibility with parent class
*/
public function patch( $params, $group = '', $content = null ) {
$client = new Lingotek_API();
$res = $client->patch_document( $this->document_id, $params, $group );
if ( $res !== false ) {
$this->md5 = md5( $content );
$this->status = 'importing';
$this->translations = array_fill_keys( array_keys( $this->translations ), 'pending' );
$this->save();
}
}
/*
* returns the content to translate
*
* @since 0.2
*
* @param object $group string group name
* @return string json encoded content to translate
*/
public static function get_content( $group ) {
foreach ( PLL_Admin_Strings::get_strings() as $string ) {
if ( $string['context'] == $group ) {
$arr[ $string['string'] ] = $string['string'];
}
}
return json_encode( $arr );
}
/*
* requests translations to Lingotek TMS
*
* @since 0.2
*/
public function request_translations() {
if ( isset( $this->source ) ) {
$this->_request_translations( $this->get_source_language() );
}
}
/*
* create a translation downloaded from Lingotek TMS
*
* @since 0.2
* @uses Lingotek_Group::safe_translation_status_update() as the status can be automatically set by the TMS callback
*
* @param string $locale
*/
public function create_translation( $locale ) {
$client = new Lingotek_API();
if ( false === ( $translation = $client->get_translation( $this->document_id, $locale, $this->name ) ) ) {
return;
}
// Get the strings name for the filter.
$strings = wp_list_pluck( PLL_Admin_Strings::get_strings(), 'name', 'string' );
// wp_insert_post expects array.
$translations = json_decode( $translation, true );
$language = $this->pllm->get_language( $locale );
$mo = new PLL_MO();
$mo->import_from_db( $language );
foreach ( $translations as $key => $translation ) {
$translation = apply_filters( 'pll_sanitize_string_translation', $translation, $strings[ $key ], $this->name );
$mo->add_entry( $mo->make_entry( $key, $translation ) );
}
$mo->export_to_db( $language );
$this->safe_translation_status_update( $locale, 'current' );
}
/*
* checks if content should be automatically uploaded
*
* @since 0.2
*
* @return bool
*/
public function is_automatic_upload() {
return 'automatic' == Lingotek_Model::get_profile_option( 'upload', 'string', $this->get_source_language() ) && parent::is_automatic_upload();
}
/*
* get the the language of the source string (always the default language)
*
* @since 0.2
*
* @return object
*/
public function get_source_language() {
return $this->pllm->get_language( $this->pllm->options['default_lang'] );
}
}