<?php
/* ************************************************************************** *
 *																										*
 * Core mod - lib_editor_save.php v3.1 by Slodave, 2007 - avgust 2008,			*
 * http://www.zabec.net																			*
 * -------- -------- -------- -------- -------- -------- -------- --------		*
 * 																									*
 * Datoteka vsebuje funkcije, za skrbijo za shranjevanje v editorju				*
 * - predhodno so bile funkcije združene v lib_add.php								*
 * ************************************************************************** */

/* Funkcija je osredji element shranjevanja podatkov v editorju
 * klicano iz: @ - ajax.php
 * @parameter: $sqlclean je array z vrednosti standardnih polij
 * @parameter: $clean so preverjene spremenljivke z vrednostmi (id, trenutni jezik, objava)
 * @parameter: $mod_settings so nastavitve iz settings.php posameznega modula
 * @parameter: $tpl_jezik so $lang spremenljivke iz language.php
 */
function saveEdit($sqlclean, $clean, $mod_settings, $tpl_jezik) {
	global $db;

	//template jezika (za popravit)
	$lang = $tpl_jezik;

	//prenos spremenljivk (za popravit)
	$id = $clean['id'];
	$trenutni_jezik = $clean['lang'];
	$objava = $clean['objava'];

	//nastavimo prazne spremenljivke
	$field = "";
	$values = "";
	$update = "";
	$lfield = "";
	$lvalues = "";
	$lupdate = "";

	//če je objava
	if($objava){
		//preverimo če je nov vnos
		if($_SESSION[$clean['id'].'_newitem']) {
			//zapišemo novo spremembo (funkcija iz lib_spremembe.php)
			novaSprememba($clean['id'], $lang['add_novaobjava']);
			//odstranimo session, ki določa da je nov vnos
			unset($_SESSION[$clean['id'].'_newitem']);
			//če gre za razvrščanje po zadnjem datumu (definiramo dodatek k SQLju
			if($mod_settings['order_date']) {
				$fchange = ", zadnja_sprememba, zadnji_vnos";
				$schange = ",NOW(),NOW()";
				$uchange = ", zadnja_sprememba = NOW(), zadnji_vnos = NOW()";
			}
		}
		//gre za urejanje starega vnosa
		else {
			//zapišemo novo spremembo (funkcija iz lib_spremembe.php)
			novaSprememba($clean['id'], $lang['add_popravljenaobjava']);
			if($mod_settings['order_date']) {
				$fchange = ", zadnja_sprememba";
				$schange = ",NOW()";
				$uchange = ", zadnja_sprememba = NOW()";
			}
		}
	}

	$result = $db->query("SELECT * FROM ".$mod_settings['tabela']." WHERE id = '$clean[id]'");
	$r = $result->fetch();
	if($r['osnutek'] == "0") {
		$objava = 1;
	}

	//generiramo SQL vnosov določenih preko $sqlclean
	if($sqlclean) {
		foreach($sqlclean AS $key => $value) {
			//preverjanje če gre za jezik
			$exist = strpos($key, $trenutni_jezik);
			$vejca = ", ";
			//polje ni jezikovno pogojeno
			if($exist === false) {
				$update .= $key." = '".$value."'".$vejca;
				$field .= $key.$vejca;
				$values .= "'".$value."'".$vejca;

				//specifika zaradi kategorije in vrstnega reda
				if($key == "kategorija" AND $mod_settings['vrstni_red']) {
					//gre za spremembo kategorije
					  if($r['kategorija'] != $value AND $objava) {
						$vrstni_reset = true;
						vrstni_red($clean['id'], "odstrani");
						unset($_SESSION[$clean['id'].'_vrstni_red']);
					}
				}
			}
			//polje je jezikovno pogojeno
			else {
				$key = str_replace($trenutni_jezik,"",$key);
				$language = true;
				$lupdate .= $key." = '".$value."'".$vejca;
				$lfield .= $key.$vejca;
				$lvalues .= "'".$value."'".$vejca;
			}
		}
	}

	//gre za objavo
	if($objava)	{
		//generiramo vrstni red če je ta nastavljen
		if($mod_settings['vrstni_red']) {
			//še vedno obstaja star vrstni red (ni zamenjana kategorija)
			if(!$vrstni_reset) {
				//dodamo star vrstni red iz sessiona
				if(isset($_SESSION[$clean['id'].'_vrstni_red'])) {
					vrstni_red($clean['id'], "resolve_temp");
				}
				//dodamo nov vrstni red
				else {
					vrstni_red($clean['id'], "dodaj");
				}
			}
		}
		$osnutek = 0;
	}
	//gre za spreminjanje posamezne stopnje (ni objava)
	else
	{
		//shranimo začasen vrstni red v session, će že ni nastavljen
		if(!isset($_SESSION[$clean['id'].'_vrstni_red']) AND $mod_settings['vrstni_red']) {
			vrstni_red($clean['id'], "save_temp");
		}
		$osnutek = 1;
	}

	//dodatek k sqlju če je nastavljen osnutek
	if($mod_settings['osnutek']) {
		$update .= "osnutek = '$osnutek'";
		$field .= "osnutek";
		$values .= "'1'";
	}
	//osnutek ni nastavljen
	else {
		$update = substr($update, 0, -2);
		$field = substr($field, 0, -2);
		$values = substr($values, 0, -2);
	}

	//preverimo če id Itema obstaja v bazi
 	$result = $db->query("SELECT id FROM ".$mod_settings['tabela']." WHERE id = '$clean[id]'");

	//id obstaja -> update
	if($result->exist())	{
		if($update) {
			$db->query("UPDATE ".$mod_settings['tabela']." SET ".$update.$uchange." WHERE id = '$clean[id]' ");
			$usedid = $clean['id'];
		}
	}
	//id ne obstaja -> insert
	else {
		$result = $db->query("INSERT INTO ".$mod_settings['tabela']." (".$field.$fchange.") VALUES (".$values.$schange.")");
		$usedid = $result->insertID();
		//nastavimo session, ki definira da gre za nov vnos
		$_SESSION[$usedid.'_newitem'] = true;
	}

	//če ni bil nastavljen $useid (ni preverjeno zakaj se to zgodi)
	if(!$usedid) {
		$usedid = $clean['id'];
	}
	
	//vnesemo jezikovna polja
	if($language) {
		$lupdate .= "item_id = '$usedid'";
		$lfield .= "item_id";
		$lvalues .= "'$usedid'";
		$trenutni_jezik = str_replace("_","",$trenutni_jezik);
		$lang_tabela = $mod_settings['tabela']."_".$trenutni_jezik;
		//preverimo če id obstaja
		$result = $db->query("SELECT item_id FROM ".$lang_tabela." WHERE item_id = '$usedid'");

		//id obstaja -> update
		if($result->exist()) {
			$db->query("UPDATE ".$lang_tabela." SET ".$lupdate." WHERE item_id = '$usedid' ");
		}
		//id ne obstaja -> insert
		else {
			$result = $db->query("INSERT INTO ".$lang_tabela." (".$lfield.") VALUES (".$lvalues.")");
		}

	}


	//če so izpolnjeni vsi pogoji za dodajanje novega vrstnega reda
	if($vrstni_reset AND $objava AND $mod_settings['vrstni_red']) {
		vrstni_red($usedid, "dodaj");
	}
	//vrnemo id spremenjenega itema
	return $usedid;
}

