Jump to content
RodrigoVGarcia

mod referidos + puntos por referido | Adaptado

Recommended Posts

ACLARACION: este mod no es mio. Solo lo adapte a la nueva versión. Agradecimiento a los autores al final del tema.

 

Hola amigos. Hoy no vengo con una pregunta :o . Vengo para mostrarles como instalar el mod de referidos + puntos por referido.

Lo que hace este mod es que la gente pueda promocionar tu pagina para ganar puntos a cambio. La manera en que funciona es así:

Yo soy un usuario de tu web y quiero puntos gratis. Publicito tu web y les pido a la gente que pongan mi nombre en el campo de referidos cuando se van a registrar. Una vez que se registran a mi se me dan puntos automáticamente.

 

Bueno comencemos con la instalación:

 

1) Abrimos c.registro.php .Que se encuentra en inc/class, y despues de:

} else $valid = '0: Faltan datos y no se puede procesar tu solicitud.';

// retornar valor

return $valid;

}

Agregamos:

	/**

* @name referidos by tutan-kabron

* @access public

* @param

* @return string

*/

public function checkUserEmail2(){

global $tsCore;

// Variables


$referido = strtolower($_POST['referido']);

$which = empty($referido) ? 'referido' : 'referido';


// MENSAJE

$valid = '1: El '.$which.' no existe .'; // DEFAULT

//

if(!empty($referido)){

$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT `user_id` FROM `u_miembros` WHERE LOWER(user_name) = \''.$tsCore->setSecure($referido).'\' LIMIT 1');


if(db_exec('num_rows', $query) > 0) $valid = '0: El '.$which.' si existe.'; // EXISTE

} else $valid = '0: Este Campo no es obligatorio.';

// retornar valor

return $valid;

}

2) En el mismo archivo c.registro.php buscamos mas abajo:

function registerUser(){

global $tsCore, $tsUser;

// DATOS NECESARIOS

Y debajo de eso agregamos:

$referido=$_POST['referido'];

if(empty($referido)){

$referido='1';

}else{

$referido= $tsCore->setSecure($_POST['referido']);

}

3) En el mismo archivo c.registro.php buscamos un poquito mas abajo:

'user_email' => $_POST['email'],

Y debajo de eso agregamos:

'user_referido' => $referido,

4) Mas abajo en el mismo archivo c.registro.php buscamos:

// MENSAJE PARA DAR LA BIENVENIDA BIENVENIDA

Antes de eso agregamos:

if($referido != '1'){

db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_referidos = user_referidos + 1 WHERE user_name = \''.$tsData['user_referido'].'\'');

db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `referidos` (`user_referido`, `user_name`, `fecha`) VALUES (\''.$tsData['user_referido'].'\', \''.$tsData['user_nick'].'\', \''.time().'\')');

}

5) Abrimos ajax.registro.php que se encuentra en la carpeta inc/php/ajax y antes de:

case 'registro-geo':

Agregamos:

case 'registro-check-referido':



//<---


echo $tsReg->checkUserEmail2();


//--->


break;

6) En el mismo archivo arriba buscamos:

'registro-check-nick' => array('n' => 1, 'p' => ''),

Y debajo de eso agregamos:

'registro-check-referido' => array('n' => 1, 'p' => ''),

7) Abrimos p.registro.form.tpl que esta en la carpeta themes/tutema/templates/t.php_files y debajo de:

<div class="form-line">

<label for="email">E-mail</label>

<input name="email" type="text" id="email" tabindex="4" title="Ingresa tu dirección de email" onfocus="registro.focus(this)" onblur="registro.blur(this)" onkeydown="registro.clear_time(this.name)" onkeyup="registro.set_time(this.name)" autocomplete="off" /> <div class="help"><span><em></em></span></div>

</div>

Agregamos:

<div class="form-line">

<label for="referido">Ingresa tu referido (opcional)</label>

<input name="referido" type="text" id="referido" tabindex="1" title="Ingrese el nick del referido" onfocus="registro.focus(this)" onblur="registro.blur(this)" onkeydown="registro.clear_time(this.name)" onkeyup="registro.set_time(this.name)" autocomplete="off" /> <div class="help"><span><em></em></span></div>

</div>

8) Abrimos registro.js que esta en la carpeta themes/tutema/js y buscamos:

//Un elemento pierde el foco

blur: function(el){

var name = $(el).attr('name');

switch(name){

case 'nick':

case 'email':

this.clear_time(name);

$(el).removeClass('selected');

this.check_campo(el, false, true);

break;

default:

$(el).removeClass('selected');

this.check_campo(el, false, true);

break;

}

},

Lo reemplazamos por:

//Un elemento pierde el foco

blur: function(el){

var name = $(el).attr('name');

switch(name){

case 'nick':

case 'referido':

case 'email':

this.clear_time(name);

$(el).removeClass('selected');

this.check_campo(el, false, true);

break;

default:

$(el).removeClass('selected');

this.check_campo(el, false, true);

break;

}

},

9) Mas abajo buscamos:

/* password */

case 'password':

Y antes de eso agregamos:

/* referido by tutan-kabron */

case 'referido':

//Si ya paso por aca y no hubieron cambios, devuelvo el mismo status

if(!force_check && this.datos[campo] === value)

if(this.datos_status[campo]=='empty')

return no_empty ? this.show_status(el, this.datos_status[campo], this.datos_text[campo]) : this.hide_status(el, this.datos_status[campo], this.datos_text[campo]);

else

return this.show_status(el, this.datos_status[campo], this.datos_text[campo]);

//Almaceno el dato

this.datos[campo] = value;



//Caracteres validos

if(/[^a-zA-Z0-9_]/.test(value))

return this.show_status(el, 'error', 'Sólo se permiten letras, nómeros y guiones(_)');



//Compruebo si ya esta en uso

//Compruebo el Cache

var value_lower = value.toLowerCase();

if(!this.cache[campo]){

this.cache[campo] = new Array();

this.cache[campo][value_lower] = new Array();

}else if(this.cache[campo][value_lower]){

if(this.cache[campo][value_lower]['status'])

return registro.show_status(el, 'ok', this.cache[campo][value_lower]['text']);

else

return registro.show_status(el, 'error', this.cache[campo][value_lower]['text']);

}

this.show_status(el, 'loading', 'Comprobando referido...');

$('#loading').fadeIn(250);

$.ajax({

type: 'POST',

url: global_data.url + '/registro-check-referido.php?t=nombre de usuario',

data: 'referido='+value,

success: function(h){

registro.cache[campo][value_lower] = new Array();

registro.cache[campo][value_lower]['text'] = h.substring(3);

switch(h.charAt(0)){

case '0': //Estaba en uso

registro.cache[campo][value_lower]['status'] = true;

registro.show_status(el, 'ok', h.substring(3));

break;

case '1': //No esta en uso

registro.cache[campo][value_lower]['status'] = false;

registro.show_status(el, 'error', h.substring(3));

break;

}

$('#loading').fadeOut(350);

},

error: function(){

registro.show_status(el, 'error', 'Hubo un error al intentar procesar lo solicitado');

registro.datos[campo] = '';

}

});

break;

/* termina campo referido */

10) Ahora buscamos el archivo c.admin.php que se encuentra en la carpeta inc/class y antes de:

/*

getNoticias()

*/

function getNoticias()

Agregamos:

/*

getReferidos()

*/

function getReferidos()

{


//

$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT u.user_id, u.user_name, r.* from referidos AS r LEFT JOIN u_miembros AS u ON r.user_referido = u.user_name ORDER BY r.id DESC');

$data = result_array($query);


//

return $data;

}

/*

getReferido()

*/

function getReferido()

