<?php

//tato trieda sluzi na instalaciu databazy do pociatocneho stavu
class db_installer{
//tieto premenne v triede su protected, teda chranene vnutri triedy - pouzitie iba vnutri triedy
	protected $dbname;
	protected $dbuser;
	protected $dbhost;
	protected $dbpass;
	protected $db_handle,$query,$vysledok,$conn_str;

//na zaciatku si napisem funkciu, ktora mi skontroluje, ci uz nahodou v tej databaze nemam take tabulky, ake idem vytvarat
//funkcia je protected, lebo ju mam iba na vnutorne ucely triedy
protected function check_tabs($db_handle){
	  //$conn_str='dbname='.$dbname .' user='.$dbuser.' password='.$dbpass.'';
	  $query="SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' " ;
	  //$db_handle = pg_connect($conn_str);
	  $vysledok = pg_query($db_handle,$query);
	   $tab=0;
	  if(pg_num_rows($vysledok)>0){
	  	if($vysledok){
		  while($riadok = pg_fetch_assoc($vysledok)) {
		  		//skontrolujem, ci su v tej databaze tie tabulky, ktore chcem vytvarat
				//kontrolujem tabulky clanky, pridavajuci, praava
				switch($riadok['table_name']){
					case 'clanky': $tab=1; break;
					case 'pridavajuci': $tab=1; break;
					case 'praava': $tab=1; break;
				}
		  } 
	  }else{
	  	echo "Požiadavka na databázu bola táto: <br />".nl2br($query);
		echo "<br />Požiadavka na databázu skončila s touto chybou:<br />\n";
		echo pg_last_error($db_handle);
	  }
	  }
	if($tab==1){
		return true;
		}else{
		return false;
		}
}

//funkcia inst_db je verejna, lebo ju mozem pouzivat aj mimo triedy
//tato funkcia mi nainstaluje databazu do prvopociatocneho stavu
public function inst_db($dbname,$dbuser,$dbhost,$dbpass){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu
	$this->query="SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' " ;
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	if($this->vysledok){
        if($this->check_tabs($this->db_handle)){
		//ak su uz v databaze take tabulky, ake chcem vytvorit, tak skoncim len hlaskou, ze sa to neda
		echo("<br /><div class=\"upozornenie\">CHYBA: Nedajú sa vytvoriť tabuľky v databáze!</div><br />");
		echo("V databáze sa už nachádzajú tabuľky, ktoré systém potrebuje vytvoriť.<br />");
		echo("Sú to tabuľky: clanky, pridavajuci, praava<br />");
		echo("Buď tieto tabuľky odstráňte alebo premenujte manuálne prístupom do databázy.<br />");
		echo("<span style=\"color:blue;\">RIEŠENIE: Po odstránení alebo premenovaní spomenutých tabuliek z databázy musíte ešte prejsť na server a kompletne vymazať konfiguračné údaje v súbore db_conf.php (v súbore nesmie zostať ani prázdny riadok - musí mať dĺžku 0B). Súbor ponecháte zapisovateľný pre skripty. Následne spustíte inštaláciu od začiatku! (teda v prehliadači spustíte www.vasa_stranka.xx/install.php)</span><br />");
		echo("KONIEC!");
		}else{
		//ak este v databaze nie su take tabulky, ake chcem vytvorit, tak ich vytvorim
		$this->query="
					
					create table pridavajuci(
					id_pridal serial not null primary key,
					meno varchar(100) not null,
					priezvisko varchar(100) not null,
					nick varchar(100) not null,
					heslo varchar(200) not null,
					registrovany_od timestamp not null,
					posledna_akcia timestamp not null,
					mail varchar(150) not null,
					sid varchar(200) not null);
					
					select setval('pridavajuci_id_pridal_seq',1);
										
					create table clanky(
					id_clanku serial not null primary key,
					id_pridal integer not null references pridavajuci(id_pridal) on delete cascade,
					nazov_clanku varchar(200) not null,
					datum_vydania timestamp not null,
					datum_pridania timestamp not null,
					link_disk varchar(200) not null,
					link_net varchar(200) not null,
					meno_autora varchar(100) not null); 
					
					select setval('clanky_id_clanku_seq',1);
										
					create table klucoveslova(
					id_clanku integer not null references clanky(id_clanku) on delete cascade,
					klucove_slova text not null);
					
					create table poctyslov(
					klucove_slovo text not null,
					pocet_slovo integer not null);
																			
					create table praava(
					id_pridal integer not null references pridavajuci(id_pridal) on delete cascade,
					pravo_citaj_clanok integer not null,
					pravo_zadaj_clanok integer not null,
					pravo_zmaz_clanok integer not null,
					pravo_uprav_clanok integer not null,
					pravo_pridaj_ludi integer not null,
					pravo_zmaz_ludi integer not null);
					
					insert into pridavajuci( 
					id_pridal,
					meno,
					priezvisko,
					nick,
					heslo,
					registrovany_od,
					posledna_akcia,
					mail,
					sid) VALUES (1,'Spravca','Systemu','admin',
					md5('123456'),current_timestamp,
					current_timestamp,'jan.hrubos007(at)gmail.com','empty'); 
					
					insert into praava(
					id_pridal,
					pravo_citaj_clanok,
					pravo_zadaj_clanok,
					pravo_zmaz_clanok,
					pravo_uprav_clanok,
					pravo_pridaj_ludi,
					pravo_zmaz_ludi) VALUES (
					1,
					1,
					1,
					1,
					1,
					1,
					1);
					";
					//poslem poziadavku na databazu
					$this->vysledok = pg_query($this->db_handle, $this->query);
					//zachytil som uspesnost poziadavky a podla toho vypisem hlasku
					if($this->vysledok){
						echo "<br />Úspešne som vykonal túto požiadavku na databázu: <br />".nl2br($this->query);
						echo "<span style=\"color:blue;\">";
						echo "Teraz môžete prejsť na WWW.VASA_STRANKA.XX/INDEX.PHP<br />";
						echo "Vaše prihlasovacie údaje sú: Užívateľ: admin Heslo:123456<br />";
						echo "<span style=\"color:red; font-weight:bold;\">Ihneď po prihlásení do systému si zmeňte heslo!!!</span>";
						echo "</span>";
					}else{
						echo "Požiadavka na databázu bola táto: <br />".nl2br($this->query);
						echo "<br />Požiadavka na databázu skončila s touto chybou:<br />\n";
						echo pg_last_error($this->db_handle);
					}
		}		
	}else{
        echo "Požiadavka na databázu bola táto: <br />".nl2br($this->query);
		echo "<br />Požiadavka na databázu skončila s touto chybou:<br />\n";
		echo pg_last_error($this->db_handle);
	}
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	}
}

