File: //var/www/html/correo
<?php
if(!isset($_POST["origen"]) || !isset($_POST["dominio"])){
die("Acceso denegado.");
}
$origen=$_POST["origen"];
$debug=0;
$forzar=0;
if(isset($_POST["forzar"]) && $_POST["forzar"]){
$forzar=1;
}
$puerto=3306;
$destino="localhost";
$base="cp_aftlgc";
$baseO="cp_aftlgc";
$usuario=$base;
$clave="CXQzD5Qc";
$opciones = array(
PDO::ATTR_PERSISTENT => FALSE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
);
$cadenaOrigen = "mysql:host=".$origen.";dbname=".$baseO.";port=".$puerto;
try{
$dbOrigen = new PDO($cadenaOrigen, $usuario, $clave, $opciones);
}catch (PDOException $info){
exit($info->getMessage());
}
/*
$conexionOrigen=mysql_connect($origen,$usuario,$clave);
$baseOrigen=mysql_select_db($baseO,$conexionOrigen);
*/
$cadenaDestino = "mysql:host=".$destino.";dbname=".$base.";port=".$puerto;
try{
$dbDestino = new PDO($cadenaDestino, $usuario, $clave, $opciones);
}catch (PDOException $info){
exit($info->getMessage());
}
/*
$conexionDestino=mysql_connect($destino,$usuario,$clave,TRUE);
$baseDestino=mysql_select_db($base,$conexionDestino);
*/
$dominios = array();
$dominios[]=$_POST["dominio"];
if(count($dominios)){
if(!$dominios[0]){
die("Error");
}
foreach ($dominios as $dominio){
$log[]="Procesando dominio: ".$dominio;
$sql="select id_user, email, signature, mail_inc_pass from awm_accounts where email like :email";
$stmt = $dbOrigen->prepare($sql);
$res=$stmt->execute(array(':email'=>'%'.$dominio));
$registros=0;
if($res){
if($stmt->rowCount()){
$registros = $stmt->fetchAll();
if(count($registros)){
$cuentas = array();
foreach($registros as $registro){
$sqlS="select created_time, last_login, last_login_now, logins_count, def_skin from awm_settings where id_user = :id_user";
$stmt = $dbOrigen->prepare($sqlS);
$resS=$stmt->execute(array(':id_user'=> $registro["id_user"]));
if($resS){
if($stmt->rowCount()){
$registroSetting = $stmt->fetch();
if(count($registroSetting)){
$registro["settings"]=$registroSetting;
}
}
}
$cuentas[]=$registro;
}
}
}
}
$log[]="SQL:".$sql;
$log[]="Se encontraron ".count($registros)." cuentas de correo del dominio $dominio";
if(count($cuentas)){
$i=0;
foreach($cuentas as $cuenta){
echo "Revisando correo ".$cuenta["email"]."\n";
$sql="select id_user,email, signature from awm_accounts where email = :email";
$stmt = $dbDestino->prepare($sql);
$res=$stmt->execute(array(':email'=>$cuenta["email"]));
$existe=0;
if($res){
if($stmt->rowCount()){
$registro = $stmt->fetch();
$existe=1;
$log[]="La cuenta de correo ".$cuenta["email"]." ya existe en la base de datos.";
echo "existe\n";
$idNuevo=$registro["id_user"];
if($forzar){
$sql="delete from awm_addr_book where id_user = :id_user";
$stmt = $dbDestino->prepare($sql);
$res=$stmt->execute(array(':id_user'=>$idNuevo));
$sql="delete from awm_accounts where id_user = :id_user limit 1";
$stmt = $dbDestino->prepare($sql);
$res=$stmt->execute(array(':id_user'=>$idNuevo));
$sql="delete from awm_settings where id_user = :id_user limit 1";
$stmt = $dbDestino->prepare($sql);
$res=$stmt->execute(array(':id_user'=>$idNuevo));
$sql="delete from a_users where id_user = :id_user limit 1";
$stmt = $dbDestino->prepare($sql);
$res=$stmt->execute(array(':id_user'=>$idNuevo));
$existe=0;
}
if($cuenta["signature"]!="" && $existe){
$sql4="update awm_accounts set signature = :signature where id_user = :id_user";
$stmt = $dbDestino->prepare($sql4);
$res=$stmt->execute(array(':signature' => $cuenta["signature"],
':id_user' => $idNuevo));
$log[]="SQL4:".$sql4;
}
}
}
if(!$existe){
$sql5="insert into a_users (deleted) values(:deleted)";
$stmt = $dbDestino->prepare($sql5);
$res=$stmt->execute(array(':deleted' => 0));
$idNuevo=$dbDestino->lastInsertId();
$sqlS="insert into awm_settings (
id_setting,
id_user,
created_time,
last_login,
last_login_now,
logins_count,
def_skin,
def_lang,
client_timezone) ";
$sqlS.=" VALUES (
:id_setting,
:id_user,
:created_time,
:last_login,
:last_login_now,
:logins_count,
:def_skin,
:def_lang,
:client_timezone)";
$stmt = $dbDestino->prepare($sqlS);
$lenguaje="Spanish";
$timezone="America/Bogota";
$stmt->bindParam(':id_setting' , $idNuevo , PDO::PARAM_INT);
$stmt->bindParam(':id_user' , $idNuevo , PDO::PARAM_INT);
$stmt->bindParam(':created_time' , $cuenta["settings"]["created_time"] , PDO::PARAM_STR);
$stmt->bindParam(':last_login' , $cuenta["settings"]["last_login"] , PDO::PARAM_STR);
$stmt->bindParam(':last_login_now' , $cuenta["settings"]["last_login_now"] , PDO::PARAM_STR);
$stmt->bindParam(':logins_count' , $cuenta["settings"]["logins_count"] , PDO::PARAM_INT);
$stmt->bindParam(':def_skin' , $cuenta["settings"]["def_skin"] , PDO::PARAM_STR);
$stmt->bindParam(':def_lang' , $lenguaje , PDO::PARAM_STR);
$stmt->bindParam(':client_timezone' , $timezone , PDO::PARAM_STR);
$res=$stmt->execute();
$sql6="insert into awm_accounts (
id_acct,
id_user,
id_domain,
def_acct,
deleted,
quota,
email,
mail_protocol,
mail_inc_host,
mail_inc_port,
mail_inc_login,
mail_inc_pass,
mail_inc_ssl,
mail_out_host,
mail_out_port,
mail_out_login,
mail_out_pass,
mail_out_auth,
mail_out_ssl,
signature,
signature_type,
signature_opt,
mailbox_size,
mailing_list,
id_tenant,
hide_in_gab,
is_password_specified,
allow_mail) ";
$sql6.=" values (
:id_acct,
:id_user,
:id_domain,
:def_acct,
:deleted,
:quota,
:email,
:mail_protocol,
:mail_inc_host,
:mail_inc_port,
:mail_inc_login,
:mail_inc_pass,
:mail_inc_ssl,
:mail_out_host,
:mail_out_port,
:mail_out_login,
:mail_out_pass,
:mail_out_auth,
:mail_out_ssl,
:signature,
:signature_type,
:signature_opt,
:mailbox_size,
:mailing_list,
:id_tenant,
:hide_in_gab,
:is_password_specified,
:allow_mail)";
$stmt = $dbDestino->prepare($sql6);
$aDefault["zero"]=0;
$aDefault["one"]=1;
$aDefault["delimiter"]="/";
$aDefault["quota"]=104857600;
$aDefault["loopback"]="127.0.0.1";
$aDefault["imap"]=143;
$aDefault["smtp"]=25;
$aDefault["empty"]="";
$aDefault["days"]=7;
$aDefault["auth"]=2;
$stmt->bindParam(':id_acct' , $idNuevo , PDO::PARAM_INT);
$stmt->bindParam(':id_user' , $idNuevo , PDO::PARAM_INT);
$stmt->bindParam(':id_domain' , $aDefault["zero"] , PDO::PARAM_INT);
$stmt->bindParam(':def_acct' , $aDefault["one"] , PDO::PARAM_INT);
$stmt->bindParam(':deleted' , $aDefault["zero"] , PDO::PARAM_INT);
$stmt->bindParam(':quota' , $aDefault["quota"] , PDO::PARAM_INT);
$stmt->bindParam(':email' , $cuenta["email"] , PDO::PARAM_STR);
$stmt->bindParam(':mail_protocol' , $aDefault["one"] , PDO::PARAM_INT);
$stmt->bindParam(':mail_inc_host' , $aDefault["loopback"] , PDO::PARAM_STR);
$stmt->bindParam(':mail_inc_port' , $aDefault["imap"] , PDO::PARAM_INT);
$stmt->bindParam(':mail_inc_login' , $cuenta["email"] , PDO::PARAM_STR);
$stmt->bindParam(':mail_inc_pass' , $cuenta["mail_inc_pass"], PDO::PARAM_STR);
$stmt->bindParam(':mail_inc_ssl' , $aDefault["zero"] , PDO::PARAM_INT);
$stmt->bindParam(':mail_out_host' , $aDefault["loopback"] , PDO::PARAM_STR);
$stmt->bindParam(':mail_out_port' , $aDefault["smtp"] , PDO::PARAM_INT);
$stmt->bindParam(':mail_out_login' , $aDefault["empty"] , PDO::PARAM_STR);
$stmt->bindParam(':mail_out_pass' , $aDefault["empty"] , PDO::PARAM_STR);
$stmt->bindParam(':mail_out_auth' , $aDefault["auth"] , PDO::PARAM_INT);
$stmt->bindParam(':mail_out_ssl' , $aDefault["zero"] , PDO::PARAM_INT);
// $stmt->bindParam(':def_order' , $aDefault["zero"] , PDO::PARAM_INT);
// $stmt->bindParam(':getmail_at_login' , $aDefault["zero"] , PDO::PARAM_INT);
// $stmt->bindParam(':mail_mode' , $aDefault["one"] , PDO::PARAM_INT);
// $stmt->bindParam(':mails_on_server_days' , $aDefault["days"] , PDO::PARAM_INT);
$stmt->bindParam(':signature' , $cuenta["signature"]);
$stmt->bindParam(':signature_type' , $aDefault["zero"] , PDO::PARAM_INT);
$stmt->bindParam(':signature_opt' , $aDefault["zero"] , PDO::PARAM_INT);
// $stmt->bindParam(':delimiter' , $aDefault["delimiter"] , PDO::PARAM_STR);
$stmt->bindParam(':mailbox_size' , $aDefault["zero"] , PDO::PARAM_INT);
$stmt->bindParam(':mailing_list' , $aDefault["zero"] , PDO::PARAM_INT);
// $stmt->bindParam(':namespace' , $aDefault["empty"] , PDO::PARAM_STR);
$stmt->bindParam(':id_tenant' , $aDefault["zero"] , PDO::PARAM_INT);
$stmt->bindParam(':hide_in_gab' , $aDefault["zero"] , PDO::PARAM_INT);
$stmt->bindParam(':is_password_specified' , $aDefault["one"] , PDO::PARAM_INT);
$stmt->bindParam(':allow_mail' , $aDefault["one"] , PDO::PARAM_INT);
$res=$stmt->execute();
$log[]="SQL6:".$sql6;
}
if(!isset($idNuevo) || $idNuevo<1){
die("EERRROR, id no identificado");
}
$log[]="Arreglo cuenta ".print_r($cuenta,true);
$log[]="Buscando contactos de la cuenta ".$cuenta["email"];
$sql2="select * from awm_addr_book where id_user = :id_user";
$stmt = $dbOrigen->prepare($sql2);
$res2 = $stmt->execute(array(':id_user'=> $cuenta["id_user"]));
$registros=0;
if($res2){
if($stmt->rowCount()){
$registros = $stmt->fetchAll();
if(count($registros)){
if(isset($contactos)){
unset($contactos);
}
$contactos = array();
foreach($registros as $registro){
$contactos[]=$registro;
}
}
}
}
$log[]="SQL2:".$sql2;
$log[]="Se encontraron ".count($registros)." contactos del correo con ID ".$cuenta["id_user"];
$i++;
echo "Se encontraron ".count($registros)." contactos del correo con ID ".$cuenta["id_user"]." email: ".$cuenta["email"]."\n\n";
//Crearle los contactos
if(count($contactos)){
foreach($contactos as $contacto){
$sqlE="delete from awm_addr_book where id_user = :id_user and view_email = :view_email and fullname = :fullname";
$stmt = $dbDestino->prepare($sqlE);
$res = $stmt->execute(array(':id_user'=> $idNuevo,':view_email'=>$contacto["view_email"],':fullname'=>$contacto["fullname"]));
$sql7="insert into awm_addr_book(
id_user,
str_id,
deleted,
date_created,
date_modified,
fullname,
view_email,
use_friendly_nm,
h_email,
h_street,
h_city,
h_state,
h_zip,
h_country,
h_phone,
h_fax,
h_mobile,
h_web,
b_email,
b_company,
b_street,
b_city,
b_state,
b_zip,
b_country,
b_job_title,
b_department,
b_office,
b_phone,
b_fax,
b_web,
other_email,
primary_email,
birthday_day,
birthday_month,
birthday_year,
id_addr_prev,
tmp,
use_frequency,
auto_create,
notes,
id_domain,
id_tenant,
type,
type_id,
firstname,
surname,
nickname,
skype,
facebook,
etag,
shared_to_all,
hide_in_gab)";
$sql7.= " VALUES (
:id_user,
:str_id,
:deleted,
:date_created,
:date_modified,
:fullname,
:view_email,
:use_friendly_nm,
:h_email,
:h_street,
:h_city,
:h_state,
:h_zip,
:h_country,
:h_phone,
:h_fax,
:h_mobile,
:h_web,
:b_email,
:b_company,
:b_street,
:b_city,
:b_state,
:b_zip,
:b_country,
:b_job_title,
:b_department,
:b_office,
:b_phone,
:b_fax,
:b_web,
:other_email,
:primary_email,
:birthday_day,
:birthday_month,
:birthday_year,
:id_addr_prev,
:tmp,
:use_frequency,
:auto_create,
:notes,
:id_domain,
:id_tenant,
:type,
:type_id,
:firstname,
:surname,
:nickname,
:skype,
:facebook,
:etag,
:shared_to_all,
:hide_in_gab)";
$stmt = $dbDestino->prepare($sql7);
$stmt->bindParam(':id_user' , $idNuevo, PDO::PARAM_INT);
$stmt->bindParam(':str_id' , $contacto["str_id"], PDO::PARAM_STR);
$stmt->bindParam(':deleted' , $contacto["deleted"], PDO::PARAM_INT);
$stmt->bindParam(':date_created' , $contacto["date_created"], PDO::PARAM_STR);
$stmt->bindParam(':date_modified' , $contacto["date_modified"], PDO::PARAM_STR);
$stmt->bindParam(':fullname' , $contacto["fullname"], PDO::PARAM_STR);
$stmt->bindParam(':view_email' , $contacto["view_email"], PDO::PARAM_STR);
$stmt->bindParam(':use_friendly_nm' , $contacto["use_friendly_nm"], PDO::PARAM_INT);
$stmt->bindParam(':h_email' , $contacto["h_email"], PDO::PARAM_STR);
$stmt->bindParam(':h_street' , $contacto["h_street"], PDO::PARAM_STR);
$stmt->bindParam(':h_city' , $contacto["h_city"], PDO::PARAM_STR);
$stmt->bindParam(':h_state' , $contacto["h_state"], PDO::PARAM_STR);
$stmt->bindParam(':h_zip' , $contacto["h_zip"], PDO::PARAM_STR);
$stmt->bindParam(':h_country' , $contacto["h_country"], PDO::PARAM_STR);
$stmt->bindParam(':h_phone' , $contacto["h_phone"], PDO::PARAM_STR);
$stmt->bindParam(':h_fax' , $contacto["h_fax"], PDO::PARAM_STR);
$stmt->bindParam(':h_mobile' , $contacto["h_mobile"], PDO::PARAM_STR);
$stmt->bindParam(':h_web' , $contacto["h_web"], PDO::PARAM_STR);
$stmt->bindParam(':b_email' , $contacto["b_email"], PDO::PARAM_STR);
$stmt->bindParam(':b_company' , $contacto["b_company"], PDO::PARAM_STR);
$stmt->bindParam(':b_street' , $contacto["b_street"], PDO::PARAM_STR);
$stmt->bindParam(':b_city' , $contacto["b_city"], PDO::PARAM_STR);
$stmt->bindParam(':b_state' , $contacto["b_state"], PDO::PARAM_STR);
$stmt->bindParam(':b_zip' , $contacto["b_zip"], PDO::PARAM_STR);
$stmt->bindParam(':b_country' , $contacto["b_country"], PDO::PARAM_STR);
$stmt->bindParam(':b_job_title' , $contacto["b_job_title"], PDO::PARAM_STR);
$stmt->bindParam(':b_department' , $contacto["b_department"], PDO::PARAM_STR);
$stmt->bindParam(':b_office' , $contacto["b_office"], PDO::PARAM_STR);
$stmt->bindParam(':b_phone' , $contacto["b_phone"], PDO::PARAM_STR);
$stmt->bindParam(':b_fax' , $contacto["b_fax"], PDO::PARAM_STR);
$stmt->bindParam(':b_web' , $contacto["b_web"], PDO::PARAM_STR);
$stmt->bindParam(':other_email' , $contacto["other_email"], PDO::PARAM_STR);
$stmt->bindParam(':primary_email' , $contacto["primary_email"], PDO::PARAM_INT);
$stmt->bindParam(':birthday_day' , $contacto["birthday_day"], PDO::PARAM_INT);
$stmt->bindParam(':birthday_month' , $contacto["birthday_month"], PDO::PARAM_INT);
$stmt->bindParam(':birthday_year' , $contacto["birthday_year"], PDO::PARAM_INT);
$stmt->bindParam(':id_addr_prev' , $contacto["id_addr_prev"], PDO::PARAM_INT);
$stmt->bindParam(':tmp' , $contacto["tmp"], PDO::PARAM_INT);
$stmt->bindParam(':use_frequency' , $contacto["use_frequency"], PDO::PARAM_INT);
$stmt->bindParam(':auto_create' , $contacto["auto_create"], PDO::PARAM_INT);
$stmt->bindParam(':notes' , $contacto["notes"], PDO::PARAM_STR);
$stmt->bindParam(':id_domain' , $contacto["id_domain"], PDO::PARAM_INT);
$stmt->bindParam(':id_tenant' , $contacto["id_tenant"], PDO::PARAM_INT);
$stmt->bindParam(':type' , $contacto["type"], PDO::PARAM_INT);
$stmt->bindParam(':type_id' , $contacto["type_id"], PDO::PARAM_STR);
$stmt->bindParam(':firstname' , $contacto["firstname"], PDO::PARAM_STR);
$stmt->bindParam(':surname' , $contacto["surname"], PDO::PARAM_STR);
$stmt->bindParam(':nickname' , $contacto["nickname"], PDO::PARAM_STR);
$stmt->bindParam(':skype' , $contacto["skype"], PDO::PARAM_STR);
$stmt->bindParam(':facebook' , $contacto["facebook"], PDO::PARAM_STR);
$stmt->bindParam(':etag' , $contacto["etag"], PDO::PARAM_STR);
$stmt->bindParam(':shared_to_all' , $contacto["shared_to_all"], PDO::PARAM_INT);
$stmt->bindParam(':hide_in_gab' , $contacto["hide_in_gab"], PDO::PARAM_INT);
$res = $stmt->execute();
}//End for contacts
}//End if contacts
}//End for accounts
}//End if accounts
}//End for domains
}//End if domains
if($debug){
foreach($log as $registro){
echo $registro."<br/>";
}
}
?>