| Server IP : 195.130.67.5 / Your IP : 216.73.216.231 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/inetpub/wwwroot/Civil/includes/ |
Upload File : |
<?
////////////////////////////////////////////////////////////////////////////////////////
// Class: Translations
// Purpose: Διαχειρίζεται όλες τις λειτουργίες γλωσσών και μεταφράσεων
///////////////////////////////////////////////////////////////////////////////////////
class Translator
{
private $connector;
public $default_lang;
public $current_lang;
public $current_locale;
public function __construct($db)
{
$this->connector = $db;
$this->defineDefaultLang();
}
// Επιστρέφει ένα array με τα δεδομένα της default γλώσσας
public function defineDefaultLang()
{
$result = $this->connector->query("SELECT * FROM languages WHERE default_lang=1");
$this->default_lang = $this->connector->fetchArray($result);
return $this->default_lang;
}
// Ελέγχει αν ο δωσμένος κωδικός γλώσσας υπάρχει στη βάση
public function langCodeExists($lang_code)
{
$result = $this->connector->query("SELECT * FROM languages WHERE code='$lang_code' and state=1");
if ($this->connector->getNumRows($result)>0)
return true;
else
return false;
}
// Καθορίζει με βάση την έγκυρη ή όχι παράμετρο $lang και το αποθηκευμένο $_SESSION["lang_code"] πια θα είναι τελικά η τρέχουσα γλώσσα
// και επιστρέφει πίνακα με τα στοιχεία της
public function defineCurrentLang($lang, $session_lang)
{
if (empty($lang))
{
if (empty($session_lang))
{
$lang = $this->default_lang["code"];
}
else
{
$lang = $session_lang;
}
}
else
{
if (!$this->langCodeExists($lang))
{
$lang = $this->default_lang["code"];
}
}
$result = $this->connector->query("SELECT * FROM languages WHERE code='$lang'");
$this->current_lang = $this->connector->fetchArray($result);
return $this->current_lang;
}
// Επιστρέφει πίνακα με τα στοιχεία της γλώσσας με το δεδομένο Id
public function getLanguageById($id)
{
$result = $this->connector->query("SELECT * FROM languages WHERE id=$id");
if ($myrow = $this->connector->fetchArray($result))
return $myrow;
else
return false;
}
// Επιστρέφει πίνακα με τις ενεργές γλώσσες
public function getActiveLanguagesArray()
{
$languages_array = array();
$result = $this->connector->query("SELECT * FROM languages WHERE state=1 ORDER BY sort_order");
while ($myrow = $this->connector->fetchArray($result))
{
$languages_array[] = $myrow;
}
return $languages_array;
}
// Επιστρέφει πίνακα με τα στοιχεία της πρώτης ενεργής στη σειρά γλώσσας που δεν είναι default
public function getFirstNonDefaultLanguage()
{
$result = $this->connector->query("SELECT * FROM languages WHERE default_lang=0 and state=1 ORDER BY sort_order ASC LIMIT 1");
if ($myrow = $this->connector->fetchArray($result))
return $myrow;
else
return false;
}
// Επιστρέφει πίνακα με τα στοιχεία των γλωσσών που δεν είναι default
public function getNonDefaultLanguages()
{
$result = $this->connector->query("SELECT * FROM languages WHERE default_lang=0 and state=1 ORDER BY sort_order ASC");
while ($myrow=$this->connector->fetchArray($result))
$language_array[] = $myrow;
return $language_array;
}
// Θέτει ως default τη γλώσσα με το δεδομένο id
public function setDefaultLanguage($id)
{
$this->connector->query("UPDATE languages SET default_lang=0");
$this->connector->query("UPDATE languages SET default_lang=1 WHERE id=$id");
}
// Επιστρέφει τον αριθμό σειράς της πρώτης στην σειρά γλώσσας
public function minSortOrderLanguage()
{
$result = $this->connector->query("SELECT MIN(sort_order) FROM languages");
$myrow = $this->connector->fetchArray($result);
return $myrow["MIN(sort_order)"];
}
// Επιστρέφει τον αριθμό σειράς της τελευταίας στην σειρά γλώσσας
public function maxSortOrderLanguage()
{
$result = $this->connector->query("SELECT MAX(sort_order) FROM languages");
$myrow = $this->connector->fetchArray($result);
return $myrow["MAX(sort_order)"];
}
// Εναλλάσει τη κατάσταση (ενεργή/ανενεργή) της γλώσσας με το συγκεκριμένο id
public function toggleLanguageState($id)
{
$myrow = $this->getLanguageById($id);
if ($myrow["state"]==1)
$new_state = 0;
else
$new_state = 1;
$result = $this->connector->query("UPDATE languages SET state='$new_state' WHERE id=".$myrow["id"]);
return $result;
}
// Μετακινεί τη γλώσσα με το συγκεκριμένο id μια θέση πάνω ($direction="up") ή κάτω ($direction="down") σε σχέση με τις υπόλοιπες γλώσσες
public function moveLanguage($id, $direction)
{
if ($myrow = $this->getLanguageById($id))
{
if ($direction=="up")
$result2 = $this->connector->query("SELECT * FROM languages WHERE sort_order<".$myrow["sort_order"]." ORDER BY sort_order DESC LIMIT 0,1");
else
$result2 = $this->connector->query("SELECT * FROM languages WHERE sort_order>".$myrow["sort_order"]." ORDER BY sort_order ASC LIMIT 0,1");
if ($myrow2 = $this->connector->fetchArray($result2))
{
$tmp_order = $myrow2["sort_order"];
$this->connector->query("UPDATE languages SET sort_order=".$myrow["sort_order"]." WHERE id=".$myrow2["id"]);
$this->connector->query("UPDATE languages SET sort_order=".$tmp_order." WHERE id=".$id);
}
}
}
// Τραβάει και επιστρέφει πίνακα με τα μεταφρασμένα πεδία του περιεχομένου με το συγκεκριμένο $reference_id
public function fetchTranslatedContent($language_id, $reference_id, $reference_table, $reference_field="")
{
$translated_fields = array();
if ($reference_field!="")
$field_criteria = "and reference_field='$reference_field'";
$result = $this->connector->query("SELECT * FROM translations WHERE language_id=$language_id and reference_id=$reference_id and reference_table='$reference_table' $field_criteria");
while ($myrow = $this->connector->fetchArray($result))
{
$translated_fields[$myrow["reference_field"]] = $myrow["value"];
}
return $translated_fields;
}
// Προσαρμόζει την SQL έκφραση ώστε να επιστρέφει ή όχι τα μη μεταφρασμένα περιεχόμενα ανάλογα με το $untranslated_policy
public function fixSqlStatement($sql, $current_lang_id, $reference_table, $untranslated_policy)
{
if ($current_lang_id != $this->default_lang["id"] and $untranslated_policy==1)
{
$sql = preg_replace('/\s{2,}/',' ',$sql); // Αφαιρεί τα πλεονάζοντα κενά και αφήνει μόνο ένα όπου υπάρχουν πολλά στη σειρά
$replace_find = array("SELECT", "*", "FROM ".$reference_table, "WHERE");
$replace_with = array("SELECT DISTINCT", $reference_table.".*", "FROM ".$reference_table.", translations", "WHERE translations.reference_table='".$reference_table."' and ".$reference_table.".id=translations.reference_id and translations.language_id=".$current_lang_id." and");
$sql = str_replace($replace_find, $replace_with, $sql, $count);
}
return $sql;
}
// Τσεκάρει αν υπάρχει η μετάφραση για το δεδομένο αντικείμενο και τη δεδομένη γλώσσα
public function translationExists($language_id, $reference_table, $reference_id, $key="")
{
if ($key=="")
$result = $this->connector->query("SELECT * FROM translations WHERE language_id = $language_id and reference_table='$reference_table' and reference_id=$reference_id");
else
$result = $this->connector->query("SELECT * FROM translations WHERE language_id = $language_id and reference_table='$reference_table' and reference_id=$reference_id and reference_field='$key'");
if ($this->connector->getNumRows($result)>0)
return true;
else
return false;
}
// Εισάγει νέα μετάφραση
public function insertTranslation($language_id, $reference_table, $reference_id, $key, $value)
{
return $this->connector->query("INSERT INTO translations (language_id, reference_id, reference_table, reference_field, value) VALUES ($language_id,$reference_id,'$reference_table','$key','$value')");
}
// Ενημερώνει μία υπάρχουσα μετάφραση
public function updateTranslation($language_id, $reference_table, $reference_id, $key, $value)
{
return $this->connector->query("UPDATE translations SET value='$value' WHERE language_id=$language_id and reference_id=$reference_id and reference_table='$reference_table' and reference_field='$key'");
}
// Διαγράφει μία υπάρχουσα μετάφραση σε συγκεκριμένη γλώσσα ενός συγκεκριμένου στοιχείου
public function deleteTranslation($language_id, $reference_table, $reference_id)
{
return $this->connector->query("DELETE FROM translations WHERE language_id = $language_id and reference_table='$reference_table' and reference_id=$reference_id");
}
// Διαγράφει τις μεταφράσεις σε όλες της γλώσσες ενός συγκεκριμένου στοιχείου
public function deleteAllTranslations($reference_table, $reference_id)
{
return $this->connector->query("DELETE FROM translations WHERE reference_table='$reference_table' and reference_id=$reference_id");
}
// Επιστρέφει πίνακα με τα ονόματα των ξένων γλωσσών στις οποίες το περιεχόμενο (άρθρο ή ένθεμα ανάλογα με το $reference_table) με το δεδομένο id είναι μεταφρασμένο
public function getContentTranslatedLanguagesArray($id, $reference_table="content")
{
$languages_names_array = array();
$result = $this->connector->query("SELECT DISTINCT languages.name FROM translations, languages WHERE translations.reference_table='$reference_table' and translations.reference_id=$id and translations.language_id=languages.id");
while ($myrow = $this->connector->fetchArray($result))
{
$languages_names_array[] = $myrow["name"];
}
return $languages_names_array;
}
}