Created
June 30, 2020 08:29
-
-
Save joelmiguelvalente/609bc0a3938f6c7fbfdd8f409ecf19e9 to your computer and use it in GitHub Desktop.
Para otro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php if ( ! defined('TS_HEADER')) exit('No se permite el acceso directo al script'); | |
/** | |
* Modelo para el control del registro de usuarios | |
* | |
* @name c.registro.php | |
* @author PHPost Team | |
*/ | |
class tsRegistro{ | |
/** | |
* @name checkUserEmail($pid) | |
* @access public | |
* @param | |
* @return string | |
*/ | |
public function checkUserEmail(){ | |
global $tsCore; | |
// Variables | |
$username = strtolower($_POST['nick']); | |
$email = strtolower($_POST['email']); | |
$which = empty($username) ? 'email' : 'nick'; | |
// MENSAJE | |
$valid = '1: El '.$which.' está disponible.'; // DEFAULT | |
if($email) { | |
$Aceptados = array('yahoo.com', 'gmail.com', 'live.com', 'live.com.ar', 'hotmail.com'); | |
$Correos = explode("@", $email); | |
if(!in_array($Correos[1], $Aceptados)) return '0: Tu proveedor de correo no está permitido en nuestro sitio.'; | |
} | |
// | |
if(!empty($username) || !empty($email)){ | |
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT `user_id` FROM `u_miembros` WHERE '. ( !empty($username) ? 'LOWER(user_name) = \''.$tsCore->setSecure($username).'\'' : 'LOWER(user_email) = \''.$tsCore->setSecure($email).'\'' ) .' LIMIT 1'); | |
if(db_exec('num_rows', $query) > 0) $valid = '0: El '.$which.' ya se encuentra registrado.'; // EXISTE | |
if(db_exec('num_rows', db_exec(array(__FILE__, __LINE__), 'query', 'SELECT id FROM w_blacklist WHERE (type = \'3\' && value = \''.$tsCore->setSecure(strstr($email, '@')).'\') || (type = \'4\' && value = \''.$tsCore->setSecure(strstr($email, '@', true)).'\') || (type = \'4\' && value = \''.$tsCore->setSecure($username).'\') LIMIT 1'))) $valid = '0: Parte del '.$which.' no está permitida'; | |
} else $valid = '0: Faltan datos y no se puede procesar tu solicitud.'; | |
// retornar valor | |
return $valid; | |
} | |
/** | |
* @name registerUser() | |
* @access public | |
* @param | |
* @return string | |
*/ | |
function registerUser(){ | |
global $tsCore, $tsUser; | |
// DATOS NECESARIOS | |
$tsData = array( | |
'user_nick' => $tsCore->parseBadWords($_POST['nick']), | |
'user_password' => $tsCore->parseBadWords($_POST['password']), | |
'user_email' => $_POST['email'], | |
'user_sexo' => $_POST['sexo'] == 'f' ? '0' : 1, | |
'user_terminos' => $_POST['terminos'], | |
'user_captcha' => $_POST['g-recaptcha-response'], | |
'user_registro' => time(), | |
); | |
// ERRORS | |
$errors = array( | |
'default' => 'El campo es requerido', | |
'nick' =>'El nombre de usuario ya se encuentra registrado.', | |
'password' => 'La contraseña tiene que ser distinta que el nick', | |
'email' => 'El formato es incorrecto', | |
'email_2' => 'El email ya está en uso', | |
'captcha' => 'Validación incorrecta', | |
); | |
// COMPROBAR VACIOS | |
foreach($tsData as $key => $val){ | |
if($val == '') { | |
$key_error = str_replace('user_','',$key); | |
return $key_error.': '.$errors['default']; | |
} | |
} | |
/** reCAPTCHA **/ | |
$recaptcha = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $tsCore->settings['skey'] . '&response=' . $tsData['user_captcha'] . '&remoteip=' . $tsCore->getIP(); | |
// Obtener respuesta | |
$response = file_get_contents($recaptcha); | |
// Extraer resultado | |
$ext1 = explode('"success":', $response); | |
$ext2 = explode(',', $ext1[1]); | |
// Comprobar resultado | |
$valid = trim($ext2[0]); | |
// Devolver respuesta si es incorrecta | |
if ($valid == 'false') return 'recaptcha: No hemos podido validar tu humanidad'; | |
// COMPROBAR QUE EL NOMBRE DE USUARIO SEA VÁLIDO | |
if (!preg_match("/^[a-zA-Z0-9_-]{4,16}$/", $tsData['user_nick'])) die('nick: Nombre de usuario inválido'); | |
// COMPROBAR NUEVAMENTE QUE EL USUARIO O EMAIL NO SE ENCUENTREN REGISTRADOS | |
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT `user_name`,`user_email` FROM `u_miembros` WHERE LOWER(user_name) = \''.$tsCore->setSecure($tsData['user_nick']).'\' OR LOWER(user_email) = \''.$tsCore->setSecure($tsData['user_email']).'\' LIMIT 1'); | |
if(db_exec('num_rows', $query) > 0 || !filter_var($tsData['user_email'], FILTER_VALIDATE_EMAIL) || $tsCore->settings['c_reg_active'] == 0) die('0: Hubo problemas al intentar registrarle, hay campos vacíos, inválidos o no se le permite el registro.'); | |
// PASAMOS BIEN... AHORA INSERTAR DATOS | |
$key = md5(md5($tsData['user_password']).strtolower($tsData['user_nick'])); | |
$IPGlobal = file_get_contents("http://www.geoplugin.net/json.gp?ip=".$tsCore->getIP()); | |
$DatosIP = json_decode($IPGlobal, true); | |
// | |
if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_miembros` (`user_name`, `user_password`, `user_email`, `user_rango`, `user_registro`) VALUES (\''.$tsCore->setSecure($tsData['user_nick']).'\', \''.$tsCore->setSecure($key).'\', \''.$tsCore->setSecure($tsData['user_email']).'\', '.(empty($tsCore->settings['c_reg_rango']) ? 3 : $tsCore->settings['c_reg_rango']).', \''.$tsData['user_registro'].'\')')){ | |
$tsData['user_id'] = db_exec('insert_id'); | |
// INSERTAMOS EL PERFIL | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_perfil` (`user_id`, `user_dia`, `user_mes`, `user_ano`, `user_pais`, `user_sexo`) VALUES (\'' . (int) $tsData['user_id'] . '\', \''.(int)date('d').'\', \''.(int)date('m').'\', \''.(int)date('Y',strtotime('18 years ago')).'\', \''.$tsCore->setSecure($DatosIP["geoplugin_countryCode"]).'\', \''.(int)$tsData['user_sexo'].'\')'); | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_portal` (`user_id`) VALUES (\''.$tsData['user_id'].'\')'); | |
# INSERTAMOS MEDALLA DE REGISTRO | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `w_medallas_assign` (`medal_id`, `medal_for`, `medal_date`, `medal_ip`) VALUES (\'2\', \''.(int)$tsData['user_id'].'\', \''.time().'\', \''.$_SERVER['REMOTE_ADDR'].'\')'); | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO u_monitor (user_id, obj_uno, not_type, not_date) VALUES (\''.(int)$tsData['user_id'].'\', \'2\', \'15\', \''.time().'\')'); | |
//AVATAR ALEATORIO BY TO-UP.NET | |
$numero = rand(1,10); | |
if($tsData['user_sexo'] == 1){ | |
$imagen = $numero.'.jpg'; | |
$genero = 'm'; | |
}else{ | |
$imagen = $numero.'.jpg'; | |
$genero = 'f'; | |
} | |
copy('../../files/avatar/registro/'.$genero.'/'.$imagen.'','../../files/avatar/'.$tsData['user_id'].'_120.jpg'); | |
copy('../../files/avatar/registro/'.$genero.'/mini/'.$imagen.'','../../files/avatar/'.$tsData['user_id'].'_50.jpg'); | |
db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_perfil SET p_avatar = 1 WHERE user_id = \''.$tsData['user_id'].'\''); | |
// MENSAJE PARA DAR LA BIENVENIDA BIENVENIDA | |
$send_welcome = $tsCore->settings['c_met_welcome']; | |
if($send_welcome > 0 && $send_welcome < 4) { | |
$msg_bienvenida = $tsCore->parseBBCode($tsCore->settings['c_message_welcome']); | |
$sexo = 'Bienvenid' . ($tsData['user_sexo'] == 1 ? 'o' : 'a'); | |
$b = array('[usuario]', '[welcome]', '[web]'); | |
$r = array($tsData['user_nick'], $sexo, $tsCore->settings['titulo']); | |
$msg_bienvenida = str_ireplace($b, $r, $msg_bienvenida); | |
switch($send_welcome) { | |
case 1: | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_muro` (p_user, p_user_pub, p_date, p_body, p_type) VALUES (\''.(int)$tsData['user_id'].'\', \'1\', \''.time().'\', \''.$msg_bienvenida.'\', \'1\')'); | |
$m_id = db_exec('insert_id'); | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_monitor` (user_id,obj_user,obj_uno, not_type,not_total,not_menubar,not_monitor) VALUES (\''.(int)$tsData['user_id'].'\', \'1\', \''.$m_id.'\', \'12\', \'1\', \'1\', \'1\')'); | |
break; | |
case 2: | |
$preview = substr($msg_bienvenida,0,75); | |
if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_mensajes` (`mp_to`, `mp_from`, `mp_subject`, `mp_preview`, `mp_date`) VALUES ('.$tsData['user_id'].', \'1\', \''.$sexo.' a ' .$tsCore->settings['titulo'].'\', \''.$preview.'\',\''.time().'\')')) { | |
$mp_id = db_exec('insert_id'); | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_respuestas` (mp_id, mr_from, mr_body, mr_ip, mr_date) VALUES (\''.(int)$mp_id.'\', \'1\', \''.$msg_bienvenida.'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.time().'\')'); } | |
break; | |
case 3: | |
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_avisos` (`user_id`, `av_subject`, `av_body`, `av_date`, `av_type`) VALUES (\''.$tsData['user_id'].'\', \''.$sexo.' a ' .$tsCore->settings['titulo'].'\', \''.$msg_bienvenida.'\', \''.time().'\', \'4\')'); | |
break; | |
} | |
} | |
// ENVIAMOS EL EMAIL | |
if(empty($tsCore->settings['c_reg_activate'])){ | |
$key = substr(md5(time()),0,32); | |
//La otra opción muestra más ceros de la cuenta e.e con un substr en el envío tal vez se solucione. | |
if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO w_contacts (user_id, user_email, time, type, hash) VALUES (\''.(int)$tsData['user_id'].'\', \''.$tsCore->setSecure($tsData['user_email']).'\', \''.time().'\', \'2\', \''.$key.'\' )')){ | |
include(TS_ROOT.DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'c.emails.php'); | |
$tsEmail = new tsEmail('activar', 'registro'); | |
$to = $tsData['user_email']; | |
$subject = 'Active su cuenta'; | |
$body = '<div style="background:#0f7dc1;padding:10px;font-family:Arial, Helvetica,sans-serif;color:#000"> | |
<h1 style="color:#FFFFFF; font-weight:bold; font-size:30px;">'.$tsCore->settings['titulo'].'</h1> | |
<div style="background:#FFF;padding:10px;font-size:14px"> | |
<h2 style="font-family:Arial, Helvetica,sans-serif;color:#000;font-size:22px">Hola '.$tsData['user_nick'].'</h2> | |
<p style="font-family:Arial, Helvetica,sans-serif;color:#000">¡Te damos la bienvenida a '.$tsCore->settings['titulo'].'!</p> | |
<p>Para finalizar con el proceso de registro, confirma tu dirección de email accediendo a <a href="'.$tsCore->settings['url'].'/validar/'.$key.'/2/'.$tsCore->setSecure($tsData['user_email']).'">este enlace</a> | |
</p><br /> <br /> | |
<p>Posteriormente podrá acceder con las siguientes credenciales:</p> | |
<p>Usuario: '.$tsData['user_nick'].' <br /> Contraseña: '.$tsData['user_password'].'</p><br /> | |
<p>Antes de empezar a interactuar con la comunidad, te recomendamos que visites el <a target="_blank" href="http://'.$tsCore->settings['url'].'/pages/protocolo/">Protocolo</a> del sitio.</p> | |
<p>Esperamos que disfrutes enormemente tu visita.</p> | |
<p>¡Te damos la bienvenida a Muchas gracias!</p> | |
<p>Staff de '.$tsCore->settings['titulo'].'.</p> | |
<div style="border-top:#CCC solid 1px;padding:10px 0"> | |
<span style="color:#666;font-size:11px"> | |
<center>El staff de <strong>'.$tsCore->settings['titulo'].'</strong></center> | |
</span> | |
</div> | |
</div> | |
</div>'; | |
// <-- | |
$tsEmail->emailTo = $to; | |
$tsEmail->emailSubject = $subject; | |
$tsEmail->emailBody = $body; | |
$tsEmail->emailHeaders = $tsEmail->setEmailHeaders(); | |
$tsEmail->sendEmail($from, $to, $subject, $body) or die('0: Hubo un error al intentar procesar lo solicitado'); | |
return '1: <div class="box_cuerpo" style="padding: 12px 20px;text-align: center;">Te hemos enviado un correo a <b>'.$to.'</b> con los últimos pasos para finalizar con el registro.<br><br>Si en los próximos minutos no lo encuentras en tu bandeja de entrada, por favor, revisa tu carpeta de correo no deseado, es posible que se haya filtrado.<br><br>¡Muchas gracias!</div>'; | |
}else{ | |
return '0: <div class="box_cuerpo" style="padding: 12px 20px;">Ocurrió un error, inténtelo de nuevo.</div>'; | |
} | |
} else { | |
$tsUser->userActivate($tsData['user_id'],md5($tsData['user_registro'])); | |
$tsUser->loginUser($tsData['user_nick'], $tsData['user_password'], true); | |
return '2: <div class="box-registre-checked shadow rounded"><h1 class="text-center">🎉 Felicidades 🎉</h1><p class="my-4 px-2">Ya eres parte de <b>'.$tsCore->settings['titulo'].'</b>! Ahora puedes disfrutar y compartir todo el contenido que existe en nuestra comunidad sin ninguna restricción, y tu cuenta ha sido activada.<br>¡Muchas gracias!</p><a data-change href="'.$tsCore->settings['url'].'/cuenta/" class="btn btn-lg btn-success btn-block btn-login text-uppercase font-weight-bold mb-2">Comenzar Ahora!</a></div>'; | |
} | |
} else return '0: Ocurrio un error, intentalo maás tarde.'; | |
} | |
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment