<?php
/* ************************************************************************** *
 *																										*
 * Core mod - lib_listing.php v3.1 by Slodave, 2007 - avgust 2008,				*
 * http://www.zabec.net																			*
 * -------- -------- -------- -------- -------- -------- -------- --------		*
 * 																									*
 * Datoteka skrbi za listing itemov, tako preko ajaxa kot tudi standardno		*
 * ************************************************************************** */

/* Funkcije, ki se uporabljajo v listingu													*/
/* ************************************************************************** */

	/* Funkcija premakne item iz listinga v osnutke
	 * klicano iz: @ - ajax.php
	 * $id označuje item ki se premakne
	 */
	function premakni_v_osnutek($id)	{
		global $db;
		global $mod_settings;

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

		//preverimo če sploh so osnutki
		if($mod_settings['osnutek']) {
			/* uredimo vrstni red če obstaja */
			if($mod_settings['vrstni_red']) {
				vrstni_red($id, "odstrani");
			}
			/* premaknemo item z določenem idjem v osnutke */
			$result = $db->query("UPDATE ".$mod_settings['tabela']." SET osnutek = 1 WHERE id = '$id'");

			/* logiramo in izpišemo error če je prišlo do napake */
			if(!$result) {
				napaka("Napaka pri premikanju v osnutek, id: ".$clean['id'].", tabela: ".$mod_settings['tabela']);
			}
		}
	}

	/* Funkcija generira vsebino za prikaz v listingu
	 * klicano iz: @listing  - lib_listing.php
	 *					@iskanje - lib_listing.php
	 * $result je array z SQL rezultatom, $listing_db_polja so $mod_settings['listing_db_polja'] v listingu iz settings.php
	 */
	function generateViewListing($result, $listing_db_polja) {
		global $tpl;
		global $slika;
		global $mod_settings;
		global $ajax;
		global $db;

		$a = 0;
		while($r = $result->fetch()) {
			//preverimo če so v uporabi kategorije
			if($mod_settings['kategorija']) {
				//če ne gre za multinivojske kategorije
				if($r['kat_parent'] == 0) {
					$prikaz_kategorija = $r['kategorija'];
					$puscica = false;
				}
				//gre za multinivojske kategorije
				else {
					$kresult = $db->query("SELECT ime,parent FROM ".$mod_settings['kat_tabela']." WHERE id = '$r[kat_parent]'");
					$kr = $kresult->fetch();
					if($kr['parent'] != 0){
						$kresult2 = $db->query("SELECT ime,parent FROM ".$mod_settings['kat_tabela']." WHERE id = '$kr[parent]'");
						$kr2 = $kresult2->fetch();
						$prikaz_kategorija = $kr2['ime']." > ".$kr['ime']." > ".$r['kategorija'];
					}else{
						$prikaz_kategorija = $kr['ime']." > ".$r['kategorija'];
					}
					$puscica = true;
				}

				//generiramo kategorijo po potrebi
				if($prikaz_kategorija != $trenutna_kategorija) {
					$tpl->newBlock("kategorija");
					$tpl->assign("kategorija", $prikaz_kategorija);
					$trenutna_kategorija = $prikaz_kategorija;
				}
			}
/*
			$tpl->newBlock("zapis");
			$tpl->assign("id", $r['id']);

			//dobimo zadnjo spremembo za posamezen id, funkcija getLastSprememba je klicana iz lib_spremembe.php
			$sprememba = getLastSprememba($r['id']);
			$tpl->assign("last_change_user", $sprememba['uporabnik']);
			$tpl->assign("last_change", $sprememba['cas']);

			//preverimo če je v uporabi vrstni red
			if($mod_settings['vrstni_red']) {
				$tpl->newBlock("vrstni_red");
				$tpl->assign("id", $r['id']);
				$tpl->gotoBlock("zapis");
			}

			//prikaz slike v listingu
			if($r['slika'] != "") {
				$tpl->assign("slika", $mod_settings['slika_path'].$r['slika']);
			}
			else {
				$tpl->assign("slika_display", "none");
			}*/


			//custom funkcija za listing
			if(function_exists("custom_listing")){
				$custom_listing = custom_listing($r, $tpl,$listing_db_polja,$db,$mod_settings);
				if($custom_listing == 2){$a--;}
			}

			//če za listing ni poskrbela custom funkcija, generiramo standardni listing
			if(!$custom_listing){
				
				$tpl->newBlock("zapis");
				$tpl->assign("id", $r['id']);
	
				//dobimo zadnjo spremembo za posamezen id, funkcija getLastSprememba je klicana iz lib_spremembe.php
				$sprememba = getLastSprememba($r['id']);
				$tpl->assign("last_change_user", $sprememba['uporabnik']);
				$tpl->assign("last_change", $sprememba['cas']);
	
				//preverimo če je v uporabi vrstni red
				if($mod_settings['vrstni_red']) {
					$tpl->newBlock("vrstni_red");
					$tpl->assign("id", $r['id']);
					$tpl->gotoBlock("zapis");
				}
	
				//prikaz slike v listingu
				if($r['slika'] != "") {
					$tpl->assign("slika", $mod_settings['slika_path'].$r['slika']);
				}
				else {
					$tpl->assign("slika_display", "none");
				}
				
				//custom listing na star način, zaenkrat ohranjeno zaradi kompatibilnosti
				if($mod_settings['custom_listing']) {
					include($ajax."mod/".$_SESSION['modul']."/".$_SESSION['act']."/custom_listing.php");
				}
				else {
					//odstranimo jezikovne posebnosti, funkcija clearLang je klicana iz lib_simple_template.php
					$listing_db_polja[0] = clearLang($listing_db_polja[0]);
					//prvo polje iz seznama
					if(!$r[$listing_db_polja[0]]) {
						$tpl->assign("first_field", $lang['view_nipodatka']);
					}
					else {
						$tpl->assign("first_field", $r[$listing_db_polja[0]]);
					}

					//velikost arraya $contentField (definirana polja $mod_settings['listing_db_polja'] v settings)
					$numContent = count($listing_db_polja);

					//generiramo vsebino za template (polja brez prvega)
					for($i = 1; $i<$numContent; $i++) {
						//odstranimo jezikovne posebnosti, funkcija clearLang je klicana iz lib_simple_template.php
						$listing_db_polja[$i] = clearLang($listing_db_polja[$i]);

						$tpl->newBlock("content_field");
						$tpl->assign("field", $r[$listing_db_polja[$i]]);
						//zadnje polje
						if($i == $numContent) {
							$tpl->assign("listing_zadnji", " class='listing_zadnji'");
						}
					}
				}
			}
			$a++;
		}
		//vrnemo število itemov
		return $a;
	}

