<?php
/* ************************************************************************** *
 *																										*
 * Core mod - lib_mod_general.php v3.1 by Slodave, 2007 - avgust 2008,			*
 * http://www.zabec.net																			*
 * -------- -------- -------- -------- -------- -------- -------- --------		*
 * 																									*
 * Datoteka vsebuje funkcije, ki se uporabljajo v različnih delih core mod		*
 * ************************************************************************** */

/* Funkcija izbriše item in vse povezane slike in datoteke
 * klicano iz: @ - ajax.php
 * @parameter: $id - označuje item ki se izbriše
 */
function izbrisi($id) {
	global $db;
	global $mod_settings;
	global $lang;
	global $path;

	//preverimo spremenljivko
	$id = intval($id);

	//custom funkcija za izbris
	if(function_exists("custom_izbris")){
		$custom_izbris = custom_izbris($id);
	}
	//če za izbris ni poskrbela custom funkcija
	if(!$custom_izbris) {

		//stara funkcija za izbris
		if($mod_settings['custom_delete']) {
			include_once($path."/custom_delete.php");
		}

		//uredimo vrstni red če obstaja
		if($mod_settings['vrstni_red']){
			vrstni_red($id, "odstrani");
		}
		//izbrišemo sliko če obstaja
		if($mod_settings['slika']) {
			izbrisi_slika($id, true, false);
		}
		//izbrišemo morebitna nestandardne slike (ki so v databazi pod drugim imenom kot slika)
		if($mod_settings['more_image_field']) {
			foreach($mod_settings['more_image_field'] AS $dodatna_slika) {
				izbrisi_slika($id, true, false, $dodatna_slika);
			}
		}

		//izbrišemo galerijo če obstaja
		if($mod_settings['galerija'])	{
			$result = $db->query("SELECT id AS id_slika FROM ".$mod_settings['galerija_tabela']." WHERE item_id = '$id'");
			while($r = $result->fetch()) {
				izbrisi_slika_galerija($id, $r['id_slika'], false);
			}
		}
		//izbrišemo povezane datoteke če obstajajo
		if($mod_settings['datoteke']) {
			$result = $db->query("SELECT id AS id_datoteka FROM ".$mod_settings['datoteke_tabela']." WHERE item_id = '$id'");
			while($r = $result->fetch()) {
				izbrisi_datoteka($id, $r['id_datoteka'], false);
			}
		}
		//izbrišemo item v morebitnih jezikovnih tabelah
		foreach($mod_settings['active_lang'] AS $value) {
			$db->query("DELETE FROM ".$mod_settings['tabela']."_".$value." WHERE item_id = '$id'");
		}

		//zapis spremembe v log zadnjih sprememb, funkcija je klicana preko lib_spremembe.php
		novaSprememba($id, $lang['log_vnos_odstranjen']);

		//izbrišemo item
		$result = $db->query("DELETE FROM ".$mod_settings['tabela']." WHERE id = '$id'");

		//izpišemo napako če je prišlo do nje
		if(!$result) {
			napaka("Napaka pri izbrisu, id: ".$clean['id'].", tabela: ".$mod_settings['tabela']);
		}
	}
}

function izbrisi_sub($id,$tabela) {
	global $db;
	global $mod_settings;
	global $lang;

	//preverimo spremenljivko
	$id = intval($id);

	foreach($mod_settings['active_lang'] AS $value) {
		$db->query("DELETE FROM ".$tabela."_".$value." WHERE item_id = '$id'");
	}
	//izbrišemo item
	$result = $db->query("DELETE FROM ".$tabela." WHERE id = '$id'");

	//izpišemo napako če je prišlo do nje
	if(!$result) {
		napaka("Napaka pri izbrisu, id: ".$id.", tabela: ".$tabela);
	}
}

