HEX
Server: Apache
System: Linux web5.visualcom.es 4.18.0-477.21.1.lve.1.el8.x86_64 #1 SMP Tue Sep 5 23:08:35 UTC 2023 x86_64
User: ensaco.es (10019)
PHP: 8.3.32
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/ensaco.es/httpdocs/wp-content/plugins/redsyspur/wc-redsys-ref.php
<?php

include_once ('wc-redsys.php');

class WC_Redsys_Ref {

	public static function saveReference($idCustomer, $reference, $cardNumber, $brand, $cardType, $idLog = '0000', $idCart = null){
		
		if(intval($idCustomer) == 0) {
			escribirLog("DEBUG", $idLog, "No se ha guardado la referencia porque el cliente no está registrado");
			return;
		}

		global $wpdb;
		$tableName=$wpdb->prefix."redsys_reference";
		escribirLog("DEBUG", $idLog, "Iniciando proceso de guardado de referencia.");
			
		$supportedBrands=array(1,2,8,9,22);
		if(!in_array($brand, $supportedBrands))
			$brand=null;
	
		if($reference!=null && strlen($reference)>0 && WC_Redsys_Ref::checkRefTable()){
			$oldRef=WC_Redsys_Ref::getCustomerRef($idCustomer);
			$maskedCard=WC_Redsys_Ref::maskCardNumber($cardNumber);
			if($oldRef==null){
				$wpdb->insert(
					$tableName,
					array(
						'id_customer' => $idCustomer,
						'reference' => $reference,
						'version' => MODULE_VERSION,
						'cardNumber' => $maskedCard,
						'brand' => $brand,
						'cardType' => $cardType
					)
				);
				escribirLog("DEBUG", $idLog, "Referencia guardada [idCustomer|Reference|cardNumber]: [" . $idCustomer . "|" . $reference . "|" . $cardNumber . "]");
			}
			else{
				$wpdb->update(
					$tableName,
					array(
						'reference' => $reference,
						'version' => MODULE_VERSION,
						'cardNumber' => $maskedCard,
						'brand' => $brand,
						'cardType' => $cardType
					),
					array( 
						'id_customer' => $idCustomer 
					)
				);
				escribirLog("DEBUG", $idLog, "Referencia actualizada [idCustomer|Reference|cardNumber]: [" . $idCustomer . "|" . $reference . "|" . $cardNumber . "]");
			}
		}
	}
	
	public static function getCustomerRef($idCustomer){
		if(intval($idCustomer) == 0) {
			escribirLog("DEBUG", $idLog, "No se ha servido la referencia porque el cliente no está registrado");
			return;
		}

		if(WC_Redsys_Ref::checkRefTable()){
			global $wpdb;
			$tableName=$wpdb->prefix."redsys_reference";
			
			$ref=$wpdb->get_results( "SELECT * FROM ".$tableName." WHERE id_customer=".$idCustomer.";", ARRAY_A  );
			if(sizeof($ref)>0)
				return array($ref[0]["reference"],$ref[0]["cardNumber"],$ref[0]["brand"],$ref[0]["cardType"]);
		}
		return null;
	}
	public static function checkRefTable(){
		global $wpdb;
		$tableName=$wpdb->prefix."redsys_reference";
		
		$tablas=$wpdb->get_results( "SHOW TABLES LIKE '".$tableName."'" );
		if(sizeof($tablas)<=0)
			WC_Redsys_Ref::createRefTable();

			$tablas=$wpdb->get_results( "SHOW TABLES LIKE '".$tableName."'" );
			return sizeof($tablas)>0;
	}
	public static function createRefTable(){
		global $wpdb;

		$tableName=$wpdb->prefix."redsys_reference";
		$charset_collate = $wpdb->get_charset_collate();
		
		$sql = "CREATE TABLE IF NOT EXISTS `".$tableName."` (
				`id_customer` INT NOT NULL PRIMARY KEY,
				`version` VARCHAR(10) NOT NULL,
				`reference` VARCHAR(128) NOT NULL,
				`cardNumber` VARCHAR(24),
				`brand` SMALLINT,
				`cardType` VARCHAR(1),
				INDEX (`id_customer`)
			) $charset_collate;";
		
		require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
		dbDelta( $sql );
	}
	public static function dropRefTable(){
		global $wpdb;
		
		$tableName=$wpdb->prefix."redsys_reference";
		
		$sql = "'DROP TABLE `".$tableName."`'";
		
		require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
		dbDelta( $sql );
	}
	private static function maskCardNumber($cardNumber) {
		if ($cardNumber == null || strlen($cardNumber) <= 4) 
			return $cardNumber;
		return str_pad(substr($cardNumber, -4, 4), 5, "*", STR_PAD_LEFT);
	}

}