<?php
require_once('DataManager.Class.php');

class Auditoria {

	public $conn;

    function __construct($c) {

    	if(isset($c)) {
    		$this->conn = $c;
    	} else {
    		$this->conn = DataManager::getInstance();
    	}

    }

	public function agregaAuditoria( $accion, $tabla, $sql, $correcto = 1, $mensaje='' ) {
        require_once($_SERVER['DOCUMENT_ROOT'].'/varios/varios.php');
	    require_once($_SERVER['DOCUMENT_ROOT'].'/clases/Varios.Class.php');
        // require_once($_SERVER['DOCUMENT_ROOT'].'/clases/Auditoria.Class.php');
        
        // $auditoriaObj = new Auditoria(null);


   		$usuario     = '';
		if( isset($_SESSION[_SYSTEM_SESIONID.'userId']) ) {
			$usuario  = varios::decodifica($_SESSION[_SYSTEM_SESIONID.'userId']);
			$usuario .= ' - '.$_SESSION[_SYSTEM_SESIONID.'username'];
		}
        $url         = "http://".$_SERVER['HTTP_HOST'].":".$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];
		$ua          = Auditoria::getBrowser();
		$yourbrowser = $ua['name'] . " " . $ua['version'] . " [SO:" .$ua['platform']."] Report: ".$ua['userAgent'];
		$ipAddress   = $_SERVER['REMOTE_ADDR'];

		$stmt = $this->conn->prepare("{CALL agenda.SP_Auditoria_Ingresa(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )}");
		$stmt->execute(array(   $usuario, $accion, $tabla, $sql, $ipAddress, 'Post',
                                $url, $_SERVER['SERVER_PORT'], $yourbrowser,
                                $correcto, $mensaje ));

		return($stmt);

	}

	public static function getBrowser()
	{
		$u_agent = $_SERVER['HTTP_USER_AGENT'];
		$bname = 'Unknown';
		$platform = 'Unknown';
		$version= "";

		//First get the platform?
		if (preg_match('/linux/i', $u_agent)) {
			$platform = 'linux';
		}
		elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
			$platform = 'mac';
		}
		elseif (preg_match('/windows|win32/i', $u_agent)) {
			$platform = 'windows';
		}

		// Next get the name of the useragent yes seperately and for good reason
		if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
		{
			$bname = 'Internet Explorer';
			$ub = "MSIE";
		}
		elseif(preg_match('/Firefox/i',$u_agent))
		{
			$bname = 'Mozilla Firefox';
			$ub = "Firefox";
		}
		elseif(preg_match('/Chrome/i',$u_agent))
		{
			$bname = 'Google Chrome';
			$ub = "Chrome";
		}
		elseif(preg_match('/Safari/i',$u_agent))
		{
			$bname = 'Apple Safari';
			$ub = "Safari";
		}
		elseif(preg_match('/Opera/i',$u_agent))
		{
			$bname = 'Opera';
			$ub = "Opera";
		}
		elseif(preg_match('/Netscape/i',$u_agent))
		{
			$bname = 'Netscape';
			$ub = "Netscape";
		}

		// finally get the correct version number
		$known = array('Version', $ub, 'other');
		$pattern = '#(?<browser>' . join('|', $known) .
		')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
		if (!preg_match_all($pattern, $u_agent, $matches)) {
			// we have no matching number just continue
		}

		// see how many we have
		$i = count($matches['browser']);
		if ($i != 1) {
			//we will have two since we are not using 'other' argument yet
			//see if version is before or after the name
			if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
				$version= $matches['version'][0];
			}
			else {
				$version= $matches['version'][1];
			}
		}
		else {
			$version= $matches['version'][0];
		}

		// check if we have a number
		if ($version==null || $version=="") {$version="?";}

		return array(
			'userAgent' => $u_agent,
			'name'      => $bname,
			'version'   => $version,
			'platform'  => $platform,
			'pattern'    => $pattern
		);
	}

	function Close() {
    	$this->conn = null;
    }
}

?>