/* ************************************************************************** */



/* Deli listinga, ki se kreirajo le ko ni klicano preko ajaxa						*/
/* ************************************************************************** */
	if(!$ajax) {
		//vključimo potrebne template
		$tpl->assignInclude("main_content", $ajax."templates/".$settings['template']."/moduli/view.tpl");
		$tpl->prepare();

		//če gre za nastavitve generiramo naslov iz podatkov
		if($_SESSION['modul'] == "nastavitve") {
			$modul_naslov = $lang['nast_naslov'];
			$action_naslov = ucfirst($_SESSION['act']);
		}
		//gre za standarden modul, naslove pridobimo iz baze
		else {
			$result = $db->query("SELECT modul,id FROM core_modules WHERE modul_link='" . $clean['page'] . "'");
			$r = $result->fetch();
			$modul_naslov = $r['modul'];

			if(!$active_osnutek) {
				$result = $db->query("SELECT text FROM core_modules_menu WHERE modul_id='" . $r['id'] . "' AND link='" . $clean['act'] . "'");
				$r = $result->fetch();
				$action_naslov = $r['text'];
			}
			else {
				$action_naslov = $lang['osnutki_osnutek'];
			}
		}
		$tpl->assign("modul",$modul_naslov);
		$tpl->assign("modul_action",$action_naslov);

		//aktiviramo razvrščanje
		if($mod_settings['razvrscanje']) {
			$tpl->newBlock("razvrscanje");
			//aktiviramo razvrsti kot na spletni strani (če je vrstni red)
			if($mod_settings['vrstni_red'] AND !$active_osnutek) {
				$tpl->newBlock("razvrsti_vrstni_red");
			}
		}
		//aktiviramo nove vnose
		if(!$mod_settings['disable_new']) {
			$tpl->newBlock("enabled_new");
		}

		//če so omogočeni osnutki generiramo gumb za premakni v osnutke
		if($mod_settings['osnutek']) {
			//dobimo stevilo osnutkov, funkcija je klicana iz sys/lib_simple_template.php
			$osnutki = steviloOsnutkov($mod_settings['tabela']);
			$tpl->assignGlobal("stevilo_osnutkov", $osnutki);

			//preverimo če gre za standarden pogled ali osnutke ($active_osnutek se definira v settings_append.php)
			//$osn_vsi_vnosi se uporabi v SQLju, za omejitev pri iskanju števila vseh vnosov
			if($active_osnutek) {
				$osn_vsi_vnosi = " WHERE osnutek = 1";
			}
			else {
				$tpl->newBlock("osnutek_premakni");
				$osn_vsi_vnosi = " WHERE osnutek = 0";
			}
		}

		//aktiviramo iskalnik
		if($mod_settings['iskalnik']) {
			$tpl->newBlock("iskalnik");
		}

		//generiramo naslovna polja
		foreach($mod_settings['listing_show_polja'] AS $field) {
			$tpl->newBlock("naslovno_polje");
			$tpl->assign("polje", $field);
		}

		//dobimo število vseh vnosov iz databaze, če so osnutki dobimo samo število vnosov brez osnutkov
		$result = $db->query("SELECT id FROM ".$mod_settings['tabela'].$osn_vsi_vnosi);
		$stevilo_vseh_vnosov = $result->size();
		$tpl->gotoBlock("_ROOT");
		$tpl->assign("stevilo_vseh_vnosov", $stevilo_vseh_vnosov);

		//napis števila vseh vnosov (glede na to ali je osnutek ali normalni listing
		if($active_osnutek) {
			$tpl->assign("napis_vnosi", $lang['osnutki_stosnutkov']);
		}
		else {
			$tpl->assign("napis_vnosi", $lang['view_stvnosov']);
		}

		//dobimo čas zadnjega vnosa, funkcija getGlobalSprememba(); je klicana iz sys/lib_spremembe.php
		$sprememba = getGlobalSprememba();

		$tpl->assign("global_last_change", $sprememba['cas']);
		$tpl->assign("global_last_change_user", $sprememba['uporabnik']);

		$tpl->gotoBlock("_ROOT");
		$tpl->assign("modpath", "sys/modul_lib");
	}
