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

Search the Community

Showing results for tags 'Complementos-Desarrollo'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • El núcleo de PHPost
    • Novedades e información
    • Off Topic
    • Presentaciones
  • PHPost Risus
    • Actualizaciones
    • Versión 1.1
    • Versión 1.2
  • La esquina
    • Rincón del PC
    • Rincón del móvil
  • Juegos de Steam Gratis's Activos
  • Juegos de Steam Gratis's Finalizados
  •                                                                                                                                                                                                                                                                's TRABAJOS
  •                                                                                                                                                                                                                                                                's EL CLUB
  •                                                                                                                                                                                                                                                                's PRESENTACIONES
  •                                                                                                                                                                                                                                                                's OTROS FRAMEWORKS
  •                                                                                                                                                                                                                                                                's DERIVACIONES
  •                                                                                                                                                                                                                                                                's WEBS CON BOOTSTRAP
  •                                                                                                                                                                                                                                                                's TEMAS TERMINADOS
  •                                                                                                                                                                                                                                                                's TEMAS EN VENTA
  •                                                                                                                                                                                                                                                                's MODS EN DESARROLLO
  •                                                                                                                                                                                                                                                                's MODS EN VENTA
  •                                                                                                                                                                                                                                                                's MODS TERMINADOS
  •                                                                                                                                                                                                                                                                's TEMAS EN DESARROLLO
  •                                                                                                                                                                                                                                                                's OFF-TOPIC
  •                                                                                                                                                                                                                                                                's MODS PARA OTROS SCRIPTS
  •                                                                                                                                                                                                                                                                's TEMAS PARA OTROS SCRIPTS
  • MozzFire's Bug's
  • MozzFire's Noticias
  • MozzFire's MozzFire v4.1.3
  • MozzFire's MozzFire MDLite
  • Escuela de Actualización de Risus Phpost's Presentación
  • Escuela de Actualización de Risus Phpost's PHP 7.X
  • Escuela de Actualización de Risus Phpost's Smarty
  • Escuela de Actualización de Risus Phpost's Jquery & JS
  • Escuela de Actualización de Risus Phpost's PHP
  • Escuela de Actualización de Risus Phpost's EXTRAS
  • Escuela de Actualización de Risus Phpost's Fixes
  • Escuela de Actualización de Risus Phpost's Actualizados

Calendars

  •                                                                                                                                                                                                                                                                's CALENDARIO

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Sitio web


ICQ


Yahoo


Jabber


Skype


Localización


Intereses

