netForo! Handbook


Introducción al netForo! [^]

netForo! es el primer proyecto escrito en PHP pensado para "la comunidad open-source" de SourceForge.NET. La idea nació a partir de la web de un colega del trabajo, que usó phpDbb ( de php-Nuke ) para montarse un foro. Sin pensármelo dos veces, decidí desarrollar mi propia y personal visión de como debería ser un foro en PHP, no con la idea de hacer la competencia a php-nuke - entre otras cosas, esto solo es un motor de FORO -, sinó con la idea de ofrecer una buena herramienta OpenSource escrita para la comunidad libre para todos aquellos que necesiten de un sistema de foro y no quieran poner todo el "paquete" de php-nuke.

netForo! es un motor de foro para cualquier servidor web que soporte PHP. Como la mayor parte de los foros, claro. De hecho en SourceForge.NET ya hay, en el momento de escribir estas breves notas, un total de 720 proyectos en la sección de "Message Boards", que es donde he ubicado netForo!. Ante semejante estadística, ¿ que tiene netForo! que no tengan los demás foros? Solo se me ocurre una cosa: los netForo! Commands.

Acérrimo defensor y usuario (y moderador y Op durante algún tiempo) del IRC-Hispano, me basé en los comandos NICK (/msg NICK@deep.space IDENTIFY .... ) para elaborar lo que, sin duda, es TOTALMENTE NUEVO en el mundo de los foros escritos en PHP para la red: los netForo! Commands. Básicamente se trata de administrar las partes necesarias - nicks, bans, etc- del sistema de foro mediante comandos. Estos comandos son únicos en netForo!.

Por lo demás, nada que sea destacable respecto a otros sistemas. Seguro que incluso los hay mejores. Y con el código mejor estructurado o simplificado que el mío.

Pero, de todos modos, me he entretenido mucho. Y aún lo hago, dotándole día tras día de nuevas prestaciones. Seguid atentos al proyecto en SourceForge.NET y en la web del netForo!.

Gracias por usarme.

The Order Of The Dragon00, "De profundis clamavi ad te domine"

Características del netForo! [^]

Instalación del netForo en entornos UNIX [^]

netForo 0.1e INSTALL-DOC
+++++++++++++++++++++++

1.- Requisitos

- Apache 1.3.31+.
- Módulo php 4.3.6+.
- mySQL 4.0.18+

2.- Instalación de netForo 0.1

2.1.- Instalación de la base de datos
+++++++++++++++++++++++++++++++++++++

Ejecutar el script mySQL incluido en el directorio db/netForo.sql

2.2.- Instalación de las fuentes php
++++++++++++++++++++++++++++++++++++