/* Funkcija izbriše sliko iz določenega itema
 * klicano iz: @izbrisi - lib_mod_general.php
 * 				@ - ajax.php
 * @parameter: $id - označuje item kateremu slika se izbriše
 * @parameter: $dbizbris - definira če sliko izbrišemo iz databaze
 * @parameter: $log - definira če se izbris zapiše pod spremembe
 * @parameter: $custom - omogoča izbris slik v drugače poimenovanih poljih
 */
function izbrisi_slika($id, $dbizbris = false, $log = true, $custom = "slika") {
	
	global $mod_settings;
	global $db;
	global $ajax;
	global $lang;

	//custom funkcija za izbris slike
	if(function_exists("custom_slika_izbris")){
		$custom_slika_izbris = custom_slika_izbris($id);
	}

	//če za izbris ni poskrbela custom funkcija
	if(!$custom_slika_izbris) {
		//preverimo če je aktivna slika
		//if($mod_settings['slika']) {
			$result = $db->query("SELECT ".$custom." FROM ".$mod_settings['tabela']." WHERE id = '$id'");
			$r = $result->fetch();

			//če slika obstaja v tabeli
			if($r[$custom]) {
				//če slika obstaja na določeni lokaciji
				if(file_exists($ajax.$mod_settings['slika_path'].$r[$custom])) {
					//odstranimo morebitne dodatne fotografije, če je false pomeni da je napaka na odstrani_dodatne_slike()
					if(odstrani_dodatne_slike($r[$custom])) {
						//če zapišemo spremembo v zadnje spremembe
						if($log) {
							//zapis spremembe v log zadnjih sprememb, funkcija je klicana preko lib_spremembe.php
							novaSprememba($id, $lang['log_slika_odstranjen']);
						}
						//če izbrišemo sliko iz databaze
						if(!$dbizbris) {
							$db->query("UPDATE ".$mod_settings['tabela']." SET ".$custom." = '' WHERE id = '$id'");
						}
						//izbrišemo sliko
						unlink($ajax.$mod_settings['slika_path'].$r[$custom]);
					}
				}
			}
		//}
	}
}

/* Funkcija izbriše sliko iz galerije v določenem itemu
 * klicano iz: @izbrisi() - lib_mod_general.php
 *					@ - ajax.php
 * @parameter: $id - item iz katerega brišemo sliko
 * @parameter: $id_slika id slike za izbris
 * @parameter: $log zapišemo spremembo v zadnje spremembe
 */
function izbrisi_slika_galerija($id, $id_slika, $log = true) {
	global $mod_settings;
	global $db;
	global $lang;

	//custom funkcija za izbris slike iz galerije
	if(function_exists("custom_slika_galerija_izbris")){
		$custom_slika_galerija_izbris = custom_slika_galerija_izbris($id, $id_slika);
	}

	//če za izbris ni poskrbela custom funkcija
	if(!$custom_slika_galerija_izbris) {
		//preverimo če je aktivna galerija v modulu
		if($mod_settings['galerija']) {
			$result = $db->query("SELECT id, slika FROM ".$mod_settings['galerija_tabela']." WHERE item_id = '$id' AND id = '$id_slika'");
			$r = $result->fetch();

			//če obstaja slika v izbrani galeriji z izbranim idjem
			if($r['slika']) {
				//preverimo če slika obstaja na določeni lokaciji
				if(file_exists("../../".$mod_settings['slika_path'].$r['slika']))	{
					//odstranimo morebitne dodatne fotografije (če je false, pomeni je napaka na odstrani_dodatne_slike
					if(odstrani_dodatne_slike($r['slika'])) {

						//preverimo če je določen vrstni red slik v galeriji
						if($mod_settings['galerija_vrstni_red']) {
							//odstranimo sliko iz vrstnega reda v galeriji
							vrstni_red($r['id'], "odstrani", "galerija");
						}
						//zapišemo spremembo v zadnje spremembe
						if($log) {
							//funkcija iz lib_spremembe.php
							novaSprememba($id, $lang['log_slika_odstranjen']);
						}
						$db->query("DELETE FROM ".$mod_settings['galerija_tabela']." WHERE id = '$r[id]'");

						unlink("../../".$mod_settings['slika_path'].$r['slika']);
					}
				}
			}
		}
	}
}

