Mister Spy Say ="Hello Kids ... :D"
___ ____ _ _____
| \/ (_) | | / ___|
| . . |_ ___| |_ ___ _ __ \ `--. _ __ _ _
| |\/| | / __| __/ _ \ '__| `--. \ '_ \| | | |
| | | | \__ \ || __/ | /\__/ / |_) | |_| |
\_| |_/_|___/\__\___|_| \____/| .__/ \__, |
| | __/ |
|_| |___/
Bot Mister Spy V3
Mister Spy
Mister Spy
<?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