/* Funkcija generira sessione na podlagi katerih se nato preverja če so vsa zahtevana polja izpolnjena
 * preverjanje je samo ClientSide, zato se ga da brez težav obvozit
 * klicano iz: @ - ajax.php
 * @parameter: $required - je katero izmed polji v sopnji zahtevano
 * @parameter: $id - je id trenutnega Itema
 */
function checkRequired($required, $id) {
	if($_SESSION['editor_stopnja']) {
		if($required == "ok") {
			$_SESSION[$id."_".$_SESSION['editor_stopnja']."_"."editorok"] = "ok";
		}
		else {
			$_SESSION[$id."_".$_SESSION['editor_stopnja']."_"."editorok"] = false;
		}
	}
}

/* Funkcija shrani podatke, ki so podani zraven galerije v tabelo $mod_settings['galerija_tabela']
 * klicano iz: @ - ajax.php
 * @parameter: $id - je id trenutnega Itema
 * @parameter: $galerija_field - je array z imeni poslanih spremenljivk
 */
function saveGalerijaField($id, $galerija_field) {
	global $db;
	global $mod_settings;
	//custom funkcija za shranjevanje polj galerije
	if(function_exists("custom_saveGalerijaField")){
		$custom_saveGalerijaField = custom_saveGalerijaField($id, $galerija_field);
	}
	//če za shranjevanje ni poskrbela custom funkcija, generiramo standardno shranjevanje
	if(!$custom_saveGalerijaField){
		//generiramo polja za update
		$result = $db->query("SELECT * FROM ".$mod_settings['galerija_tabela']." WHERE item_id = '$id'");
		while($r = $result->fetch()) {
			$update = "";
			foreach($galerija_field AS $value) {
				//preverimo spremenljivko
				$clean[$value] = inputXSScheck($_POST[$value."_".$r['id']]);
				//generiramo SQL, če je bilo polje spremenjeno
				if($clean[$value] != "" AND $clean[$value] != $r[$value]) {
					$update .= $value." = '".$clean[$value]."', ";
				}
			}
			//popravimo, če je kakšno polje spremenjeno
			if($update) {
				$update = substr($update, 0, -2);
				$db->query("UPDATE ".$mod_settings['galerija_tabela']." SET ".$update." WHERE id = '$r[id]'");
			}
		}
	}
}

/* Funkcija shrani podatke, ki so podani zraven datotek v tabelo $mod_settings['galerija_datoteke']
 * klicano iz: @ - ajax.php
 * @parameter: $id - je id trenutnega Itema
 * @parameter: $galerija_field - je array z imeni poslanih spremenljivk
 */
function saveDatotekaField($id, $datoteka_field) {
	global $db;
	global $mod_settings;
	//custom funkcija za shranjevanje polj galerije
	if(function_exists("custom_saveDatotekaField")){
		$custom_saveDatotekaField = custom_saveDatotekaField($id, $datoteka_field);
	}
	//če za shranjevanje ni poskrbela custom funkcija, generiramo standardno shranjevanje
	if(!$custom_saveDatotekaField){
		//generiramo polja za update
		$result = $db->query("SELECT * FROM ".$mod_settings['datoteke_tabela']." WHERE item_id = '$id'");
		while($r = $result->fetch()) {
			$update = "";
			foreach($datoteka_field AS $value) {
				//preverimo spremenljivko
				$clean[$value] = inputXSScheck($_POST[$value."_".$r['id']]);
				//generiramo SQL, če je bilo polje spremenjeno
				if($clean[$value] != "" AND $clean[$value] != $r[$value]) {
					$update .= $value." = '".$clean[$value]."', ";
				}
			}
			//popravimo, če je kakšno polje spremenjeno
			if($update) {
				$update = substr($update, 0, -2);
				$db->query("UPDATE ".$mod_settings['datoteke_tabela']." SET ".$update." WHERE id = '$r[id]'");
			}
		}
	}
}
 ?>