403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/inetpub/wwwroot/Civil/includes//Translator.php
<?
////////////////////////////////////////////////////////////////////////////////////////
// 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;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit