Location: PHPKode > scripts > Exponsor Mod > exponsor-mod/eXponsor.class.inc
<?php
  
  ###################################################
  # Clase para los soportes de exponsor. 			#
  # Con ella podemos solicitar anuncios o enlaces 	#
  # y presentarlos posteriormente en la web. 		#
  # 												#
  #	MOD: cachea los enlaces una vez por dia.		#
  #	 Usar despues de la IT con la clase original	# 
  #													#
  # Fichero: eXponsor.class.inc.php.				#
  # Empresa: IslaRed. 								#
  # Autores: Antonio Teixeira, Victor Caballero. 	#
  # MOD: David Pestana , Prensa del Mediterraneo SL #
  # Version: 0.1 basada en la 1.6 oficial			#
  # Fecha:   30-ENERO 20008.						#
  ###################################################
  
  class eXponsor
  {
  	var $v_anuncios;  # Vector para almacenar los anuncios solicitados.
    var $v_enlaces;	  # Vector para almacenar los enlaces  solicitados.
    var $pagina;      # URL de la pagina que solicita los anuncios o enlaces.
    var $formato;     # Formato de solicitud de anuncios o enlaces XML, HTML, MARCAS.
    var $modo; 		  # Modo de petición	
    var $version;	  # Versión de la clase eXponsor.class.inc.php
	var $ruta;
	var $depurar;
	
	var $cache = "MYSQL";  // ARCHIVO (en la proxima version).
    // MYSQL
	var $host  = "localhost";
	var $tabla = "exponsor_cache";   
	var $base  = "mibase";
	var $user  = "mi user";
	var $pass  = "mi pass";
	
	
	
	/* tabla de 3 campos para mysql
		
		fecha   - date
		pagina  - varchar 255
		enlaces - text
		
	*/
	
    /**
     * Constructor de la clase
     * con ella inicializamos los atributos de la clase
     *
     * @return exponsor
     */
    function eXponsor()
    {
      $this->v_anuncios = false;
      $this->v_enlaces  = false;
      $this->formato    = false;
	  $this->modo 		= false;
	  $this->version    = 'MOD 0.1';
	  $this->ruta		= false;
	  $this->depurar	= false;	 
      
      # Estos datos son obligatorios
      $this->pagina 	= $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
      
      return;
   }
   
   
   function set_modo_prueba()
   {
   	  $this->modo = 'demo';
   }
   
   
   function set_ruta($ruta)
   {
      $this->ruta = $ruta ? $ruta : false;
   }
   
   
   function get_ruta()
   {
   	  return $this->ruta;
   }
   
   
   function set_depurar($valor)
   {
   	  $this->depurar = $valor;
   }
   
   
   /**
    * Metodo encargado de realizar la solicitud de anuncios
    * al motor de exponsor.
    * Los parametros cod_soporte, cod_web y grupo son obligatorios
    * en el caso de tratarse de un buscador, el campo criterios
    * contendra las palabras de busqueda, siendo este parametro obligatorio.
    * El parametro pagina es la url en la que se quiere presentar
    * los enlaces.
    *
    * @param varchar $cod_soporte
    * @param varchar $cod_web
    * @param integer $pagina
    * @param integer $grupo
    * @param integer $inicio
    * @param integer $cantidad
    * @param varchar $criterios
    * @param varchar $formato
    * @return boolean
    */
   function dame_anuncios($cod_soporte, $cod_web, $pagina=false, $grupo=1, $inicio=0, 
   						  $cantidad=0, $criterios=false, $formato='XML')
   {
   	 if(!isset($_SERVER['REMOTE_ADDR']))
   	 {
   	   echo "NO ES POSIBLE ESTABLECER LA IP DEL VISITANTE";
   	   return false;
   	 }  
   	 
   	 $pagina = (!$pagina) ? $this->pagina : $pagina;
   	 
		 $pagina = urlencode($pagina);   	 
   	 
   	 $this->formato = strtoupper($formato);
   	
   	 $ruta  = "http://w3.exponsor.com/anuncios.php";
     $ruta .= "?pagina=$pagina";
     $ruta .= "&cod_web=$cod_web";
     $ruta .= "&cod_soporte=$cod_soporte";
     $ruta .= "&ip=".$_SERVER['REMOTE_ADDR'];
     $ruta .= "&grupo=$grupo";
     $ruta .= "&inicio=$inicio";
     $ruta .= "&cantidad=$cantidad";
     $ruta .= "&criterios=$criterios";
     $ruta .= "&formato=$this->formato";
	 $ruta .= "&version=$this->version";
	 
	 $ruta .= $this->modo ? "&modo=$this->modo" : '';
	 $this->set_ruta($ruta);	
     
     $func = function_exists('file_get_contents') ? 'file_get_contents' : 'file';
	 
	 if(!$anuncios = @$func($ruta))
	 {
	 	$this->gestor_errores(1);
	 	return false;
	 }
	 
	 if( is_array($enlaces) ) $enlaces = implode('',$enlaces); 
     
     switch($this->formato)
     {
     	case 'MARCAS': $this->marcas_anuncios_formato($anuncios);
     				   break;
     				 
     	case 'XML':    $this->xml_anuncios_formato($anuncios);
     				   break; 
     	
     	default:       $this->v_anuncios = $anuncios;
     				   break;			    
     }
     
     return true;
   }
   
   
   /**
    * Metodo encargado de realizar la solicitud de enlaces
    * al motor de exponsor. 
    * Los parametros cod_soporte y cod_web son obligatorios.
    * El parametro pagina es la url en la que se quiere presentar
    * los enlaces.
    *
    * @param varchar $cod_soporte
    * @param varchar $cod_web
    * @param integer $pagina
    * @param integer $inicio
    * @param integer $cantidad
    * @param varchar $formato
    * @return boolean
    */
   function dame_enlaces($cod_soporte, $cod_web, $pagina=false, $inicio=0, $cantidad=0, $formato='XML')
   {
   	
   
   	 if(!isset($_SERVER['REMOTE_ADDR']))
  	 {
   	   echo "NO ES POSIBLE ESTABLECER LA IP DEL VISITANTE";
   	   return false;
   	 }  
   	
   	 $pagina  = !$pagina ? $this->pagina : $pagina;
   	
	 $pagina = urlencode($pagina);



   	 
   	 $this->formato = strtoupper($formato);
   	
   	 $ruta  = "http://w3.exponsor.com/enlaces.php?";
   	 $ruta .= "pagina=$pagina";
     $ruta .= "&cod_web=$cod_web";
     $ruta .= "&cod_soporte=$cod_soporte";
     $ruta .= "&ip=".$_SERVER['REMOTE_ADDR'];
     $ruta .= "&inicio=$inicio";
     $ruta .= "&cantidad=$cantidad";
     $ruta .= "&formato=$this->formato";
	 $ruta .= "&version=$this->version";
	 
	 $ruta .= $this->modo ? "&modo=$this->modo" : '';
     $this->set_ruta($ruta);  
	   
     
	 /* SE INTERCEPTA LA LLAMADA A EXPONSOR SI RESULTA HABER CACHE DE HOY */
	 if(!$enlaces = $this->get_cache($pagina))
		
		 $func = function_exists('file_get_contents') ? 'file_get_contents' : 'file'; 
		 
		 if(!$enlaces  = @$func($ruta))
		 {
			 # $this->set_depurar(true);
			 $this->gestor_errores(1);
			 return false;
		 }
		 $this->set_cache($pagina,$enlaces);
	 }
	 
	 
	 if( is_array($enlaces) ) $enlaces = implode('',$enlaces);
       
     switch($this->formato)
     {
     	case 'MARCAS': $this->marcas_enlaces_formato($enlaces);
     				   break;
     				 
     	case 'XML':    $this->xml_enlaces_formato($enlaces);
     				   break;  
     				   
     	default:       $this->v_enlaces = $enlaces;
     				   break;			    
     }
     return true;
    } 
    
    function set_cache($pagina,$enlaces){
		if(!$con = @mysql_connect($this->host,$this->user,$this->pass)) return false;
		// SQL DE LIMPIEZA PARA EVITAR LOS INCREMENTALES COMENTAR SI NO SE DESEA
		$sql = "delete from $this->base.$this->tabla where pagina = '$pagina' ";  
		if(!$quy = mysql_query($sql,$con)) return false;

		// ESTABLECIENDO LA CACHE
		$sql = "insert into $this->base.$this->tabla (fecha,pagina,enlaces)values (now(),'$pagina','$enlaces')";
		if(!$quy = mysql_query($sql,$con)) return false;
	}
	
	function get_cache($pagina){
		$sql = "select enlaces from $this->base.$this->tabla where fecha = now() and pagina = '$pagina' ";
		if(!$con = @mysql_connect($this->host,$this->user,$this->pass)) return false;
		if(!$quy = mysql_query($sql,$con)) return false;
		$res = mysql_fetch_row($quy);
		if(!$res[0]) return false
		return $res[0];
	}
   /**
    * Metodo encargado de parsear los datos recibidos en formato XML
    * por el motor  de anuncios 
    *
    * @param varchar $anuncios
    */
   function xml_anuncios_formato(&$anuncios)
   {
    $this->v_anuncios = false;
     preg_match_all("|<anuncios>(.*)</anuncios>|Usim", $anuncios, $nodos, PREG_SET_ORDER);
     
     if($nodos && is_array($nodos))
     foreach($nodos as $nodo)
     {
      preg_match_all("|<enlace>(.*)</enlace>|Usim", $nodo[1], $url, PREG_SET_ORDER);
      $vdatos['url'] = trim($url[0][1]);

      preg_match_all("|<titulo>(.*)</titulo>|Usim", $nodo[1], $titulo, PREG_SET_ORDER);
      $vdatos['titulo'] = trim($titulo[0][1]);

      preg_match_all("|<url_visible>(.*)</url_visible>|Usim", $nodo[1], $texto_enlace, PREG_SET_ORDER);
      $vdatos['url_titulo'] = trim($texto_enlace[0][1]);
      
      preg_match_all("|<descripcion>(.*)</descripcion>|Usim", $nodo[1], $desc, PREG_SET_ORDER);
      $vdatos['descripcion'] = trim($desc[0][1]);
            
      $this->v_anuncios[] = $vdatos;
     }
     
     return;
   }

   
   /**
    * Metodo encargado de parsear los datos recibidos en formato MARCAS
    * por el motor  de anuncios 
    * 
    * @param varchar $anuncios
    */
   function marcas_anuncios_formato(&$anuncios)
   {
    $this->v_anuncios = false;
    
    $anuncios = explode("##", $anuncios);
    
    if(is_array($anuncios))
      foreach($anuncios as $vdatos)
      { 
    	$vdatos = explode("||",$vdatos);
    	
    	$datos['url'] 		  = $datos[0];
    	$datos['titulo'] 	  = $datos[1];
    	$datos['descripcion'] = $datos[2];
    	$datos['url_visible'] = $datos[3];
    	
    	$this->v_anuncios[] = $datos;
      }
      
     return;
   }
   
   
   /**
    * Metodo encargado de presentar los anuncios de forma personalizada
    * Cada llamada a esta funcion devolvera un unico anuncio
    * La informacion esta formateada en una tabla
    *
    * @return varchar
    */
   function pinta_anuncios_personalizado()
    {
	  if($this->formato == 'HTML') $this->pinta_anuncios_html();
    	
      static $id_anuncio = 0;
	  
	  $v_anuncios = $this->v_anuncios;
     
      $html = '&nbsp;';
      if($v_anuncios && is_array($v_anuncios) && isset($v_anuncios[$id_anuncio])):   
        $enlaces = $v_anuncios[$id_anuncio]; 
        
        $html = " <table class=\"anuncios__\" >
                    <tr>
                      <td class=\"anuncios__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\" 
						 target='_blank'>
                       ".ucfirst($enlaces['titulo'])."
                          </a>
                        </td>
                     </tr>
                      <tr>
                         <td class=\"anuncios__descripcion__\">
                            <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
							target='_blank'>
                          ".ucfirst($enlaces['descripcion'])."
                            </a>
                        </td>
                      </tr>
                      <tr>
                          <td class=\"anuncios__url__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
						 target='_blank'>
                           ".$enlaces['url_titulo']."
                         </a>
                       <td>
                     </tr>
                    </table> ";
       endif;
      $id_anuncio++;
      return $html;
    }
    
    
    /**
     * Metodo encargado de presentar todos los anuncios en una 
     * única tabla. Los anuncios apareceran unos 
     * seguidos a otros de forma vertical.
     *
     * @return varchar
     */
    function pinta_anuncios_vertical()
    {
      if($this->formato == 'HTML') $this->pinta_anuncios_html();
    	
      if(!$this->v_anuncios || !is_array($this->v_anuncios)) return false;
      
      $html = '<table>';
      foreach($this->v_anuncios as $enlaces)
      {
        $html .= " <tr><td>
        		   <table class=\"anuncios__\" >
                    <tr>
                      <td class=\"anuncios__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\" 
						 target='_blank'>
                       ".ucfirst($enlaces['titulo'])."
                          </a>
                        </td>
                     </tr>
                      <tr>
                         <td class=\"anuncios__descripcion__\">
                            <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
							target='_blank'>
                          ".ucfirst($enlaces['descripcion'])."
                            </a>
                        </td>
                      </tr>
                      <tr>
                          <td class=\"anuncios__url__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
						 target='_blank'>
                           ".$enlaces['url_titulo']."
                         </a>
                       <td>
                     </tr>
                    </table> 
                    </td></tr>";
      }
      
      $html .= '</table>';
      
      return $html;
    }
    
    
    
    /**
     * Metodo encargado de presentar todos los anuncios en una 
     * única tabla. Los anuncios apareceran unos 
     * seguidos a otros de forma horizontal.
     *
     * @return varchar
     */
    function pinta_anuncios_horizontal()
    {
      if($this->formato == 'HTML') $this->pinta_anuncios_html();
    	
      if(!$this->v_anuncios || !is_array($this->v_anuncios)) return false;
      
      $html = '<table><tr>';
      foreach($this->v_anuncios as $enlaces)
      {
        $html .= " <td><table class=\"anuncios__\" >
                    <tr>
                      <td class=\"anuncios__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\" 
						 target='_blank'>
                       ".ucfirst($enlaces['titulo'])."
                          </a>
                        </td>
                     </tr>
                      <tr>
                         <td class=\"anuncios__descripcion__\">
                            <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
							target='_blank'>
                          ".ucfirst($enlaces['descripcion'])."
                            </a>
                        </td>
                      </tr>
                      <tr>
                          <td class=\"anuncios__url__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
						 target='_blank'>
                           ".$enlaces['url_titulo']."
                         </a>
                       <td>
                     </tr>
                    </table></td> ";
      }
      
      $html .= '</td></tr></table>';
      
      return $html;
    }
    
     
    function pinta_anuncios_html()
    {
    	echo $this->v_anuncios;
    	return true;
    }
   
   
   /**
    * Metodo encargado de parsear los datos recibidos en formato XML
    * por el motor  de enlaces 
    *
    * @param varchar $enlaces
    */
   function xml_enlaces_formato(&$enlaces)
   {
     $this->v_enlaces = false;
     preg_match_all("|<enlaces>(.*)</enlaces>|Usim", $enlaces, $nodos, PREG_SET_ORDER);
     
     if($nodos && is_array($nodos))
     foreach($nodos as $nodo)
     {
      preg_match_all("|<url>(.*)</url>|Usim", $nodo[1], $url, PREG_SET_ORDER);
      $vdatos['url'] = trim($url[0][1]);
      
      
      preg_match_all("|<titulo>(.*)</titulo>|Usim", $nodo[1], $titulo, PREG_SET_ORDER);
      $vdatos['url_titulo'] = trim($titulo[0][1]);
      
      $this->v_enlaces[] = $vdatos;
     }
     return;
   } 
   
   /**
    * Metodo encargado de parsear los datos recibidos en formato MARCAS
    * por el motor  de enlaces
    * 
    * @param varchar $enlaces
    */
   function marcas_enlaces_formato(&$enlaces)
   {
     $this->v_enlaces = false;
    
     $enlaces = explode("##", $enlaces);
    
     if(is_array($enlaces))
      foreach($enlaces as $vdatos)
      { 
    	$vdatos = explode("||",$vdatos);
    	
    	$datos['url'] 		  = $datos[0];
    	$datos['titulo'] 	  = $datos[1];
    	
    	$this->v_enlaces[] = $datos;
      }
      
     return;
    }
   
   
   /**
    * Metodo encargado de presentar los enlaces de forma personalizada
    * Cada llamada a esta funcion devolvera un unico enlace
    * La informacion esta formateada en una tabla
    *
    * @return varchar
    */
   function pinta_enlaces_personalizado()
    {
	  if($this->formato == 'HTML') $this->pinta_enlaces_html();
    	
      static $id_enlace = 0;
	  
      $html = '&nbsp;';
      if($this->v_enlaces && is_array($this->v_enlaces) && isset($this->v_enlaces[$id_enlace]))
      {   
        $enlaces = $this->v_enlaces[$id_enlace]; 
        
        $html = " <table class=\"enlaces__\" >
                    <tr>
                      <td class=\"enlaces__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['url_titulo']."\" 
						 target='_blank'>
                       ".ucfirst($enlaces['url_titulo'])."
                          </a>
                        </td>
                     </tr>
                    </table> ";
       
       $id_enlace++;
       }
      return $html;
    }
    
    
    
    /**
     * Metodo encargado de presentar todos los enlaces en una 
     * única tabla. Los enlaces apareceran unos 
     * seguidos a otros de forma vertical.
     *
     * @return varchar
     */
    function pinta_enlaces_vertical()
    {
      if($this->formato == 'HTML') $this->pinta_enlaces_html();
    	
      if(!$this->v_enlaces || !is_array($this->v_enlaces))
	  {
	  	 $this->gestor_errores(2);
		 return false;
	  }
      
      $html = "<table class=\"enlaces__\">";
      foreach($this->v_enlaces as $enlaces)
      {
        $html .= "  <tr>
                      <td class=\"enlaces__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['url_titulo']."\" 
						 target='_blank'>
                       ".ucfirst($enlaces['url_titulo'])."
                          </a>
                        </td>
                     </tr> ";
      }
      
      $html .= "</table>";
      
      return $html;
    }
    
    
    
    /**
     * Metodo encargado de presentar todos los enlaces en una 
     * única tabla. Los enlaces apareceran unos 
     * seguidos a otros de forma horizontal.
     *
     * @return varchar
     */
    function pinta_enlaces_horizontal()
    {
      if($this->formato == 'HTML') $this->pinta_enlaces_html();
    	
      if(!$this->v_enlaces || !is_array($this->v_enlaces))
	  {
	  	 $this->gestor_errores(2);
	  	 return false;
	  } 
      
      $html = "<table class=\"enlaces__\"><tr>";
      foreach($this->v_enlaces as $enlaces)
      {
        $html .= "   <td class=\"enlaces__titulo__\">
                         <a href=\"".$enlaces['url']."\" title=\"".$enlaces['url_titulo']."\" 
						 target='_blank'>
                       ".ucfirst($enlaces['url_titulo'])."
                          </a>
                        </td> ";
      }
      
      $html .= "</tr></table>";
      
      return $html;
    }
    
    
    
    function pinta_enlaces_html()
    {
    	echo $this->v_enlaces;
    	return true;
    }
	
	
	function gestor_errores($error)
	{
		if( !$error ) return false;
		
		$salida = false;
		switch( $error )
		{
			case 1:	$salida = "Error en file_get_contents"; 	break;
			case 2:	$salida = "Error vector enlaces vacío";		break;
		}
		
		if( $this->depurar && $salida )
		{
			 echo "<!--".$salida."-->";
			 echo "<!--".$this->get_ruta()."-->";
		}
		
		return true;
	}
   

}

?>
Return current item: Exponsor Mod