/* Funkcija izbriše video iz galerije (dodan preko file_browserja)
 * klicano iz: @ - ajax.php
 * @parameter: $id predstavlja item id
 * @parameter: $id_video je id izbranega videa
 */
function izbrisi_video_galerija($id, $id_video) {
	global $mod_settings;
	global $db;
	global $lang;

	//custom funkcija za izbris videa iz galerije
	if(function_exists("custom_video_galerija_izbris")){
		$custom_video_galerija_izbris = custom_video_galerija_izbris($id);
	}
	//če za izbris ni poskrbela custom funkcija
	if(!$custom_video_galerija_izbris) {
		if($mod_settings['galerija']) {
			$result = $db->query("SELECT id, video FROM ".$mod_settings['galerija_tabela']." WHERE item_id = '$id' AND id = '$id_video'");
			$r = $result->fetch();
			if($r['video']) {
				if($mod_settings['galerija_vrstni_red']) {
					//popravimo vrstni red galerije
					vrstni_red($r['id'], "odstrani", "galerija");
				}
					//zapišemo spremembo v zadnje spremembe (funkcija iz lib_spremembe.php)
					novaSprememba($id, $lang['log_video_odstranjen']);
					$db->query("DELETE FROM ".$mod_settings['galerija_tabela']." WHERE id = '$r[id]'");
			}
		}
	}
}

/* Funkcija odstrani dodatne slike definirane v $moreimages glede na podano ime
 * klicano iz: @izbrisi_slika_galerija() - lib_mod_general.php
 *					@izbrisi_slika() - lib_mod_general.php
 * @parameter: $ime predstavlja ime slike, ki jo želimo odstraniti
 */
function odstrani_dodatne_slike($ime) {
	global $mod_settings;

	//preverimo če obstaja funkcija more_images v mod/custom.php (če obstaja predvidevamo da obstajajo dodatne slike)
	if(function_exists("more_images")){
		//kličemo funkcijo za izbris dodatnih datotek (iz mod/custom.php)
		if(function_exists("odstrani_more_images")){
			$pot = "../../".$mod_settings['slika_path'];
			odstrani_more_images($pot, $ime);
			return true;
		}
		else {
			napaka("Če so nastavljene dodatne slike (funkcija more_images v mod/custom.php) mora biti nastavljen tudi izbris le teh (funkcija odstrani_more_images() v mod/custom.php)!");
			return false;
		}
	}
}

/* Funkcija izbriše določeno datoteko določenega itema
 * klicano iz: @izbrisi() - lib_mod_general.php
 *					@ - ajax.php
 * @parameter: $id je item id
 * @parameter: $id_datoteka predstavlja id datoteke
 * @parameter: $log določa če se zapišejo spremembe
 */
function izbrisi_datoteka($id, $id_datoteka, $log = true) {
	global $mod_settings;
	global $db;
	global $ajax;
	global $lang;

	//custom funkcija za izbris datoteke
	if(function_exists("custom_izbrisi_datoteka")){
		$custom_izbrisi_datoteka = custom_izbrisi_datoteka($id, $id_datoteka);
	}
	//če za izbris ni poskrbela custom funkcija
	if(!$custom_izbrisi_datoteka) {
		if($mod_settings['datoteke']) {
			$result = $db->query("SELECT id, datoteka FROM ".$mod_settings['datoteke_tabela']." WHERE item_id = '$id' AND id = '$id_datoteka'");
			$r = $result->fetch();

			$pot = "../../".$mod_settings['datoteka_path'].$r['datoteka'];

			if($r['datoteka']) {
				if(file_exists($pot)) {
					if($log) {
						//zapišemo spremembo v zadnje spremembe
						novaSprememba($id, $lang['log_datoteka_odstranjen']);
					}
					$db->query("DELETE FROM ".$mod_settings['datoteke_tabela']." WHERE id = '$r[id]'");
					unlink($pot);
				}
			}
		}
	}

}