Found 74 results

  1. Te creo tu APK de tu Pagina WEB + Notificaciones SIN LIMITE Hola, Cansados de Buscar una Pagina web o Un Plugin o Script que les Cree su Propia app de su Pagina web ?, Por lo general muchas de las Paginas web Cobran mensual a cambio de Enviar Notificaciones al MOVIL / Celular, algunas Te limitan a cierta cantidad al dia, y Otras cobran muy caro para disfrutar de una buena app. PERO! Hoy les salvare el dia a todo aquel que quiera una APK, sin LIMITES. La app viene con : - Ultimos 10 Post - Buscador propio de la APP, para buscar sus temas. - Ordenar y buscar Temas por Categorias. - Poder mostrar tu Fandpage de Facebook. - Mostrar tu twitter. - Ir al tema desde su apk a su pagina web. - Poder compartir el tema con facebook o twitter. - Puedes agregar Adsense. - y Notificaciones Les llegara una notificación al movil, Segundos después de que sea creado un Tema, SIN LIMITES. Un solo precio, un solo pago y Podras disfrutar de algo tan comodo para mantener a tus usuarios al dia , con tus ultimos TEMAS. Les dejo una DEMO del apk la pueden descargar aqui. http://likeycomparte.net/keyanime.apk Les dejo unas Caps, Funciona con cualquier android. INTERESADOS POR MP o mi SKYPE : neyzer.gato
  2. muchos ya saben que estoy desarrollando el mod de preguntas quiero avisar que va en un 50% (faltan los templates,admin y diseño) pero por mis vacaciones suspendere el desarrollo x 5 dias y luego continuare ya tengo la base lista (archivos php y ajax) dejo 2 caps:
  3. Hola buenas noches alguien tiene algun mod para poder subir fotos desde el ordenador y tambien en el muro similar a taringa... hay alguien aqui q pueda ayudar..
  4. Buenas pues aqui les traigo un avance de la traduccion del script al idioma ingles (for english info look at the botton of the topic) El script lleva mas o menos un avance del 80 % pero me he encontrado con varias trabas para terminarlo! ya que el idioma ingles es muy complejo y no puede ser traducido exactamente como queremos! yo he tratado de no tocar muchos codigos para asi no alterar el script. pero aun asi he tenido muchos errores! los cuales quisiera me ayudaran a corregir para asi terminar el script al 100% lo que es la parte del instalador funciona al 100% ahora el problema lo tengo al traducir el theme(default) ya que es el que me da algunos errores! ejemplo: no envia el post creado. quisiera que se pasaran por la web y miren por todos lados para que noten los errores y si pueden decirme donde arreglar para asi terminarlo pronto. dejo demo pero aun asi seria mejor que se registren para que conoscan todo desde el principio. aqui la web: http://cocoy.net/ingles usuario:demo pass:demo12 english info: The script is about 80% done but I have encountered several obstacles to finish! because the English language is very complex and can not be translated exactly as we want! I tried not to touch so many codes to not alter the script. but even that I have had so many mistakes! which i would love to get help so i can fix it to finish the script 100% the installer works 100% ,ok now the problem I have is when i try to translate the theme (default) and that is what gives me some errors! example: at creating post, it can be posted!. i need you guys to go through the web and look everywhere to notice errors and if you can tell me where to fix it i can finish it very soon. i will leave a demo but would prefer to get you to register so you can look everything from the begining! demo info user:demo password:demo12 web:http://cocoy.net/ingles caps: nota:el ingles traducido es 100% puro de mi conosimiento! no use ningun traductor, ya que nunca traducen bien y creo es mas facil para los de habla inglesa natural! poder leer tal y cual se usa aca en los estados unidos de america! sin formalismos acepto criticas al fin que eso me ayudara a mejorar
  5. Estube un tiempo desarrollando un sistema de plugins para phpost, ahora estoy liado y no puedo seguir trabajando en ello pero he decido publicarlo para que no se pierda el trabajo y por si podria ayudar de algun modo a futuras versiones o simplemente si alguien quiere continuarlo porque cualquier día lo borro sin querer, ya casi no me acuerdo de como se agregan los hooks así que mejor aquí lo apunto todo. Empezaré explicando un poco lo que son los hooks. HOOKS Su traducción literal al español, ganchos. De manera muy resumidada podemos decir que un Hook (un gancho para Accionar) es una función (en PHP) vacía. Recordemos que una función en php tiene esta pinta. <?php function bastante_basico() { // Vamos a saludar echo'HOLA Mundo'; } ?> ¿Entonces como funciona? Simple, vemos una imagen de uno de los primeros script en desarrollar este sistema: Podemos ver que el theme tiene varias funciones (marcadas en rojo) repartidas en la plantilla vacias. Las funciones vacias no tienen nada y por ejemplo thematic_header() tiene un título y un menu porque tiene un hook enganchado. Pues así de simple, repartidas estratejicamente por el cms y los temas nos permiten ejecutar acciones sin necesidad de ir al archivo y modificar directamente el php o el tpl. Esto nos permite libertad para activar y desactivar zonas complejas y no tanto en los cms literalmente con un click. El sistema de hooks es utilizado por la gran mayoría de cms o por lo menos los más conocidos como wordpress, joomla, prestashop, ect. Vemos un ejemplo en thematic como se engancharía una funcion para mostrar algo en el hook. Como dije antes es algo en lo que estube trabajando, aprendiendo su funcionamiento y no está 100% para su uso, hay que limpiar codigo y eliminar cosas que no se usarán. También utilicé un sistema de conexion a la base de datos independiente porque no me desenvuelvo con mysqli, es algo que tb habria que cambiar por la conexion default de phpost. No me voy a atribuir todos los meritos, el plugin para smarty hook lo pude conseguir en github, aquí el enlace: https://github.com/atmoner/Smarty-hook Ahora paso a la integración en phpost. Integrando sistema de hooks a phpost. Primero creamos la tabla plugins en la base de datos para gestionar la activacion de los plugins: CREATE TABLE plugins (filename VARCHAR(127) NOT NULL COLLATE utf8_bin, action tinyint(1) DEFAULT '0'); Creamos la carpeta plugins en la raiz del sitio. Vamos a inc/class/c.smarty.php buscamos : require(TS_ROOT.DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'smarty'.DIRECTORY_SEPARATOR.'Smarty.class.php'); agregamos debajo y ponemos los datos de conexion a la base de datos en la fila 4 "$db = new Database('HOST', 'USER', 'PASS', 'DATABASE');" : require(TS_ROOT.DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'smarty'.DIRECTORY_SEPARATOR.'Hooks.functions.class.php'); require(TS_ROOT.DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'smarty'.DIRECTORY_SEPARATOR.'Hooks.class.php'); require_once('Database.class.php'); $db = new Database('localhost', 'user', 'pass', 'db'); $db->connect(); $hook = new phphooks(); $sql = "SELECT filename FROM plugins WHERE action = '" . $db->escape (1) . "'"; $result_rows = $db->fetch_all_array ( $sql ); if($result_rows){ foreach ( $result_rows as $result_rows ) $plugins[] = $result_rows ['filename']; } else $plugins =''; $hook->active_plugins = $plugins; $hook->set_hooks( array( 'action', 'new_page' )); $hook->load_plugins(); function add_hook($tag, $function, $priority = 10) { global $hook; $hook->add_hook($tag, $function, $priority); } function register_plugin($plugin_id, $data) { global $hook; $hook->register_plugin($plugin_id, $data); } //$smarty->assign('hooks',$hook); // On assigne la sortie des hooks à smarty Copiar los archivos de la carpeta inc/smarty a inc/smarty. Copiar los archivos de la carpeta inc/smarty/plugins a inc/smarty/plugins. Copiar los archivos de la carpeta inc/class a inc/class. En header.php buscar: // Mensajes $smarty->assign('tsMPs',$tsMP->mensajes); agregar debajo: // Hook $smarty->assign('hooks',$hook); function getPlugins($where,$value){ $sql = "SELECT filename, action FROM plugins"; if($where === 'action') $sql .= " WHERE action = '$value' "; if($where === 'filename') $sql .= " WHERE filename = '$value' "; $items = mysql_query($sql) or die("Database Error: ".mysql_error()); //Populate the array while ($obj = mysql_fetch_object($items)) { $array[$obj->filename]['filename'] = $obj->filename; $array[$obj->filename]['action'] = $obj->action; } return $array; } switch ($_GET ['action']) { case "deactivate" : $data ['action'] = 0; $db->query_update ( "plugins", $data, "filename='" . $_GET['filename'] . "'" ); header("Location: ?p=admin"); break; case "activate" : $sql = "SELECT * FROM " . $table_prefix . "plugins WHERE filename = '" . $db->escape ( $_GET['filename'] ) . "'"; $count = count ( $db->fetch_all_array ( $sql ) ); if ($count < 1) { $data['filename'] = $_GET['filename']; $data['action'] = 1; $db->query_insert("plugins", $data); } else { $data ['action'] = 1; $db->query_update("plugins", $data, "filename='" . $_GET['filename'] . "'"); header("Location: ?p=admin"); } break; } $smarty->assign("language",$language); $plugin_list = new phphooks(); $plugin_headers = $plugin_list->get_plugins_header('../../plugins/'); $api=array(); $i=0; foreach ($plugin_headers as $tid=>$plugin_header) { $action = false; foreach ( getPlugins() as $result_row ) if ($plugin_header['filename'] == $result_row['filename'] && $result_row['action'] == 1) $action = true; if ($action) $api[$i]["active"]="class='active'"; else $api[$i]["active"]=""; // Name $api[$i]["Name"]=$plugin_header['Name']; $api[$i]["Version"]=$plugin_header['Version']; $api[$i]["Description"]=$plugin_header['Description']; $api[$i]["AuthorURI"]=$plugin_header['AuthorURI']; $api[$i]["Author"]=$plugin_header['Author']; if ($action) { $api[$i]["linkAdd"]='<a href="?p=admin&action=deactivate&filename=' . $plugin_header['filename'] . '" title="'.$language["DEACTIVATE_PLUGIN"].'">DEACTIVATE</a>'; $api[$i]["Use"]='Use it !'; } else { $api[$i]["linkAdd"]='<a href="?p=admin&action=activate&filename=' . $plugin_header['filename'] . '" title="'.$language["ACTIVATE_PLUGIN"].'"> ACTIVATE </a>'; $api[$i]["Use"]=''; } $i++; } $smarty->assign("api",$api); Con esto tendriamos los hooks funcionando ahora creamos una administracion para gestionarlos: Subimos el el tpl de admin_mods a admin_mods de tu tema. En m.admin_sidemenu agregamos en el menu la secciona plugins, buscamos: <li id="a_temas"><span class="cat-title"><a href="{$tsConfig.url}/admin/temas">Temas y apariencia</a></span></li> y debajo agregamos: <li id="a_plugins"><span class="cat-title"><a href="{$tsConfig.url}/admin/plugins">Plugins</a></span></li> vamos a t.admin.tpl y buscamos: {elseif $tsAction == 'news'} {include file='admin_mods/m.admin_noticias.tpl'} debajo agregamos: {elseif $tsAction == 'plugins'} {include file='admin_mods/m.admin_plugins.tpl'} Copiamos el archivo admin_plugins.css a la raiz, esta agregado en el template m.admin_plugins si no funciona modificar por la ruta por la correcta. Con esto tendremos los plugins funcionando. COMO FUNCIONA. El sistema tiene una serie de funciones hooks ya integrados en el archivo Hooks.functions.class, todavia no trabajé con algunos de ellos, pero podemos ver los hooks para agregar archivos css, js, un menu, Add main sidebar y otros los deje de muestra pero son incompatibles con phpost como el de Add new page. Estos son hooks nativos por decirlo así, lo que tienen todas las webs menus, css, js, ect. Luego en c.smarty.php tenemos un array para agregar hooks más especificos al diseño de la web que explicaré más adelante. UTILIZACIÓN DE LOS HOOKS. Los hooks como dije antes son funciones vacias distribuidas por el cms y el theme, asi que para poder utilizarlos lo primero es agregar el hook en la zona que queramos. Los hooks en los php se integran de esta forma por ejemplo en c.post.php Comprobamos que existe el hook y si existe lo intertamos: if ($hook->hook_exist('first_hook')) $hook->execute_hook('first_hook'); Donde first_hook es el nombre del hook. en los tpl también podemos engancharnos de la siguiente manera por ejemplo en t.home columna izquierda: {$hooks->execute_hook('columna_izquierda')} Donde columna_izquierda es el nombre del hook. Para integrar el hook de menú debemos agregarlo de la siguiente manera en el tpl: {foreach item=i from=$hooks->add_Menu|@sortby:"#prio"} <li {if $i.id eq $smarty.get.p}class="active"{/if}><a href="{$i.url}">{$i.title}</a></li> {/foreach} Con este codigo se añadirian por ejemplo todos los enlaces de un menu con solo una linea. Vemos que en este hook también tenemos la opcion @sortby:"#prio" , esto es la opcion de prioridad que veremos más adelante al engarcharnos al hook, sirve para ordenar, que enlaces queremos que se muestren antes o despues, tambien lo utilizaremos al enganchar funciones pero en este caso se utiliza desde la llamada del hook porque se mostrarán todos con solo una linea. De forma similar en el hook para agregar css y js, por ejemplo añadiendo esto entre las etiquetas head: {foreach item=i from=$hooks->add_Css|@sortby:"#prio"} <link href="{$i.ruta}" rel="stylesheet"> {/foreach} Siendo add_Css el nombre del hook. Enganchar funcion a un hook Para enganchar la funcion a un hook sería: add_hook('new_page','plugin1_testfunc'); donde new_page es el nombre del hook y plugin1_testfunc es el nombre de la funcion. Para los hooks nativos de los que hablabamos antes la informacion tendría que ser mas completa, para el hook ad_menu sería: $hook->addMenu('newpage', 'My new page', '?p=newpage', 1); donde addMenu es el nobre de la funcion que genera ese hook y luego id, titulo, url, prioridad. Para los css y js: $hook->addCss('css', 'newenlaceymenu.css', 1,'newenlaceymenu'); addCss es la funcion del hook y luego id, archivo, prioridad, ruta. Esto es lo básico no pude indagar mucho más. AGREGAR UN HOOK Para agregar un hook sencillo lo tenemos en un array c.smarty.php. $hook->set_hooks( array( 'action', 'new_page' )); Por ejemplo si queremos un nuevo hook para poner una nueva columna seria: $hook->set_hooks( array( 'action', 'new_page', 'nuevo_hook' )); El hook action y el new_page son de pruebas y se pueden eliminar. EL PRIMER PLUGIN Los plugins deben estar en la carpeta plugins en la raiz de la web en una carpeta con el nombre, por ejemplo newenlace. Dentro debemos tener un archivo php con el nombre del plugin mas .plugin por ejemplo newenlace.plugin.php Configurando el plugin. Todos los plugin deben empezar de la siguiente manera: <?php /* Plugin Name: Añadir un enlace Plugin URI: http://phpost.net/ Description: Añade un enlace en el hook. Version: 1.0 Author: koruitch Author URI: http://phpost.net/ */ Si, marcado en /* */, y modificais solo los datos, los nombre de Plugin Name, Plugin URI no los debeis cambiar porque se utilizan para activar el plugin y verlo en la administracion. Luego podemos especificar los datos de utilizacion de la siguiente manera pero creo que no hace falta, de todas formas no está de más, en las pruebas lo utilice. //set plugin id as file name of plugin $plugin_id = basename(__FILE__); //some plugin data $data['name'] = "Un enlace"; $data['author'] = "koruitch"; $data['url'] = "http://phpost.net/"; //register plugin data register_plugin($plugin_id, $data); a partir de aquí vienen las funciones del plugin, o pongo un ejemplo para añadir un enlace en el hook new_page: //plugin function function plugin1_testfunc2() { global $hook; echo "<a href =\"pagina.com\"> enlace </a>"; } // add hook, where to execute a function add_hook('new_page','plugin1_testfunc2'); El codigo completo de este plugin sería así: <?php /* Plugin Name: Añadir un enlace Plugin URI: http://code.google.com/p/phphooks/source/browse/trunk/plugins/plugin1.plugin.php Description: Añade un enlace en el hook. Version: 1.0 Author: koruitch Author URI: http://phpost.net/ */ //set plugin id as file name of plugin $plugin_id = basename(__FILE__); //some plugin data $data['name'] = "Un enlace"; $data['author'] = "koruitch"; $data['url'] = "http://atmoner.com/"; //register plugin data register_plugin($plugin_id, $data); //plugin function function plugin1_testfunc2() { global $hook; echo "<a href =\"pagina.com\"> enlace </a>"; } // add hook, where to execute a function add_hook('new_page','plugin1_testfunc2'); No es necesario cerrar la etiqueta php. Funcion para agregar un enlace al menu: //plugin function function addMenu_plugin() { global $hook; $hook->addMenu('newpage', 'My new page', '?p=newpage', 1); $hook->addMenu('newpage2', 'posts', 'posts/', 2); } add_hook('new_page','addMenu_plugin'); Funcion para agregar un nuevo css: function addcss() { global $hook; $hook->addCss('css', 'newenlaceymenu.css', 1,'newenlaceymenu'); } add_hook('new_page','addcss'); Hasta aquí es lo que tengo, espero que sirva para algo. No continue principalmente por tiempo y porque hay que crear un theme nativo con hooks y agregarlos a todos los archivos para que todos los plugins utilicen los mismos nombres de hooks. Pero ahí lo dejo, aquí hay gente que sabe mucho y espero lo puedan continuar. Los archivos necesarios: https://mega.co.nz/#!19dEXaBC!W5icJMHfp2veQV0XHa0OoLgdr8wxMRmoJeC4D4hudAk Os dejo dos plugins con los que estube haciendo pruebas, pero recordar que teneis que añadir en el theme la llamada al hook. Unas capturas. Es un ejemplo muy simple, pero las posibilidades son infinitas. Desde un simple enlace hasta agregar una seccion entera. Creo que no me queda nada. Si te gusto mi aporte dame +1, si no te quedan tranki. ¡ Damelo mañana !
  6. Hola buenas a peticion del usuario http://www.phpost.net/user/526272-althor/ que lo pidio en los posts AVISO: la previsualizacion en el editor no funciona pero una vez posteado el post se ve que funciona si alguien sabe corregirlo que lo postee aqui la solución Bueno empezamos 1º Vamos al archivo bbcode.inc.php que esta en inc/ext y buscamos: class BBCode { /** * @name $restriction * @description Que BBCodes podrán ser convertidos */ public $restriction = Array("url", "code", "quote", "quotePHPost", "font", "size", "color", "img", "b", "i", "u", "align", "spoiler", "swf", "goear", "hr", "li"); despues de , "li" y antes del ); añadimos , "tor" despues en el mismo archivo buscamos private function complexParse(&$st){ // ELEMNTOS BBCode $elements = array( array("url", "/(?i)(\[url\])(http|https|ftp|irc|ed2k|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)(\[\/url\])/i", "<a href=\"\\2\\3\\4\" target=\"_blank\">\\2\\3\\4</a>"), array("url", "/(?i)\[url\=(http|https|ftp|irc|ed2k|gopher|telnet|gopher|telnet)(\:\/\/)([^\<\>[:space:]]+?)\](.+?)(\[\/url\])/i", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\4</a>"), debajo añadimos array("tor", "/(?i)\[tor\=([^\a]+?)\]([^\a]+?)\[\/tor\]/i","<div class=\"torrent\"><div class=\"tor\"><a href=\"\\1\" target=\"_blank\">\\2</a></div></div>"), con eso ya hemos terminado en ese archivo despues vamos al archivo c.core.php que esta en inc/class y buscamos function parseBBCode($bbcode, $type = 'normal'){ // CLASS BBCode include_once(TS_EXTRA . 'bbcode.inc.php'); $parser =& BBCode::getInstance(); switch($type){ // NORMAL case 'normal': // RESTRICTIONS $parser->restriction = array('url', 'code', 'quote', 'quotePHPost', 'font', 'size', 'color', 'img', 'b', 'i', 'u', 'align', 'spoiler', 'swf', 'goear', 'hr', 'li'); despues de , 'li' y antes del ); añadimos , 'tor' con eso ya terminamos en este archivo y en todos los archivos php. ahora vamos al theme en el que queramos tener este boton y dentro de la carpeta js que esta en themes/TUTEMA/js buscamos y abrimos el archivo wysibb.js y buscamos: link: "Enlace", debajo añadimos torrent: "Enlace Torrent", luego mas abajo buscamos modal_link_title: "Insertar enlace", modal_link_text: "Texto enlazado", modal_link_url: "URL", debajo añadimos modal_torrent_title: "Insertar enlace Torrent", modal_torrent_text: "Texto enlazado al Torrent", modal_torrent_url: "URL enlace Torrent", mas abajo buscamos //END img upload config buttons: "bold,italic,underline,strike,sup,sub,|,img,video,link,|,fontcolor,fontsize,fontfamily,|,smileBox,bullist,numlist,|,spoiler,messages,table,|,justifyleft,justifycenter,justifyright,justify,|,hr,quote,code,goear,swf,|,removeFormat,fullscreen", y despues de link, y antes de | (la barrita vertical) añadimos torrent, mas abajo buscamos link : { title: CURLANG.link, buttonHTML: '<span class="fonticon ve-tlb-link1">\uE007</span>', modal: { title: CURLANG.modal_link_title, width: "500px", tabs: [ { input: [ {param: "SELTEXT",title:CURLANG.modal_link_text, type: "div"}, {param: "URL",title:CURLANG.modal_link_url,validation: '^http(s)?://'} ] } ] }, transform : { '<a href="{URL}">{SELTEXT}</a>':"[url={URL}]{SELTEXT}[/url]", '<a href="{URL}">{URL}</a>':"[url]{URL}[/url]" } }, y debajo de eso añadimos torrent : { title: CURLANG.torrent, buttonHTML: '<span class="torrente"></span>', modal: { title: CURLANG.modal_torrent_title, width: "500px", tabs: [ { input: [ {param: "TORTXT",title:CURLANG.modal_torrent_text, type: "div"}, {param: "TOR",title:CURLANG.modal_torrent_url} ] } ] }, transform : { '<a href="{TOR}">{TORTXT}</a>':"[tor={TOR}]{TORTXT}[/tor]", '<a href="{TOR}">{TOR}</a>':"[tor]{TOR}[/tor]" } }, eso es todo en ese archivo ahora nos vamos al archivo wysibb.css que esta themes/TUTEMA/css buscamos y abrimos el archivo wysibb.css (dentro del mismo Theme que editamos el wysibb.js) y al final del todo añadimos .tor{ border-radius: 50px 50px 50px 50px; -moz-border-radius: 50px 50px 50px 50px; -webkit-border-radius: 50px 50px 50px 50px; border: 4px double #CCC; background-repeat: repeat; background-position: 10px; background-image: url('../images/wysibb/Tora.png'); } .tor:hover{ border-radius: 50px 50px 50px 50px; -moz-border-radius: 50px 50px 50px 50px; -webkit-border-radius: 50px 50px 50px 50px; border: 4px double #CCC; background-repeat: repeat; background-position: 10px; background-image: url('../images/wysibb/Tor.png'); } .torrent { font-style:italic; text-align:center; font-family:Georgia, "Times New Roman", Times, serif; position: relative; font-size: 40px; font-weight: bold; padding: 12px 10px; background: -moz-linear-gradient( top, #ffffff 0%, #c7d95f 50%, #add136 50%, #448000); background: -webkit-gradient( linear, left top, left bottom, from(#23d), color-stop(0.50, #c7d95f), color-stop(0.50, #add136), to(#448000)); -moz-border-radius: 14px; -webkit-border-radius: 14px; border-radius: 14px; border: 1px double #6d8000; -moz-box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); -webkit-box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); box-shadow: 0px 1px 3px rgba(000,000,000,0.5), inset 0px 0px 2px rgba(255,255,255,1); text-shadow: 0px -1px 0px rgba(000,000,000,0.2), 0px 1px 0px rgba(255,255,255,0.4); } .torrent:hover { box-shadow: 0 5px 5px #313131, 0 1px 0 #393939, 0px 9px 10px rgba(0,0,0,0.4), inset 0px 2px 15px rgba(255,255,255,0.4), inset 0 -2px 9px rgba(0,0,0,0.2); } .torrente{ background-image: url('../images/wysibb/Torb.png'); background-position: -17px 0px; background-position: top left; background-repeat: no-repeat; margin: 4px 2px!important; height: 26px!important; } con eso ya acabamos en ese archivo y en todas las modificaciones y ya el ultimo paso que es subir las imagenes del enlace a la carpeta wysibb que esta en la ruta themes/TUTEMA/images/wysibb/ https://mega.co.nz/#!YsURRKgT!L4RC-d8_PUy4NV9WcYg4ingiCiwZR757MgB6FxO7rX4 FIN una captura P.D Un Saludo
  7. Hola, como el titulo bien lo dice... sere breve ya que no queda mucho por explicar.. me gustaria saber si alguien puede desarrollar el mod para poner captcha en los formularios de contacto, en lo posible que sea compatible con este mod. desde ya muchas gracias.
  8. Hola amigos hagan pedidos sencillos para practicar un poco el script ojala no sean de mucha dificultad gracias espero que pidan JeJe Pidan yo los tratare de hacer y les aviso Los hire haciendo por orden de comentarios
  9. Hola amigos, miren estaria bueno un mod de sub-categorias. Funcionaria como las comunidades, que tienen categorias y sub-categorias.. Por ejemplo: cuando agregas un post, tengas que seleccionar primero la categoria principal, como por ejemplo JUEGOS. Entonces al elegirla, que te habilite a elegir la sub-categoria de la categoria que elegiste, en este caso podria ser: PC, XBOX, PS2, PS3, PS4, WII, ETC. Que se pueda administrar como las categorias normales en la admin, y que se acceda por ejemplo como: miwebblab.bla/posts/juegos/PC/ No se que piensan, para mi seria buena idea, estarian los posts mucho mas ordenados.. Haber quien se anima.. saludos !!
  10. Hola amigos, los molesto para pedirles por favor si algún programador puede desarrollar el siguiente mod. Simplemente consta en usar el contenido del post y las tags de los post tanto para la descripción del sitio, como para las keywords. A que me refiero? A lo siguiente… Cuando entramos a Taringa (si otra vez Taringa… perdonen pero creo que si tienen tanto éxito por algo es.. bueno. Vemos que la descripción de su sitio es la siguiente… <meta name="description" content="Taringa! es una comunidad virtual donde los usuarios comparten todo tipo de informaci&oacute;n a través de un sistema colaborativo de interacci&oacute;n." /> Y sus keywords las siguientes. <meta name="keywords" content="Libertadores, castro, ronaldo, Messi, imagenes, Martino, campeon, argentina, juegos, Muerte, velez, partidos, musica, unrestrict, Plate" /> OK. Pero al entrar a un post. Esto cambia en base a la información del post, como aquí podemos ver… Entramos al post: http://www.taringa.net/posts/noticias/18365391/Por-favor-que-nadie-arroje-pirotecnia.html Y vemos que la información de la descripción y las keywords cambiaron. <meta name="description" content="Favor, que nadie arroje pirotecnia&quot;. Papá sufre por su hijo autista. El joven se asusta por los estruendos de los fuegos artificiales que suelen..." /> <meta name="description" (Usa parte del contenido del post.. como se ve) <meta name="keywords" content="nene, padre, Autismo, pedido, Animales, fuegos artificiales, navidad, fiestas, pirotecnia" /> <meta name="keywords" (usa las tags del post, algo que sinceramente creo muy útil y bueno.) En cambio Phpost tiene estos datos de forma fija.. Osea. Si tu <meta name="description es esta… <meta name="description" content="Phpost el major script." /> En el home, al entrar a un post, esta sigue siendo la misma… osea. <meta name="description" content="Phpost el major script." /> Y con <meta name="keywords" pasa lo mismo.. si en el home es. <meta name="keywords" content="phpost, linkshare, isidro, kmario" /> Al entrar a un post, siguen siendo las mismas… osea. <meta name="keywords" content="phpost, linkshare, isidro, kmario" /> Lo mejor seria que al entrar al post se vea en la descripcion, parte del contenido del post, osea solo texto si lo hay, y en las keywords las tags del post. Actualizo, para que no me digan que use el buscador… me puse a buscar y se podría decir que casi logre lo que pido.. A las keywords las pude poner usando la info de este post. Y a la descripción logre ponerla en parte… usando la info de este post. Lo malo de ese post es que pone si o si lo que aparezca en el cuerpo del post, y si un usuario solo postea un video o una imagen, aparecerá en la descripción el link del video o de la foto y eso además de no quedar bien.. no se porque se me hace que a los buscadores no les va a gustar… me fije y en T! cuando hay solo un video o mejor dicho… cuando no hay texto en el post para tomar como descripción, solo aparece asi <meta name="description" content="Por..." /> Se ve que al no haber texto aparece eso, pero yo no se como lograrlo usando el mod que postie antes… si alguien podría modificar este mod. Para que solo tome texto y no urls de link o lo que sea y en caso de no haber texto que diga algo que nosotros querramos estaría muy bueno y se los agradecería mucho. Asi que bueno si alguien puede modificar ese mod para mostrar la descripción se los voy a agradecer! Saludos!
  11. Hola gente, les quiero compartir una modifican al estilo de taringa. para el login de identificarme y Registrate ya. no es gran cosa peroq uisas a algunos les sirva. sirve para la v5 de to-up. supongo que los demas temas tambien. buscan to-up.css en themes/tutema y buscan .no-ide { float: left; margin: 24px 22px 24px 0; } y cambiarlo por .no-ide { float: left; margin: 14px 5px 14px 0; } luego buscar .no-ide a { text-shadow: 0 1px 0 black; color: white!important; font-weight: 700; display: block; } y cambiarlo por .no-ide a { text-shadow: 0 1px 0 black; color: white!important; font-weight: bold; display: block; text-decoration: none; /* display: block; */ border: 1px solid #A30C0C; padding: 10px; background: #DD0909; /* width: 100%; */ /* font-size: 13px; */ font-size: 11px; color: #fff; text-transform: uppercase; -webkit-border-radius: 2px; -moz-border-radius: 2px; background-clip: padding-box; border-radius: 2px; -webkit-background-clip: padding-box; -moz-background-clip: padding; } .no-ide a:hover { text-shadow: 0 1px 0 black; color: white!important; font-weight: bold; display: block; text-decoration: none; /* display: block; */ border: 1px solid #A30C0C; background: #FF3333; /* width: 100%; */ /* font-size: 13px; */ font-size: 11px; color: #fff; text-transform: uppercase; -webkit-border-radius: 2px; -moz-border-radius: 2px; background-clip: padding-box; border-radius: 2px; -webkit-background-clip: padding-box; -moz-background-clip: padding; } luego buscar .no-ide-img { float: left; margin: 5px 0; } y cambiarlo por .no-ide-img { float: left; margin: 15px 0; } de ahi buscar .no-ide-img a { background: url(to-up/register.png); display: block; width: 143px; height: 45px; } y reemplazarlo por .no-ide-img a { /* background: url(to-up/register.png); */ /* display: block; */ /* width: 143px; */ /* height: 45px; */ line-height: 36px; display: block; color: #fff; background: #2594ef; font-weight: bold; text-shadow: 0 1px 0 black; color: white!important; font-weight: bold; font-size: 11px; padding: 0 13px; text-transform: uppercase; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; float: left; } .no-ide-img a:hover { text-decoration: none; background: #46acff; } por ultimo buscar b.login.tpl que esta en tutema/templates/b_toup <a onclick="registro_load_form(); return false" href=""></a> y reemplazarlo por <a onclick="javascript:registro_load_form(); return false" >Registate ya</a> espero q les sirva saludos
  12. Hola a todos, Alguien podria dejar los pasos con codigo de como añadir el BBCode a el editor ? ejemplo de el pedido listado/bullets: http://c-command.com/forums/misc.php?s=28103776fe03c30a161d44dd4d72f453&do=bbcode#list Gracias y ojala alguien pueda ayudar.
  13. Desarrollo apps de un sitio web para windows y Windows phone Con Muchas Funciones... Solo Comenten Lo Que Quieran.... Que les haga una... Requisitos: Solo Tienen que instalar un mod de kmario19 (Se los digo cuando me pidan que les haga una...)
  14. La idea es poder armar varios filtros de busqueda, al igual que mercadolibre. Algunos filtros pueden ser * Menor precio a mayor precio * Mayor precio a menor precio * Cantidad de habitaciones * Localidad * Departamentos * Casas * Terrenos etc,etc... Estaba pensando en usar Phpost para la inmobiliaria de mi hermano. Eternamente agradecido como siempre... una comunidad en crecimiento!
  15. Hola, Solicito haber si algun coder interesado pueda crear un mod en el cual se puedan enviar newsletter a los miembros desde la admin. Mas o menos con estar caracteristicas: -> Filtro por rangos -> Filtro por paises, -> Filto por edades -> Filtro por medallas -> Filtro por posts Tambien que se envien unos newsletter ya preparados al llegar a cierto puntaje, cantidad de post o cualquier otra accion del script. Incluyendo un editor HTML. Sera un trabajo duro, pero aportara muchisimo a la comunidad. Dejo caer la idea, Saludos hermanos!
  16. Hola gente, paso nuevamente para pedir ayuda con respecto a la eliminacion de tu propia comunidad. Mi pregunta es que al yo crear una comunidad, obviamnte soy el administrador, pero al querer eliminarla, no puedo. me sale el siguiente error. mi tema es V5 TO-UP Les pido disculpas si ya es un tema q se ha resuelto. Lo busque en el buscador y no encontre ningun tema q resuelva ese error
  17. Hola gente. Queria pedirles soporte para este tema que estuve dandole vueltas y no pude resolverlo. El problema es el siguiente. cuando le doy me gusta a una publiblicacion no me lleva a la publicacion en si. me redirecciona a otra pagina que no existe. ejemplo Yo veo que el problema esta en c.monitor.php en las siguientes lineas He tratado de resolverlo yo mismo pero no pude. Les pido ayuda Por favor para resolverlo. aca les dejo todo el c.monitor.php <?php if ( ! defined('TS_HEADER')) exit('No se permite el acceso directo al script'); /** * Modelo para el control del monitor de usuario * * @name c.monitor.php * @author PHPost Team */ class tsMonitor { /** * @name notificaciones * @access public * @info NUMERO DE NOTIFICACIONES NUEVAS **/ public $notificaciones = 0; /** * @name avisos * @access public * @info NUMERO DE AVISOS/ALERTAS */ public $avisos = 0; /** * @name monitor * @access private * @info ORACIONES PARA CADA NOTIFICACION **/ private $monitor = array(); /** * @name show_type * @access public * @info COMO MOSTRAREMOS LAS NOTIFICACIONES -> AJAX/NORMAL **/ public $show_type = 1; /** * @name getInstanse * @access public * @info CREAR INSTANCIA DE LA CLASE */ public static function &getInstance(){ static $instance; if( is_null($instance) ){ $instance = new tsMonitor(); } return $instance; } /* constructor() */ public function __construct(){ global $tsUser; // VISITANTE? if(empty($tsUser->is_member)) return false; // NOTIFICACIONES $query = mysql_query('SELECT COUNT(not_id) AS total FROM u_monitor WHERE user_id = \''.$tsUser->uid.'\' AND not_menubar > 0'); $data = mysql_fetch_assoc($query); // $this->notificaciones = $data['total']; /** * AVISOS */ $query = mysql_query('SELECT COUNT(av_id) AS total FROM u_avisos WHERE user_id = \''.$tsUser->uid.'\' AND av_read = \'0\''); $data = mysql_fetch_assoc($query); $this->avisos = $data['total']; } /** * @name makeMonitor * @access private * @params none * @return none */ private function makeMonitor(){ $this->monitor = array( 1 => array('text' => 'agreg&oacute; a favoritos tu', 'ln_text' => 'post', 'css' => 'star'), 2 => array('text' => array('coment&oacute; tu','_REP_ nuevos comentarios en tu'), 'ln_text' => 'post', 'css' => 'comment_post'), 3 => array('text' => 'dej&oacute; _REP_ puntos en tu', 'ln_text' => 'post', 'css' => 'points'), 4 => array('text' => 'te est&aacute; siguiendo', 'ln_text' => 'Seguir a este usuario', 'css' => 'follow'), 5 => array('text' => 'cre&oacute; un nuevo', 'ln_text' => 'post', 'css' => 'post'), 6 => array('text' => array('te recomienda un', '_REP_ usuarios te recomiendan un'), 'ln_text' => 'post', 'css' => 'share'), 7 => array('text' => array('coment&oacute; en un', '_REP_ nuevos comentarios en el'), 'ln_text' => 'post', 'extra' => 'que sigues', 'css' => 'blue_ball'), 8 => array('text' => array('vot&oacute; _REP_ tu', '_REP_ nuevos votos a tu'), 'ln_text' => 'comentario', 'css' => 'voto_'), 9 => array('text' => array('respondi&oacute; tu', '_REP_ nuevas respuestas a tu'), 'ln_text' => 'comentario', 'css' => 'comment_resp'), 10 => array('text' => 'subi&oacute; una nueva', 'ln_text' => 'foto', 'css' => 'photo'), 25 => array('text' => 'te recomienda la foto', '_REP_ usuarios te recomiendan una', 'ln_text' => 'foto', 'css' => 'recfoto'), 11 => array('text' => array('coment&oacute; tu','_REP_ nuevos comentarios en tu'), 'ln_text' => 'foto', 'css' => 'photo'), 12 => array('text' => 'public&oacute; en tu', 'ln_text' => 'muro', 'css' => 'wall_post'), 13 => array('text' => array('coment&oacute; ', '_REP_ nuevos comentarios en'), 'ln_text' => 'publicaci&oacute;n', 'extra' => 'coment&oacute;', 'css' => 'w_comment'), 14 => array('text' => array('le gusta tu', 'A _REP_ personas les gusta tu'), 'ln_text' => array('publicaci&oacute;n','comentario'), 'css' => 'w_like'), 15 => array('text' => 'Recibiste una medalla', 'css' => 'medal'), 16 => array('text' => 'Tu post recibi&oacute; una medalla', 'css' => 'medal'), 60 => array('text' => 'actualiz&oacute; su', 'ln_text' => 'estado', 'css' => 'blue_ball'), 17 => array('text' => 'Tu foto recibi&oacute; una medalla', 'css' => 'medal'), 29 => array('text' => array('subi&oacute; el'), 'ln_text' => 'juego', 'css' => 'juego'), 26 => array('text' => array('comento tu','_REP_ nuevos comentarios en tu'), 'ln_text' => 'juego', 'css' => 'blue_ball'), 27 => array('text' => array('vot&oacute; _REP_ tu', '_REP_ nuevos votos a tu'), 'ln_text' => 'juego', 'css' => 'voto_'), 28 => array('text' => array('agreg&oacute; a favoritos tu','_REP_ nuevos favoritos a tu'), 'ln_text' => 'juego', 'css' => 'star'), 18 => array('text' => array('te mencion&oacute; en un', '_REP_ te mencionaron en un'), 'ln_text' => 'comentario', 'css' => 'blue_ball'), 19 => array('text' => 'te mencion&oacute; en una', 'ln_text' => 'publicaci&oacute;n', 'css' => 'blue_ball'), // COMUNIDADES 50 => array('text' => array('cre&oacute; un nuevo'), 'ln_text' => 'tema', 'css' => 'post'), 51 => array('text' => array('coment&oacute; tu','_REP_ nuevos comentarios en tu'), 'ln_text' => 'tema', 'css' => 'comment_post'), 52 => array('text' => array('coment&oacute; en un', '_REP_ nuevos comentarios en el'), 'ln_text' => 'tema', 'extra' => ' que sigues', 'css' => 'blue_ball'), 53 => array('text' => array('respondi&oacute; tu', '_REP_ nuevas respuestas a tu'), 'ln_text' => 'comentario', 'css' => 'comment_resp'), 54 => array('text' => array('agreg&oacute; a favoritos tu','_REP_ nuevos favoritos a tu'), 'ln_text' => 'tema', 'css' => 'star'), 55 => array('text' => array('te recomienda un', '_REP_ usuarios te recomiendan un'), 'ln_text' => 'tema', 'css' => 'share'), 56 => array('text' => array('vot&oacute; _REP_ tu', '_REP_ nuevos votos a tu'), 'ln_text' => 'tema', 'css' => 'voto_'), 57 => array('text' => array('vot&oacute; _REP_ tu', '_REP_ nuevos votos a tu'), 'ln_text' => 'comentario', 'css' => 'voto_'), 58 => array('text' => array('est&aacute; siguiendo tu','_REP_ nuevos seguidores a tu'), 'ln_text' => 'tema', 'css' => 'follow'), ); } /** * @name setAviso * @access public * @param int, string, string * @return bool * @info ENVIA UN AVISO/ALERTA */ function setAviso($user_id, $subject = '(sin asunto)', $body, $type = 0){ global $tsCore; # VERIFICAMOS QUE SE PUEDA ENVIAR EL AVISO $query = mysql_query('SELECT user_baneado FROM u_miembros WHERE user_id = \''.(int)$user_id.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); # NO PODEMOS ENVIAR A UN USUARIO BANEADO if($data['user_baneado'] == 1) return true; # INSERTAMOS EL AVISO if(mysql_query('INSERT INTO u_avisos (user_id, av_subject, av_body, av_date, av_type) VALUES (\''.(int)$user_id.'\', \''.$tsCore->setSecure($subject).'\', \''.$tsCore->setSecure($body).'\', \''.time().'\', \''.$type.'\' )')) return true; else return false; } /** * @name getAvisos * @access public * @param none * @return array * @info OBTIENE LOS MENSAJES Y ALERTAS DEL USUARIO */ public function getAvisos(){ # GLOBALES global $tsUser; # OBTENERMOS $query = mysql_query('SELECT * FROM u_avisos WHERE user_id = \''.$tsUser->uid.'\''); $data = result_array($query); # RETURN return $data; } /** * @name readAviso * @access public * @param int * @return array * @info ONTIENE UN AVISO */ public function readAviso($av_id){ # GLOBALES global $tsUser; # OBTENEMOS $query = mysql_query('SELECT * FROM u_avisos WHERE av_id = \''.(int)$av_id.'\''); $data = mysql_fetch_assoc($query); # RETURN if(empty($data['av_id']) || $data['user_id'] != $tsUser->uid && !$tsUser->is_admod == 1) return 'El aviso no existe'; else { mysql_query('UPDATE u_avisos SET av_read = 1 WHERE av_id = \''.(int)$av_id.'\''); $this->avisos = $this->avisos - 1; return $data; } } /** * @name delAviso * @access public * @param int * @return bool * @info ELIMINA UN AVISO */ public function delAviso($av_id){ # GLOBALES global $tsUser; # OBTENEMOS $query = mysql_query('SELECT user_id FROM u_avisos WHERE av_id = \''.(int)$av_id.'\''); $data = mysql_fetch_assoc($query); # RETURN if(empty($data['user_id']) || $data['user_id'] != $tsUser->uid && !$tsUser->is_admod == 1) return false; else { mysql_query('DELETE FROM u_avisos WHERE av_id = \''.(int)$av_id.'\''); return true; } } /** * @name setNotificacion * @access public * @param int * @return void */ public function setNotificacion($type, $user_id, $obj_user, $obj_uno = 0, $obj_dos = 0, $obj_tres = 0){ global $tsUser, $tsCore; # NO SE MOSTRARA MI PROPIA ACTIVIDAD if($user_id != $tsUser->uid){ # VERIFICA SI ESTE USUARIO ADMITE NOTIFICACIONES DEL TIPO $type $allow = $this->allowNotifi($type, $user_id); if(empty($allow)) return true; // VERIFICAR CUANTAS NOTIFICACIONES DEL MISMO TIPO Y EN POCO TIEMPO TENEMOS $tiempo = time() - 3600; // HACE UNA HORA $query = mysql_query('SELECT not_id FROM u_monitor WHERE user_id = \''.(int)$user_id.'\' AND obj_uno = \''.(int)$obj_uno.'\' AND obj_dos = \''.(int)$obj_dos.'\' AND not_type = \''.(int)$type.'\' AND not_date > \''.$tiempo.'\' AND not_menubar > \'0\' ORDER BY not_id DESC LIMIT 1'); $not_data = mysql_fetch_assoc($query); //.... if(!empty($not_data['not_id']) && $type != 4) $not_db_type = 'update'; //ACTUALIZAR else $not_db_type = 'insert'; // INSERTAR // COMPROBAR LIMITE DE NOTIFICACIONES $query = mysql_query('SELECT not_id FROM u_monitor WHERE user_id = \''.(int)$user_id.'\' ORDER BY not_id DESC'); $data = result_array($query); $ntotal = count($data); $delid = $data[$ntotal-1]['not_id']; // ID DE ULTIMA NOTIFICACION // ELIMINAR NOTIFICACIONES? if($ntotal > $tsCore->settings['c_max_nots']){ mysql_query('DELETE FROM u_monitor WHERE not_id = \''.(int)$delid.'\''); } // ACTUALIZAMOS / INSERTAMOS if($not_db_type == 'update'){ if(mysql_query('UPDATE u_monitor SET obj_user = \''.(int)$obj_user.'\', not_date = \''.time().'\', not_total = not_total + 1 WHERE not_id = \''.(int)$not_data['not_id'].'\'')) return true; } else { if(mysql_query('INSERT INTO u_monitor (user_id, obj_user, obj_uno, obj_dos, obj_tres, not_type, not_date) VALUES (\''.$user_id.'\', \''.$obj_user.'\', \''.$obj_uno.'\', \''.$obj_dos.'\', \''.$obj_tres.'\', \''.$type.'\', \''.time().'\')')) return true; } } } /** * @name setFollowNotificacion * @access public * @params int * @return void * @info Envia notificaciones a los usuarios que siguen a un post o usuario. */ function setFollowNotificacion($notType, $f_type, $user_id, $obj_uno, $obj_dos = 0, $excluir){ global $tsCore; # TIPO DE FOLLOW USER o POST if($f_type == 1) $f_id = $user_id; elseif($f_type == 2) $f_id = $obj_uno; # BUSCAMOS LOS Q SIGAN A ESTE POST/ USER $query = mysql_query('SELECT f_user FROM u_follows WHERE f_id = \''.(int)$f_id.'\' AND f_type = \''.(int)$f_type.'\''); $data = result_array($query); // foreach($data as $key => $val){ // A CADA USUARIO LE NOTIFICAMOS SI NO ESTA EN LAS EXCLUSIONES if(!in_array($val['f_user'],$excluir)){ $this->setNotificacion($notType, $val['f_user'], $user_id, $obj_uno, $obj_dos); } } // return true; } /** * @name setMuroRepost * @access public * @params int * @return void * @info NOTIFICA CUANDO ALGUIEN RESPONDE UNA PUBLICACION EN UN MURO */ public function setMuroRepost($pub_id, $p_user, $p_user_pub){ global $tsUser; // $query = mysql_query('SELECT c_user FROM u_muro_comentarios WHERE pub_id = \''.(int)$pub_id.'\' AND c_user NOT IN (\''.$tsUser->uid.'\', \''.(int)$p_user.'\')'); $data = result_array($query); // ENVIAMOS NOTIFICACION A LOS QUE HAYAN COMENTADO $enviados = array(); foreach($data as $key => $val){ if(!in_array($val['c_user'], $enviados)){ $this->setNotificacion(13, $val['c_user'], $tsUser->uid, $pub_id, 3); $enviados[] = $val['c_user']; } } // ENVIAMOS AL DUEÑO DEL MURO $this->setNotificacion(13, $p_user, $tsUser->uid, $pub_id, 1); // ENVIAMOS AL QUE PUBLICO SI NO FUE EL DUEÑO DEL MURO if(($p_user != $p_user_pub) && !in_array($p_user_pub, $enviados)){ $this->setNotificacion(13, $p_user_pub, $tsUser->uid, $pub_id, 2); } } /** * @name getNotificaciones * @access public * @param int * @return array * @info CREAR UN ARRAY CON LAS NOTIFICAIONES DEL USUARIO */ public function getNotificaciones($unread = false){ global $tsUser, $tsCore; # SI HAY MAS DE 5 NOTIS MOSTRAMOS TODAS LAS NO LEIDAS if($this->show_type == 1) { // VIEW TYPE $not_view = ($unread == true) ? '= 2' : ' > 0'; $not_del = ($unread == true) ? 1 : 0; // if($this->notificaciones > 5 || $unread == true ){ // CONSULTA $sql = 'SELECT m.*, u.user_name AS usuario FROM u_monitor AS m LEFT JOIN u_miembros AS u ON m.obj_user = u.user_id WHERE m.user_id = \''.$tsUser->uid.'\' AND m.not_menubar '.$not_view.' ORDER BY m.not_id DESC'; } else { // CONSULTA $sql = 'SELECT m.*, u.user_name AS usuario FROM u_monitor AS m LEFT JOIN u_miembros AS u ON m.obj_user = u.user_id WHERE m.user_id = \''.$tsUser->uid.'\' ORDER BY m.not_id DESC LIMIT 5'; } // SI VA AL MONITOR ENTONCES ACTUALIZAMOS PARA QUE YA NO SE VEAN EN EL MENUBAR } elseif($this->show_type == 2) { // DATOS $sql = 'SELECT m.*, u.user_name AS usuario FROM u_monitor AS m LEFT JOIN u_miembros AS u ON m.obj_user = u.user_id WHERE m.user_id = \''.$tsUser->uid.'\' ORDER BY m.not_id DESC'; //ESTADÍSTICAS $dataDos['stats']['posts'] = mysql_num_rows(mysql_query('SELECT follow_id FROM u_follows WHERE f_user = \''.$tsUser->uid.'\' && f_type = \'3\'')); $dataDos['stats']['seguidores'] = mysql_num_rows(mysql_query('SELECT follow_id FROM u_follows WHERE f_id = \''.$tsUser->uid.'\' && f_type = \'1\'')); $dataDos['stats']['siguiendo'] = mysql_num_rows(mysql_query('SELECT follow_id FROM u_follows WHERE f_user = \''.$tsUser->uid.'\' && f_type = \'1\'')); # CARGO LOS FILTROS // todos los tipos de notificaciones for($i > 0; $i < 59; $i++) $filtro[$i] = $this->allowNotifi($i, $tsUser->uid); $dataDos['filtro'] = $filtro; // $filtros = unserialize($filtros['c_monitor']); foreach($filtros as $key => $val){ $dataDos['filtro'][$val] = true; } } // PROCESOS $query = mysql_query($sql); $data = result_array($query); // ACTUALIZAMOS if($this->show_type == 1) mysql_query('UPDATE u_monitor SET not_menubar = \''.(int)$not_del.'\' WHERE user_id = \''.$tsUser->uid.'\' AND not_menubar > 0'); else mysql_query('UPDATE u_monitor SET not_menubar = \'0\', not_monitor = \'0\' WHERE user_id = \''.$tsUser->uid.'\' AND not_monitor = \'1\''); // ARMAR TEXTOS Y LINKS $dataDos['data'] = $this->armNotificaciones($data); // TOTAL DE NOTIDICACIONES $dataDos['total'] = count($dataDos['data']); // return $dataDos; } /** * @name armarNotificacion * @access private * @param array, int * @return array * @info CREA LAS NOTIFICACIONES */ private function armNotificaciones($array){ # ARMAMOS LAS ORACIONES $this->makeMonitor(); # PARA CADA VALOR CREAR UNA CONSULTA foreach($array as $key => $val){ // CREAR CONSULTA $sql = $this->makeConsulta($val); // CONSULTAMOS if(is_array($sql)){ $dato = $sql; }else { $query = mysql_query($sql); $dato = mysql_fetch_assoc($query); } $dato = array_merge($dato, $val); // SI AUN EXISTE LO QUE VAMOS A NOTIFICAR.. if($dato) $data[] = $this->makeOracion($dato); } // return $data; } /** * @name makeConsulta * @access private * @param array * @return string * @info RETORNA UNA CONSULTA DEPENDIENDO EL TIPO DE NOTIFICACION */ function makeConsulta($data){ # CON UN SWITCH ESCOGEMOS LA CONSULTA APROPIADA switch($data['not_type']){ // EN ESTOS CASOS SE NECESITA LO MISMO // $nombredeusuario ********** tu $titulodelpost; case 1: case 2: case 3: case 5: case 6: case 7: case 8: case 9: case 18: return 'SELECT p.post_id, p.post_title, c.c_seo FROM p_posts AS p LEFT JOIN p_categorias AS c ON p.post_category = c.cid WHERE p.post_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; // FOLLOW case 4: global $tsUser; // CHECAR SI YA LO SEGUIMOS $i_follow = $tsUser->iFollow($data['obj_user']); return array('follow' => $i_follow); break; // PUBLICO EN TU MURO case 12: return 'SELECT p.pub_id, u.user_name FROM u_muro AS p LEFT JOIN u_miembros AS u ON p.p_user_pub = u.user_id WHERE p.pub_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 13: global $tsUser; // HAY MAS DE UNA NOTIFICACION DEL MISMO TIPO $query = mysql_query('SELECT p.pub_id, p.p_user, p.p_user_pub, u.user_name FROM u_muro AS p LEFT JOIN u_miembros AS u ON p.p_user = u.user_id WHERE p.pub_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'); $dato = mysql_fetch_assoc($query); // $dato['p_user_resp'] = $data['obj_user']; $dato['p_user_name'] = $dato['user_name']; // // DUEÑO DEL MURO $dato['user_name'] = $tsUser->getUserName($data['obj_user']); // QUIEN PUBLICO // return $dato; break; case 60: return 'SELECT p.pub_id, p.p_body, u.user_name FROM u_muro AS p LEFT JOIN u_miembros AS u ON p.p_user = u.user_id WHERE p.pub_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 14: if($data['obj_dos'] == 2) return 'SELECT pub_id AS obj_uno, c_body FROM u_muro_comentarios WHERE cid = \''.(int)$data['obj_uno'].'\''; else return array('value' => 'hack'); break; case 15: return 'SELECT medal_id, m_title, m_image FROM w_medallas WHERE medal_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 16: return 'SELECT p.post_id, p.post_title, c.c_seo, m.medal_id, m.m_title, m.m_image, a.medal_for FROM w_medallas_assign AS a LEFT JOIN p_posts AS p ON p.post_id = a.medal_for LEFT JOIN p_categorias AS c ON c.cid = p.post_category LEFT JOIN w_medallas AS m ON m.medal_id = a.medal_id WHERE m.medal_id = \''.(int)$data['obj_uno'].'\' AND p.post_id = \''.(int)$data['obj_dos'].'\' LIMIT 1'; break; case 17: return 'SELECT f.foto_id, f.f_title, f.f_user, m.medal_id, m.m_title, m.m_image, a.medal_for, u.user_id, u.user_name FROM w_medallas_assign AS a LEFT JOIN f_fotos AS f ON f.foto_id = a.medal_for LEFT JOIN u_miembros AS u ON u.user_id = f.f_user LEFT JOIN w_medallas AS m ON m.medal_id = a.medal_id WHERE m.medal_id = \''.(int)$data['obj_uno'].'\' AND f.foto_id = \''.(int)$data['obj_dos'].'\' LIMIT 1'; break; // JUEGOS case 29: case 26: case 27: case 28: return 'SELECT j_title, j_url, juego_id, j_user, u.user_name FROM j_juegos LEFT JOIN u_miembros AS u ON j_user = u.user_id WHERE juego_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 10: return 'SELECT f_title, f_url, foto_id, f_user, u.user_name, u.user_id FROM f_fotos AS f LEFT JOIN u_miembros AS u ON f.f_user = u.user_id WHERE foto_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 11: return 'SELECT f_title, f_url, foto_id, f_user, u.user_name, u.user_id FROM f_fotos LEFT JOIN f_comentarios AS c ON c.cid LEFT JOIN u_miembros AS u ON f_user = u.user_id WHERE foto_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 19: return 'SELECT p.pub_id, p.p_user FROM u_muro AS p WHERE p.pub_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: return 'SELECT c.c_nombre, c.c_nombre_corto, t.t_id, t.t_titulo, t.t_autor, u.user_name FROM c_temas AS t LEFT JOIN c_comunidades AS c ON c.c_id = t.t_comunidad LEFT JOIN u_miembros AS u ON user_id = t_autor WHERE t.t_id = \''.(int)$data['obj_uno'].'\' LIMIT 1'; break; } } /** * @name makeOracion * @access private * @param array, int, int * @return array * @info RETORNA LAS ORACIONES A MOSTRAR EN EL MONITOR */ private function makeOracion($data){ # GOBALES global $tsCore, $tsUser; # LOCALES $site_url = $tsCore->settings['url']; $no_type = $data['not_type']; $txt_extra = ($this->show_type == 1) ? '' : ' '.$this->monitor[$no_type]['ln_text']; $ln_text = $this->monitor[$no_type]['ln_text']; $ln_text = is_array($ln_text) ? $ln_text[$data['obj_dos']-1] : $ln_text; // $oracion['unread'] = ($this->show_type == 1) ? $data['not_menubar'] : $data['not_monitor']; $oracion['style'] = $this->monitor[$no_type]['css']; $oracion['date'] = $data['not_date']; $oracion['user'] = $data['usuario']; $oracion['avatar'] = $data['obj_user'].'_50.jpg'; $oracion['total'] = $data['not_total']; # CON UN SWITCH ESCOGEMOS QUE ORACION CONSTRUIR switch($no_type){ case 1: case 3: case 5: // $oracion['text'] = $this->monitor[$no_type]['text'].$txt_extra; if($no_type == 3) $oracion['text'] = str_replace('_REP_', '<b>'.$data['obj_dos'].'</b>', $oracion['text']); $oracion['link'] = $site_url.'/posts/'.$data['c_seo'].'/'.$data['post_id'].'/'.$tsCore->setSEO($data['post_title']).'.html'; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['post_title']; $oracion['ltit'] = ($this->show_type == 1) ? $data['post_title'] : ''; break; // FOLLOW case 4: $oracion['text'] = $this->monitor[$no_type]['text']; if($data['follow'] != true && $this->show_type == 2) { $oracion['link'] = '#" onclick="notifica.follow(\'user\', '.$data['obj_user'].', notifica.userInMonitorHandle, this)'; $oracion['ltext'] = $this->monitor[$no_type]['ln_text']; } break; // PUEDEN SER MAS DE UNO case 2: case 6: case 7: case 8: case 9: case 18: // CUANTOS $no_total = $data['not_total']; // MAS DE UNA ACCION if($no_total > 1) { $text = $this->monitor[$no_type]['text'][1].$txt_extra; $oracion['text'] = str_replace('_REP_', "<b>{$no_total}</b>", $text); } else $oracion['text'] = $this->monitor[$no_type]['text'][0].$txt_extra; // ID COMMENT if($no_type == 8 || $no_type == 9|| $no_type == 18){ $id_comment = '#div_cmnt_'.$data['obj_dos']; // EXTRAS if($no_type == 8){ $voto_type = ($data['obj_tres'] == 0) ? 'negativo' : 'positivo'; $oracion['text'] = str_replace('_REP_', '<b>'.$voto_type.'</b>', $oracion['text']); $oracion['style'] = 'voto_'.$voto_type; } } // $oracion['link'] = $site_url.'/posts/'.$data['c_seo'].'/'.$data['post_id'].'/'.$tsCore->setSEO($data['post_title']).'.html'.$id_comment; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['post_title']; $oracion['ltit'] = ($this->show_type == 1) ? $data['post_title'] : ''; break; case 25: case 10: $oracion['text'] = $this->monitor[$no_type]['text']; $oracion['link'] = $site_url.'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html'; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['f_title']; break; case 11: // CUANTOS $no_total = $data['not_total']; // MAS DE UNA ACCION if($no_total > 1) { $text = $this->monitor[$no_type]['text'][1].$txt_extra; $oracion['text'] = str_replace('_REP_', "<b>{$no_total}</b>", $text); } else $oracion['text'] = $this->monitor[$no_type]['text'][0].$txt_extra; // $oracion['link'] = $site_url.'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html'; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['f_title']; $oracion['ltit'] = ($this->show_type == 1) ? $data['f_title'] : ''; break; // PUBLICACION EN MURO case 12: $oracion['text'] = $this->monitor[$no_type]['text'].$txt_extra; $oracion['link'] = $site_url.'/perfil/'.$tsUser->nick.'/'.$data['obj_uno']; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $tsUser->nick; $oracion['ltit'] = ($this->show_type == 1) ? $tsUser->nick : ''; break; case 13: // DE QUIEN? if($tsUser->uid == $data['p_user']) { $de = ' tu'; } elseif($data['p_user'] == $data['p_user_resp']) { $de = ' su'; } else { $de = ' la publicaci&oacute;n de'; //$data['link'][1] = ($typeDos == 1) ? array($array['p_user_name'], $array['p_user_name']) : $array['p_user_name']; } // CUANTOS $no_total = $data['not_total']; if($no_total > 1) { $text = $this->monitor[$no_type]['text'][1].$de.$txt_extra; $oracion['text'] = str_replace('_REP_', '<b>'.$no_total.'</b>', $text); } else $oracion['text'] = $this->monitor[$no_type]['text'][0].$de.$txt_extra; // //$oracion['text'] = $this->monitor[$no_type]['text'].$de.$txt_extra; $oracion['link'] = $site_url.'/perfil/'.$data['p_user_name'].'/'.$data['pub_id']; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $tsUser->nick; $oracion['ltit'] = ($this->show_type == 1) ? $tsUser->nick : ''; break; case 14: // CUANTOS $no_total = $data['not_total']; // MAS DE UNA ACCION if($no_total > 1) { $text = $this->monitor[$no_type]['text'][1].' '.$ln_text; $oracion['text'] = str_replace('_REP_', '<b>'.$no_total.'</b>', $text); } else $oracion['text'] = $this->monitor[$no_type]['text'][0]; // $oracion['text'] = ($this->show_type == 1) ? $oracion['text'] : $oracion['text'].' '.$ln_text; $oracion['link'] = $site_url.'/perfil/'.$tsUser->nick.'/'.$data['obj_uno']; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : substr($data['c_body'],0,20).'...'; $oracion['ltit'] = ($this->show_type == 1) ? substr($data['c_body'],0,20).'...' : ''; break; case 15: $oracion['text'] = 'Recibiste una nueva <span class="qtip" title="'.$data['m_title'].'"><b>medalla</b> <img src="'.$site_url.'/themes/default/images/icons/med/'.$data['m_image'].'_16.png"/></span>'; break; case 16: $oracion['text'] = 'Tu <a href="'.$site_url.'/posts/'.$data['c_seo'].'/'.$data['post_id'].'/'.$tsCore->setSEO($data['post_title']).'.html" title="'.$data['post_title'].'"><b>post</b></a> tiene una nueva <span class="qtip" title="'.$data['m_title'].'"><b>medalla</b> <img src="'.$site_url.'/themes/default/images/icons/med/'.$data['m_image'].'_16.png"/></span>'; break; case 17: $oracion['text'] = 'Tu <a href="'.$site_url.'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html" title="'.$data['f_title'].'"><b>foto</b></a> tiene una nueva <span class="qtip" title="'.$data['m_title'].'"><b>medalla</b> <img src="'.$site_url.'/themes/default/images/icons/med/'.$data['m_image'].'_16.png"/></span>'; break; case 29: case 26: case 27: case 28: // CUANTOS? if($no_type != 29) { $no_total = $data['not_total']; if($no_total > 1) { $text = $this->monitor[$no_type]['text'][1].$txt_extra; $oracion['text'] = str_replace('_REP_', "<b>{$no_total}</b>", $text); }else $oracion['text'] = $this->monitor[$no_type]['text'][0].$txt_extra; } else $oracion['text'] = $this->monitor[$no_type]['text'][0].$txt_extra; // TIPO DE VOTO if($no_type == 27) { $voto_type = ($data['obj_dos'] == 0) ? 'negativo' : 'positivo'; $oracion['text'] = str_replace('_REP_', '<b>'.$voto_type.'</b>', $oracion['text']); $oracion['style'] = 'voto_'.$voto_type; } $oracion['link'] = $site_url.'/juegos/'.$data['juego_id'].'/'.$tsCore->setSEO($data['j_title']).'.html'; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['j_title']; $oracion['ltit'] = ($this->show_type == 1) ? $data['j_title'] : ''; break; case 60: $oracion['text'] = ($this->show_type == 1) ? $this->monitor[$no_type]['text'] : $this->monitor[$no_type]['text'].' '.$ln_text.': '; $oracion['link'] = $site_url.'/perfil/'.$data['user_name'].'/'.$data['pub_id']; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : substr($data['p_body'],0,20).'...'; $oracion['ltit'] = ($this->show_type == 1) ? substr($data['p_body'],0,20).'...' : $ln_text; break; case 19: $oracion['text'] = $this->monitor[$no_type]['text'].$txt_extra; $oracion['link'] = $site_url.'/perfil/'.$tsUser->getUserName($data['p_user']).'/'.$data['obj_uno']; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $tsUser->getUserName($data['p_user']); $oracion['ltit'] = ($this->show_type == 1) ? $tsUser->getUserName($data['p_user']) : ''; break; case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: // CUANTOS $no_total = $data['not_total']; $id_comment = ''; if($no_type == 52) $extra = $this->monitor[$no_type]['extra']; // MAS DE UNA ACCION if($no_total > 1) { $text = $this->monitor[$no_type]['text'][1].$txt_extra; $oracion['text'] = str_replace('_REP_', "<b>{$no_total}</b>", $text); } else $oracion['text'] = ($this->show_type == 1 && $no_type == 52) ? $this->monitor[$no_type]['text'][0].$txt_extra : $this->monitor[$no_type]['text'][0].$txt_extra.$extra; // ID COMMENT if($no_type == 53 || $no_type == 57){ $id_comment = '#coment_id_'.$data['obj_tres']; } if($no_type == 56 || $no_type == 57){ $voto_type = ($data['obj_dos'] == 0) ? 'negativo' : 'positivo'; $oracion['text'] = str_replace('_REP_', '<b>'.$voto_type.'</b>', $oracion['text']); $oracion['style'] = 'voto_'.$voto_type; } // $oracion['link'] = $site_url.'/comunidades/'.$data['c_nombre_corto'].'/'.$data['t_id'].'/'.$tsCore->setSEO($data['t_titulo']).'.html'.$id_comment; $oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['t_titulo']; $oracion['ltit'] = ($this->show_type == 1) ? $data['t_titulo'] : ''; break; } # RETORNAMOS return $oracion; } /** * @name setFollow * @access public * @param none * @return string * @info MANEJA EL SEGUIR USUARIO/POST */ public function setFollow(){ global $tsUser, $tsCore, $tsActividad; // VARS $notType = 4; // NOTIFICACION $fw = $this->getFollowVars(); // ANTI FLOOD $flood = $tsCore->antiFlood(false,'follow'); if(strlen($flood) > 1) { $flood = str_replace('0: ','',$flood); return '1-'.$fw['obj'].'-0-'.$flood; } // YA EXISTE? $query = mysql_query('SELECT follow_id FROM u_follows WHERE f_user = \''.$tsUser->uid.'\' AND f_id = \''.(int)$fw['obj'].'\' AND f_type = \''.$fw['type'].'\' LIMIT 1'); $data = mysql_fetch_assoc($query); // SEGUIR if(empty($data['follow_id'])){ if($tsUser->uid == $fw['obj'] && $fw['type'] == 1) return '1-'.$fw['obj'].'-0-No puedes seguirte a ti mismo.'; if(mysql_query('INSERT INTO `u_follows` (`f_user`, `f_id`, `f_type`, `f_date`) VALUES (\''.$tsUser->uid.'\', \''.(int)$fw['obj'].'\', \''.$fw['type'].'\', \''.time().'\')')){ // MONITOR? if($fw['notUser'] > 0) $this->setNotificacion($notType, $fw['notUser'], $tsUser->uid); // CUANTOS? $query = mysql_query('SELECT COUNT(follow_id) AS total FROM u_follows WHERE f_id = \''.(int)$fw['obj'].'\' AND f_type = \''.(int)$fw['type'].'\''); $total = mysql_fetch_assoc($query); // ACTIVIDAD $ac_type = ($fw['type'] == 1) ? 8 : 7; $tsActividad->setActividad($ac_type, $fw['obj']); // RESPUESTA return '0-'.$fw['obj'].'-'.$total['total']; } else return '1-'.$fw['obj'].'-0-No se pudo completar la acci&oacute;n.'; } else return '2-'.$fw['obj'].'-0'; } /** * @name setUnFollow * @access public * @param none * @return string * @info MANEJA EL DEJAR DE SEGUIR UN USUARIO/POST */ public function setUnFollow(){ global $tsUser, $tsCore; // VARS $notType = 4; // NOTIFICACION $fw = $this->getFollowVars(); // ANTI FLOOD $flood = $tsCore->antiFlood(false, 'follow'); if(strlen($flood) > 1) { $flood = str_replace('0: ','',$flood); return '1-'.$fw['obj'].'-0-'.$flood; } // DEJAR DE SEGUIR if(mysql_query('DELETE FROM u_follows WHERE f_user = \''.$tsUser->uid.'\' AND f_id = \''.(int)$fw['obj'].'\' AND f_type = \''.$fw['type'].'\'')){ // CUANTOS? $total= mysql_num_rows(mysql_query('SELECT follow_id FROM u_follows WHERE f_id = \''.(int)$fw['obj'].'\' AND f_type = \''.$fw['type'].'\'')); // RESPUESTA return '0-'.$fw['obj'].'-'.$total; } else return '1-'.$fw['obj'].'-0-No se pudo completar la acci&oacute;n.'; } /** * @name getFollowVars * @access private * @param none * @return array * @info GENERA Y CREA UN ARRAY CON LA INFORMACION QUE RESIBE POR AJAX */ function getFollowVars(){ global $tsCore; // $return['sType'] = $_POST['type']; $return['obj'] = $tsCore->setSecure($_POST['obj']); // TIPO EN NUMERO switch($return['sType']){ case 'user': $return['type'] = 1; $return['notUser'] = $return['obj']; break; case 'post': $return['type'] = 2; $return['notUser'] = 0; break; } // return $return; } /** * @name getFollows * @access public * @param int * @return array * @info CARGA EN UN ARRAY LA INFORMACION DE LOS "FOLLOWs" DE UN USUARIO */ public function getFollows($type, $user_id = 0){ global $tsCore, $tsUser; // VARS $user_id = empty($user_id) ? $tsUser->uid : $user_id; // switch($type){ case 'seguidores': $query = 'SELECT u.user_id, u.user_name, p.user_pais, p.p_mensaje, f.follow_id FROM u_miembros AS u LEFT JOIN u_perfil AS p ON u.user_id = p.user_id LEFT JOIN u_follows AS f ON p.user_id = f.f_user WHERE f.f_id = \''.(int)$user_id.'\' AND f.f_type = \'1\' ORDER BY f.f_date DESC'; // PAGINAR $total = mysql_num_rows(mysql_query($query)); $pages = $tsCore->getPagination($total, 12); $data['pages'] = $pages; // $dato = result_array(mysql_query($query.' LIMIT '.$pages['limit'])); // foreach($dato as $key => $val){ $query = mysql_query('SELECT follow_id FROM u_follows WHERE f_user = \''.(int)$user_id.'\' AND f_id = \''.(int)$val['user_id'].'\' AND f_type = \'1\''); $siguiendo = mysql_fetch_assoc($query); if(!empty($siguiendo['follow_id'])) $val['follow'] = 1; else $val['follow'] = 0; // $data['data'][] = $val; } break; case 'siguiendo': $query = 'SELECT u.user_id, u.user_name, p.user_pais, p.p_mensaje, f.follow_id FROM u_miembros AS u LEFT JOIN u_perfil AS p ON u.user_id = p.user_id LEFT JOIN u_follows AS f ON p.user_id = f.f_id WHERE f.f_user = \''.(int)$user_id.'\' AND f.f_type = \'1\' ORDER BY f.f_date DESC'; // PAGINAR $total = mysql_num_rows(mysql_query($query)); $pages = $tsCore->getPagination($total, 12); $data['pages'] = $pages; // $data['data'] = result_array(mysql_query($query.' LIMIT '.$pages['limit'])); // break; case 'posts': $query = 'SELECT f.f_id, p.post_user, p.post_title, u.user_name, c.c_seo, c.c_nombre, c.c_img FROM u_follows AS f LEFT JOIN p_posts AS p ON f.f_id = p.post_id LEFT JOIN u_miembros AS u ON u.user_id = p.post_user LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE f.f_user = \''.(int)$user_id.'\' AND f.f_type = \'2\'ORDER BY f.f_date DESC'; // PAGINAR $total = mysql_num_rows(mysql_query($query)); $pages = $tsCore->getPagination($total, 12); $data['pages'] = $pages; // $data['data'] = result_array(mysql_query($query.' LIMIT '.$pages['limit'])); break; } // return $data; } /** * @name setSpam * @access public * @param none * @return string * @info ESTA FUNCION ES PARA REALIZAR RECOMENDACIONES */ public function setSpam(){ global $tsCore, $tsUser, $tsActividad; // $postid = $_POST['postid']; // TIENE SEGUIDORES? $query = mysql_query('SELECT follow_id FROM u_follows WHERE f_id = \''.$tsUser->uid.'\' AND f_type = \'1\' LIMIT 1'); $seguidores = mysql_num_rows($query); // YA LO HA RECOMENDADO? $query = mysql_query('SELECT follow_id FROM u_follows WHERE f_id = \''.(int)$postid.'\' AND f_user = \''.$tsUser->uid.'\' AND f_type = \'3\' LIMIT 1'); $recomendado = mysql_num_rows($query); if($seguidores < 1) return '0-Debes tener al menos un seguidor'; if($recomendado > 0) return '0-No puedes recomendar el mismo post m&aacute;s de una vez.'; // $query = mysql_query('SELECT post_user FROM p_posts WHERE post_id = \''.(int)$postid.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); // if($tsUser->uid != $data['post_user']){ // GUARDAMOS EN FOLLOWS PUES ES LA RECOMENDACION PARA SU SEGUIDORES! xD mysql_query('INSERT INTO u_follows (f_id, f_user, f_type, f_date) VALUES (\''.(int)$postid.'\', \''.$tsUser->uid.'\', \'3\', \''.time().'\') '); // NOTIFICAR if($this->setFollowNotificacion(6, 1, $tsUser->uid, $postid)) { $tsActividad->setActividad(4, $postid); return '1-La recomendaci&oacute;n fue enviada.'; } } else return '0-No puedes recomendar tus posts.'; } /** * @name recomFoto * @info RECOMENDAR FOTOS BY KMARIO19 */ public function recomFoto(){ global $tsCore, $tsUser, $tsActividad; // $fotoid = $_POST['fotoid']; // YA LO HA RECOMENDADO? $query = mysql_query('SELECT follow_id FROM u_follows WHERE foto_id = \''.(int)$fotoid.'\' AND f_user = \''.$tsUser->uid.'\' AND f_type = \'3\' LIMIT 1'); $recomendado = mysql_num_rows($query); if($recomendado > 0) return '0-Ya haz recomendado esta foto.'; // $query = mysql_query('SELECT f_user FROM f_fotos WHERE foto_id = \''.(int)$fotoid.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); // if($tsUser->uid != $data['f_user']){ mysql_query('INSERT INTO u_follows (f_id, f_user, f_type, f_date) VALUES (\''.(int)$fotoid.'\', \''.$tsUser->uid.'\', \'3\', \''.time().'\') '); // NOTIFICAR if($this->setFollowNotificacion(25, 1, $tsUser->uid, $fotoid)) { $tsActividad->setActividad(4, $postid); return '1-La recomendaci&oacute;n fue enviada.'; } } else return '0-No puedes recomendar tus fotos.'; } /** * @name setFiltro * @access public * @param none * @return bool * @info GUARDA LOS FILTROS DE LA ACTIVIDAD */ public function setFiltro(){ # GLOBALES global $tsUser; # LOCALES $filtro_id = (int) $_POST['fid']; $filtro_id = 'f'.$filtro_id; # SACAMOS LA CONFIGURACION $query = mysql_query('SELECT c_monitor FROM u_portal WHERE user_id = \''.$tsUser->uid.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); # PROSESAMOS $filtros = unserialize($data['c_monitor']); # GUARDAR if(in_array($filtro_id, $filtros)) { $aid = array_search($filtro_id, $filtros); array_splice($filtros, $aid); } else { $filtros[] = $filtro_id; } # GUARDAMOS LOS NUEVOS FILTROS $filtros = serialize($filtros); mysql_query('UPDATE u_portal SET c_monitor = '.$filtros.' WHERE user_id = \''.$tsUser->uid.'\''); // return true; } /** * @name allowNotifi * @access private * @param int * @return bool * @info REVISA EN LA CONFIGURACION SI DESEA RESIBIR LA NOTIFICACION */ private function allowNotifi($type, $user_id){ # CONSULTAMOS $query = mysql_query('SELECT c_monitor FROM u_portal WHERE user_id = \''.(int)$user_id.'\' LIMIT 1'); $data = mysql_fetch_assoc($query); # PROSESAMOS $filtro_id = 'f'.$type; $filtros = unserialize($data['c_monitor']); # VERIFICAMOS if(in_array($filtro_id, $filtros)) return false; else return true; } }
  18. Les traigo este pedido , pues busque y no econtre nada justo a lo que necesito . Que es lo siguiente . Un filtro antiFlood que solo afecte la función de agregar post , Ejemplo , si un usuario pone un post , que tenga que esperar un tiempo determinado para poner otro . La razón . hay usuarios que aparecen cada tanto , traen el código de otra pagina , y tapan la home con aportes de un solo usuario . Se podría por protocolo . pero seria mejor que el Scipt no lo permita , Si el tema ya esta , perdón por este Topic , agradecería el link . Gracias Comunidad .- Web = http://lopeordelaweb.li
  19. Hola y Buenas noches a todos, primero disculpen si ya es un tema que quisas hayan publicado pero no lo encontre en la busqueda asi que lo publico. Mi duda es acerca de poner un pequeño fondo a la caja de texto para escribir un estado. ejemplo TARINGA EJEMPLO V5 TO-UP tengo el tema V5 TO-UP e intente hacerlo yo pero no puede. les agradeceria muchisimo si me podrian a resolver ese proeblema desde ya muchas gracias.
  20. Buenas chicos e aprovechado mucho los mods y plantillas de esta comunidad y quisiera agradecer a todos los desarrolladores de esta magnifica pagina lanzando una solicitud que sera reconocida "ya veremos el metodo de pago" quisiera poder añadir un modulo de tienda dentro del scrip donde podras publicar lo que deseas vender pero para ello debes se parte de la pagina y tener una cantidad mínima de puntos para poder publicar un anuncio. adicional mente a ello la posibilidad de poder validar la publicación. es decir que cuando publiques un anuncio de venta de algun articulo el administrador o moderador valide el anuncio si cumple con el protocolo y se pueda publicar de manera exitosa. espero sus comentarios y sugerencias.. Saludos a Todos..!
  21. Hola amigo de la comunidad! Pasaba a dejarles un pedido. La idea seria poder adaptar este chat www.cometchat.com a Phpost. Al que pueda hacerlo y compartirlo le ofrezco un hosting gratis sin limites de recursos. (aunque se que ayudan por buena onda) Muchas gracias! www.thundergames.com.ar esa es mi web!
  22. Hola gente esta vez con mucha pena les comparto un desarrollo para el mod archivos que no podré terminar por ahora, me ocuparé en algo grande y empiezo hoy. Estuve desarrollando algo pero no me da tiempo para terminarlo pero con lo que hice les servirá a algunos que les agradecería que lo terminaran. Por ahora no tiene el boton en el editor de post para agregar pero si con el bbcode [file=id_archivo] Ejemplo: [file=165] [file=6545465465465] [file=210] Muestra: Como muchos sabran soy muy malo con las expresiones regulares asique no se por que me sale el archivo entre corchetes [ ] y espero que alguien pueda arreglarlo o se anime a terminarlo por lo menos. Para instalar esto como va en en archivo c.posts.php buscar: $postData['user_firma'] = $tsCore->parseBadWords($tsCore->parseBBCodeFirma($postData['user_firma']),true); Y agregar debajo: $postData['post_body'] = $this->parseFiles($postData['post_body']); Ahora arriba de: /* getSideData($array) */ Agregar esta nueva funcion: function parseFiles($body) { $exp = '/(?i)\[file\=([[:digit:]]+?)\]/i'; preg_match_all($exp, $body, $files); print_r($files); foreach($files[0] as $id => $file) { $query = mysql_query('SELECT file_id, f_nombre, f_peso, f_descargas, f_ext FROM a_files WHERE file_id = \''.(int)$files[1][$id].'\' LIMIT 1'); $dato = mysql_fetch_assoc($query); if($dato['file_id']>0) $replace = '<a href="#" onclick="down_file('.$dato['file_id'].');return false;">'.$dato['f_nombre'].'.'.$dato['f_ext'].' <span style="color:#444;font-weight:bold;">'.$dato['f_peso'].'</span> <font color="#AAA">'.$dato['f_descargas'].' descargas</font></a>'; else $replace = '<strong>ACHIVO ELIMINADO</strong>'; $body = preg_replace($file, $replace, $body); } return $body; } El resultante del bbcode deja la siguiente estructura: <a href="#" onclick="down_file(ID);return false;">NOMBRE.EXTENSION <span style="color:#444;font-weight:bold;">TAMAÑO</span> <font color="#AAA"># DESCARGAS</font></a> En la funcion down_file() que cree, por ahora no sirve para nada pero en ella hay que colocar el ajax para que descargue el archivo directamente utilizando las funciones que hice en el mod para que sume +1 a la descarga y fuerce a descargarlo y guardarlo en su ordenador. Estaré entrando a ver comentarios y si alguien se anima y por si acaso alguien se apunta y necesita ayuda tal vez pueda guiarlo un poco. Si no se puede terminar pues pueda retomar el proyecto en unas dos semanas mas o menos. Que les seriva y pueda terminarse, hasta p`ronto.
  23. Hola quiero hacer dos pedidos, obvio el primero, si alguien puede desarrollar el mod para mostrar los ultimos albums del usuario en el perfil, el mod que hablo es el de Kmario19, este mod.... Y lo segundo es saber si hay algun tutorial o post que explique el funcionamiento del script, que diga o explique que es smarty y esas cosas, porque la verdad mas de una vez intente ver si podia hacer un mod, pero siempre me quede al la mitad porque al final no lograba lo que queria... es mas, si quieren ayudarme a desarrollar este mod de "Ultimos albums en el perfil" en vez de crearlo alguien, tambien se lo voy a agradecer y quizas hasta es mejor, porque asi uno aprende. En sp se me hacia mas facil llegar a crear algo, pero aca se me complica un poco... o mucho... asi que bueno, si alguien se copa con estos pedidos, se los voy a agradecer, saludos.
  24. Hola, disculpen que este posteando tanto últimamente, pero hoy me di cuenta que al crear un post hay un error, y es que podemos crear un post con el título todo en MAYUSCULAS, cosa que no debería ser así. Al crear el post, y poner el titulo todo en MAYUSCULAS, nos tira una advertencia de que el titulo no debe estar todo en mayúsculas, pero es solo una advertencia, porque al hacer clic en “pre visualizar” igual carga la vista previa y se le damos en “publicar” publica el post. Creo que esto no debería ser así no? Si el post tiene todo en mayúscula no debería dejar ver la vista previa y menos aún postear, por eso vuelvo a molestar diciendo y pidiendo, alguien puede sacar un Fix para que esto no pase? Probé el error en 2 o 3 themes incluido el default y pasa en todos los themes. Bueno, disculpen mis continuos post y desde ya gracias al que puedo solucionar esto.
  25. Presentacion Hola Queria Comentarles Que Estoy Desarrollando Un Upgrade... Para El Editor wysiwyb Final ¿Que Tendra De Nuevo? -Nuevos bbcodes: Tu, Separador/ Videos (Otras Webs No Youtube) (Esto Puede Variar) -Diseños Variado: Verde, Azul, ZF, Rojo... Zf: Combinacion De Colores CleanGreen -Mas Busco Ayuda Nescesito Que Alguien Me Ayude Con Varias Cosas (Upgrade.php, Tu..) El Que Se Disponga A Ayudar Contacteme Por Mp Apenas Encuentre Quien Me Ayude Lo Digo Aqui... (En Este tema) Como Funcionara La Instalación Sera Tan/Mas Simple Que LA DE INSTALACION DE EL EDITOR Porfavor Contacten Por MP... --------------- Actualizado (02/09/2014 17:28 GTM) --------------- Esta No Es Una Version Oficial Pero Igual Si Rhuan Actualiza Podras Actualizarte Sin Editar Nada Mas Lo Que Te Pidan...
×