{

global $tsCore;

//

$id = $tsCore->setSecure($_GET['id']);

//

$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT `id`, `user_name`, `user_referido`, `fecha` FROM referidos WHERE id = \'' .

(int)$id . '\' LIMIT 1');

$data = mysql_fetch_assoc($query);


//

return $data;

}

/*

deReferidos();

*/

function delReferido()

{

$id = $_GET['id'];

if (!db_exec('num_rows', db_exec(array(__FILE__, __LINE__), 'query', 'SELECT `id` FROM `referidos` WHERE `id` = \'' .

(int)$id . '\' LIMIT 1'))) {

return 'El id ingresado no existe.';

}

$query = db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM `referidos` WHERE `id` = \'' . (int)$id . '\'');

}

11) Abrimos el archivo admin.php que se encuentra en la carpeta inc/php y antes de:

/** NOTICIAS **/

} elseif($action == 'news'){

Agregamos:

/** REFERIDOS by tutan-kabron**/

} elseif($action == 'referidos'){

if(empty($act)) $smarty->assign("tsReferidos",$tsAdmin->getReferidos());


elseif($act == 'borrar'){

if($tsAdmin->delReferido()) $tsCore->redirectTo($tsCore->settings['url'].'/admin/referidos?borrar=true');

}

12)Abrimos el archivo t.admin.tpl que se encuentra en la carpeta themes/tutema/templates y antes de:

{/if}

Agregamos:

{elseif $tsAction == 'referidos'}

{include file='admin_mods/referidos.tpl'}

13) Abrimos m.admin_sidemenu.tpl que se encuentra en la carpeta themes/tutema/templates/admin_mods y al final agregan:

<h4>Utilidades</h4>

<ul class="cat-list">

<li id="a_users"><span class="cat-title"><a href="{$tsConfig.url}/admin/referidos">Referidos</a></span></li>

</ul>

14) Abrimos c.cuenta.php que se encuentra en la carpeta inc/class y buscamos:

	/*
		loadHeadInfo($user_id)
	*/
	function loadHeadInfo($user_id){
		global $tsUser, $tsCore;
		// INFORMACION GENERAL
		$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT u.user_id, u.user_name, u.user_registro, u.user_lastactive, u.user_referidos, u.user_activo, u.user_baneado, p.user_sexo, p.user_pais, p.p_nombre, p.p_avatar, p.p_mensaje, p.p_socials, p.p_empresa, p.p_configs FROM u_miembros AS u, u_perfil AS p WHERE u.user_id = \''.(int)$user_id.'\' AND p.user_id = \''.(int)$user_id.'\'');
		$data = db_exec('fetch_assoc', $query);

Y despues de:

u.user_lastactive,

Ponemos a su derecha:

 u.user_referidos,

Quedando así:

u.user_lastactive, u.user_referidos,

15) Abrimos m.perfil_headinfo.tpl que se encuentra en la carpeta themes/tutema/templates/modules y despues de:

<li>

<strong>{$tsInfo.stats.user_comentarios}</strong>

<span>Comentarios</span>

</li>

Agregamos:

<li>

<strong>{$tsInfo.user_referidos}</strong>

<span>Referidos</span>

</li>

16) Suben el siguiente archivo a la carpeta themes/tutema/templates/admin_mods

http://www.mediafire.com/file/x9g4xvu6a3e2zxa/referidos.tpl

 

17) Ahora van phpmyadmin y ponen las siguientes consultas:

(Recuerden en tu phpmyadmin van a donde dice SQL para hacer las consultas)

Primero hacen esta:

ALTER TABLE `u_miembros` ADD `user_referidos` INT( 11 ) NOT NULL DEFAULT '0'

Y luego esta:

