225 lines
8.0 KiB
PHP
225 lines
8.0 KiB
PHP
<?php
|
|
class ClassTranslation extends ClassConfig implements InterfaceTranslation {
|
|
public function __construct(){}
|
|
public function __destruct(){}
|
|
|
|
public function getTranslationV2($message_code, $lang_code, $set_data, $db_table="core_translation"){
|
|
$this->_code = $code;
|
|
$this->_lang = $lang;
|
|
$this->_setData = $set_data;
|
|
$this->_dbTable = $db_table;
|
|
$oPDOLink = $this->databaseConnect();
|
|
|
|
if(!isset($_SESSION['translations'][$this->_code]) or $_SESSION['translations'][$this->_code]['source']==''){
|
|
$row = $this->getTranslationInDatabase($this->_code, $this->_lang);
|
|
$_SESSION['translations'][$this->_code][$this->_lang] = $row[$this->_lang];
|
|
$_SESSION['translations'][$this->_code]['source'] = $row['source'];
|
|
}
|
|
|
|
if($_SESSION['translations'][$this->_code][$this->_lang] != ''){
|
|
$translation = $_SESSION['translations'][$this->_code][$this->_lang];
|
|
} else {
|
|
$translation = $_SESSION['translations'][$this->_code]['source'];
|
|
}
|
|
$replacement_regex = '/\[data\]/';
|
|
foreach($this->_setData as $k=>$v){
|
|
$translation = preg_replace($replacement_regex, $this->_setData[$k], $translation, 1);
|
|
}
|
|
return $translation;
|
|
}
|
|
|
|
// used in files /index.php & /themes/beestrap/index.php
|
|
public function listTranslations($lang_code='source'){
|
|
$this->_langCode = $lang_code;
|
|
$oPDOLink = ClassConfig::databaseConnect();
|
|
$res = array();
|
|
$sql = "
|
|
SELECT id, code, source, ".$this->_langCode."
|
|
FROM core_translation;
|
|
";
|
|
$execSQL = $oPDOLink->prepare($sql);
|
|
$execSQL->execute(array());
|
|
$rows = $execSQL->fetchAll(PDO::FETCH_ASSOC);
|
|
foreach($rows as $k=>$v){
|
|
$res[$rows[$k]['code']] = array('source'=>$rows[$k]['source'], $this->_langCode=>$rows[$k][$this->_langCode]);
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
public function getMessage($message_code, $lang_code, $set_data){
|
|
$this->_messageCode = $message_code;
|
|
$this->_langCode = $lang_code;
|
|
$this->_setData = $set_data;
|
|
$oTrans = new ClassTranslation();
|
|
|
|
$message = $oTrans->getTranslation($this->_messageCode, $this->_langCode);
|
|
$replacement_regex = '/\[data\]/';
|
|
|
|
foreach($this->_setData as $k=>$v){
|
|
$message = preg_replace($replacement_regex, $this->_setData[$k], $message, 1);
|
|
}
|
|
|
|
return $message;
|
|
}
|
|
|
|
public function getTranslationWithData($code, $lang, $set_data){
|
|
$this->_code = $code;
|
|
$this->_lang = $lang;
|
|
$this->_setData = $set_data;
|
|
|
|
if(!isset($_SESSION['translations'][$this->_code]) or $_SESSION['translations'][$this->_code]['source']==''){
|
|
$row = $this->getTranslationInDatabase($this->_code, $this->_lang);
|
|
$_SESSION['translations'][$this->_code][$this->_lang] = $row[$this->_lang];
|
|
$_SESSION['translations'][$this->_code]['source'] = $row['source'];
|
|
}
|
|
|
|
if($_SESSION['translations'][$this->_code][$this->_lang] != ''){
|
|
$translation = $_SESSION['translations'][$this->_code][$this->_lang];
|
|
} else {
|
|
$translation = $_SESSION['translations'][$this->_code]['source'];
|
|
}
|
|
$replacement_regex = '/\[data\]/';
|
|
foreach($this->_setData as $k=>$v){
|
|
$translation = preg_replace($replacement_regex, $this->_setData[$k], $translation, 1);
|
|
}
|
|
return $translation;
|
|
}
|
|
|
|
public function getTranslationInDatabase($code, $lang, $db_table="core_translation"){
|
|
$this->_code = $code;
|
|
$this->_lang = $lang;
|
|
$this->_dbTable = $db_table;
|
|
$oPDOLink = ClassConfig::databaseConnect();
|
|
|
|
$sql="
|
|
SELECT source, ".$this->_lang."
|
|
FROM ".$this->_dbTable."
|
|
WHERE code=:code
|
|
LIMIT 1
|
|
";
|
|
$execSQL = $oPDOLink->prepare($sql);
|
|
$execSQL->execute(array(':code'=>$this->_code));
|
|
$row = $execSQL->fetch(PDO::FETCH_ASSOC);
|
|
return $row;
|
|
}
|
|
|
|
|
|
public function getTranslation($code, $lang, $set_data = array()){
|
|
$this->_code = $code;
|
|
$this->_lang = $lang;
|
|
$this->_setData = $set_data;
|
|
|
|
if(!isset($_SESSION['translations'][$this->_code]) or $_SESSION['translations'][$this->_code]['source']==''){
|
|
$row = $this->getTranslationInDatabase($this->_code, $this->_lang);
|
|
$_SESSION['translations'][$this->_code][$this->_lang] = $row[$this->_lang];
|
|
$_SESSION['translations'][$this->_code]['source'] = $row['source'];
|
|
}
|
|
|
|
if($_SESSION['translations'][$this->_code][$this->_lang] != ''){
|
|
$translation = $_SESSION['translations'][$this->_code][$this->_lang];
|
|
} else {
|
|
$translation = $_SESSION['translations'][$this->_code]['source'];
|
|
}
|
|
$replacement_regex = '/\[data\]/';
|
|
foreach($this->_setData as $k=>$v){
|
|
$translation = preg_replace($replacement_regex, $this->_setData[$k], $translation, 1);
|
|
}
|
|
return $translation;
|
|
}
|
|
|
|
//public function getTranslation($code, $lang){
|
|
// $this->_code = $code;
|
|
// $this->_lang = $lang;
|
|
//
|
|
// if(!isset($_SESSION['translations'][$this->_code]) or $_SESSION['translations'][$this->_code]['source']==''){
|
|
// $row = $this->getTranslationInDatabase($this->_code, $this->_lang);
|
|
// $_SESSION['translations'][$this->_code][$this->_lang] = $row[$this->_lang];
|
|
// $_SESSION['translations'][$this->_code]['source'] = $row['source'];
|
|
// }
|
|
//
|
|
// if($_SESSION['translations'][$this->_code][$this->_lang] != ''){
|
|
// return $_SESSION['translations'][$this->_code][$this->_lang];
|
|
// } else {
|
|
// return $_SESSION['translations'][$this->_code]['source'];
|
|
// }
|
|
//}
|
|
|
|
public function getTranslationById($id, $lang){
|
|
//TODO get translation from APC cache
|
|
$this->_id = $id;
|
|
$this->_lang = $lang;
|
|
$oPDOLink = ClassConfig::databaseConnect();
|
|
|
|
$sql="
|
|
SELECT source, ".$this->_lang."
|
|
FROM core_translation
|
|
WHERE id=:id
|
|
LIMIT 1
|
|
";
|
|
$execSQL = $oPDOLink->prepare($sql);
|
|
$execSQL->execute(array(':id'=>$this->_id));
|
|
$row = $execSQL->fetch(PDO::FETCH_ASSOC);
|
|
if($row[$this->_lang] != ''){
|
|
return $row[$this->_lang];
|
|
} else {
|
|
return $row['source'];
|
|
}
|
|
}
|
|
|
|
public function getTranslationForEditing($translation_id, $lang){
|
|
$this->_translationId = $translation_id;
|
|
$this->_lang = $lang;
|
|
$oPDOLink = ClassConfig::databaseConnect();
|
|
|
|
$sql="
|
|
SELECT code, source, ".$this->_lang."
|
|
FROM core_translation
|
|
WHERE id=:translation_id
|
|
LIMIT 1;
|
|
";
|
|
$execSQL = $oPDOLink->prepare($sql);
|
|
$execSQL->execute(array(':translation_id'=>$this->_translationId));
|
|
$row = $execSQL->fetch(PDO::FETCH_ASSOC);
|
|
return $row;
|
|
}
|
|
|
|
public function translate($translation_id, $lang_code, $data){
|
|
$this->_translationId = $translation_id;
|
|
$this->_langCode = $lang_code;
|
|
$this->_data = $data;
|
|
$oPDOLink = ClassConfig::databaseConnect();
|
|
|
|
$sql="
|
|
UPDATE core_translation
|
|
SET source=:source, ".$this->_langCode."=:translation_text
|
|
WHERE id=:translation_id;
|
|
";
|
|
$execSQL = $oPDOLink->prepare($sql);
|
|
if($execSQL->execute(array(
|
|
':source'=>$this->_data['source'],
|
|
':translation_text'=>$this->_data['translation'],
|
|
':translation_id'=>$this->_translationId
|
|
))){
|
|
$message['state'] = 'success';
|
|
} else{
|
|
$message['state'] = 'failed';
|
|
}
|
|
return $message;
|
|
}
|
|
|
|
|
|
public function listAllTranslations($lang_code){
|
|
$this->_langCode = $lang_code;
|
|
$oPDOLink = ClassConfig::databaseConnect();
|
|
$sql = "
|
|
SELECT id, code, source, ".$this->_langCode."
|
|
FROM core_translation;
|
|
";
|
|
$execSQL = $oPDOLink->prepare($sql);
|
|
$execSQL->execute(array());
|
|
$rows = $execSQL->fetchAll(PDO::FETCH_ASSOC);
|
|
return $rows;
|
|
}
|
|
|
|
}
|