Mister Spy Say ="Hello Kids ... :D"
___ ____ _ _____
| \/ (_) | | / ___|
| . . |_ ___| |_ ___ _ __ \ `--. _ __ _ _
| |\/| | / __| __/ _ \ '__| `--. \ '_ \| | | |
| | | | \__ \ || __/ | /\__/ / |_) | |_| |
\_| |_/_|___/\__\___|_| \____/| .__/ \__, |
| | __/ |
|_| |___/
Bot Mister Spy V3
Mister Spy
Mister Spy
<?php
require_once('class.dbaccess.php');
require_once('class.grupo.php');
require_once('class.usuarionewslettergrupo.php');
require_once('class.usuarionewslettergrupos.php');
require_once('class.usuarionewsletter.php');
require_once('class.filter.php');
require_once('class.page.php');
require_once('excel_reader/excel_reader2.php');
class UsuariosNewsletter extends DBAccess implements IFilterable
{
public function ParseFilter(array $filter)
{
$sql = '';
if ((isset($filter['Apellido'])) && ($filter['Apellido'] != ''))
$sql.= " AND u.Apellido RLIKE '" . DB::StringUnquoted($filter['Apellido']) . "'";
if ((isset($filter['Nombre'])) && ($filter['Nombre'] != ''))
$sql.= " AND u.Nombre RLIKE '" . DB::StringUnquoted($filter['Nombre']) . "'";
if ((isset($filter['Email'])) && ($filter['Email'] != ''))
$sql.= " AND u.Email RLIKE '" . DB::StringUnquoted($filter['Email']) . "'";
if ((isset($filter['IdPais'])) && ($filter['IdPais'] != ''))
$sql.= " AND u.IdPais = " . DB::Number($filter['IdPais']);
if ((isset($filter['IdProvincia'])) && ($filter['IdProvincia'] != ''))
$sql.= " AND u.IdProvincia = " . DB::Number($filter['IdProvincia']);
if ((isset($filter['Empresa'])) && ($filter['Empresa'] != ''))
$sql.= " AND u.Empresa RLIKE '" . DB::StringUnquoted($filter['Empresa']) . "'";
if ((isset($filter['Grupo'])) && ($filter['Grupo'] != ''))
$sql.= ' AND ug.IdGrupo = '.DB::Number($filter['Grupo']);
if ((isset($filter['IdEstado'])) && ($filter['IdEstado'] != ''))
$sql.= ' AND u.Idestado = '.DB::Number($filter['IdEstado']);
return $sql;
}
public function GetAll(array $filter = NULL, Page $oPage = NULL)
{
$sql = "SELECT u.*";
$sql.= " FROM tblUsuariosNewsletter u";
$sql.= " LEFT JOIN tblUsuarioNewsletterGrupos ug ON u.IdUsuarioNewsletter = ug.IdUsuarioNewsletter";
$sql.= " WHERE 1";
$sql.= ($filter) ? $this->ParseFilter($filter) : "";
$sql.= " GROUP BY u.IdUsuarioNewsletter";
$sql.= " ORDER BY Apellido, u.Nombre";
$sql.= ($oPage) ? Pageable::ParsePage($oPage) : "";
if (!($oRes = $this->GetQuery($sql)))
return false;
$arr = array();
while ($oRow = $oRes->GetRow())
{
$oUsuarioNewsletter = new UsuarioNewsletter();
$oUsuarioNewsletter->ParseFromArray($oRow);
array_push($arr, $oUsuarioNewsletter);
$oRes->MoveNext();
}
return $arr;
}
public function GetAllByPais(Pais $oPais)
{
$sql = "SELECT *";
$sql.= " FROM tblUsuariosNewsletter u";
$sql.= " WHERE u.IdPais = " . DB::Number($oPais->IdPais);
if ( !($oRes = $this->GetQuery($sql)) )
return false;
$arr = array();
while ($oRow = $oRes->GetRow())
{
$oUsuarioNewsletter = new UsuarioNewsletter();
$oUsuarioNewsletter->ParseFromArray($oRow);
array_push($arr, $oUsuarioNewsletter);
$oRes->MoveNext();
}
return $arr;
}
public function GetAllByProvincia(Provincia $oProvincia)
{
$sql = "SELECT *";
$sql.= " FROM tblUsuariosNewsletter u";
$sql.= " WHERE u.IdProvincia = " . DB::Number($oProvincia->IdProvincia);
if ( !($oRes = $this->GetQuery($sql)) )
return false;
$arr = array();
while ($oRow = $oRes->GetRow())
{
$oUsuarioNewsletter = new UsuarioNewsletter();
$oUsuarioNewsletter->ParseFromArray($oRow);
array_push($arr, $oUsuarioNewsletter);
$oRes->MoveNext();
}
return $arr;
}
public function GetAllByGrupo(Grupo $oGrupo)
{
$sql = "SELECT un.*";
$sql.= " FROM tblUsuariosNewsletter un";
$sql.= " INNER JOIN tblUsuarioNewsletterGrupos ung ON un.IdUsuarioNewsletter = ung.IdUsuarioNewsletter";
$sql.= " WHERE ung.IdGrupo = " . DB::Number($oGrupo->IdGrupo);
$sql.= " GROUP BY un.IdUsuarioNewsletter";
if ( !($oRes = $this->GetQuery($sql)) )
return false;
$arr = array();
while ($oRow = $oRes->GetRow())
{
$oUsuarioNewsletter = new UsuarioNewsletter();
$oUsuarioNewsletter->ParseFromArray($oRow);
array_push($arr, $oUsuarioNewsletter);
$oRes->MoveNext();
}
return $arr;
}
public function GetById($IdUsuarioNewsletter)
{
$sql = "SELECT *";
$sql.= " FROM tblUsuariosNewsletter";
$sql.= " WHERE IdUsuarioNewsletter = " . DB::Number($IdUsuarioNewsletter);
if (!($oRes = $this->GetQuery($sql)))
return false;
if (!($oRow = $oRes->GetRow()))
return false;
$oUsuarioNewsletter = new UsuarioNewsletter();
$oUsuarioNewsletter->ParseFromArray($oRow);
/* obtiene los grupos del usuario */
$oUsuarioNewsletter->Grupos = $oUsuarioNewsletter->GetAllGrupos();
return $oUsuarioNewsletter;
}
public function GetByEmail($Email)
{
$sql = "SELECT *";
$sql.= " FROM tblUsuariosNewsletter";
$sql.= " WHERE Email = " . DB::String($Email);
if (!($oRes = $this->GetQuery($sql)))
return false;
if (!($oRow = $oRes->GetRow()))
return false;
$oUsuarioNewsletter = new UsuarioNewsletter();
$oUsuarioNewsletter->ParseFromArray($oRow);
return $oUsuarioNewsletter;
}
public function GetCountByGrupo(Grupo $oGrupo)
{
$sql = "SELECT COUNT(1) AS CantidadUsuarios";
$sql.= " FROM tblUsuariosNewsletter un";
$sql.= " INNER JOIN tblUsuarioNewsletterGrupos ung ON un.IdUsuarioNewsletter = ung.IdusuarioNewsletter";
$sql.= " WHERE ung.IdGrupo = " . DB::Number($oGrupo->IdGrupo);
$sql.= " GROUP BY un.IdUsuarionewsletter";
if ( !($oRes = $this->GetQuery($sql)) )
return false;
if ( !($oRow = $oRes->GetRow()) )
return false;
$Cantidad = $oRow['CantidadUsuarios'];
return $Cantidad;
}
public function GetForSendNewsletter(array $filter)
{
$sql = "SELECT u.*";
$sql.= " FROM tblUsuarioNewsletterGrupos ug";
$sql.= " LEFT JOIN tblUsuariosNewsletter u ON ug.IdUsuarioNewsletter = u.IdUsuarioNewsletter";
$sql.= " WHERE u.IdEstado = " . DB::Number(UsuarioNewsletterEstados::Validado);
/* filtro de grupos */
if ($filter['Grupos'])
{
$sql.= " AND ug.IdGrupo IN (";
foreach ($filter['Grupos'] as $IdGrupo)
{
$sql.= DB::Number($IdGrupo) . ", ";
}
$sql.= "0";
$sql.= ")";
}
/* filtro de paises */
if ($filter['Paises'])
{
$sql.= " AND u.IdPais IN (";
foreach ($filter['Paises'] as $IdPais)
{
$sql.= DB::Number($IdPais) . ", ";
}
$sql.= "0";
$sql.= ")";
}
/* filtro de provincias */
if ($filter['Provincias'])
{
$sql.= " AND u.IdProvincia IN (";
foreach ($filter['Provincias'] as $IdProvincia)
{
$sql.= DB::Number($IdProvincia) . ", ";
}
$sql.= "0";
$sql.= ")";
}
$sql.= " GROUP BY u.IdUsuarioNewsletter";
if (!($oRes = $this->GetQuery($sql)))
return false;
$arr = array();
while ($oRow = $oRes->GetRow())
{
$oUsuarioNewsletter = new UsuarioNewsletter();
$oUsuarioNewsletter->ParseFromArray($oRow);
array_push($arr, $oUsuarioNewsletter);
$oRes->MoveNext();
}
return $arr;
}
public function GetCountRows(array $filter = NULL)
{
$sql = "SELECT u.*";
$sql.= " FROM tblUsuariosNewsletter u";
$sql.= " LEFT JOIN tblUsuarioNewsletterGrupos ug ON u.IdUsuarioNewsletter = ug.IdUsuarioNewsletter";
$sql.= " WHERE 1";
$sql.= ($filter) ? $this->ParseFilter($filter) : "";
$sql.= " GROUP BY u.IdUsuarioNewsletter";
$sql.= " ORDER BY Apellido, u.Nombre";
if (!($oRes = $this->GetQuery($sql)))
return false;
$CountRows = $oRes->NumRows();
return $CountRows;
}
public function Create(UsuarioNewsletter $oUsuarioNewsletter)
{
$oUsuarioNewsletterGrupos = new UsuarioNewsletterGrupos();
/* inicia una transaccion */
if (!DBAccess::$db->Begin())
return false;
$arr = array
(
'Nombre' => DB::String($oUsuarioNewsletter->Nombre),
'Apellido' => DB::String($oUsuarioNewsletter->Apellido),
'Email' => DB::String(str_replace(' ', '', $oUsuarioNewsletter->Email)),
'Empresa' => DB::String($oUsuarioNewsletter->Empresa),
'IdPais' => DB::Number($oUsuarioNewsletter->IdPais),
'IdProvincia' => DB::Number($oUsuarioNewsletter->IdProvincia),
'IdEstado' => DB::Number($oUsuarioNewsletter->IdEstado)
);
if (!$this->Insert('tblUsuariosNewsletter', $arr))
{
DBAccess::$db->Rollback();
return false;
}
$oUsuarioNewsletter->IdUsuarioNewsletter = DBAccess::GetLastInsertId();
/* inserta los grupos de interes */
foreach($oUsuarioNewsletter->Grupos as $IdGrupo)
{
$oUsuarioNewsletterGrupo = new UsuarioNewsletterGrupo();
$oUsuarioNewsletterGrupo->IdUsuarioNewsletter = $oUsuarioNewsletter->IdUsuarioNewsletter;
$oUsuarioNewsletterGrupo->IdGrupo = $IdGrupo;
if (!$oUsuarioNewsletterGrupos->Create($oUsuarioNewsletterGrupo))
{
DBAccess::$db->Rollback();
return false;
}
}
/* finaliza la transaccion */
DBAccess::$db->Commit();
return $oUsuarioNewsletter;
}
public function Update(UsuarioNewsletter $oUsuarioNewsletter)
{
$oUsuarioNewsletterGrupos = new UsuarioNewsletterGrupos();
/* inicia una transaccion */
if (!DBAccess::$db->Begin())
return false;
$where = " IdUsuarioNewsletter = " . DB::Number($oUsuarioNewsletter->IdUsuarioNewsletter);
$arr = array
(
'Nombre' => DB::String($oUsuarioNewsletter->Nombre),
'Apellido' => DB::String($oUsuarioNewsletter->Apellido),
'Email' => DB::String(str_replace(' ', '', $oUsuarioNewsletter->Email)),
'Empresa' => DB::String($oUsuarioNewsletter->Empresa),
'IdPais' => DB::Number($oUsuarioNewsletter->IdPais),
'IdProvincia' => DB::Number($oUsuarioNewsletter->IdProvincia),
'IdEstado' => DB::Number($oUsuarioNewsletter->IdEstado)
);
if (!DBAccess::UpdateEntidad('tblUsuariosNewsletter', $arr, $where))
{
DBAccess::$db->Rollback();
return false;
}
/* elimina los grupos asignados anteriormente */
if (!DBAccess::DeleteEntidad('tblUsuarioNewsletterGrupos', $where))
{
DBAccess::$db->Rollback();
return false;
}
/* inserta los grupos de interes */
foreach($oUsuarioNewsletter->Grupos as $IdGrupo)
{
$oUsuarioNewsletterGrupo = new UsuarioNewsletterGrupo();
$oUsuarioNewsletterGrupo->IdUsuarioNewsletter = $oUsuarioNewsletter->IdUsuarioNewsletter;
$oUsuarioNewsletterGrupo->IdGrupo = $IdGrupo;
if (!$oUsuarioNewsletterGrupos->Create($oUsuarioNewsletterGrupo))
{
DBAccess::$db->Rollback();
return false;
}
}
/* finaliza la transaccion */
DBAccess::$db->Commit();
return $oUsuarioNewsletter;
}
public function Delete($IdUsuarioNewsletter)
{
if (!DBAccess::$db->Begin())
return false;
$where = " IdUsuarioNewsletter = " . DB::Number($IdUsuarioNewsletter);
if (!DBAccess::DeleteEntidad('tblUsuarioNewsletterGrupos', $where))
{
DBAccess::$db->Rollback();
return false;
}
if (!DBAccess::DeleteEntidad('tblUsuariosNewsletter', $where))
{
DBAccess::$db->Rollback();
return false;
}
DBAccess::$db->Commit();
return true;
}
public function ExportCsv(array $filter = NULL)
{
$FileName = "UsuariosNewsletter.xls";
header("Pragma: no-cache");
header("Expires: -1");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Content-Type: application/x-unknown");
$header = "Content-Disposition: attachment; filename=" . $FileName . ";";
header($header);
$Usuarios = $this->GetAll($filter);
$Separador = "\t";
$SaltoLinea = "\n";
if ($Usuarios != NULL)
{
$csv.= "IdUsuario";
$csv.= $Separador;
$csv.= "Apellido";
$csv.= $Separador;
$csv.= "Nombre";
$csv.= $Separador;
$csv.= "Email";
$csv.= $Separador;
$csv.= "Empresa";
$csv.= $Separador;
$csv.= "IdPais";
$csv.= $Separador;
$csv.= "IdProvincia";
$csv.= $Separador;
$csv.= "Grupos";
$csv.= $Separador;
foreach ($Usuarios as $oUsuario)
{
$IdGrupos = "";
$csv.= $SaltoLinea;
$csv.= str_replace('(\t|\n)','', trim($oUsuario->IdUsuarioNewsletter));
$csv.= $Separador;
$csv.= str_replace('(\t|\n)','', trim($oUsuario->Apellido));
$csv.= $Separador;
$csv.= str_replace('(\t|\n)','', trim($oUsuario->Nombre));
$csv.= $Separador;
$csv.= str_replace('(\t|\n)','', trim($oUsuario->Email));
$csv.= $Separador;
$csv.= str_replace('(\t|\n)','', trim($oUsuario->Empresa));
$csv.= $Separador;
$csv.= str_replace('(\t|\n)','', trim($oUsuario->IdPais));
$csv.= $Separador;
$csv.= str_replace('(\t|\n)','', trim($oUsuario->IdProvincia));
$csv.= $Separador;
$Grupos = $oUsuario->GetAllGrupos();
foreach ($Grupos as $oGrupo)
{
$IdGrupos.= $oGrupo->IdGrupo . ",";
}
if (isset($IdGrupos) && ($IdGrupos != ""))
{
$IdGrupos = substr($IdGrupos, 0, -1);
$csv.= str_replace('(\t|\n)','', $IdGrupos);
}
}
}
print($csv);
return true;
}
public function Import($FileName)
{
$arrData = new Spreadsheet_Excel_Reader(UsuarioNewsletter::PathCsvImport . $FileName);
if (!DBAccess::$db->Begin())
return false;
$CountCreate = 0;
/* procesamos el archivo */
for ($i=2; $i<=$arrData->sheets[0]['numRows']; $i++)
{
$Usuario = $arrData->sheets[0]['cells'][$i];
if ((IsEmail($Usuario[3])) && ($Usuario[5] != ''))
{
/* instanciamos variables necesarias */
$oUsuario = new UsuarioNewsletter();
$oGrupos = new Grupos();
$oUsuarioNewsletterGrupo = new UsuarioNewsletterGrupo();
$oUsuarioNewsletterGrupos = new UsuarioNewsletterGrupos();
$oUsuarios = new Usuarios();
$oUsuarioGrupo = new UsuarioGrupo();
$oUsuarioGrupos = new UsuarioGrupos();
$oPaises = new Paises();
$oProvincias = new Provincias();
$oUsuario->Apellido = $Usuario[1];
$oUsuario->Nombre = $Usuario[2];
$oUsuario->Email = strtolower($Usuario[3]);
$oUsuario->Empresa = $Usuario[4];
$oUsuario->IdPais = $Usuario[5];
$oUsuario->IdProvincia = $Usuario[6];
$oUsuario->IdEstado = UsuarioNewsletterEstados::Validado;
if ($oProvincias->GetById($Usuario[6]))
$oUsuario->IdProvincia = $Usuario[6];
if ($oPaises->GetById($Usuario[5]))
{
$arrGrupos = explode(",", $Usuario[7]);
$arrGrupos = explode(".", $Usuario[7]);
$err = false;
if ($arrGrupos)
{
foreach ($arrGrupos as $IdGrupo)
{
if ($oGrupo = $oGrupos->GetById($IdGrupo))
{
$Count = $oGrupo->GetCountUsuarios();
if ($Count >= Config::UsuariosNewsletterPorGrupo)
{
$err = true;
$strError.= "El registro N° " . $Row . " no se ha podido agregar debido a que el grupo con el ID " . $IdGrupo . " no admite mas de " . Config::UsuariosNewsletterPorGrupo . " usuarios. <br>";
}
}
else
{
$err = true;
$strError.= "El registro N° " . $Row . " no se ha podido agregar debido a que el grupo con el ID " . $IdGrupo . " no existe. <br>";
}
}
if ($err) continue;
if ((!$oUsuarios->GetByEmail($oUsuario-Email)) && (!$this->GetByEmail($oUsuario->Email)))
{
$Creados = 1;
$oUsuarioNewsletter = $this->Create($oUsuario);
if (!$oUsuarioNewsletter)
{
DBAccess::$db->Rollback();
return false;
}
$CountCreate++;
foreach($arrGrupos as $IdGrupo)
{
$oGrupo = $oGrupos->GetById($IdGrupo);
if ($oGrupo->IdTipo == GrupoTipo::Newsletter)
{
$oUsuarioNewsletterGrupo->IdUsuarioNewsletter = $oUsuarioNewsletter->IdUsuarioNewsletter;
$oUsuarioNewsletterGrupo->IdGrupo = $IdGrupo;
if (!$oUsuarioNewsletterGrupos->Create($oUsuarioNewsletterGrupo))
{
DBAccess::$db->Rollback();
return false;
}
}
}
}
elseif ($oUser = $oUsuarios->GetByEmail($oUsuario->Email))
{
/* actualizamos los grupos */
foreach($arrGrupos as $IdGrupo)
{
if (!($oUsuarioGrupos->GetById($oUser->IdUsuario, $IdGrupo)))
{
$oUsuarioGrupo->IdUsuario = $oUser->IdUsuario;
$oUsuarioGrupo->IdGrupo = $IdGrupo;
if (!$oUsuarioGrupos->Create($oUsuarioGrupo))
{
DBAccess::$db->Rollback();
return false;
}
}
}
$strError.= " El registro N° " . $Row . " ya existe en la base de clientes, se actualizaron los grupos. <br>";
}
elseif (($oUser = $this->GetByEmail($oUsuario->Email)))
{
$oUser->Apellido = $Usuario[1];
$oUser->Nombre = $Usuario[2];
$oUser->Empresa = $Usuario[3];
$oUser->IdPais = $Usuario[4];
$oUser->IdProvincia = $Usuario[5];
/* actulaizamos los datos del contacto */
$oUser = $this->Update($oUser);
/* actualizamos los grupos */
foreach($arrGrupos as $IdGrupo)
{
if (!($oUsuarioNewsletterGrupos->GetById($oUser->IdUsuarioNewsletter, $IdGrupo)))
{
$oUsuarioNewsletterGrupo->IdUsuarioNewsletter = $oUser->IdUsuarioNewsletter;
$oUsuarioNewsletterGrupo->IdGrupo = $IdGrupo;
if (!$oUsuarioNewsletterGrupos->Create($oUsuarioNewsletterGrupo))
{
DBAccess::$db->Rollback();
return false;
}
}
}
$strError.= "El registro N° " . $Row . " ya existe en la base de clientes potenciales, se actualizaron los datos y los grupos. <br>";
}
}
else
{
if ((!$oUsuarios->GetByEmail($oUsuario-Email)) && (!$this->GetByEmail($oUsuario->Email)))
{
$Creados = 1;
$oUsuarioNewsletter = $this->Create($oUsuario);
$CountCreate++;
if (!$oUsuarioNewsletter)
{
DBAccess::$db->Rollback();
return false;
}
}
elseif ($oUsuarios->GetByEmail($oUsuario-Email))
{
$strError.= " El registro N° " . $Row . " ya existe en la base de datos de clientes. <br>";
}
elseif ($this->GetByEmail($oUsuario->Email))
{
$strError.= "El registro N° " . $Row . " no se ha podido agregar debido a que ya existe el email. <br>";
}
}
}
else
{
$strError.= " El registro N° " . $Row . " no se ha podido agregar debido a que el ID País " . $Usuario[4] . " no existe en la base de datos. <br>";
}
}
else
{
if (!(IsEmail($Usuario[3])))
$strError.= "El registro N° " . $Row . " no se ha podido agregar debido a que no se ha especificado un e-mail válido. <br>";
if (trim($Usuario[5]) == '')
$strError.= "El registro N° " . $Row . " no se ha podido agregar debido a que no se ha especificado el ID País. <br>";
}
$Row++;
}
DBAccess::$db->Commit();
if ($strError == '') $strError = "Operaci�n finalizada con �xito.";
if ($Creados == 1)
{
$strError.= "<br> Se dieron de alta " . $CountCreate . " registros.";
}
else
{
$strError.= "<br> No se ha dado de alta ningún usuario";
}
return $strError;
}
}
?>
Mr. DellatioNx196 GaLers xh3LL Backd00r 1.0, Coded By Mr. DellatioNx196 - Bogor BlackHat