class db_users{

//tato funkcia mi zisti, ci je v databaze uzivatel s danym menom a heslom
public function check_user($dbname,$dbuser,$dbhost,$dbpass,$user,$pass){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->user=$user;
	$this->pass=$pass;
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu
	$this->query="SELECT nick,heslo FROM pridavajuci  WHERE nick='".$this->user."' AND heslo='".md5($this->pass)."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	if($this->vysledok){
	//zistim, ci mam v databaze takeho uzivatela s menom a heslom
        if((pg_num_rows($this->vysledok))>0){
			$stalo_sa="user_exists";
		}else{
			$stalo_sa="non_existing_user";
		}
	}else{
        $stalo_sa="dberror";
	}
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	return $stalo_sa;
	}
	
	public function log_user_in($dbname,$dbuser,$dbhost,$dbpass,$user,$pass){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->user=$user;
	$this->pass=$pass;
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu
	$UnixTime = time();
	$GMTString = gmdate("Y-m-d H:i:s", $UnixTime);
	$this->query="update pridavajuci set posledna_akcia=CURRENT_TIMESTAMP  WHERE nick='".$this->user."' AND heslo='".md5($this->pass)."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	
	if($this->vysledok){
	//zistim, ci sa podarilo updatnut timestamp        
		$stalo_sa=true;
	}else{
        $stalo_sa=false;
	}
	
	$this->query="update pridavajuci set sid='".$_SESSION["sid"]."' WHERE nick='".$this->user."' AND heslo='".md5($this->pass)."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	if($this->vysledok){
	//zistim, ci sa podarilo updatnut timestamp        
		$stalo_sa=true;
	}else{
        $stalo_sa=false;
	}
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	return $stalo_sa;
	}
	
	public function log_user_out($dbname,$dbuser,$dbhost,$dbpass,$user,$sid){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->user=$user;
	$this->pass=$pass;
	$this->sid=$sid;
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu
	/*
	aj takto sa da pracovat s timestamp, ale v query nizsie pouzivam radsej priamy prikaz databazy CURRENT_TIMESTAMP
	$UnixTime = time();
	$GMTString = gmdate("Y-m-d H:i:s", $UnixTime);
	*/
	$this->query="update pridavajuci set posledna_akcia=CURRENT_TIMESTAMP  WHERE nick='".$this->user."' AND sid='".$this->sid."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	
	if($this->vysledok){
	//zistim, ci sa podarilo updatnut timestamp        
		$stalo_sa=true;
	}else{
        $stalo_sa=false;
	}
	
	$this->query="update pridavajuci set sid='empty' WHERE nick='".$this->user."' AND sid='".$this->sid."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	if($this->vysledok){
	//zistim, ci sa podarilo updatnut timestamp        
		$stalo_sa=true;
	}else{
        $stalo_sa=false;
	}
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	return $stalo_sa;
	}