/* Funkcija spreminja, dodaja, odstranjuje vrstni red itema v listingu
 * klicano iz: @premakni_v_osnutek() - lib_listing.php
 * 				@izbrisi() - lib_mod_general.php
 *					@izbrisi_slika_galerija() - lib_mod_general.php
 *					@saveEdit() - lib_editor_save.php
 *					@addSlika() - lib_editor_upload.php
 *					@ - ajax.php
 * @parameter: $id je item pri katerem urejamo vrstni red
 * @parameter: $premakni določa akcijo ki jo stori z vrstnim redom itema
 * @parameter: $vrsta določa ali gre za vrstni red itema ali galerije
 */
function vrstni_red($id, $premakni, $vrsta = "item") {
	global $mod_settings;
	global $db;

	//preverimo spremenljivko (zaradi ajax.php)
	$id = intval($id);

	//gre za vrstni red galerije
	if($vrsta == "galerija") {
		$settings['tabela'] = $mod_settings['galerija_tabela'];
		$settings['vrstni_red'] = $mod_settings['galerija_vrstni_red'];
		$settings['kategorija'] = false;
		$settings['osnutek'] = false;
		$sql_item = ", item_id";
	}
	//gre za vrstni red itema
	else {
		$settings['tabela'] = $mod_settings['tabela'];
		$settings['vrstni_red'] = $mod_settings['vrstni_red'];
		$settings['kategorija'] = $mod_settings['kategorija'];
		$settings['osnutek'] = $mod_settings['osnutek'];
	}

	//preverimo če razvrščanje sploh obstaja
	if($settings['vrstni_red']) {
		//preverimo če so kategorije
		if($settings['kategorija']) {
			$sqlKatSelect = ", kategorija";
		}

		//preverimo če so osnutki
		if($settings['osnutek']) {
			$sqlosnutek = " AND osnutek = 0";
			$sqlWosnutek = " WHERE osnutek = 0";
		}
		else {
			$sqlWosnutek = " WHERE '1'='1'";
		}

		//dobimo obstoječi vrstni red
		$result = $db->query("SELECT vrstni_red".$sql_item.$sqlKatSelect." FROM ".$settings['tabela']." WHERE id = '$id'");
		$r = $result->fetch();

		//specifika vrstnega reda galerij
		if($vrsta == "galerija") {
			$sqlitem = " AND item_id = '$r[item_id]'";
		}

		//preverimo če so kategorije
		if($settings['kategorija']) {
			$sqlKatWhere = " AND kategorija = '$r[kategorija]'";
		}

		//razvrščanje glede na zahtevano akcijo
		switch($premakni) {
			case "up":
				if($r['vrstni_red'] > 0) {
					$vrstni_red = $r['vrstni_red'] - 1;
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = 0 WHERE vrstni_red = '$vrstni_red'".$sqlitem.$sqlosnutek.$sqlKatWhere);
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = $vrstni_red WHERE id = '$id'");
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = '$r[vrstni_red]' WHERE vrstni_red = 0".$sqlitem.$sqlosnutek.$sqlKatWhere);
				}
				break;
			case "top":
				if($r['vrstni_red'] > 0) {
					$vrstni_red = 1;
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = vrstni_red + 1 WHERE vrstni_red < ".$r['vrstni_red'].$sqlitem.$sqlKatWhere.$sqlosnutek);
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = $vrstni_red WHERE id = '$id'");
				}
				break;
			case "down":
				$maxresult =  $db->query("SELECT vrstni_red FROM ".$settings['tabela'].$sqlWosnutek.$sqlitem.$sqlKatWhere." ORDER BY vrstni_red DESC LIMIT 0,1");
				$maxr = $maxresult->fetch();
				if($r['vrstni_red'] < $maxr['vrstni_red']) {
					$vrstni_red = $r['vrstni_red'] + 1;
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = 0 WHERE vrstni_red = '$vrstni_red'".$sqlosnutek.$sqlitem.$sqlKatWhere);
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = $vrstni_red WHERE id = '$id'");
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = '$r[vrstni_red]' WHERE vrstni_red = 0".$sqlosnutek.$sqlitem.$sqlKatWhere);
				}
				break;
			case "bottom":
				$maxresult =  $db->query("SELECT vrstni_red FROM ".$settings['tabela'].$sqlWosnutek.$sqlitem.$sqlKatWhere." ORDER BY vrstni_red DESC LIMIT 0,1");
				$maxr = $maxresult->fetch();
				if($r['vrstni_red'] < $maxr['vrstni_red']) {
					$vrstni_red = $maxr['vrstni_red'];
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = vrstni_red - 1 WHERE vrstni_red > ".$r['vrstni_red'].$sqlitem.$sqlosnutek.$sqlKatWhere);
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = $vrstni_red WHERE id = '$id'");
				}
				break;
			case "odstrani":
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = vrstni_red - 1 WHERE vrstni_red > ".$r['vrstni_red'].$sqlitem.$sqlosnutek.$sqlKatWhere);
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = 0 WHERE id = '$id'");
				break;
			case "dodaj":
					if($r['vrstni_red'] == 0) {
						$maxresult =  $db->query("SELECT vrstni_red FROM ".$settings['tabela'].$sqlWosnutek.$sqlitem.$sqlKatWhere." ORDER BY vrstni_red DESC LIMIT 0,1");
						$maxr = $maxresult->fetch();
						$nov_vrstnired = $maxr['vrstni_red'] + 1;
						$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = '".$nov_vrstnired."' WHERE id = '$id'");
					}
				break;
			case "save_temp":
					if($r['vrstni_red'] > 0) {
						$_SESSION[$id.'_vrstni_red'] = $r['vrstni_red'];
						$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = vrstni_red - 1 WHERE vrstni_red > ".$r['vrstni_red'].$sqlosnutek.$sqlitem.$sqlKatWhere);
						$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = 0 WHERE id = '$id'");
					}
				break;
			case "resolve_temp":
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = vrstni_red + 1 WHERE vrstni_red >= ".$_SESSION[$id.'_vrstni_red'].$sqlosnutek.$sqlitem.$sqlKatWhere);
					$db->query("UPDATE ".$settings['tabela']." SET vrstni_red = '".$_SESSION[$id.'_vrstni_red']."' WHERE id = '$id'");
					unset($_SESSION[$id.'_vrstni_red']);
				break;
			default:
			break;
		}
	}
}

