Mister Spy Say ="Hello Kids ... :D" ___ ____ _ _____ | \/ (_) | | / ___| | . . |_ ___| |_ ___ _ __ \ `--. _ __ _ _ | |\/| | / __| __/ _ \ '__| `--. \ '_ \| | | | | | | | \__ \ || __/ | /\__/ / |_) | |_| | \_| |_/_|___/\__\___|_| \____/| .__/ \__, | | | __/ | |_| |___/ Bot Mister Spy V3
Mister Spy

Mister Spy

Current Path : /home/caballoscriollos/www/web/library/
Upload File :
Current File : /home/caballoscriollos/www/web/library/class.envios.php

<?php 

require_once('class.dbaccess.php');
require_once('class.datosempresa.php');
require_once('class.edicion.php');
require_once('class.ediciones.php');
require_once('class.ediciontipos.php');
require_once('class.envio.php');
require_once('class.enviogrupo.php');
require_once('class.enviogrupos.php');
require_once('class.enviolink.php');
require_once('class.enviolinks.php');
require_once('class.configuraciones.php');
require_once('class.grupos.php');
require_once('class.usuario.php');
require_once('class.usuarios.php');
require_once('class.usuariogrupo.php');
require_once('class.usuariogrupos.php');
require_once('mail/class.phpmailer.php');

class Envios extends DBAccess
{	
	public function GetAll()
	{
		$sql = "SELECT e.*";
		$sql.= " FROM tblEnvios e";
		$sql.= " ORDER BY Fecha DESC";
			
		if (!($oRes = $this->GetQuery($sql)))
			return false;
			
		$arr = array();
			
		while ($oRow = $oRes->GetRow())	
		{	
			$oEnvio = new Envio();
			$oEnvio->ParseFromArray($oRow);
			
			array_push($arr, $oEnvio);
			
			$oRes->MoveNext();
		}	
		
		return $arr;		
	}
	

	public function GetById($IdEnvio)
	{
		$sql = "SELECT e.*";
		$sql.= " FROM tblEnvios e";
		$sql.= " WHERE IdEnvio = " . DB::Number($IdEnvio);	
			
		if (!($oRes = $this->GetQuery($sql)))
			return false;
			
		if (!($oRow = $oRes->GetRow()))
			return false;
		
		$oEnvio = new Envio();
		$oEnvio->ParseFromArray($oRow);
		
		return $oEnvio;		
	}
	

	public function GetLastEnvio()
	{
		$sql = "SELECT e.*";
		$sql.= " FROM tblEnvios e";
		$sql.= " ORDER BY e.IdEnvio DESC";
		$sql.= " LIMIT 1";
			
		if (!($oRes = $this->GetQuery($sql)))
			return false;
			
		if (!($oRow = $oRes->GetRow()))
			return false;
		
		$oEnvio = new Envio();
		$oEnvio->ParseFromArray($oRow);
		
		return $oEnvio;		
	}


	public function VerificarPermisoEnvio()
	{
		$oEnvio = $this->GetLastEnvio();
		
		if (!$oEnvio)
			return true;
		
		$FechaUltimoEnvio	= $oEnvio->Fecha;
		$FechaActual		= date("Y-m-d G:i:s");
	
		$sql = "SELECT TIMESTAMPDIFF (HOUR, " . DB::String($FechaUltimoEnvio) . ", " . DB::String($FechaActual) . ") AS DiferenciaHoraria";

		if (!($oRes = $this->GetQuery($sql)))
			return false;
			
		if (!($oRow = $oRes->GetRow()))
			return false;

		if ($oRow['DiferenciaHoraria'] <= Config::HorasDiferenciaEnvio)
			return false;
		
		return true;		
	}


	public function GetHorasRestantesEnvio()
	{
		$oEnvio = $this->GetLastEnvio();
		
		$FechaUltimoEnvio	= $oEnvio->Fecha;
		$FechaActual		= date("Y-m-d G:i:s");
	
		$sql = "SELECT TIMESTAMPDIFF(HOUR, " . DB::String($FechaUltimoEnvio) . ", " . DB::String($FechaActual) . ") AS DiferenciaHoraria";

		if (!($oRes = $this->GetQuery($sql)))
			return false;
			
		if (!($oRow = $oRes->GetRow()))
			return false;

		return Config::HorasDiferenciaEnvio - $oRow['DiferenciaHoraria'];
	}

	
	public function GetAllByEdicion(Edicion $oEdicion)
	{
		$arr = array();
	
		$sql = "SELECT *";
		$sql.= " FROM tblEnvios";
		$sql.= " WHERE IdEdicion = " . DB::Number($oEdicion->IdEdicion);

		if (!($oRes = $this->GetQuery($sql)))
			return false;
					
		while ($oRow = $oRes->GetRow())	
		{	
			$oEnvio = new Envio();
			$oEnvio->ParseFromArray($oRow);
			
			array_push($arr, $oEnvio);
			
			$oRes->MoveNext();
		}	

		return $arr;
	}