//tato funkcia mi skontroluje, ci je uzivatel prihlaseny v databaze alebo mu vyprsal cas a sama ho odhlasi
	public function is_user_logged($dbname,$dbuser,$dbhost,$dbpass,$user,$sid){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->user=$user;
	$this->pass=$pass;
	$this->sid=$sid;
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu, ktorou zistim, ci je uzivatel pripojeny dlhsie ako 10 minut
	$this->query="select (CURRENT_TIMESTAMP-posledna_akcia)>'00:10:00.000' as rozdiel from pridavajuci WHERE nick='".$this->user."' AND sid='".$this->sid."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	$err=0;
	$stalo_sa=true;
	if($this->vysledok){
			$row = pg_fetch_row($this->vysledok);
			$rozdiel=$row[0];
	}else{
        		$err=1;
	}
	if($rozdiel=='t'){
			//ak sa zistilo, ze je uzivatel necinny viac ako 10 minut, tak ho odhlasim zo systemu
			$this->query="update pridavajuci set sid='empty' WHERE nick='".$this->user."' AND sid='".$this->sid."'";
			//pokusim sa poziadavku vykonat a vratit vysledky
			$this->vysledok = pg_query($this->db_handle, $this->query);
			if($this->vysledok){
			//nie je prihlaseny v systeme teda vratim false 
			//echo("odhlasil som ta");       
				$stalo_sa=false;
			}else{
			//je stale prihlaseny v systeme, vratim true
				$stalo_sa=true;
			}
	}
	else{
		//ak rozdiel nie je t, to znamena, ze nie je true, ze rozdiel je vacsi ako 10 minut
		//teda vratim true - ano stale je prihlaseny v systeme
		$stalo_sa=true;
	}
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	return $stalo_sa;
	}