CREATE TABLE IF NOT EXISTS `referidos` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user_referido` varchar(60) CHARACTER SET latin1 NOT NULL,

`user_name` varchar(60) CHARACTER SET latin1 NOT NULL,

`fecha` int(12) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=16 ;

Eso fue todo por la parte de solamente referidos. Si quieren solamente los referidos sin puntos no sigas con los siguientes pasos.

Ahora viene la parte de agregarle puntos al que reciba referidos:

 

1) Ahora van phpmyadmin y ponen las siguientes consultas:

(Recuerden en tu phpmyadmin van a donde dice SQL para hacer las consultas)

Ponen lo siguiente:

ALTER TABLE w_configuracion ADD p_p_refs INT(11) NOT NULL;

2) Buscamos c.admin.php que se encuentra en la carpeta inc/class y luego de:

'offline_message' => $tsCore->setSecure($tsCore->parseBadWords($_POST['offline_message'])),

Agregamos:

'p_p_refs' => $tsCore->setSecure($_POST['p_p_refs']),

3) En el mismo archivo buscamos:

'\', `offline_message` = \'' . $c['offline_message'] .

Y agregamos al lado (a su derecha):

Fijensen que el Punto ( . ) va con un espacio a la izquierda y un espacio a la derecha.

'\', `p_p_refs` = \'' . $c['p_p_refs'] . 

4) Buscamos en c.registro.php que se encuentra en la carpeta inc/class:

if($referido != '1'){

db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_referidos = user_referidos + 1 WHERE user_name = \''.$tsData['user_referido'].'\'');

db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `referidos` (`user_referido`, `user_name`, `fecha`) VALUES (\''.$tsData['user_referido'].'\', \''.$tsData['user_nick'].'\', \''.time().'\')');

}

Y lo reemplazamos por:

if($referido != '1'){
            db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_puntos = user_puntos + \''.(int)$tsCore->settings['p_p_refs'].'\' WHERE user_name = \''.$tsData['user_referido'].'\'');
            db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_referidos = user_referidos + 1  WHERE user_name = \''.$tsData['user_referido'].'\'');
           db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `referidos` (`user_referido`, `user_name`, `fecha`) VALUES (\''.$tsData['user_referido'].'\', \''.$tsData['user_nick'].'\', \''.time().'\')');
            $aviso = 'Tu referido <a href="'.$tsCore->settings['url'].'/perfil/'.$tsData['user_nick'].'"><b>'.$tsData['user_nick'].'</b></a>se ha registrado. <br /><br/>  Dale la bienvenida! <br />Obtentienes '.(int)$tsCore->settings['p_p_refs'].' puntos por tu referido';
            db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_avisos` (`user_id`, `av_subject`, `av_body`, `av_date`, `av_type`) VALUES (\''.$tsUser->getUserId($tsData['user_referido']).'\', \'Nuevo referido\', \''.$aviso.'\', \''.'\', \''.time().'\', \'4\')');
            }

5) Por último abrimos el archivo m.admin_configs.tpl que se encuentra en la carpeta themes/tutema/templates/admin_mods y buscamos:

<dl>
                                            <dt><label for="ai_max_com">Comentarios por post:</label><br /><span>N&uacute;mero m&aacute;ximo de comentarios por p&aacute;gina en los post.</span></dt>
                                            <dd><input type="text" id="ai_max_com" name="max_com" maxlength="3" value="{$tsConfig.c_max_com}" class="searchBar" style="width: 280px;"/></dd>
                                        </dl>

Y debajo ponemos:

<dl>
                                        <dt><label for="p_p_refs">Puntos por referido</label><br /><span>Puntos que recibira como bonificacion un user al subir un posts.</span></dt>
                                        <dd><input type="text" id="p_p_refs" name="p_p_refs" style="width:10%" maxlength="3" value="{$tsConfig.p_p_refs}" /></dd>
                                        </dl>

Y listo, terminado.

 

Capturas:

 

sA5grxO.png

 

DyIIqWf.png

 

emX9SFU.png

 

0XXBdih.png

 

RWm2VkQ.png

 

Le agradezco enormemente a:

tutan-kabron por crear el mod en primer lugar. 

 