/* Funkcija generira language zavihek v editorju in detailnem pogledu
 * klicano iz: @ - lib_detail.php
 *					@editor:editor() - lib_editor_generate.php
 * @parameter: $lang predstavlja izbran jezik
 */
function generate_lang_zavihek($lang) {
	global $tpl;
	global $mod_settings;
	foreach($mod_settings['active_lang'] AS $value) {
		$tpl->newBlock("lang_zavihek");
		$tpl->assign("jezik",$value);
		$tpl->assign("jezik_big",strtoupper($value));
		
		if($_SESSION['sublevel_active'] == '1'){
		$tpl->assign("sublevel_active",$_SESSION['sublevel_active']);
		$tpl->assign("sublevel_stopnja",$_SESSION['back_stopnja']);
		$tpl->assign("sublevel_itemid",$_SESSION['back_itemid']);
		}else{
		$tpl->assign("sublevel_active","0");
		$tpl->assign("sublevel_stopnja","0");
		$tpl->assign("sublevel_itemid","0");			
		}
		//če je izbran jezik (definiran v spremenljivki $lang
		if($lang == $value) {
			$tpl->assign("jezik_class","editor_lang_on");
		}
		else {
			$tpl->assign("jezik_class","editor_lang_off");
		}
	}
}

/* Funkcija odstrani sessione o pravilno izpolnjenih stopnjah (klicano ob zapiranju editorja)
 * ter ostale morebitne sessione iz editorja
 * klicano iz: @ - ajax.php
 * @parameter: $editor_stopnja - je nastavitev $mod_settings['editor_stopnja']
 * @parameter: $id - je id trenutnega Itema
 */
