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.
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 | - |
|
Nick sin registrar | - |
|
Usuario (Usr) | 3 (Predeterminado) |
|
Moderador (Mod) | 2 |
|
Administrador (Adm) | 1 |
|
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 | Sí | No |
Nick sin registrar | Sí | No |
Usuario (Usr) | Sí | Sí |
Moderador (Mod) | Sí | Sí |
Administrador (Adm) | Sí | 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 [^]