k_jupiter por modificar el mod para que tuviera puntos por referido.

Vellenger por poner el fix para que el mod ande perfecto.

Y a KillerJohn por pedirme si subía el tema. :P

 

Espero que les sirva. Supongo que mas a los nuevos que a los usuarios viejos. Ya que los viejos, ya saben hacerlo.

 

Saludos!

 

 

  • Me gusta 1

Compartir este post


Enlace al post
Compartir en otros sitios

Si no os llegan las notificaciones cambiar:

db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_avisos` (`user_id`, `av_subject`, `av_body`, `av_date`, `av_type`) VALUES (\''.$tsUser->getUserId($tsData['user_referido']).'\', \'Nuevo referido\', \''.$aviso.'\', \''.'\', \''.time().'\', \'4\')');

por:

db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_avisos` (`user_id`, `av_subject`, `av_body`, `av_date`, `av_type`) VALUES (\''.$tsUser->getUserId($tsData['user_referido']).'\', \'Nuevo referido\', \''.$aviso.'\', \''.time().'\', \'4\')');

 

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario


  • Similar Content

    • Por unfernacho
      Hola amigos alguien podría ayudarme a adaptar este mod para que solo puedan utilizarlo usuarios de determinados rangos? el mod es el siguiente:
      Lo que quería es que en la creación de un rango esté la opción de si los usuarios de ese rango pueden publicar un vídeo en su perfil, el mod que siga siendo el mismo solo que tenga esa opción  alguien podría? espero sus respuestas!!
       
    • Por Miguel92
      Bueno les presento un complemento que lo tengo en demo32.hol.es, lo hice porque el panel de la izquierda era muy tosco y feo así que decidí cambiarlo por el de la derecha si alguien quiere este panel, se los pasaré...lo hago así porque no se si les gustará o si lo usarán o no!
       

       
      Para ello deben tener el conjunto de Glyphicon Halflings aunque también se los dejaré por si acaso!
       
      Si la imagen no se ve haz clic aquí
      Después le haré el mod para que el usuario elija la imagen del fondo desde su cuenta!...
    • Por Miguel92
      Hola, este es un mod/mini-mod/complemento que aplica un background solo en el perfil... he tratado de hacerlo con home, fotos, tops, etc. desde la cuenta, en teoría lo que quería hacer es que los usuarios eligieran las imágenes que querían poner para las secciones ya mencionadas, pero solo logré para el perfil... Si el mod ya existía pido perdón, porque no lo he visto
       
      1) Ejecutar esta consulta
      ALTER TABLE `u_perfil` ADD `p_fondo` VARCHAR(200) NOT NULL;  2) Ir a c.cuenta.php y buscar 
      function loadHeadInfo($user_id){         global $tsUser, $tsCore;         // INFORMACION GENERAL y dentro de esta función buscamos 
      p.p_socials, p.p_empresa, y agregar a lado de esto
      p.p_fondo,  Luego buscar más abajo
      }         // COMPROBAR PORCENTAJE         $total = array(5,8,9,8,9); // CAMPOS EN CADA CATEGORIA         $tid = $save - 1; y arriba agregamos
                  case 9:                 // IN DB                 $perfilData = array(                     'fondo' => $tsCore->setSecure($_POST['fondo']), //Este es para el perfil                 );             break;  
      3) Vamos a estilos.css y en body dentro de las llaves {...} agregaremos esto
          background-position: center center;     background-repeat: no-repeat;     background-attachment: fixed;     background-size: cover;  
      4) Luego buscar tuTheme/templates/t.cuenta.tpl y debajo de 
      <li><a onclick="cuenta.chgtab(this)">Cambiar Nick</a></li> agregamos
      <li><a onclick="cuenta.chgtab(this)">Fondo</a></li> un poco más abajo debajo de
      {include file='modules/m.cuenta_nick.tpl'} agregamos
      {include file='modules/m.cuenta_fondo.tpl'}  
      5) Crearemos el archivo m.cuenta_fondo.tpl y la colocaremos en modules
      <div class="content-tabs fondo" style="display:none">     <fieldset>     <div class="alert-cuenta cuenta-9"></div>              <div class="field" style="padding: 5px 0">             <label for="fondo" style="display: inline-block;">Fondo del Perfil:</label>             <input type="text" value="{$tsPerfil.p_fondo}" maxlength="200" name="fondo" id="fondo" class="text cuenta-save-9" style="width:65%; display: inline-block;">         </div>    </fieldset>                   <div class="buttons">             <input type="button" value="Guardar" onclick="cuenta.save(9)" class="mBtn btnOk"/>         </div>                                      <div class="clearfix"></div> </div>  
      6) Último paso vamos a templates/sections/main_header.tpl y buscamos
      </head> <body> y arriba agregamos
      {literal} <style>     body {         background-image: url({/literal}{$tsInfo.p_fondo}{literal});     } </style> {/literal} RESULTADO FINAL:

       
       
      Para evitar las puntas blancas busquen en estilos.css
       /****** Bordes Redondos ******/  debajo agregan ↓ ↓ ↓ 
      .rtop { border-radius: 11px 11px 0 0; } .rbott { border-radius: 0 0 11px 11px; }  y listo quedará más lindo
      Para el fondo con opaco → ir a sections/main_header.tpl y buscar <body> debajo pegamos
      <div id="background_transparent"></div> y en estilo.css debajo de body { ... } pegamos
      Fondo 1
      #background_transparent {     background-color: rgba(255,255,255,.6);     position: fixed;     height: 100%;     top: 0;     width: 100%;     z-index: -1; } Fondo 2
      #background_transparent {     background-color: rgba(0,0,0,.8);     position: fixed;     height: 100%;     top: 0;     width: 100%;     z-index: -1; } Fondo1                                                           Fondo2

    • Por unfernacho
      Bueno el mod consistiría en que el usuario pueda agrandar el tamaño de la letra a su vista, por ejemplo la fuente por default es 13px, que el usuario pueda agrandarla hasta 22px que es un tamaño que ya sin anteojos ya se podría leer fácilmente digamos, entonces a el usuario le aparezcan 2 botones por ejemplo [ - ] [ + ] y vaya subiendo y bajando el tamaño de la letra según los clicks del usuario por ejemplo cuando el usuario empiece a clieckear el botón [ + ] vaya subiendo el tamaño de la letra de esta forma: (13px por default)(16px 1 click)(18px 2 clicks)(21px 3 clicks)(24px 4 clicks), luego de bajada lo mismo hasta que se estanque en 13px que es el tamaño por default.
       
      alguien podría lograr hacerlo? espero sus respuestas!!! gracias!
       
    • Por unfernacho
      Bueno antes hice un tema pidiendo si alguien podía adaptar un mod, pero ahora creo que ya se como hacer para que esto funcione, pero no se donde agregarlo.
      El mod es el siguiente:
      Lo que quiero hacer es que el icono aparte de que aparezca al lado del nombre en el perfil también aparezca dentro del post y al pasar el ratón por arriba del nombre como se muestra en estas imagenes:
      ASI SE VE EL MOD ORIGINAL

      LO QUE QUIERO ES AGREGAR ESE ICONO EN ESTAS PARTES DE LA WEB

       

       
      Entonces lo que creo que hay que hacer basándome en el mod original es agregar el u.user_vips, al PHP correspondiente y el {if $tsInfo.user_vips} al lado del NICK, lo que no se es en que archivos se encuentran en que php se agrega el u.user_vips, y en que parte, y en que archivo se agrega el info.user_vips, alguno podría ayudarme? gracias!
      @Kmario19 @Vellenger necesito su ayuda 
  • Navegando Recientemente   0 miembros

    No registered users viewing this page.

×