Copiar la estructura de archivos php, imágenes y css de php/* al directorio
deseado de publicación del servidor apache.

2.3.- Configuración de las fuentes
++++++++++++++++++++++++++++++++++

El archivo php/include.php contiene como mínimo las siguientes líneas de
código que deberán ser modificadas para su funcionamiento:

define("_MYSQL_SERVER","localhost"); // Servidor mySQL
define("_MYSQL_USERNAME","chucrut.de.fua"); // Uusario mySQL
define("_MYSQL_PASSWORD","begs27"); // Password del uusario mySQL
define("_MYSQL_DATABASE","www"); // Base de datos a usar para netForo
define("_ROOT_DIRECTORY",""); // Directorio raíz "real" del site web

Bastará substituir los valores correspondientes para adecuarlos a la configuración
del usuario. Por ejemplo, si el servidor mySQL es 10.50.3.25 :

define("_MYSQL_SERVER","10.50.3.25");

Un dato importante es el directorio para los "uploads":
define("_UPLOAD_DIRECTORY",_ROOT_DIRECTORY . "uploads/");// Directorio dentro del netForo

Es necesario que el usuario efectivo de apache posea permisos de lectura/escritura o las
llamadas a move_uploaded_file(); fallarán.
Por ejemplo, para un supuesto usuario "nobody" estos serían los permisos del directorio
de uploads correctos:

drwxr-xr-x 2 nobody web 512 Jun 7 12:57 uploads/

2.4.- Iniciar sesión como Administrador
+++++++++++++++++++++++++++++++++++++++

netForo! incluye el usuario y password:
netForo / net00

con perfil de administrador.

Referencia para netForo! commands [^]

Sintaxis

nick comando [argumentos]

ip ban argumentos (solo para banear o desbanear ips)

canal words argumentos (solo para editar la lista de palabras prohibidas en un canal)

Comandos válidos

Comando Argumentos Descripción
info - Obtener información del nick deseado
delete - Eliminar el nick de la base de datos de nicks
register password Añadir un nuevo nick a la base de datos
passwd nuevo_password Modificar el password del nick deseado
profile id de perfil Modificar el perfil del nick deseado
mod lista de foros separada por comas, y delante de cada nombre de foro indicar + o -, (+) para otorgar; (-) para denegar Modificar que foros puede moderar un usuario con perfil de moderador
ban(*) lista de foros separada por comas, y delante de cada nombre de foro indicar + o -, (+) para banear; (-) para desbanear Banear el nick (o la ip) deseado/a o desbanearle/a de la lista de foros indicada
words (**) lista de palabras separadas por comas, y delante de cada una de ellas un + para añadirla como prohibida o un - para quitarla, si existía previamente. Añadir o quitar del foro deseado una lista de palabras prohibidas

Retorno

Todos los comandos retornan true en caso de éxito o false en cualquier otro.

Ejemplos

(*) Sobre el comando BAN y las IPS.

La única excepción a la sintaxis clara de los nick commands es la sentencia "ban", que puede banear no solo nicks, sinó también IPS. Para ello en lugar de indicar un nick, se indicará una IP válida delante de "ban".

(**) Control de palabras prohibidas en un canal

En estos casos, el primer argumento del netForo! Command no es un nick, sinó un canal válido.

La lista de palabras puede estar indistintamente en mayúsculas o minúsculas, ya que el sistema no las discriminará. Esto es, prohibirá tanto "puta" como "PUTA" o "PuTa", etc.

Perfiles de nicks en netForo! [^]

Perfil Identificador de perfil Derechos
Sin nick -
  • Acceso a cualquier foro
  • Lectura de todos los mensajes
Nick sin registrar -
  • Acceso a cualquier foro.
  • Crear mensajes nuevos.
  • Leer cualquier mensaje.
  • "Usurpar" nicks sin registrar.
  • Límite de _MAX_MESSAGE_BODY caracteres por mensaje
Usuario (Usr) 3 (Predeterminado)
  • Acceso a cualquier foro para el que no esté baneado.
  • Se le aplican Bans a nivel de nick.
  • Leer cualquier mensaje.
  • Enviar mensaje.
  • Protección de su nick con password.
  • Límite de _MAX_MESSAGE_BODY caracteres por mensaje.
  • Envío de archivo adjunto en los mensajes
Moderador (Mod) 2
  • Acceso a cualquier foro para el que no esté baneado.
  • Se le aplican Bans a nivel de nick.
  • Leer cualquier mensaje.
  • Enviar mensajes.
  • Protección de su nick con password.
  • Sin límite de caracteres en los mensajes.
  • Borrado de mensajes en aquellos foros con permisos de moderador.
  • Envío de archivo adjunto en los mensajes.
Administrador (Adm) 1
  • Acceso a cualquier foro para el que no esté baneado a nivel IP
  • Leer cualquier mensaje.
  • Se le aplican Bans a nivel de IP.
  • Enviar mensajes.
  • Protección de su nick con password.
  • Sin límite de ban por nick.
  • Sin límite de caracteres en los mensajes.
  • Borrado de mensajes en cualquier foro.
  • Borrado de foros existentes.
  • Creación de nuevos foros.
  • Uso de los netForo! Commands para la gestión de nicks registrados.
  • Envío de archivo adjunto en los mensajes

Cambiar de perfil a un nick existente

Solo un usuario con perfil de Administrador(1) puede hacerlo utilizando los netForo! commands del siguiente modo:

nick profile identificador_del_nuevo_perfil

 

Control de acceso a los foros [^]

Tabla resumen de BANS

Perfil Ban por IP Ban por nick
Sin nick No
Nick sin registrar No
Usuario (Usr)
Moderador (Mod)
Administrador (Adm) No

La seguridad en el acceso a los foros queda determinada por:

Banear a nivel IP

Cuando un usuario accede al netForo!, inicie o no una sesión con un nick - sea o no registrado -, al intentar acceder al foro deseado se procede al chequeo de BAN por IP, aplicándose incluso a usuarios administradores que hayan podido iniciar sesión con su nick de Administrador.

Para bloquear una ip a un foro determinado, un usuario con perfil Administrador(1) deberá lanzar el comando netForo! Command:

dirección_ip_válida ban +|-foro[,+|-foro2][,+|-foro3] ...

Banear a nivel de nick

El baneo de nick solo se puede aplicar a usuarios moderadores o usuarios, pero cuyo nick esté registrado. Un usuario con perfil de Administrador, aún y poseyendo bans en un foro determinado, NO se le aplicarán.

Para banear un nick determinado a unos foros concretos, un usuario con perfil de Administrador(1) deberá lanzar el netForo! Command:

nick_registrado ban +|-foro[,+|-foro2][,+|-foro3] ...

Orden de comprobación de BANS

Primero se aplican los BANS de IP y después los BANS a nivel de nicks.

Constantes del código que modifican el comportamiento [^]

Archivo de cabecera

Todas las opciones se encuentran en el archivo include.php. Cualquier añadido posterior debería ingresarse en este mismo archivo para mantener el código ordenado - dentro de lo posible -.

Valores en include.php interesantes para modificar el comportamiento del netForo!

define("_SALT","hellOnNET.NET");

Valor de clave para el uso de la encriptación de passwords utilizando crypt();.


define("_DEFAULT_PROFILE",3);

Perfil de nick al registrar uno nuevo predeterminado, el 3 indica Usr (Usuario). Los niveles de nick actuales van desde el 1 (Adm), 2(Mod), al 3(Usr).


define("_MAX_MESSAGE_BODY",300);

Capacidad en caracteres máxima para el cuerpo de un mensaje cuando lo envía un usuario sin registrar o cuando el usuario posee un perfil de Usr. La idea era limitar al menos los mensajes de gran parrafada, como los que suele mandar un amigo mío, de 100 líneas o más.


define("_VALID_NAMES","[^a-z0-9\.]");

Que caracteres están permitidos para los foros y los nicks. Por defecto solo se admiten caracteres en mayúsculas o minúsculas de la a-Z, números del 0 al 9 y el caracter "." (punto). No es necesario indicar la expresión completa típica de regexp:

[^a-zA-Z0-9\.]

porque se utiliza la función eregi(); de php, que no diferencia entre mayúsculas y minúsculas. En el caso de modificar estos caracteres, hay que ir con cuidado con las rutinas netForo! Commands, que interpretan el espacio en blanco entre cadenas para localizar los argumentos posicionales.

define("_NETFORO_VERSION","0.1c");

La versión actual del netForo!. También se utiliza para crear el título de la ventana principal.


define("_TITLE_PAGE","netForo Ver." . _NETFORO_VERSION);

El título de la página , que será siempre visible ante cualquier acción del netForo!


define("_ROOT_DIRECTORY","/ruta/a/dir_site");

Es necesario, para los "uploads" de archivos, indicar al netForo! la ruta completa de ubicación a partir de la raíz del disco o de la configuración chroot del servidor apache, del directorio completo de publicación web.

define("_SENDFILE_MAX_SIZE",100000);

El tamaño en bytes máximo permitido para un archivo enviado al netForo!. Este valor JAMÁS podrá rebasar el valor de php.ini (upload_max_filesize)


define("_UPLOAD_DIRECTORY",_ROOT_DIRECTORY . "uploads/");

Directorio (a partir de la raíz del netForo!) donde los archivos enviados se almacenarán. Es IMPORTANTE asignar correctamente los permisos a este directorio, o las llamadas a move_uploaded_file(); fallarán. El usuario de apache efectivo - por ejemplo nobody- deberá poseer permisos de lectura/escritura (chmod 7XX)

define("_REPLACE_INVALID_WORD","[PALABRA PROHIBIDA]");

Cadena a substituir en un canal que posea lista de palabras prohibidas al detectar una. Por ejemplo, si el canal "canal_a" posee las palabras "puta" y "chucrut" como prohibidas, el envío de este mensaje:

Eres una puta guarra que come chucrut-de-fuà!

Sería filtrado por:

Eres una [PALABRA PROHIBIDA] guara que come [PALABRA PROHIBIDA]-de-fuà!

Envío de adjuntos en los mensajes [^]

Requisitos para poder enviar archivos

En netForo! deben cumplirse las siguientes condiciones para que un usuario pueda enviar archivos adjuntos:

Archivos admitidos

Los archivos admitidos se indican en include.php, en el array siguiente :

$valid_extensions = array(0 => "doc" , 1 => "ppt" , 2 => "pps" , 3 => "txt" , 4 => "zip",
5 => "tgz" , 6 => "h" , 7 => "gz" , 8 => "ace", 9 => "c" ,
10 => "cpp", 11 => "asm" , 12 => "o" , 13 => "a", 14 => "so",
15 => "gif", 16 => "jpg", 17 => "bmp");

An senzillo como ampliar este array.

Archivo Extensión
Documento de Word o cualquier otro tipo "doc"
doc
Archivos de powerpoint
ppt, pps
Archivos de texto plano
txt
Archivos comprimidos
zip, tgz, gz, ace
Archivos de código fuente
c, cpp, h, asm
Archivos objeto y librerías dinámicas o estáticas
o, a, so
Imágenes
gif, jpg, bmp

Directorio de uploads

El directorio donde se almacenarán los archivos enviados se indica en la constante _UPLOAD_DIRECTORY. Como es evidente, este directorio debe cumplir obligatoriamente estos requisitos para que los envíos no fallen:

Para cumplir el punto 2, comprobaremos las líneas siguientes en el archivo httpd.conf de Apache:

User nobody
Group nobody

Este es el usuario:grupo para el que los permisos del directorio _UPLOAD_DIRECTORY deben estar a lectura/escritura:

drwxr-xr-x 2 nobody web 512 Jun 8 08:53 uploads/

Bastará lanzar el par de comandos:

chown nobody:nobody directorio_de_uploads ; chmod 755 directorio_de_uploads

Archivos de las fuentes netForo! [^]

Archivos de netForo!

Archivo Contenedor Descripción
error.php
*
Mostrar un entorno común para los diferentes mensajes de error del netForo!
foot.php
link.php
Pié del netForo, autentificación y registro de nicks, interfaz de netForo! Commands.
foro.php
menu.php
Añadir nuevos foros (solo para profiles de Administrador)
head.php
link.php
Encabezado de netForo!, mostrar foro actual, id de sesión, y detalles del foro.
include.php
link.php
Definición de mySQL, apis del foro_*, defines y demás. Es el archivo de header.
link.php
--
Archivo principal del netForo!, el que lo "encapsula" todo y procesa los POSTS.
menu.php
link.php
Interfaz lateral con la lista de foros, posibilidad de borrarlos o seleccionarlos.
messages.php
link.php
Listado de mensajes, borrado de los mismos o llamada a las búsquedas.
read.php
link.php
Lectura de mensajes o escritura de mensajes nuevos.
search.php
messages.php
Sistema de búsquedas de mensajes
doc/netforo.html
--
Documentación del netForo, el netForo! Handbook (este mismo archivo)
images/head.gif
head.php
Imagen logotipo de la parte superior/derecha del head.php para el "Acerca De"
images/clip.gif
read.php
Imagen de "archivo adjunto" para la lectura de un mensaje con adjunto.
css/
--
De momento no posee archivos, pero aquí iran las definciones de clases CSS.
uploads/*
--
Directorio de uploads, donde se almacenarán los archivos adjuntos. Se suministra VACÍO con las fuentes del netForo!
down.php
--
Archivo llamado mediante método GET para descargar archivos del netForo! utilizando las cabeceras del HTML como "attachment", forzando al navegador a mostrar el cuadro de diálogo "Descargar ..."

 

Documentación de BUGS dentro de las fuentes [^]

Los posibles BUGS detectados Y no corregidos por mi (todavía), se indican claramente en la cabecera del archivo con el tag BUG# id_de_bug, y después en el cuerpo del archivo fuente se marca la sección afectada por el BUG entre los tags BUG# id_de_bug y BUG# id_de_bug END. El trozo de código que genera errores se encuentra entre los tags CÓDIGO AFECTADO: y BUG# id_de_bug END. Por ejemplo:

//
// BUG# 1
// Si se descomenta esta línea, se producen errores de mySQL en la lectura de los
// mensajes en read.php
// CÓDIGO AFECTADO :
// $foro_messages->mySQL_Disconnect();
// BUG# 1 END
//

en negrita se indica el código erróneo.

Interfaz de error común (error.php) [^]

Si se añaden nuevas funcionalidades al código de netForo!, seria ideal seguir el planteamiento de mostrar siempre el mensaje de error con la misma apariencia. Para ello netForo incluye el archivo error.php, que permite precisamente esto.

Para mostrar un mensaje de error, deberá incluirse el archivo error.php DESPUÉS de rellenar las correspondientes variables de indicación del error, que son:

//
// Mensajes
//
if(empty($_errorMessage))
$_errorMessage = "[No se ha especificado el mensaje de error]";
if(empty($_errorHeader))
$_errorHeader = "ERROR: [No se ha especificado el título del error]";

Si estas dos variables están vacías, el mensaje de error será genérico. También pueden personalizarse los colores del título o del detalle del error :

//
// Colores
//
if(empty($_colorHeader))
$_colorHeader = "#FF0000";
if(empty($_colorMessage))
$_colorMessage = "#FF0000";

 

$_errorHeader = "No hay resultados";
$_errorMessage = "HellOnNET.NET/FORO.ERROR : [
La búsqueda no produjo filas]";
include("error.php");
return;

 

Descargar las fuentes de netForo! [^]

http://www.hellonnet.net/ ( Sección del Cubil o noticias de portada )

http://netforo.hellonnet.net/link.php ( cualquier POST del usuario hellonnet que incluya las fuentes )

http://sourceforge.net/projects/netforo

Documentación externa para desarrolladores [^]

Documentación del gestor de base de datos mySQL ( http://dev.mysql.com/doc/mysql/en/index.html )

Documentación del lenguaje PHP ( http://www.php.net/manual/es/ )

Documentación del servidor web Apache ( http://httpd.apache.org/docs/ )

Contactar con HellOnNET.NET [^]