function editor_remove_session_required($editor_stopnja, $id){
	$num = count($editor_stopnja);
	for($i = 1; $i<=$num; $i++) {
		unset($_SESSION[$id."_".$i."_"."editorok"]);
	}
	//odstranimo vse morebitne sessione nastavljene v editorju
	unset($_SESSION[$id."_".$_SESSION[$id."_"."browserpathStage"]."_"."browserpath"]);
	unset($_SESSION[$id."_"."browserpathStage"]);
	unset($_SESSION[$id."_".$_SESSION[$id."_"."datotekejezikStage"]."_"."datotekejezik"]);
	unset($_SESSION[$id."_"."datotekejezikStage"]);
	unset($_SESSION[$id."_"."customslike"]);

	unset($_SESSION[$id."_newitem"]);
	unset($_SESSION[$id."_vrstni_red"]);
	unset($_SESSION['editor_stopnja']);
}

/* Funckija, ki generira strani v listingu
 * klicano iz: @listing - lib_listing.php
 * @parameter: $stevilo_vseh_vnosov je vrednost vseh itemov določenega itema (brez osnutkov),
 * @parameter: $steviloNaStran definira uporabniška nastavitev
 * @parameter: $tpl je spremenljivka Templatov,
 * @parameter: $stran definira katero stran generiramo
 */
function strani($stevilo_vseh_vnosov, $steviloNaStran, $tpl, $stran = 1) {
	$a = 1;
	for($i = $stevilo_vseh_vnosov; $i>0; $i = $i - $steviloNaStran) {
		$tpl->newBlock("strani");
		//če je izbrana stran
		if($stran == $a) {
			//izbrana stran
			$tpl->assign("selected", "stani_izbran");

			//predhodnja stran
			if($a != 1) {
				$tpl->newBlock("strani_nazaj");
				$tpl->assign("stran", $a-1);
			}
			//naslednja stran
			if($i > $steviloNaStran) {
				$tpl->newBlock("strani_naprej");
				$tpl->assign("stran", $a+1);
			}
		}
		$tpl->gotoBlock("strani");
		$tpl->assign("stran", $a);
		$a++;
	}
}


function dodaj_element_seznam($id, $parent_id,$tabela = 'seznam_tabela') {
	global $mod_settings;
	global $db;
	global $ajax;
	global $lang;
	
	if(isset($mod_settings[$tabela])) {		
		$result = $db->query("INSERT INTO ".$mod_settings[$tabela]." (id,item_id) VALUES ('".$id."','".$parent_id."')");
	}
}

function odstrani_element_seznam($id,$tabela = 'seznam_tabela') {
	global $mod_settings;
	global $db;
	global $ajax;
	global $lang;

	if(isset($mod_settings[$tabela])) {
		
		$result_w = $db->query("DELETE FROM ".$mod_settings[$tabela]." WHERE id = '".$id."'");
	}
}

function shrani_spremembe_seznam($naslov,$vrednost,$tabela = 'seznam_tabela'){
	global $mod_settings;
	global $db;
	global $ajax;
	global $lang;

	$max = max(array_keys($naslov));
	$min = min(array_keys($naslov));
	$i=$min;
	while($i <= $max)
	{	
		if(isset($naslov[$i])){
		//ali vrednost obstaja?
		$result_w = $db->query("SELECT * FROM ".$mod_settings[$tabela]." WHERE id='".$i."'");
		$r_w = $result_w->size();
		if($r_w){
			$result_w = $db->query("UPDATE ".$mod_settings[$tabela]." SET naslov='".$naslov[$i]."',vrednost='".$vrednost[$i]."' WHERE id='".$i."'");
		}
		}
		$i++;
	}	

}

?>