/* ************************************************************************** */

/* Osnovni listing, klican tako preko ajaxa kot tudi standardno					*/
/* ************************************************************************** */
	if(!$ajax OR $_POST['action'] == "listing") {

		//dobimo čisto spremenljivko za več strani
		$clean['stran'] = intval($_POST['stran']);

		//dodatek k SQLju, če so osnutki
		if($mod_settings['osnutek']) {
			//preverimo če gre za standarden pogled ali osnutke ($active_osnutek se definira v settings_append.php)
			if($active_osnutek) {
				$sql_osnutek = " WHERE osnutek = 1";
				$sql_osnutek_view = " WHERE osnutek = 1";
			}
			else {
				
				if($mod_settings['tabela'] == "modul_izdelki"){
					if($mod_settings['kategorija']){
						$sql_osnutek = " WHERE p.osnutek = 0";
						$sql_osnutek_view = " WHERE osnutek = 0";
					}else{
						$sql_osnutek = " WHERE osnutek = 0";
						$sql_osnutek_view = " WHERE osnutek = 0";
					}
				}else{
					if($mod_settings['kategorija']){
						$sql_osnutek = " WHERE p.osnutek = 0";
						$sql_osnutek_view = " WHERE osnutek = 0";
					}else{
						$sql_osnutek = " WHERE osnutek = 0";
						$sql_osnutek_view = " WHERE osnutek = 0";
					}
				}
			}
		}

		//dodakek k SQLju če je slika
		if($mod_settings['slika'])	{
			$slika = "p.slika, ";
		}
		else {
			$slika = "";
		}

		//če zadeva ni klicana preko ajaxa
		if(!$ajax) {
			$tpl->assignInclude("view_vsebina", $ajax."templates/".$settings['template']."/moduli/view_vsebina.tpl");
			$tpl->prepare();

			//generiramo offset
			$offset = $clean['stran'] * $user_settings['num_results'];
		}
		//zadeva je klicana preko ajaxa
		else {
			$tpl = new TemplatePower($ajax."templates/".$settings['template']."/moduli/view_vsebina.tpl");
			$tpl->prepare();
			$tpl->assignGlobal("template_dir", "templates/".$settings['template']);

			//generiramo jezikovne spremenljivke
			require('../lib_language.php');

			//generiramo offset
			if($clean['stran'] > 0) {
				$offset = ($clean['stran']-1) * $user_settings['num_results'];
			}
			else {
				$offset = 0;
			}
		}

		//razvrščanje itemov
		if($mod_settings['razvrscanje']) {
			switch($_POST['order']) {
				case "abc":
					$order = $mod_settings['listing_db_polja'][0]." ASC";
					break;
				case "last":
					$order = "p.zadnja_sprememba DESC";
					break;
				case "lnew":
					$order = "p.zadnji_vnos DESC";
					break;
				case "site":
					if($mod_settings['vrstni_red']) {
						$order = "p.vrstni_red ASC";
					}
					else {
						$order = $mod_settings['listing_db_polja'][0];
					}
					break;
				default:
					if($mod_settings['vrstni_red'] AND !$active_osnutek) {
						$order = "p.vrstni_red ASC";
					}
					else {
						$order = $mod_settings['listing_db_polja'][0];
					}
					break;
			}
		}
		//ni razvrščanja, razvrstimo po prvem polju
		else {
			$order = $mod_settings['listing_db_polja'][0];
		}

		//generiramo potrebni del sqlja
		$vsebinaSql = "";
		foreach($mod_settings['listing_db_polja'] AS $field){
			//če ne gre za jezikovna polja je iz osnovne tabele
			if(!strpos($field, ".")) {
				$append = "p.";
			}
			else {
				$append = "";
			}
			$vsebinaSql .= $append.$field.", ";
		}

		//generiramo joine za jezik
		if($mod_settings['active_lang']){
			foreach($mod_settings['active_lang'] AS $jezik) {
				$join_jezik .= " LEFT JOIN ".$mod_settings['tabela']."_".$jezik." AS ".$jezik." ON p.id = ".$jezik.".item_id";
			}
		}
		//preverimo če so kategorije in ni aktiven osnutek
		if($mod_settings['kategorija'] AND !$active_osnutek) {
			//preverimo če gre ali ne gre za multilevelske kategorije
			if($mod_settings['no_multi_kategorija']) {
				$Sparent = "";
				$Oparent = "";
			}
			//gre za multilevelske kategorije
			else {
				$Sparent =", t.parent AS kat_parent";
				$Oparent = " t.parent,";
			}

			//celoten sql prilagojen glede na situacijo
			$sql = "SELECT p.id, ".$slika.$vsebinaSql." t.ime AS kategorija, t.id AS kat_id ".$Sparent." FROM ".$mod_settings['tabela']." AS p LEFT JOIN ".$mod_settings['kat_tabela']." AS t ON p.kategorija = t.id".$join_jezik.$sql_osnutek." ORDER BY ".$Oparent." t.ime ASC, ".$order." LIMIT ".$offset.",".$user_settings['num_results'];
		}
		//ni kategorij
		else {
			//celoten sql prilagojen glede na situacijo
			$sql = "SELECT ".$slika.$vsebinaSql." p.id FROM ".$mod_settings['tabela']." AS p ".$join_jezik.$sql_osnutek." ORDER BY ".$order." LIMIT ".$offset.",".$user_settings['num_results'];

			//generiramo navidezno prazno kategorijo
			$tpl->newBlock("kategorija");
		}
		//generiramo prikaz preko funkcije generateViewListing
		$num = generateViewListing($db->query($sql), $mod_settings['listing_db_polja']);

		//če ni zadetkov prikažemo obvestilo, da ni vnosov
		if($num == 0) {
			if($mod_settings['kategorija']) {
				//navidezna kategorija
				$tpl->newBlock("kategorija");
			}
			$tpl->newBlock("ni_vnosov");
			$tpl->assign("colspan", 5+count($mod_settings['listing_show_polja']));
			$tpl->assign("napis", $lang['pregled_nivnosov']);
		}

		//če zadeva ni klicana preko ajaxa
		if(!$ajax) {
			$tpl->assignInclude("view_pages", $ajax."templates/".$settings['template']."/moduli/view_pages.tpl");
			$tpl->prepare();

			//generiramo strani listinga, funkcija klicana iz lib_mod_general.php
			strani($stevilo_vseh_vnosov, $user_settings['num_results'], $tpl);
		}
		//zadeva je klicana preko ajaxa
		else
		{
			//dobimo število vseh vnosov iz databaze, če so osnutki dobimo samo število vnosov brez osnutkov
			$result = $db->query("SELECT id FROM ".$mod_settings['tabela'].$sql_osnutek_view);
			$stevilo_vseh_vnosov = $result->size();

			$ptpl = new TemplatePower($ajax."templates/".$settings['template']."/moduli/view_pages.tpl");
			$ptpl->prepare();
			$ptpl->assignGlobal("template_dir", "templates/".$settings['template']);

			//generiramo strani listinga, funkcija klicana iz lib_mod_general.php
			strani($stevilo_vseh_vnosov, $user_settings['num_results'], $ptpl, $clean['stran']);

			//spremenljivke za output
			$listing = $tpl->getOutputContent();
			$pages = $ptpl->getOutputContent();

			//dobimo čas zadnjega vnosa, funkcija getGlobalSprememba(); je klicana iz sys/lib_spremembe.php
			$sprememba = getGlobalSprememba();
			$zadnja_sprememba = $sprememba['cas']." ".$sprememba['uporabnik'];

			//dobimo število osnutkov
			if($mod_settings['osnutek']) {
				//dobimo stevilo osnutkov, funkcija je klicana iz sys/lib_simple_template.php
				$osnutek = steviloOsnutkov($mod_settings['tabela']);
			}

			//generiramo XML za output preko ajaxa
			header('Content-Type: text/xml; charset=utf-8');
		   echo "<?xml version='1.0' encoding='UTF-8'?>";
			echo "<list>";
			echo "<listing><![CDATA[$listing]]></listing>";
			echo "<pages><![CDATA[$pages]]></pages>";
			echo "<st_vnosov><![CDATA[$stevilo_vseh_vnosov]]></st_vnosov>";
			echo "<zadnja_sprememba><![CDATA[$zadnja_sprememba]]></zadnja_sprememba>";
			echo "<osnutek><![CDATA[$osnutek]]></osnutek>";
			echo "</list>";
		}
	}
