Files
doitinpoland.com/wp-content/plugins/wpml-translation-management/classes/records/class-wpml-tm-icl-translation-status.php
2023-09-12 21:41:04 +02:00

171 lines
3.4 KiB
PHP

<?php
class WPML_TM_ICL_Translation_Status {
/** @var WPDB $wpdb */
public $wpdb;
private $tm_records;
private $table = 'icl_translation_status';
private $translation_id = 0;
private $rid = 0;
private $status_result;
/**
* WPML_TM_ICL_Translation_Status constructor.
*
* @param wpdb $wpdb
* @param WPML_TM_Records $tm_records
* @param int $id
* @param string $type
*/
public function __construct( $wpdb, &$tm_records, $id, $type = 'translation_id' ) {
$this->wpdb = $wpdb;
$this->tm_records = &$tm_records;
if ( $id > 0 && in_array(
$type,
array(
'translation_id',
'rid',
),
true
)
) {
$this->{$type} = $id;
} else {
throw new InvalidArgumentException( 'Unknown column: ' . $type . ' or invalid id: ' . $id );
}
}
/**
* @param array $args in the same format used by \wpdb::update()
*
* @return $this
*/
public function update( $args ) {
$this->wpdb->update(
$this->wpdb->prefix . $this->table,
$args,
$this->get_args()
);
$this->status_result = null;
return $this;
}
/**
* Wrapper for \wpdb::delete()
*/
public function delete() {
$this->wpdb->delete(
$this->wpdb->prefix . $this->table,
$this->get_args()
);
}
/**
* @return int
*/
public function rid() {
return (int) $this->wpdb->get_var(
"SELECT rid
FROM {$this->wpdb->prefix}{$this->table} "
. $this->get_where()
);
}
/**
* @return int
*/
public function status() {
if ( $this->status_result === null ) {
$status = $this->tm_records->get_preloaded_translation_status( $this->translation_id, $this->rid );
if ( $status ) {
$this->status_result = (int) $status->status;
} else {
$this->status_result = (int) $this->wpdb->get_var(
"SELECT status
FROM {$this->wpdb->prefix}{$this->table} "
. $this->get_where()
);
}
}
return (int) $this->status_result;
}
/**
* @return string
*/
public function md5() {
return $this->wpdb->get_var(
"SELECT md5
FROM {$this->wpdb->prefix}{$this->table} "
. $this->get_where()
);
}
/**
* @return int
*/
public function translation_id() {
return (int) $this->wpdb->get_var(
"SELECT translation_id
FROM {$this->wpdb->prefix}{$this->table} "
. $this->get_where()
);
}
public function trid() {
return $this->tm_records->icl_translations_by_translation_id( $this->translation_id() )->trid();
}
public function element_id() {
return $this->tm_records->icl_translations_by_translation_id( $this->translation_id() )->element_id();
}
/**
* @return int
*/
public function translator_id() {
return (int) $this->wpdb->get_var(
"SELECT translator_id
FROM {$this->wpdb->prefix}{$this->table} "
. $this->get_where()
);
}
/**
* @return string|int
*/
public function service() {
return (int) $this->wpdb->get_var(
"SELECT translation_service
FROM {$this->wpdb->prefix}{$this->table} "
. $this->get_where()
);
}
private function get_where() {
return ' WHERE ' .
( $this->translation_id
? $this->wpdb->prepare( ' translation_id = %d ', $this->translation_id )
: $this->wpdb->prepare( ' rid = %d ', $this->rid ) );
}
private function get_args() {
return $this->translation_id
? array( 'translation_id' => $this->translation_id )
: array( 'rid' => $this->rid );
}
}