Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

ErrorNaN

Editor
  • Contenido

    771
  • Mensajes en Chat

    576
  • Registrado

  • Última Visita

Todo el contenido de ErrorNaN

  1. [Mod] Mensajes Masivos por MP o E-mail.

    Hmm. Acabo de corroborar el enlace y si sirve :/. Qué error te genera o qué sucede? P.D: Cambié el enlace de igual manera, para que intentes con el nuevo.
  2. Hola a todos. Este mod les permitirá crear mensajes masivos por correo electrónico o por MPs para todos los usuarios o usuarios específicos. En realidad este mod lo había realizado hace tiempo en mi web con mi script modificado, pero decidí adaptarlo a Risus para compartirlo con ustedes! Captura Instalación 1.- Van al archivo /inc/php/admin.php y buscan: } elseif($action == 'creditos'){ 2.- Arriba de eso, pegan: } elseif($action == 'mpmasivo'){ $smarty->assign("tsRangos",$tsAdmin->getRangos()); if(!empty($_POST['msg'])) { $mpMas = $tsAdmin->sendMasivos(); if($mpMas == 1) $tsCore->redirectTo($tsCore->settings['url'].'/admin/mpmasivo?save=true'); else $smarty->assign("tsError",$mpMas); } 3.-Van al archivo /inc/class/c.admin.php y buscan (al final del archivo): /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ } 4.- Arriba de eso, pegan: /* * Funcion sendMasivos() * Permite el envio masivo de mensajes. * Por Rascii (github.com/rascii). */ function sendMasivos() { global $tsCore, $tsUser; /* Declaracion de variables */ $subject = (!empty(trim($_POST['subject']))) ? $tsCore->setSecure($_POST['subject'], true) : '(sin asunto)'; $msg = $tsCore->setSecure($_POST['msg'], true); $msgpreview = substr($msg,0,75); $ranks = htmlspecialchars(trim($_POST['ranks'])); $method = ((int)$_POST['method'] == '2') ? 'email' : 'mps'; $time = time(); $ip = $_SERVER['REMOTE_ADDR']; $adminid = $tsUser->uid; /* Seguro que enviaste un mensaje? */ if(empty(trim($msg))) return 'No has ingresado ningún mensaje.'; /* Rangos */ if (!empty($ranks)) { /* Especificaron Rangos */ $ranks = explode(",", $ranks); if(count($ranks) > 0) { foreach($ranks as $key => $val) { if(!empty($val)) $qRango .= ' user_rango = \''.$val.'\' OR'; } $qRango = preg_replace('/\W\w+\s*(\W*)$/', '$1', $qRango); //eliminar el ultimo OR } } /* Obtener lista de usuarios */ $qUsuarios = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT user_id, user_name, user_email, user_rango FROM u_miembros '.((isset($qRango)) ? ' WHERE '.$qRango : '')); /* Hay usuarios? */ if(db_exec('num_rows', $qUsuarios) == 0) return 'No se ha encontrado ningún usuario para enviar los mensajes.'; /* Generar lista */ $usuarios = result_array($qUsuarios); /* Realizar el envio masivo */ if($method == 'email') { include (TS_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'c.emails.php'); $tsEmail = new tsEmail(); foreach($usuarios as $key => $u) { $tsEmail->emailTo = $u['user_email']; $tsEmail->emailSubject = $subject; $tsEmail->emailBody = $msg; $tsEmail->emailHeaders = $tsEmail->setEmailHeaders(); if(!$tsEmail->sendEmail($from, $u['user_email'], $subject, $msg)) return 'No se pudo realizar el envio del mensaje en e-mail de '.$u['user_id']; } } else if($method == 'mps') { foreach($usuarios as $key => $u) { if(db_exec(array(__FILE__, __LINE__), 'query','INSERT INTO `u_mensajes` (`mp_to`, `mp_from`, `mp_subject`, `mp_preview`, `mp_date`) VALUES (\''.$u['user_id'].'\', \''.$adminid.'\', \''.$subject.'\', \''.$msgpreview.'\', \''.$time.'\')')) { $mp_id = db_exec('insert_id'); if(empty($mp_id)) return 'No se pudo obtener el ID para el envio del mensaje en web de '.$u['user_id']; if(!db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_respuestas` (`mp_id`, `mr_from`, `mr_body`, `mr_ip`, `mr_date`) VALUES (\''.(int)$mp_id.'\', \''.$adminid.'\', \''.$msg.'\', \''.$ip.'\', \''.$time.'\')')) return 'No se pudo realizar el ingreso de la respuesta para el envio del mensaje en web de '.$u['user_id']; } else { return 'No se pudo realizar el envio del mensaje en web de '.$u['user_id']; } } } else { return 'Método Incorrecto'; //Nunca va a pasar, creo...? } return true; //:D } 5.- Luego nos vamos al archivo /themes/tu_tema/templates/t.admin.tpl y buscamos: {elseif $tsAction == 'creditos'} {include file='admin_mods/m.admin_creditos.tpl'} 6.- Arriba de eso, pegamos: {elseif $tsAction == 'mpmasivo'} {include file='admin_mods/m.admin_mpmasivo.tpl'} 7.-Vamos al archivo /themes/tu_tema/templates/admin_mods/m.admin_sidemenu.tpl y buscamos: <li id="a_rangos"><span class="cat-title"><a href="{$tsConfig.url}/admin/rangos">Rangos de Usuarios</a></span></li> 8.- Abajo de eso, pegamos: <li id="a_mpmasivo" style="background-image: url({$tsConfig.tema.t_url}/images/msg.gif);"><span class="cat-title"><a href="{$tsConfig.url}/admin/mpmasivo">Mensaje Masivo</a></span></li> 9.- Ahora descargamos, descomprimimos y luego subimos el archivo a la carpeta /themes/tu_tema/templates/admin_mods/: [DESCARGA POR GITHUB] ¡Eso sería todo! Espero les gusté y les sirva =). La idea original está basada en:
  3. Eliminiar Usuarios Inactivos

    https://www.unixtimestamp.com
  4. Hola a todos. Bueno este mod o fix como ya saben lo publiqué en su tiempo.. Me dí cuenta que no se reproduce el sonido al recibir un mensaje o notificación (esto por las limitaciones del FLASH de los navegadores modernos): Cito textual de la consola de desarrollador: Same-origin plugin content from /inc/ext/newAlert.swf must have a visible size larger than 6 x 6 pixels, or it will be blocked. Invisible content is always blocked. Entonces usaremos un sonido MP3 ya que el script por defecto usa un .SWF. Haremos esto para solucionarlo: 1.-Van al archivos /themes/su_tema/js/live.js y buscan: // SIN SONIDO ch_status: function(type){ 2.-Arriba pegan: // SONIDO play: function(type) { var link = global_img.img + 'sound/' + type + '.mp3'; var player = '<audio class="sound-player" autoplay="autoplay" style="display:none;"><source src="' + link + '" /><embed src="' + link + '" hidden="true" autostart="true" loop="false"/></audio>'; $("body .sound-player").remove(); //fix $('body').append(player); }, 3.-Buscamos de nuevo en el mismo archivo: if(live.status['sound'] == 'ON'){ $('#swf').html('<embed width="1px" height="1px" wmode="transparent" allowscriptaccess="always" quality="high" bgcolor="#ffffff" src="' + global_data.url + '/inc/ext/' + sound_type + '.swf" type="application/x-shockwave-flash">'); } 4.- Cambiamos por: if(live.status['sound'] == 'ON') this.play(sound_type); 5.- Creamos una carpeta nueva llamada "sound" dentro de la carpeta de nuestro tema actual y subimos estos 2 archivos dentro de ella: (Descargar) Eso sería todo!
  5. [Mod] Notificaciones de escritorio

    Esta es una versión 100% from-scratch (lo dije en el post y significa programar todo desde cero). no debería de haber problemas instalando los dos creo
  6. Hola a todos. Hace un tiempo publiqué una modificación para tener notificaciones de escritorio cuando el usuario recibiera una notificación o mensaje nuevo. Aquí les publico la versión hecha 100% from-scratch. Instalación (si se la quieren ahorrar, pueden descargar los archivos aquí): 1.-Vamos al archivo /themes/tu tema/js/live.js y buscamos: // READY $(document).ready(function(){ 2.-Arriba de eso pegamos: /* EasyNotify (https://github.com/Gabrielr47/easyNotify) (Modificado por Rascii) */ !function(o){o.fn.easyNotify=function(i){var n=o.extend({title:"Notificacion",options:{body:"",icon:"",lang:"es-ES",onClose:"",onClick:"",onError:""}},i);return this.init=function(){var o=this;if("Notification"in window)if("granted"===Notification.permission){var i=new Notification(n.title,n.options);i.onclose=function(){"function"==typeof n.options.onClose&&n.options.onClose()},i.onclick=function(){location.href=n.options.onClick},i.onerror=function(){"function"==typeof n.options.onError&&n.options.onError()}}else"denied"!==Notification.permission&&Notification.requestPermission(function(i){"granted"===i&&o.init()});else alert("Su navegador no acepta las notificaciones de escritorio.")},this.init(),this}}(jQuery); 3.-En el mismo archivo buscamos: if(total_notis > 0){ var live_stream_html = $('#live-stream').html(); // CARGAMOS $('#BeeperBox').html(live_stream_html) // MOSTRAMOS $('.UIBeeper_Full').fadeIn(1200); $('#BeeperBox').slideToggle(1000); 4.- Abajo de eso pegamos: /* Notificaciones de escritorio por Rascii */ $( "#js #LiveUpdate_JsNotify li" ).each(function() { var a = $.parseJSON($( this ).html()); $("#js #easyNotify").easyNotify({title: a.title,options:{body: a.cont,icon: a.image, onClick: a.link}}); }); 5.-Ahora vamos al archivo /themes/tu tema/templates/t.php_files/p.live.stream.tpl y al final de todo el archivo, pegamos: <!-- Notificaciones de escritorio por Rascii --> <div id="easyNotify"></div> <ul id="LiveUpdate_JsNotify" style="display:none"> <!-- Para: Notificaciones --> {foreach from=$tsStream.data item=noti key=id} <li>{ "type": "not", "title": "Nueva Notificación", "cont": "{if $noti.total == 1}{$noti.user}{/if} {$noti.text} {$noti.ltext}", "link": "{$noti.link}", "image": "https://raw.githubusercontent.com/rascii/DesktopNotsPhpostRisus/master/images/mod_phpost_desknots2.jpg" }</li> {/foreach} <!-- Para: Mensajes --> {foreach from=$tsMensajes.data item=mp key=id} <li>{ "type": "msg", "title": "Nuevo Mensaje de {$mp.user_name}", "cont": "{$mp.mp_preview}", "link": "{$tsConfig.url}/mensajes/leer/{$mp.mp_id}", "image": "{$tsConfig.url}/files/avatar/{$mp.mp_from}_50.jpg" }</li> {/foreach} </ul> Aquí les recomiendo poner su propia imagen en las notificaciones (Para: Notificaciones), para eso solo cambian el link que puse yo por el de ustedes! Como pudieron observar es una instalación muy simple y un código más robusto! Tienen que tener Notificaciones LIVE obviamente activadas en el panel de administración para que este mod funcione. Tienen el repositorio en GitHub por si quieren aportar o dejar sus dudas . Espero que les sirva .
  7. [Mod] Mensajes Masivos por MP o E-mail.

    Excelente. Me alegro de que te sirva
  8. Fácil. Borras todos los archivos de tu script antiguo (OJO: ARCHIVOS, NO BASE DE DATOS), luego subes los archivos del script actual. Luego te vas a la instalación, sigues todos los pasos, pones todos los datos de la base de datos y luego te saldrá el "upgrade" donde podrás seleccionar que datos mantener de la base de datos.
  9. copyright (c) 2018 rascii
  10. [Mod] Mensajes Masivos por MP o E-mail.

    De nada! Me comentas como te fue!
  11. Problema con CAPTCHA en registro

    Vale, en tu archivo de c.registro.php puedo ver que hay funciones antiguas de PHP, cuando todavía se usaba Mysql y no Mysqli (en el caso de Risus, se usa la función db_exec() ). Te comparto la comparación de archivos para que veas cada cambio: Descargar Ahora en tu Ajax.Registro.php no hay nada fuera de lo común. Y qué versión del script tienes? Creo que tienes una versión desactualizada de tu script, o tu hiciste algunos cambios... Acabo de reeleer el post, y parece que tienes la versión 1.1... Te recomiendo instalar la 1.3.0 que es la última y está actualizada: Ahora si quieres una solución simple para no actualizar, por que no sé que podría ser lo que genera los números, puedes ir al registro.js y en: $.ajax({ type: 'POST', url: global_data.url + '/registro-nuevo.php', data: params, success: function(h){ Y agregas debajo: mydialog.close(); location.reload(); return false; No es lo recomendable porque lo único que haría sería cerrar la modal y actualizar la página después de que se haya completado el registro... P.D: Me encantó este mensaje, jajajaja:
  12. [Mod] Mensajes Masivos por MP o E-mail.

    Se me debe haber pasado algo! Corregiré la descarga, gracias por el aviso. Al parecer no se me pasó nada, pero ya modifiqué el código para que no pase nada, solo hay que bajar el archivo de nuevo y listo! (ya actualicé el sistema de actualizaciones también).
  13. Problema con CAPTCHA en registro

    Bueno. Acabo de registrarme y coloqué el log de la consola en tu sitio.Esto fue lo que me apareció, la verdad no sé que abrás hecho pero bue: Así que por eso, el registro no carga. Por que en el switch no está el caso para todos esos números, pero si hay para el 2: solo. Si pudieras compartirnos tu /inc/class/c.registro.php y /inc/php/ajax/ajax.registro.php sería fantástico porque seguro tienes un while o un foreach haciendo de las suyas jaja.
  14. No sabía que conocías música electrónica jajaja Alto camtasia jajaja
  15. Problema con CAPTCHA en registro

    Haz lo siguiente y luego lo compartes por aquí: Ve al archivo /themes/tu tema/js/registro.js y busca: url: global_data.url + '/registro-nuevo.php', data: params, success: function(h){ Abajo de eso, agregas: console.log(h); No se te olvide borrar caché y luego ver la consola a ver que te dice! No se puede de ninguna de las dos maneras, yo uso Chromium (Chrome) y debido a una actualización, este navegador redirige automáticamente a la dirección del sitio con el protocolo https, y no soy el único, no sé si ocurrirá esto mismo en Firefox, Opera, etc.
  16. Problema con CAPTCHA en registro

    Inspeccionar elemento (click derecho en la página) y luego a consola (en la parte superior). Y luego nos compartes lo que salga ahí (puedes tomarle una captura de pantalla o copiarlo tal cual). También puede ser el caché, te recomiendo eliminarlo de tu computadora para ver si los archivos (.JS) no contienen el código anterior del sitio. ¿Cómo eliminarlo? Chromium o Chrome: SHIFT + F5 Firefox: Aquí
  17. Bueno. Si realizaron la actualización de los JS y por alguna razón no les guarda los campos para enviar al borrador del usuario en el caso de borrar un post en "/moderacion/", aquí está la solución: Van al archivo moderacion.js y buscan: if($('#send_b').attr('checked')){ var send_b = 'yes'; } Y lo remplazan por: if($('#send_b').prop('checked')){ var send_b = 'yes'; } Razón de este error o bug: Espero les sirva
  18. Bueno. Si realizaron la actualización de los JS y por alguna razón, no les guarda la información cuando agregan un filtro u opción en el monitor y/o van a modificar un mensaje. 1.-Buscamos en acciones.js: filter: function (x, obj) { $.ajax({url: global_data.url + '/notificaciones-filtro.php', type: 'post', data: 'fid=' + x}); var v = $(obj).attr('checked') ? 1 : 0; }, 2.-Lo cambiamos por: filter: function (x, obj) { $.ajax({url: global_data.url + '/notificaciones-filtro.php', type: 'post', data: 'fid=' + x}); var v = $(obj).prop('checked') ? 1 : 0; }, 3.-Luego buscamos en el mismo archivo: modificar: function(act){ var inputs = $('#mensajes .GBThreadRow :input'); var ids = new Array(); var i = 0; // inputs.each(function(){ var este = $(this).attr('checked'); 4.-Lo cambiamos por: modificar: function(act){ var inputs = $('#mensajes .GBThreadRow :input'); var ids = new Array(); var i = 0; // inputs.each(function(){ var este = $(this).prop('checked'); Razón de este error o bug: Espero les sirva
  19. Bueno. Si realizaron la actualización de los JS y por alguna razón no les guarda los campos de categorías favoritas en "posts" en "/mi/", aquí está la solución: Van al archivo portal.js y buscan: if($(this).attr('checked')) cat_ids += $(this).val() + ','; Y lo remplazan por: if($(this).prop('checked')) cat_ids += $(this).val() + ','; Razón de este error o bug: Espero les sirva
  20. Error instalación 1.3

    Pues tu página se ve bien
  21. Bueno. Si realizaron la actualización de los JS y por alguna razón no les guarda los campos "Género/Sexo" (en algunos casos no lo guarda), "Te gustaría:" y "Tengo:" dentro de "Perfil" en "/cuenta/", aquí está la solución: Van al archivo cuenta.js y buscan: $('.cuenta-save-' + secc).each(function() { if (($(this).attr('type') != 'checkbox' && $(this).attr('type') != 'radio') || $(this).attr('checked')) params.push($(this).attr('name') + '=' + encodeURIComponent($(this).val())); }); Y lo remplazan por: $('.cuenta-save-' + secc).each(function() { if (($(this).attr('type') != 'checkbox' && $(this).attr('type') != 'radio') || $(this).prop('checked')) params.push($(this).attr('name') + '=' + encodeURIComponent($(this).val())); }); Razón de este error o bug: Espero les sirva
×