/* ************************************************************************** */

/* Iskanje po listingu, klicano samo iz ajaxa											*/
/* ************************************************************************** */
	if($_POST['action'] == "isci")	{
		//preverimo spremenljivke
		$clean['iskano_geslo'] = inputXSScheck($_POST['iskano_geslo']);

		//pri izkanju odstranimo morebitne kategorije
		$mod_settings['kategorija'] = false;

		//pripravimo template
		$tpl = new TemplatePower($ajax."templates/".$settings['template']."/moduli/view_vsebina.tpl");
		$tpl->prepare();
		$tpl->assignGlobal("template_dir", "templates/".$settings['template']);

		//generiramo jezikovne spremenljivke
		require('../lib_language.php');

		//dodatek k SQLju če so osnutki
		if($mod_settings['osnutek']) {
			//preverimo če gre za standarden pogled ali osnutke ($active_osnutek se definira v settings_append.php)
			if($active_osnutek) {
				$sql_osnutek = " AND osnutek = 1";
			}
			else {
				$sql_osnutek = " AND osnutek = 0";
			}
		}

		//dodakek k SQLju če je slika
		if($mod_settings['slika'])	{
			$slika = "slika, ";
		}
		else {
			$slika = "";
		}

		//generiramo potrebni del sqlja
		$vsebinaSql = "";
		$i = 0;
		foreach($mod_settings['listing_db_polja'] AS $field) {
			$vsebinaSql .= $field.", ";
			//prvo polje
			if($i == 0) {
				$searchSql = $field." LIKE '%".$clean['iskano_geslo']."%'";
			}
			//ostala polja
			else {
				$searchSql .= " OR ".$field." LIKE '%".$clean['iskano_geslo']."%'";
			}
			$i++;
		}

		//generiramo joine za jezik
		if($mod_settings['active_lang']) {
			foreach($mod_settings['active_lang'] AS $jezik) {
				$join_jezik .= " LEFT JOIN ".$mod_settings['tabela']."_".$jezik." AS ".$jezik." ON p.id = ".$jezik.".item_id";
			}
		}

		//celoten sql prilagojen glede na situacijo
		$sql = "SELECT ".$slika.$vsebinaSql." p.id FROM ".$mod_settings['tabela']." AS p".$join_jezik." WHERE (".$searchSql.") ".$sql_osnutek;

		//definiramo novo navidezno kategorijo za zadetke
		$tpl->newBlock("kategorija");
		$tpl->assign("kategorija", $lang['view_iskaliste'] . ": ".$clean['iskano_geslo']);

		$tpl->newBlock("iskalnik_nazaj");

		//generiramo prikaz preko funkcije generateViewListing
		$num = generateViewListing($db->query($sql), $mod_settings['listing_db_polja']);

		//prikažemo ni zadedkov, če je število najdenih zadetkov nič
		if($num == 0) {
			$tpl->newBlock("ni_vnosov");
			$tpl->assign("colspan", 5+count($mod_settings['listing_show_polja']));
			$tpl->assign("napis", $lang['view_iskanje_nizadetkov']);
		}
		//izpis vsebine v brskalnik
		$tpl->printToScreen();
	}
/* ************************************************************************** */


?>