Phpost

Versión completa: Sistema de Referidos v1.0
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Sistema de Referidos v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost


Capturas
 
[img]Registrate o inicia tu sesión para ver este contenido[/img]
 
[img]Registrate o inicia tu sesión para ver este contenido[/img]
 
[img]Registrate o inicia tu sesión para ver este contenido[/img]
 


Cada usuario tiene un enlace de invitación único. Cuando alguien se registra con ese enlace y activa su cuenta, el que invitó gana 10 puntos automáticamente y recibe una notificación.


🤝 Características
 
  • Enlace de referido único por usuario: tudominio.com/registro?ref=NICK
  • Puntos solo al activar la cuenta — evita cuentas falsas
  • Un usuario solo puede tener un referidor
  • Nadie puede referirse a sí mismo
  • Notificación automática al ganar los puntos
  • Widget en el perfil con enlace, estadísticas y lista de invitados
  • Botón copiar enlace con un clic
  • El ref se guarda en sesión — no se pierde si el usuario navega antes de registrarse
 


📋 Requisitos
 
  • Risus Nova 2.0 instalado y funcionando
  • PHP 8.0+
  • MySQL 5.7+ / MariaDB 10.4+
 


🛠️ Instalación

Paso 1 — Ejecutar el instalador

Sube la carpeta install/ a la raíz y accede a:

 
Código:
Registrate o inicia tu sesión para ver este contenido

⚠️ Elimina la carpeta install/ cuando termine.


Paso 2 — Subir los archivos
 
Código:
inc/class/c.referidos.php                              →  inc/class/
themes/default/templates/modules/m.perfil_referidos.tpl →  themes/default/templates/modules/

Paso 3 — En c.registro.php

Buscar:
 
Código:
$tsData['user_id'] = db_exec('insert_id');

Añade justo después:
 
Código:
// ── Referidos ──
require_once TS_CLASS . 'c.referidos.php';
$ref_nick = isset($_SESSION['ref_nick']) ? $_SESSION['ref_nick'] : ($tsCore->setSecure($_GET['ref'] ?? '') ?: $tsCore->setSecure($_POST['ref'] ?? ''));
if (!empty($ref_nick)) {
    $tsRef = new tsReferidos();
    $tsRef->guardarReferido($tsData['user_id'], $ref_nick);
}
// ────────────────

Paso 4 — En c.user.php — userActivate()

Abre inc/class/c.user.php y busca dentro de userActivate() esta línea:
 
Código:
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_activo = 1 WHERE user_id = \''.$tsUserID.'\'' )) {
    return $tsData;

Cambiar por:
 
Código:
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_activo = 1 WHERE user_id = \''.$tsUserID.'\'' )) {
    require_once TS_CLASS . 'c.referidos.php';
    $tsRef = new tsReferidos();
    $tsRef->procesarActivacion((int)$tsUserID);
    return $tsData;

Esto cubre tanto la activación por email como la activación directa sin email.

Paso 5 — Guardar ref en sesión (header.php)

Al final de header.php añade:
 
Código:
// ── Guardar ref en sesión ──
if (!empty($_GET['ref'])) {
    $_SESSION['ref_nick'] = $tsCore->setSecure($_GET['ref']);
}
// ───────────────────────────

Paso 6 — Widget en el perfil

En perfil.php buscar:
Código PHP:
$smarty->assign("tsGeneral",$tsGeneral); 

Debajo agregar:
 
Código:
// ── Referidos ──
require_once TS_CLASS . 'c.referidos.php';
if ($tsUser->uid == $usuario['user_id']) {
    $tsRef = new tsReferidos();
    $ref_data = $tsRef->getReferidos($tsUser->uid);
    $ref_data['url'] = tsReferidos::getUrl($tsUser->nick);
    $ref_data['puntos_por_referido'] = tsReferidos::PUNTOS_POR_REFERIDO;
    $smarty->assign('tsReferidos', $ref_data);
}
// ────────────────

En m.perfil_sidebar.tpl añade donde quieras:
Código:
{include file='modules/m.perfil_referidos.tpl'}
 


⚙️ Configurar puntos

Los puntos por referido se configuran en inc/class/c.referidos.php:
Código:
const PUNTOS_POR_REFERIDO = 10;
 


🗑️ Desinstalar
 
Código:
DROP TABLE IF EXISTS u_referidos;

Elimina los archivos y quita los hooks añadidos.

 
Descarga

Mediafire
http://Registrate o inicia tu sesión par... contenido

Google Drive
http://Registrate o inicia tu sesión par... contenido



¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.