<html> 
<body> 
<?php
	//Es necessita arribar al wp-load per al get_option i get_row ja que al tornar del tpv no passa pel core de wp
	require_once('../../../../wp-load.php');
	require_once('RedsysAPI.php'); 
	// Se crea Objeto
	$miObj = new RedsysAPI();
	//error_log("arriba: ", 0);
	if (!empty( $_POST) ) {//URL DE RESP. ONLINE
					
					$version = $_POST["Ds_SignatureVersion"];
					$datos = $_POST["Ds_MerchantParameters"];
					$signatureRecibida = $_POST["Ds_Signature"];
					$decodec = $miObj->decodeMerchantParameters($datos);
					//No es molt segur, pero s'envia la clau secreta i es recull aqui.	
					//$kc = get_option("kc_cfc2em_clau");
					$kc	=""; //clau privada a real (a produccio)
					//$kc	=""; //clau privada a test
					$firma = $miObj->createMerchantSignatureNotif($kc,$datos);	
					$num_ordre = $miObj->getParameter("DS_MERCHANT_ORDER");
					//Originalment es: $MerchantData=$tableName.";".$value['num_ordre'];
					$dades=explode(";", $miObj->getParameter("Ds_MerchantData"));
					$tablename= $dades[0];
					$num_ordre = $dades[1];
					$preu=$dades[2];
					$registrar=$dades[3];
					$DNI=$dades[4];
					//error_log("kc: ". $kc, 0);
					if ($firma === $signatureRecibida){	
						
						//El codi si es 0000 a 0099, es correcte
						$codi_resposta=str_split($miObj->getParameter("Ds_Response"));
					//	error_log("ok: ". $codi_resposta[0].$codi_resposta[1].$codi_resposta[2].$codi_resposta[3], 0);
						if($codi_resposta[0]==0 && $codi_resposta[1]==0){ //Tot ok
							//Marquem com a confirmat.
							update_confirmacio_num_ordre($num_ordre, '1', $tablename);
							//Si el formulari de pagament no es del de registrar, llavors 
							//actualizem les dades del formulari amb el camp identidad
							if($registrar != "1"){
								update_preu($num_ordre, $tablename, $preu, $DNI);
							}
							//actualitzem el rol de subscriptor a inscrit o inscrit-30
							update_role($DNI, $preu);
						}
						else{
							update_confirmacio_num_ordre($num_ordre, '-2', $tablename);
							}
					} 
					else {
						update_confirmacio_num_ordre($num_ordre, '-3', $tablename);
					}
	}

	function update_confirmacio_num_ordre($num_ordre, $confirmacio, $tablename){
		
		global $wpdb;
		
		//recuparem el submit_time segons els numero d'ordre
		$row = $wpdb->get_row($wpdb->prepare("select * from `$tablename` 
												where `field_value` = '%s'  
												",$num_ordre));	
		$submit_time="";
		//Actualitzem la confirmarcio
		if ($row) {
			$submit_time=$row->submit_time;
			$wpdb->update($tablename, 
						array( 
							'field_value' => $confirmacio	// string
						), 
						array( 	'field_name' => 'comprovar_tresorer',
								'submit_time' =>$submit_time),
						array( 
							'%s'	// value1
						), 
						array( '%s', '%f' ) 
					);
		}
	}
	
	//actualizem el valor de la taula on hi ha el camp "identidad" i es DNI
	//Actualizaem el camps num_ordre, preu i confirmacio
	function update_preu($num_ordre, $tablename, $preu, $DNI){
		
		global $wpdb;
		
		//recuparem el submit_time segons el dni de la taula que te el camp identidad
		$row = $wpdb->get_row($wpdb->prepare("select * from `$tablename` 
												where `field_value` = '%s' and `field_name`='identidad'
												",$DNI));	
		if ($row) {
			
			//Actualizem els camp num_order
			$wpdb->update($tablename, 
						array( 
							'field_value' => $num_ordre 	// string
						), 
						array( 	'field_name' => 'num_ordre',
								'submit_time' =>$row->submit_time),
						array( 
							'%s'	// value1
						), 
						array( '%s', '%f' ) 
					);
			//Actualizem els camp 'preu' sumant al que ja hi havia en el cas que estigues ja confirmat
			//Si 'comprovar_tresorer'==-1, llavors només posem el preu actual i no el sumem
			$comprovar_tresorer_antic = $wpdb->get_row($wpdb->prepare("select * from `$tablename` 
												where `submit_time` = '%s' and `field_name`='comprovar_tresorer'
												",$row->submit_time));
			if($comprovar_tresorer_antic){
				$preu_final=$preu;
				if( $comprovar_tresorer_antic->field_value=='1'){

					$preu_antic = $wpdb->get_row($wpdb->prepare("select * from `$tablename` 
														where `submit_time` = '%s' and `field_name`='preus'
														",$row->submit_time));	
					if($preu_antic){
						if($preu_antic->field_value!=''){
							$preu_final=strval(intval($preu)+intval($preu_antic->field_value));
						}
					}
				}
				$wpdb->update($tablename, 
							array( 
								'field_value' => $preu_final 	// string
							), 
							array( 	'field_name' => 'preus',
									'submit_time' =>$row->submit_time),
							array( 
								'%s'	// value1
							), 
							array( '%s', '%f' ) 
						);
			}
			//Actualizem els camp 'comprovar_tresorer'
			$wpdb->update($tablename, 
						array( 
							'field_value' => '1'	// string
						), 
						array( 	'field_name' => 'comprovar_tresorer',
								'submit_time' =>$row->submit_time),
						array( 
							'%s'	// value1
						), 
						array( '%s', '%f' ) 
					);
		
		}
		
	}

	//actualitzem el rol de subscriptor a inscrit o inscrit-30
	function update_role($DNI, $preu){
		$nourol=($preu=='30') ? 'inscrit-30': 'inscrit';

		//Recuparem la dades de l'usuari a wp
		$user = get_user_by( 'login', $DNI);
		//Actualitzem el rol
		if(!in_array( $nourol, $user->roles)){
			$user->set_role($nourol);
			$user->remove_role('subscriber');
		}
	}
?>
</body> 
</html> 
