<?php
/**
* File RPC per le chiamate AJAX della scheda. 
* Questo file viene chiamato da funzioni javascript per eseguire le normali operazioni
* sulla tabella, come inserimento, modifica, cancellazione e selezione dei record.
* Se esiste una chimata post viene incluso il file {@link func.rpc_query.php}
* con le funzioni di interazione con il database
* 
* @package VFront
* @subpackage RPC
* @author Mario Marcello Verona <marcelloverona@gmail.com>
* @copyright 2007-2010 M.Marcello Verona
* @version 0.96 $Id: rpc.php 945 2011-04-23 22:16:37Z marciuz $
* @license http://www.gnu.org/licenses/gpl.html GNU Public License
*/


require("./inc/conn.php");
require("./inc/func.comuni.php");
require("./inc/func.frontend.php");
require("./inc/func.browser_detection.php");


proteggi(1);

$browser = browser_detection('full');
$info_browser=substr($browser[0]." ".$browser[1]." ".$browser[4]." ".$browser[5],0,20);
$info_browser=$vmsql->escape($info_browser);

$_GET['action']= preg_replace("|[^0-9a-z_-]+|i","",$_GET['action']);


if(count($_POST)>0){

	//	$fp=fopen("test.txt","w");

	require_once("./inc/func.rpc_query.php");


	
	// UPDATE--------------------------------
	
	if($_GET['post']=='update'){

		// Prepara l'SQL
		$sql_update = rpc_query_update($_POST['dati'],$_POST['pk'],$_GET['action']);

		
		// INSERISCO IL LOG E PRENDO L'ID
		$last_id_log=rpc_log('update',$_GET['action'],$_SESSION['user']['uid'],$_SESSION['gid'],$_POST['pk'],true,'',$sql_update,$info_browser); 
		
		
		// Esegui la modifica
		$q_update=$vmsql->query($sql_update);
		
		// se OK
		if($vmsql->affected_rows($q_update)==1){
			
			echo 1;
		}
		// se KO cancella la riga di log
		else{
			
			$vmreg->query("DELETE FROM {$db1['frontend']}{$db1['sep']}log WHERE id_log=".intval($last_id_log));
			
			echo 0;
		}

	}
	
	
	
	// INSERT--------------------------------
	
	else if($_GET['post']=='new'){
		$sql_insert= rpc_query_insert($_POST['dati'],$_GET['action']);
		
		$result=$vmsql->query_try($sql_insert,false,true);
				
		// manda l'id appena inserito
		if($result==1){
			
			$PK_tab = prendi_PK($_GET['action']);
			
			if(is_autoincrement($_GET['action'],$PK_tab)){
				$last_id= $vmsql->insert_id($_GET['action'], $PK_tab);
				
			}
			else{
				$last_id=$_POST['dati'][$PK_tab];
			}
			
			
			rpc_log('insert',$_GET['action'],$_SESSION['user']['uid'],$_SESSION['gid'],$last_id,true,'',$sql_insert,$info_browser);
			
			echo $last_id;
		}
		else{
			echo "Err@".$result;
		}
	}
	
	
	
	// DELETE--------------------------------
	
	else if($_GET['post']=='delete'){
		$sql_delete = rpc_query_delete($_POST['pk'],$_GET['action']);
		
		rpc_log('delete',$_GET['action'],$_SESSION['user']['uid'],$_SESSION['gid'],$_POST['pk'],true,'','',$info_browser);
		
		$result=$vmsql->query_try($sql_delete,false,true);
		
		if($result){
			
			// eliminazione link e allegati se ci sono
			rpc_delete_attach($_GET['action'],implode("",$_POST['pk']));
			rpc_delete_link($_GET['action'],implode("",$_POST['pk']));
			
		}
		
		echo $result;
	}
	
	
	
	
	// SEARCH--------------------------------
	
	else if($_GET['post']=='cerca'){
		$risultati_ricerca = rpc_query_search($_POST['dati'],$_GET['action']);

		echo (is_array($risultati_ricerca)) ? implode("|",$risultati_ricerca) : "";
	}

	
	
	
	
	// DUPLICA --------------------------------
		
	else if($_GET['post']=='duplica'){
		$risultati_duplicazione = rpc_query_insert_duplicato($_POST['pk'],$_GET['action'],$_GET['oid_sub'],$_GET['da'],$_GET['dl']);
		
		$last_id= $vmsql->insert_id($_GET['action'], prendi_PK($_GET['action']));
		
		list($campo_id,$valore_id)=each($_POST['pk']);
		
		rpc_log('duplicazione',$_GET['action'],$_SESSION['user']['uid'],$_SESSION['gid'],$last_id,true,'','DUPLICAZIONE '.$_GET['action'].":".$valore_id,$info_browser);
		
		echo $risultati_duplicazione;

	}
	


}else{


	if(isset($_GET['c'])) {

		require("./inc/func.xmlize.php");

		$tabella = $_GET['action'];
		$PK = prendi_PK($tabella);
		$orderby = prendi_orderby($tabella,intval($_SESSION['gid']));
		
		//aggiungi l'ID all'order by 
		if($PK!=''){
			$orderby_doppio=$orderby.",$PK ASC ";
		}
		else{
			$orderby_doppio=$orderby;
		}
		
		


		// CASO RISULTATO DI RICERCA-------------------------------------------------------
		// SE c'è l'id in GET prendi calcola a che punto dell'elenco si è arrivati
		//if(isset($_GET['id']) && intval($_GET['id'])>0){

		if(isset($_GET['id']) && (
				(is_numeric($_GET['id']) && intval($_GET['id'])>0)
				|| (!is_numeric($_GET['id']) && trim($_GET['id'])!='')) ){

			//$ID_COUNTER=intval($_GET['id']);
			$ID_COUNTER=$vmsql->escape($_GET['id']);

			$_COUNTER = (is_numeric($ID_COUNTER)) ? $ID_COUNTER: "'".$ID_COUNTER."'";

			# CASE MYSQL
			if($db1['dbtype']=='mysql'){
			
				$sql_mysql="SET @N=-1;SELECT numero FROM (SELECT @N := @N +1 AS numero, $PK 
													  FROM $tabella t ORDER BY $orderby_doppio)
								  as temp WHERE $PK=$_COUNTER";

				$sql_calcola=$sql_mysql;
				
				$qq=$vmsql->multi_query($sql_mysql);
				
				$array_res=$vmsql->fetch_row_multi($qq);
				
				$offset= (isset($array_res[0][0])) ? $array_res[0][0] : 0;
				
			}
			else if($db1['dbtype']=='sqlite' || $db1['dbtype']=='oracle'){

				$ROWNUM = ($db1['dbtype']=='sqlite') ? "rowid":"rownum";

				$sql_row="
					SELECT rrrr FROM
					(SELECT $ROWNUM rrrr, $PK FROM $tabella t ORDER BY $orderby_doppio) temp
					WHERE $PK=$_COUNTER";

				$qr=$vmsql->query($sql_row);

				$RS=$vmsql->fetch_row($qr);

				$offset=($RS[0]-1);

			}
			# CASE POSTGRES (da MIGLIORARE L'EFFICIENZA!)
			else{
				
				$sql_pg="SELECT $PK FROM $tabella t ORDER BY $orderby_doppio";
				
				$q_pg=$vmsql->query($sql_pg);
				
				$i=0;
				
				while($RS=$vmsql->fetch_row($q_pg)){
					
					if($RS[0]==$ID_COUNTER){
						
						$offset= $i;
						break;
					}
					
					$i++;
				}
			} // end postgresql
		}
		else{
			$offset= (int) $_GET['c'];
		}


		list($tot_records) = $vmsql->fetch_row($vmsql->query("SELECT count(*) FROM $tabella"));

		if(is_numeric($_GET['c'])){
			$XML = xmlize("SELECT * FROM $tabella ORDER BY $orderby_doppio ".$vmsql->limit(1,$offset),null,true,$offset,$tot_records);
		}
		elseif($_GET['c']=='all'){
			$XML = xmlize("SELECT * FROM $tabella ORDER BY $orderby_doppio ",null,true,false,$tot_records);
			
		}

		header("Content-Type: text/xml; charset=".FRONT_ENCODING);
		echo $XML;



	}
	
}





?>