<?php
/*
	tbe ,,tsr-db-q''  Został stworzony przez di_Timonix'a
	
	db-g służy do zarządzania i kontrolowaniem onformacji z bazą danych mysql
	
	plik: klasa php przechowywująca dunkcjie do sprawnego i szybszego wykonywania zapytań sql
	
	Timonix Backend Engine,
	
	#plik: 1.0
*/
	
	//header("Content-type: text/plain");
	
	// główna nazwa klasy
	class dbq {
		// zmienne przechowywujące konfiguraje db-g
		
		protected $db_error_developers = false; // zmienna pokazujące dokładne błędy mysql
		protected $db_error = true; // zmienna pokazująca podstawowe błędy 
		protected $db_save_query = false; // zmienna zapamiętująca sql
		
		// zmienne przechowywujące konfiguraje db MySql
		protected $host = "localhost";
		protected $db_user = "root";
		protected $db_password = "";
		protected $db_name = null;
		
		public function __construct($host = null, $db_user = null, $db_password = null, $db_name = null){
			if($host == null){
				// ładowanie pliku konfiguracyinego
				// jeśli istnieje
				if(file_exists("connect.php")){
					require_once "connect.php";
					$this->host = $host;
					$this->db_user = $db_user;
					$this->db_password = $db_password;
					$this->db_name = $db_name;		
				}
			}else{
				$this->host = $host;
				$this->db_user = $db_user;
				$this->db_password = $db_password;
				$this->db_name = $db_name;				
			}
		}
		
		// zmiana danych do bazy danych mysql (w locie)
		public function db_change($host, $db_user, $db_password, $db_name){
			$this->host = $host;
			$this->db_user = $db_user;
			$this->db_password = $db_password;
			$this->db_name = $db_name;
		} 
		
		// funkcja zmieniająca konfiguracje db-g
		public function db_error($t){
			$this->db_error = $t;
		}
		public function db_error_developers($t){
			$this->db_error_developers = $t;
		}
		
		// pierwsza nazwa zapytania query(kwerenda) mysql
		public function query($query, $isjson = false, $data_output = null){
			mysqli_report(MYSQLI_REPORT_STRICT);
			
			try 
			{
				//echo $this->host ;
				//echo	$this->db_user;
				//echo	$this->db_password ;
				//echo	$this->db_name;	
				
				$polaczenie = new mysqli($this->host, $this->db_user, $this->db_password, $this->db_name);
				if ($polaczenie->connect_errno!=0)
				{
					throw new Exception(mysqli_connect_errno());
				}
				else
				{		
					mysqli_query($polaczenie, "SET CHARSET utf8");
					mysqli_query($polaczenie, "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");		

					if ($rezultat = $polaczenie->query(sprintf($query))) {
						
						$ile = mysqli_num_rows($rezultat);
						
						// zmienna zawiera dane do zwrócenia
						$tablica_z_danymi = [];
						$tablica_z_danymi_temp = [];
						
						// sprawdzanie czy dane nie są puste
						if($ile != 0){
							for($i = 0; $i < $ile; $i++){
							
								$row = mysqli_fetch_assoc($rezultat);
								
								// sprawdzanie czy czeba zamienić tablice (asosiacyinom) innymi nazwami
								if($data_output == null){
									// dodawanie danych do głównej tablicy zwrotnej
									array_push($tablica_z_danymi, $row);
									//$tablica_z_danymi_temp = [];									
								}else{							
									// pozyskiwanie kluczy z tablicy(asosiacyinej)
									$tablica_klucze = array_keys($row);
									// pętla
									for($ii = 0; $ii < count($tablica_klucze); $ii++){

										// dodawanie danych do bufora
										$tablica_z_danymi_temp[$data_output[$ii]] = $row[$tablica_klucze[$ii]];
									}
									
									// dodawanie danych do głównej tablicy zwrotnej
									// dane pochodzą z bufora
									array_push($tablica_z_danymi, $tablica_z_danymi_temp);
								}
							}
							
							//var_dump($tablica_z_danymi);
							if($isjson == true){
								return json_encode($tablica_z_danymi);
							}else{
								return $tablica_z_danymi;
							}
						}else{
							if($isjson == true){
								return json_encode("the_query_null");
							}else{
								return "the_query_null";
							}
						}
						
					};	
					
					$polaczenie->close();
				}
				
			}
			catch(Exception $e)
			{
				// sprawdzanie czy pokazywanie błędów jest włączone
				if($this->db_error == true){
					echo '<section class="tsr tsr-alert tsr-alert-error"> Błąd serwera! Przepraszamy za niedogodności i prosimy o powtórzenie działań później! </section>';
				}
				// sprawdzanie czy pokazywanie błędów developerskich jest włączone
				if($this->db_error_developers == true){
					echo '<br />Informacja developerska: '.$e;
				}
			}
		}

		// druga nazwa zapytania query(kwerenda) mysql
		public function query2($query, $isjson = false, $odp = null){
			mysqli_report(MYSQLI_REPORT_STRICT);
			
			try 
			{
				//echo $this->host ;
				//echo	$this->db_user;
				//echo	$this->db_password ;
				//echo	$this->db_name;	
				
				$polaczenie = new mysqli($this->host, $this->db_user, $this->db_password, $this->db_name);
				if ($polaczenie->connect_errno!=0)
				{
					throw new Exception(mysqli_connect_errno());
				}
				else
				{		
					mysqli_query($polaczenie, "SET CHARSET utf8");
					mysqli_query($polaczenie, "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");		

					if ($polaczenie->query(sprintf($query))) {
						
						// sprawdzanie czy dane zwrócić w postacji json
						if($isjson == true){
							return json_encode($odp);
						}else{
							return $odp;
						}
						
					};	
					
					$polaczenie->close();
				}
				
			}
			catch(Exception $e)
			{
				// sprawdzanie czy pokazywanie błędów jest włączone
				if($this->db_error == true){
					echo '<section class="tsr tsr-alert tsr-alert-error"> Błąd serwera! Przepraszamy za niedogodności i prosimy o powtórzenie działań później! </section>';
				}
				// sprawdzanie czy pokazywanie błędów developerskich jest włączone
				if($this->db_error_developers == true){
					echo '<br />Informacja developerska: '.$e;
				}
			}
		}
	}
	
?>