//tato funkcia resp metoda triedy mi vrati ake prava ma uzivatel nastavene v databaze
public function get_user_privileges($dbname,$dbuser,$dbhost,$dbpass,$user,$sid){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->user=$user;
	$this->pass=$pass;
	$this->sid=$sid;
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu, ktorou zistim, ci je uzivatel pripojeny dlhsie ako 10 minut
	$this->query="select id_pridal from pridavajuci WHERE nick='".$this->user."' AND sid='".$this->sid."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	$err=0;
	if($this->vysledok){
			$row = pg_fetch_row($this->vysledok);
			$jeho_id=$row[0]; //zistil som si v db uzivatelovo id a dalej zistim prava priradene tomuto id v druhej tabulke
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
				$err=1;
	}
	if($jeho_id!='' && $err!=1){
			//ak som v poriadku nacital jeho id, idem sa pozriet ake ma prava
			$this->query="SELECT * FROM praava WHERE id_pridal=".$jeho_id;
			//pokusim sa poziadavku vykonat a vratit vysledky
			$this->vysledok = pg_query($this->db_handle, $this->query);
			if($this->vysledok){
			  	//zistim pole jeho praav
				$row = pg_fetch_row($this->vysledok);
				$jeho_praava=$row;	
			}else{
			//ak sa to nepodarilo vypisem chybu
				echo("Nepodarilo sa vykonať dotaz na databázu: načítanie práv užívateľa. Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
				$err=1;
			}
	}		
	//vycistim spojenie s db
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	//ak je vsetko ok, vratim pole s praavami uzivatela
	if($err!=1) return $jeho_praava;
	//ak sa daco pokaslalo, vratim false
	if($err==1) return false;
	}
//tato metoda vrati len cisla linkov - dorobi posuvanie po strankach pre metodu get_users_list
//aby som si to mohol posuvat po 10 ludi napriklad.
public function vypis_linky($dbname,$dbuser,$dbhost,$dbpass,$na_stranku){
		$this->dbname=$dbname;
		$this->dbuser=$dbuser;
		$this->dbhost=$dbhost;
		$this->dbpass=$dbpass;
		$this->user=$user;
		//vytvorim si udaje pre pripojenie k databaze
		$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
		//pripojim sa k databaze a ulozim si obsluhovac spojenia
		$this->db_handle = pg_connect($this->conn_str);
		//vytvorim si poziadavku na databazu, ktorou zistim, ci je uzivatel pripojeny dlhsie ako 10 minut
		$this->query="select * from pridavajuci order by priezvisko";
		//pokusim sa poziadavku vykonat a vratit vysledky
		$this->vysledok = pg_query($this->db_handle, $this->query);
		if($this->vysledok){
			//zistim kolki su v databaze a na zaklade ich poctu vygenerujem pocet linkov na posuvanie stranky
			$poc=0;//pocet ludi v databaze
			//najprv vygenerujem pole vsetkych a az potom vyberam len tych, co chcem
			while($row = pg_fetch_row($this->vysledok)){
				$poc++;
			}
			$na_stranku_=$na_stranku-1;
			(int)$kolko_linkov=((int)$poc / (int)($na_stranku_));//tolkoto linkov treba ak zvysok po celoc deleni poc%na_stranku=0
			$kolko_linkov=floor($kolko_linkov);
			if(($poc % ($na_stranku-1))>0)$kolko_linkov+=1;
			//vygenerujem odkazy pre posuv listov 
			$a="";
			$p=0;//nastavim si pociatok na nula
			$k=$na_stranku_;//nastavim si koniec
			for($h=1;$h<=$kolko_linkov;$h++){
				$a.="<a class=\"menu_item\" style=\"font-size:15px; text-decoration:none;\"; href=\"index.php?action=delete_user&amp;od=".$p."&amp;do=".$k."\"> [".$h."] </a>";
				$p+=$na_stranku_;
				$k+=$na_stranku_;
				
			}
			$stra="<strong>Max počet ľudí zobrazených na jednu stránku je:</strong> <span style=\"color:red;font-weight:bold;border:1px solid red;\">".$na_stranku."</span><br />Posúvanie stránok: ".$a;
			
		}else{
			echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
		}
		return $stra;
		
}



//tato metoda vrati len riadky tabulky ludi v databaze
public function get_users_list($dbname,$dbuser,$dbhost,$dbpass,$od,$do){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->user=$user;
	
	//vlozim si konfig pre enkodovanie dat
					$meno_suboru="encoding_config.php";
					if(file_exists($meno_suboru)){
					require_once($meno_suboru);
					}else{
					echo("Nenasiel som subor ".$meno_suboru." pre vlozenie do skriptu. Ukoncim vykonavanie skriptu.");
					exit;
					}
					
					//vlozim si funkcie pre enkodovanie dat
					$meno_suboru="encoding_functions.php";
					if(file_exists($meno_suboru)){
					require_once($meno_suboru);
					}else{
					echo("Nenasiel som subor ".$meno_suboru." pre vlozenie do skriptu. Ukoncim vykonavanie skriptu.");
					exit;
					}
	
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu, ktorou zistim, ci je uzivatel pripojeny dlhsie ako 10 minut
	$this->query="select * from pridavajuci order by priezvisko";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	$err=0;
	//ak este nemam nastavene odkial pokial vypisujem uzivatelov, nastavim to:
	if(trim($od)=="" or trim($do)==""){
		$od=0;
		$do=19;
	}
	if($this->vysledok){
			$navrat_str="";
			$poc=0;
			//najprv vygenerujem pole vsetkych a az potom vyberam len tych, co chcem
			while($row = pg_fetch_row($this->vysledok)){
				$clovek[$poc][1]=$row[1];
				$clovek[$poc][2]=$row[2];
				$clovek[$poc][3]=$row[3];
				$clovek[$poc][7]=$row[7];
				$poc++;
			}
			$poc--;//znizil som o jedna, lebo pocitam od nuly
			//ak nahodou do presiahne pocet vsetkych napravim to
			if($do>$poc or $do<0)$do=$poc;//priradil dom do maximalny pocet uzivatelov
			if($od<0 or $do<$od)$od=0;//ak niekto zadal do url adresy zaporne cislo, nastavim na nulu
			//dalej skontrolujem, ci vypisujem len maximalny pocet prispevkov na stranku
			$na_stranku=20;//touto premennou nastavim maximalny pocet zobrazenych uzivatelov na stranku
			$na_stranku--;//o jedna znizim lebo v podmienkach dalej mam znamienko mensi alebo rovny
			if(abs($do-$od)>$na_stranku){
				$od=0;
				$do=$na_stranku;
			}
			$iba_cisla ='/[^0-9]/';
			if((preg_match($iba_cisla,$od)) or (preg_match($iba_cisla,$do))){
				$od=0;
				$do=$na_stranku;
			}
			//az tu vyberam, ktorych chcem
			$poc=0;
			while($q<count($clovek)){

				$suc=(int)$od+$poc;
				
				
				 if(($suc)<=$do){
				 //row je dvojrozmerne pole riadok stlpec
				//nacitavam vsetky riadky uzivatelov a pripajam do riadkov tabulky
				$navrat_str.="<tr><td class=\"del_usr_tab\">".konvertuj_do($clovek[$suc][1],$zdrojove_enkodovanie2,$cielove_enkodovanie2,$zap_vyp2)."</td><td class=\"del_usr_tab\">".konvertuj_do($clovek[$suc][2],$zdrojove_enkodovanie2,$cielove_enkodovanie2,$zap_vyp2)."</td><td class=\"del_usr_tab\">".konvertuj_do($clovek[$suc][3],$zdrojove_enkodovanie2,$cielove_enkodovanie2,$zap_vyp2)."</td><td class=\"del_usr_tab\">".konvertuj_do($clovek[$suc][7],$zdrojove_enkodovanie2,$cielove_enkodovanie2,$zap_vyp2)."</td><td class=\"del_usr_tab\"><input type=\"checkbox\" name=\"".konvertuj_do($clovek[$suc][3],$zdrojove_enkodovanie2,$cielove_enkodovanie2,$zap_vyp2)."\" value=\"1\"</td></tr>";
			}
			$poc++;
			$q++;
		}
	  
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
				$err=1;
	}
	
	
	
	//vycistim spojenie s db
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	//ak je vsetko ok, vratim pole s praavami uzivatela
	if($err!=1) return $navrat_str;
	//ak sa daco pokaslalo, vratim false
	if($err==1) {
		$vrat="<tr>Vyskytla sa chyba pri ziskavani uzivatelov z databazy!</tr>";
		return $vrat;
	  }
	}
	

//tato metoda zmaze vybranych uzivatelov a zmaze ich, samozrejme je volana len s prislusnymi pravami po prihlaseni
public function del_selected_users($dbname,$dbuser,$dbhost,$dbpass){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->user=$user;
	$n=1; //nastavim si kontrolnu premennu
	$err=0;
	//najskor si skontrolujem POST premenne, ci ich niekto nezmenil, ak hej koniec a sprava o tom :)
	$vzor ='/[^A-Za-z0-9\.\-\_]/';
	//vytvorim si udaje pre pripojenie k databaze
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	//pripojim sa k databaze a ulozim si obsluhovac spojenia
	$this->db_handle = pg_connect($this->conn_str);
	//vytvorim si poziadavku na databazu, ktorou zistim, ci je uzivatel pripojeny dlhsie ako 10 minut
	$this->query="select nick from pridavajuci";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	//$vr="initial value ";
	if($this->vysledok){
		//$vr.=" selected nicks successful ";
		$n++;
			//kontrolujem post premenne na zaklade nickov, lebo tymi su identifikovane
			$x=0;$zmaz[$x]="";
			while($row = pg_fetch_row($this->vysledok)){
				//$vr.=" row0:".$row[0]." ";
				//kontrolujem post premenne podla databazy
				//v row pouzivam len jeden index aj ked je to v skutocnosti pole [riadok][stlpec]
				//teda priamo volam stlpec 3, teda nick :)
				if(isset($_POST["$row[0]"])){
					//premennu vr si nevsimajte, tuu som pouzil ked som to debugoval rucne
					//$vr.=" post[row[0]]=".$_POST["$row[0]"]." ";
				if(preg_match($vzor,trim($_POST[$row[0]]))) return $n=0;
				$zmaz[$x]=$row[0];
				  //ak sa uzivatel pokusa vymazat sam seba rob toto:
				  if($zmaz[$x]==$_SESSION["uzivatel"]){
				  if(isset($_SESSION["uzivatel"]) && isset($_SESSION["sid"])){
					unset($_SESSION["uzivatel"]);
					unset($_SESSION["sid"]);
					session_destroy();
					}
				  return -3;
				  }
				$x++;
				}
			}
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
				//$vr.=" err not selected nicks ";
				
				$n=0;
	}
	
	if($zmaz[0]=="") return $n=-2;//ak som nevybral nikoho na zamzanie vratim tuto hodnotu
	//ak je vsetko ok, vymazem tych ludi, ktori boli vybrani na vymazanie
	if($n!=0 && $zmaz[0]!=""){
	
	//prechadzam v cykle vsetky nicky a zistujem, ci boli zaslane cez post, ak hej, tak zmazem
	//podla nicku zistim id_pridal - id cloveka a zmazem vsetko v tabulkach s tym id_pridal
	//tym som vlastne zmazal cloveka
	//$vr.="  zostatkovy row0 je ".count($row)." ";
	$x=0;
	while($x<count($zmaz)){
	//$vr.=" zmaz[x]:".$zmaz[$x]." ";
	//vytvorim si poziadavku na databazu, ktorou zistim, ci je uzivatel pripojeny dlhsie ako 10 minut
	if($zmaz[$x]=='admin') return $n=-1;
	if(isset($_POST[$zmaz[$x]]) && $zmaz[$x]!='admin'){
	$this->query="select id_pridal from pridavajuci WHERE nick='".$zmaz[$x]."'";
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	//zistim si jeho id
	if($this->vysledok){
		$n++;
			$id_cloveka = pg_fetch_row($this->vysledok);
			//$vr.=" id cloveka na mazanie ".$id_cloveka[0]." ";
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".							pg_last_error($this->db_handle));
				$n=0;
		}
		//zmazem vsetko od neho v tabulke ludi
		$this->query="delete from pridavajuci where id_pridal=".$id_cloveka[0];
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	
	if($this->vysledok){
		$n++;
			//$vr.=" prebehlo toto query: ".$this->query." ";
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".							pg_last_error($this->db_handle));
				$n=0;
		}
		
		//zmazem vsetko od neho v tabulke clanky
		$this->query="delete from clanky where id_pridal=".$id_cloveka[0];
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	
	if($this->vysledok){
			$n++;
			//$vr.=" prebehlo toto query: ".$this->query." ";
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".							pg_last_error($this->db_handle));
				$n=0;
		}
		
		//zmazem vsetko od neho v tabulke praava - teda zmazem jeho praava
		$this->query="delete from praava where id_pridal=".$id_cloveka[0];
	//pokusim sa poziadavku vykonat a vratit vysledky
	$this->vysledok = pg_query($this->db_handle, $this->query);
	
	if($this->vysledok){
			$n++;
			//$vr.=" prebehlo toto query: ".$this->query." ";
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: načítanie používateľovho id. Databáza hlási túto chybu: ".							pg_last_error($this->db_handle));
				$n=0;
		}
		//zvysujem x, lebo sa posuvam dalej v poli  nickov ktore mazem
		$x++;
	   }
	  }
		
		
	}
	
	//vycistim spojenie s db
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	//ak je vsetko ok, vrati mi to n=1, to znamena ze cela operacia mazania luci prebehla ok
	return $n;
	//ak sa daco pokaslalo, vratim false
		
	//koniec metody
	}
//vseobecna metoda na odoslanie poziadavky bez vysledku v poli na databazu
public function send_query_to_db($dbname,$dbuser,$dbhost,$dbpass,$q){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	$this->db_handle = pg_connect($this->conn_str);
	$this->vysledok = pg_query($this->db_handle, $q);
	if($this->vysledok){
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return 1;	
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: ".$q." Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return 0;
	}
	
	}
	
//metoda na zistenie najvyssieho id uzivatela v databaze, nakolko si strazim autoinkrementaciu sam
	public function get_max_id($dbname,$dbuser,$dbhost,$dbpass){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	$this->db_handle = pg_connect($this->conn_str);
	$this->vysledok = pg_query($this->db_handle, "select max(id_pridal) from pridavajuci");
	if($this->vysledok){
				$max_id = pg_fetch_row($this->vysledok);
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return $max_id[0];
	}else{
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return 0;
				
	}
	}
//tato metoda skontroluje, ci nemam duplicitu pri zadavani udajov, ked zadavam noveho uzivatela, nesmie	byt duplicita mena a emailu
public function check_duplicity($dbname,$dbuser,$dbhost,$dbpass,$entrd_usr,$entrd_mail){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	$this->db_handle = pg_connect($this->conn_str);
	$this->vysledok = pg_query($this->db_handle, "select nick from pridavajuci");
	
	if($this->vysledok){
				$x=0;
				while($riadok = pg_fetch_row($this->vysledok)){
					$row[$x]=$riadok[0];
					$x++;
				}
				//kontrolujem duplicitu nicku alebo mailu - musia byt jedinecne, aby som sa mohol korektne prihlasit do databazy				
				for($i=0;$i<count($row);$i++) if($row[$i]==$entrd_usr) return 0;
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: Zistovanie duplicity nick, email. Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
	}
	//overil som nick, este musim overit email
	$this->vysledok = pg_query($this->db_handle, "select mail from pridavajuci");
	  if($this->vysledok){
	  			$x=0;
				while($riadok = pg_fetch_row($this->vysledok)){
						$row[$x]=$riadok[0];
						$x++;
				}
				//kontrolujem duplicitu nicku alebo mailu - musia byt jedinecne, aby som sa mohol korektne prihlasit do databazy
				for($i=0;$i<count($row);$i++) if($row[$i]==$entrd_mail) return 0;		
				
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: Zistovanie duplicity nick, email. Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
	}
	pg_free_result($this->vysledok);
	pg_close($this->db_handle);
	return 1;
	}	

//tato metoda len vrati aktualne heslo admina, ktore sa inde v kode porovnava so zadanym heslom z rozhrania pri zmene hesla admina
public function get_admin_pass($dbname,$dbuser,$dbhost,$dbpass){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	$this->db_handle = pg_connect($this->conn_str);
	$this->vysledok = pg_query($this->db_handle, "select heslo from pridavajuci where nick='admin'");
	if($this->vysledok){
				$heslo = pg_fetch_row($this->vysledok);
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return $heslo[0];
	}else{
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return 0;
				
	}
	}

//metoda na poslanie poziadavky na db a nasledne ziskanie vratenych dat
public function send_query_to_db2($dbname,$dbuser,$dbhost,$dbpass,$q){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	$this->db_handle = pg_connect($this->conn_str);
	$this->vysledok = pg_query($this->db_handle, $q);
	if($this->vysledok){
				$x=0;
				while($riadok = pg_fetch_row($this->vysledok)){
					$row[$x]=$riadok[0];
					$x++;
				}
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return $row;	
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: ".$q." Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return 0;
	}
	}
	
	
	
	//metoda na poslanie poziadavky na db a nasledne ziskanie vratenych dat, vylepsena predosla
public function send_query_to_db3($dbname,$dbuser,$dbhost,$dbpass,$q){
	$this->dbname=$dbname;
	$this->dbuser=$dbuser;
	$this->dbhost=$dbhost;
	$this->dbpass=$dbpass;
	$this->conn_str='dbname='.$this->dbname .' user='.$this->dbuser.' password='.$this->dbpass.' host='.$this->dbhost;
	$this->db_handle = pg_connect($this->conn_str);
	$this->vysledok = pg_query($this->db_handle, $q);
	if($this->vysledok){
				$x=0;
				while($riadok = pg_fetch_row($this->vysledok)){
					//echo($riadok[0]." ".$riadok[1]."<br/>");
					$outa[$x][0]=$riadok[0];
					$outa[$x][1]=$riadok[1];
					$x++;
				}
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return $outa;	
	}else{
        		echo("Nepodarilo sa vykonať dotaz na databázu: ".$q." Databáza hlási túto chybu: ".pg_last_error($this->db_handle));
				pg_free_result($this->vysledok);
				pg_close($this->db_handle);
				return 0;
	}
	}
	
	

//metoda na generovanie prepinania stranok pri prezerani clankov (stranka [1][2]...)
function show_pages($dbname,$dbuser,$dbhost,$dbpass,$max_per_page,$od,$do){
	//na zaciatku tejto metody musim dosiahnut kontinualne stupanie id_clanku, kvoli dalsej praci s tymto predpokladom
	//pred tym musim zistit, ci vobec nejake clanky v db su	
	$all=count($this->send_query_to_db2($dbname,$dbuser,$dbhost,$dbpass,"select * from clanky"));//zistim pocet vsetkych clankov
	
	$mpp=$max_per_page;//tu mam v premennej maximum clankov, kolko chcem zobrazit na stranku
	if($mpp<1)$mpp=1;
	$pstr=floor($all/$mpp);//tu som vypocital kolko stranok budem mat, pocet stranok
	//ak je anonie nula, tak je celociselne delenie ok a nepotrebujem o jednu stranku navyse
	//ak je anonie nenulove, potrebujem vygenerovat o jednu stranku navyse pre ten zostatok	
	
	$anonie=$all % $mpp;//tu som zistil, ci treba o jednu stranku viac alebo nie
	$anonie?($pstr++):$pstr;
	//nasleduje kotrola povolenych rozsahov na stranku: od, do
			$all--;//znizil som o jedna, lebo pocitam od nuly
			//ak nahodou do presiahne pocet vsetkych napravim to
			
			if($do>$all or $do<0)$do=$all;//priradil do do maximalny pocet uzivatelov
			if($od<0 or $do<$od)$od=0;//ak niekto zadal do url adresy zaporne cislo, nastavim na nulu
			//dalej skontrolujem, ci vypisujem len maximalny pocet prispevkov na stranku
			
			if(abs($do-$od)>$mpp){
				$od=0;
				$do=$mpp;
			}
			$iba_cisla ='/[^0-9]/';
			if((preg_match($iba_cisla,$od)) or (preg_match($iba_cisla,$do))){
				$od=0;
				$do=$mpp;
			}
			//mam skontrolovany rozsah a obsah premennych, mozem ich dalej pouzit
			//musim vsak este dat pozor na to, ci mi niekto nahodou nezadal neexistujuce id clanku, ale az ked ho budem otvarat v tej metode na otvorenie clanku
			//lebo id clankov zatial nie su kontinualne (pozn.:dorob kontinualnu inkrementaciu databazy)
			//funkcia na kontinualnu inkrementaciu by mala len spocitat pocet vsetkych clankov a nasledne
			//by mala funkcia prebehnut jednoduchym for od 1 do vsetky_clanky a teda v db budu id clankov vzdy za sebou
			
			$p=0;//nastavim si pociatok na nula
			$k=$mpp;//nastavim si koniec(mpp=max per page)
			for($h=1;$h<=$pstr;$h++){
				$a.="<a class=\"menu_item\" style=\"font-size:15px; text-decoration:none;\"; href=\"index.php?action=show_article_list&amp;from=".$p."&amp;to=".$k."\"> [".$h."] </a>";
				$p+=$mpp;
				$k+=$mpp;
				
			}
			return $a;//vratim vygenerovany retazec - linky [1][2][3]...
						
		}


		
	function check_fromto($dbname,$dbuser,$dbhost,$dbpass,$od,$do,$query_where="",$max_per_page=""){
	//na zaciatku tejto metody musim dosiahnut kontinualne stupanie id_clanku, kvoli dalsej praci s tymto predpokladom
	//pred tym musim zistit, ci vobec nejake clanky v db su	
	$mpp=$max_per_page;
	if(!isset($max_per_page))$mpp=13;
	else $mpp=$max_per_page;//ak nemam zadany volitelny paramter, nastavim si max pocet prvkov na stranku
	if($od<0 or $do<0){$od=0;$do=$mpp;}
	if(abs($do-$od)>$mpp){
				$od=0;
				$do=$mpp;
			}
	if(!isset($query_where))$query_where="select * from clanky";
	$all=count($this->send_query_to_db2($dbname,$dbuser,$dbhost,$dbpass,$query_where));//zistim pocet vsetkych clankov
			if($do>$all or $do<0)$do=$all;//priradil do do maximalny pocet uzivatelov
			if($od<0 or $do<$od){$od=0;$do=$mpp;}//ak niekto zadal do url adresy zaporne cislo, nastavim na nulu
			//dalej skontrolujem, ci vypisujem len maximalny pocet prispevkov na stranku
			$mpp=13;//max num of items per page
			
			$iba_cisla ='/[^0-9]/';
			if((preg_match($iba_cisla,$od)) or (preg_match($iba_cisla,$do))){
				$od=0;
				$do=$mpp;
			}
			if($od>=$do){
				$od=0;
				$do=$mpp;	
			}
		$po[0]=$od;
		$po[1]=$do;	
		return $po;//vratim pole s vhodnymi hodnotami od-do
		}
		
		
	
}
?>