	public function GetReporteByEnvio(Envio $oEnvio)
	{
		$sql = "SELECT";
		$sql.= " IdEnvio,";
		$sql.= " Link,";
		$sql.= " COUNT(Link) as CantidadAbiertos";
		$sql.= " FROM tblEnviosLinks ";
		$sql.= ($filter) ? $this->ParseFilter($filter) : "";
		$sql.= " GROUP BY Link ";
		$sql.= ($oPage) ? Pageable::ParsePage($oPage) : "";

		if (!($oRes = $this->GetQuery($sql)))
			return false;

		$arr = array();

		while ($oRow = $oRes->GetRow())	
		{	
			$oReporte = new ReporteDetalle();
			$oReporte->ParseFromArray($oRow);

			array_push($arr, $oReporte);

			$oRes->MoveNext();
		}	
		
		return $arr;
		
	}


	public function GetCountRows()
	{
		$sql = "SELECT e.*";
		$sql.= " FROM tblEnvios e";
		
		if (!($oRes = $this->GetQuery($sql)))
			return false;
		
		$CountRows = $oRes->NumRows();
		
		return $CountRows;
	}
	
	
	public function Create(Envio $oEnvio)
	{		
		$Grupos 			= new Grupos();
		$CantidadUsuarios 	= 0;
		$filter				= array();
				
		if (!DBAccess::$db->Begin())			
			return false;
				
		if ($oEnvio->Grupos || $oEnvio->Paises || $oEnvio->Provincias)
		{
			$filter['Grupos'] 		= $oEnvio->Grupos;
			$filter['Paises'] 		= $oEnvio->Paises;
			$filter['Provincias'] 	= $oEnvio->Provincias;
			$filter['Newsletter']	= '1';
		
			$CantidadUsuarios+= $Grupos->GetCountUsuarios($filter);
			$CantidadUsuarios+= $Grupos->GetCountUsuariosNewsletter($filter);
		}
		
		$oEnvio->CantidadUsuarios = $CantidadUsuarios;
				
		$arr = array
		(
			'IdEdicion' 			=> DB::Number($oEnvio->IdEdicion),
			'CantidadUsuarios' 		=> DB::Number($oEnvio->CantidadUsuarios),
			'CorreosAdicionales' 	=> DB::String($oEnvio->CorreosAdicionales),
			'Fecha' 				=> DB::Date(date("Y-m-d G:i:s"))
		);

		if (!$this->Insert('tblEnvios', $arr))
		{
			DBAccess::$db->Rollback();
			return false;
		}

		$oEnvio->IdEnvio = DBAccess::GetLastInsertId();
		
		$oEnvioGrupo 	= new EnvioGrupo();
		$oEnvioGrupos 	= new EnvioGrupos();
		
		if ($oEnvio->Grupos)
		{
			foreach ($oEnvio->Grupos as $Grupo)
			{
				$oEnvioGrupo->IdEnvio	= $oEnvio->IdEnvio;
				$oEnvioGrupo->IdGrupo 	= $Grupo;
				
				if (!$oEnvioGrupos->Create($oEnvioGrupo))
				{
					DBAccess::$db->Rollback();
					return false;
				}
			}
		}

		if (!$this->SendNewsletter($oEnvio))
		{
			DBAccess::$db->Rollback();
			return false;
		}

		DBAccess::$db->Commit();
		
		return $oEnvio;
	}
		
	
	private function SendNewsletter(Envio $oEnvio)
	{
		/* declaramos variables necesarias */
		$CantidadErroneos			= 0;
		$oEdiciones					= new Ediciones();
		$oUsuariosGrupos 			= new UsuarioGrupos();
		$oUsuarioNewsletterGrupos 	= new UsuarioNewsletterGrupos();
		$oUsuarios					= new Usuarios();
		$oUsuariosNewsletter		= new UsuariosNewsletter();

		/* obtenemos los datos de la empresa */
		$oDatosEmpresa = new DatosEmpresa();
		$oDatosEmpresa = $oDatosEmpresa->GetRow();
				
		/* determinamos fecha y nombre de archivo */
		$Fecha 			= date("d-m-Y" . rand(0, 999));
		$NombreArchivo 	= "news_" . $Fecha . ".txt";

		$Archivo = Config::RutaRecursos_Admin . $NombreArchivo;

		/* Header de la lista de correos */
		$Header = Config::NombreLista . "-d-request@" . Config::Dominio . "(Only addresses below this line can be automatically removed)\n";

		/* Creamos el archivo donde almacenaremos la lista de mails */
		$File = fopen($Archivo, "w");

		if (!$File)
			return false;
				
		if (!fputs($File, $Header))
			return false;		

		/* Guardamos los emails de los usuarios de cada grupo, pais y provincia seleccionados */
		if ($oEnvio->Grupos || $oEnvio->Paises || $oEnvio->Provincias)
		{
			$filter['Grupos'] 		= $oEnvio->Grupos;
			$filter['Paises'] 		= $oEnvio->Paises;
			$filter['Provincias'] 	= $oEnvio->Provincias;
			$filter['Newsletter']	= '1';
			
			$Usuarios 			= $oUsuarios->GetForSendNewsletter($filter);
			$UsuariosNewsletter = $oUsuariosNewsletter->GetForSendNewsletter($filter);
	
			foreach ($Usuarios as $oUsuario)
			{					
				$oUsuario->Email = str_replace(",", "", str_replace(";", "", $oUsuario->Email));
				
				if (IsEmail($oUsuario->Email))
					fputs($File, $oUsuario->Email . "\n");
				else
					$CantidadErroneos += 1;
			}
			
			foreach ($UsuariosNewsletter as $oUsuarioNewsletter)
			{
				$oUsuarioNewsletter->Email = str_replace(",", "", str_replace(";", "", $oUsuarioNewsletter->Email));
				
				if (IsEmail($oUsuarioNewsletter->Email))
					fputs($File, $oUsuarioNewsletter->Email . "\n");
				else
					$CantidadErroneos += 1;
			}
		}	

		if ($CantidadErroneos > 0)
		{
			$oEnvio->CantidadUsuarios = ($oEnvio->CantidadUsuarios - $CantidadErroneos);
			$this->UpdateCantidadUsuarios($oEnvio);
		}

		/* Agregamos a la lista los correos adicionales que se hayan agregado */
		if ($oEnvio->CorreosAdicionales != "")
		{
			$oEnvio->CorreosAdicionales = str_replace(';', "\n", $oEnvio->CorreosAdicionales);
			$oEnvio->CorreosAdicionales = str_replace(',', "\n", $oEnvio->CorreosAdicionales);
			
			fputs($File, $oEnvio->CorreosAdicionales);	
		}

		/* Obtenemos los datos de la edicion */
		$oEdicion = $oEdiciones->GetById($oEnvio->IdEdicion);
			
		/* Cerramos el archivo */
		fclose($File);
		
		/* Nos conectamos al host */
		$oConn = ftp_connect(Config::Host);

		if (!$oConn)
			return false;

		/* Autentificacion en el servidor */
		if(!ftp_login($oConn, Config::User, Config::Pass))
		{	
			die("No se ha podido realizar la conexi�n");
			return false;
		}
		
		/* Cambiamos de directorio */
		if(!ftp_chdir($oConn, Config::CarpetaLista))
		{	
			die("Se ha producido un error al entrar en el directorio /" . Config::CarpetaLista);
			return false;
		}
		
		/* Cambiamos de directorio */
		if(!ftp_chdir($oConn, Config::NombreLista))
		{	
			die("Se ha producido un error al entrar en el directorio /" . Config::NombreLista);
			return false;
		}
	
		/* Cargamos un fichero */
		if(!ftp_put($oConn, "dist", $Archivo, FTP_BINARY))
		{	
			die("Imposible cargar el fichero distribuidor.");
			return false;
		}
		
		/* Ponemos el contador en cero para poder realizar los reportes */
		$oEnvio->CantidadAbiertos = 0;
				
		/* Dejamos preparada la base de datos para generar los reportes de envios abiertos */
		if (!$this->UpdateCantidadAbiertos($oEnvio))
			return false;
	
		/* Obtenemos el contenido del newsletter para poder enviarlo */
		switch ($oEdicion->IdTipo)
		{
			case EdicionTipo::Estructurado:
				$Content = file_get_contents(Config::UrlSitioEspanol . 'newsletter_view_estructurado.php?IdEdicion=' . $oEnvio->IdEdicion . '&IdEnvio=' . $oEnvio->IdEnvio);
				break;

			case EdicionTipo::Libre:
				$Content = file_get_contents(Config::UrlSitioEspanol . 'newsletter_view_libre.php?IdEdicion=' . $oEnvio->IdEdicion . '&IdEnvio=' . $oEnvio->IdEnvio);
				break;

			case EdicionTipo::Texto:
				$Content = file_get_contents(Config::UrlSitioEspanol . 'newsletter_view_texto.php?IdEdicion=' . $oEnvio->IdEdicion . '&IdEnvio=' . $oEnvio->IdEnvio);
				break;

			default:
				break;
		}
				
		if (!$Content)
			return false;
	
		/* Ponemos como asunto el nombre de la edicion */
		$Subject = toString($oEdicion->Nombre);
	
		/* Creamos el header */
		$Header = (trim($oEnvio->Remitente) != '') ? ("From: " . $oEnvio->Remitente) : ("From: " . $oDatosEmpresa->RazonSocial);
		$Header.= " <" . Config::EmailRemitente . "> \r\n";
     	$Header.= "Reply-To: <" . $oEnvio->EmailRespuesta . "> \r\n";			
		$Header.= "Content-type: text/html; charset=iso-8859-1\r\n";

		/* Enviamos el mail a la lista distribuidora */
		if (!mail(Config::EmailLista, $Subject, $Content, $Header))
			return false;
	
		return true;
	}
	
	
	public function SendTest($IdEdicion, $Email)
	{
		/* declaramos variables necesarias */
		$Ediciones = new Ediciones();

		/* obtenemos los datos de la empresa */
		$oDatosEmpresa = new DatosEmpresa();
		$oDatosEmpresa = $oDatosEmpresa->GetRow();

		/* obtenemos los datos de la edicion */		
		if (!$oEdicion = $Ediciones->GetById($IdEdicion))
			return false;

		switch ($oEdicion->IdTipo)
		{
			case EdicionTipo::Estructurado:
				$Content = file_get_contents(Config::UrlSitioEspanol . 'newsletter_view_estructurado.php?IdEdicion=' . $IdEdicion);
				break;

			case EdicionTipo::Libre:
				$Content = file_get_contents(Config::UrlSitioEspanol . 'newsletter_view_libre.php?IdEdicion=' . $IdEdicion);
				break;

			case EdicionTipo::Texto:
				$Content = file_get_contents(Config::UrlSitioEspanol . 'newsletter_view_texto.php?IdEdicion=' . $IdEdicion);
				break;

			default:
				break;
		}
		
		if (!$Content)
			return false;
	
		/* Ponemos como asunto el nombre de la edicion */
		$Subject = toString($oEdicion->Nombre);
	
		/* Creamos el header */
		$Header = "From: " . $oDatosEmpresa->RazonSocial . " <" . Config::EmailRemitente . "> \r\n";
		$Header.= "Content-type: text/html; charset=iso-8859-1\r\n";
	
		/* Enviamos el mail a la lista distribuidora */
		if (!mail($Email, $Subject, $Content, $Header))
			return false;
	
		return true;
	}
	
	
	public function UpdateCantidadUsuarios($oEnvio)
	{
		$where = " IdEnvio = " . DB::Number($oEnvio->IdEnvio);
		
		$arr = array('CantidadUsuarios' => DB::Number($oEnvio->CantidadUsuarios));
		
		if (!DBAccess::UpdateEntidad('tblEnvios', $arr, $where))
			return false;
		
		return $oEnvio;
	}


	public function UpdateCantidadAbiertos($oEnvio)
	{
		$where = " IdEnvio = " . DB::Number($oEnvio->IdEnvio);
		
		$arr = array('CantidadAbiertos' => DB::Number($oEnvio->CantidadAbiertos));
		
		if (!DBAccess::UpdateEntidad('tblEnvios', $arr, $where))
			return false;
		
		return $oEnvio;
	}
}

?>

Mr. DellatioNx196 GaLers xh3LL Backd00r 1.0, Coded By Mr. DellatioNx196 - Bogor BlackHat