Ir al contenido

Directrices de Contribución

Únase a la comunidad XOOPS y ayude a hacerla el mejor CMS del mundo.


XOOPS es un proyecto de código abierto que prospera con contribuciones de la comunidad. Si está arreglando errores, agregando características, mejorando documentación o ayudando a otros, sus contribuciones son valiosas.


  • Código de Conducta
  • Flujo de Contribución
  • Directrices de Solicitud de Cambio
  • Reporte de Problemas
  • Estándares de Codificación PHP
  • Estándares JavaScript
  • Directrices CSS
  • Estándares de Plantillas Smarty
  • Índice de ADR
  • Plantilla de ADR
  • ADR-001: Arquitectura Modular
  • ADR-002: Abstracción de Base de Datos

Ventana de terminal
# Hacer fork del repositorio en GitHub
# Luego clonar su fork
git clone https://github.com/YOUR_USERNAME/XoopsCore27.git
cd XoopsCore27
# Agregar remote ascendente
git remote add upstream https://github.com/XOOPS/XoopsCore27.git
# Instalar dependencias
composer install
Ventana de terminal
# Sincronizar con upstream
git fetch upstream
git checkout -b feature/my-feature upstream/main

Seguir los estándares de codificación y escribir pruebas para nuevas características.

Ventana de terminal
# Hacer commit de cambios
git add .
git commit -m "Add: Brief description of changes"
# Enviar a su fork
git push origin feature/my-feature

Luego crear una Solicitud de Cambio en GitHub.


XOOPS sigue estándares de codificación PSR-1, PSR-4 y PSR-12.

<?php
declare(strict_types=1);
namespace XoopsModules\MyModule;
use Xmf\Request;
use XoopsObject;
/**
* Class Item
*
* Represents an item in the module
*/
class Item extends XoopsObject
{
/**
* Constructor
*/
public function __construct()
{
$this->initVar('id', \XOBJ_DTYPE_INT, null, false);
$this->initVar('title', \XOBJ_DTYPE_TXTBOX, '', true, 255);
$this->initVar('content', \XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('created', \XOBJ_DTYPE_INT, time(), false);
}
/**
* Get formatted title
*
* @return string
*/
public function getTitle(): string
{
return $this->getVar('title', 'e');
}
}
ReglaEjemplo
Nombres de clasePascalCase
Nombres de métodocamelCase
ConstantesUPPER_SNAKE_CASE
Variables$camelCase
ArchivosClassName.php
Indentación4 espacios
Longitud de líneaMáximo 120 caracteres
{* Archivo: templates/mymodule_index.tpl *}
{* Descripción: Plantilla de página de índice *}
<{include file="db:mymodule_header.tpl"}>
<div class="mymodule-container">
<h1><{$page_title}></h1>
<{if $items|@count > 0}>
<ul class="item-list">
<{foreach item=item from=$items}>
<li class="item">
<a href="<{$item.url}>"><{$item.title}></a>
</li>
<{/foreach}>
</ul>
<{else}>
<p class="no-items"><{$smarty.const._MD_MYMODULE_NO_ITEMS}></p>
<{/if}>
</div>
<{include file="db:mymodule_footer.tpl"}>

TipoPatrónEjemplo
Característicafeature/descriptionfeature/add-user-export
Arreglofix/descriptionfix/login-validation
Arreglo urgentehotfix/descriptionhotfix/security-patch
Versiónrelease/versionrelease/2.7.0

Seguir commits convencionales:

<type>(<scope>): <subject>
<body>
<footer>

Tipos:

  • feat: Nueva característica
  • fix: Arreglo de error
  • docs: Documentación
  • style: Estilo de código (sin cambio de lógica)
  • refactor: Refactorización de código
  • test: Agregar pruebas
  • chore: Mantenimiento

Ejemplos:

feat(auth): add two-factor authentication
Implement TOTP-based 2FA for user accounts.
- Add QR code generation for authenticator apps
- Store encrypted secrets in user profile
- Add backup codes feature
Closes #123
fix(forms): resolve XSS vulnerability in text input
Properly escape user input in XoopsFormText render method.
Security: CVE-2024-XXXX

Ventana de terminal
# Ejecutar todas las pruebas
./vendor/bin/phpunit
# Ejecutar suite de prueba específica
./vendor/bin/phpunit --testsuite unit
# Ejecutar con cobertura
./vendor/bin/phpunit --coverage-html coverage/
<?php
namespace XoopsModulesTest\MyModule;
use PHPUnit\Framework\TestCase;
use XoopsModules\MyModule\Item;
class ItemTest extends TestCase
{
private Item $item;
protected function setUp(): void
{
$this->item = new Item();
}
public function testInitialValues(): void
{
$this->assertNull($this->item->getVar('id'));
$this->assertEquals('', $this->item->getVar('title'));
}
public function testSetTitle(): void
{
$this->item->setVar('title', 'Test Title');
$this->assertEquals('Test Title', $this->item->getVar('title'));
}
public function testTitleEscaping(): void
{
$this->item->setVar('title', '<script>alert("xss")</script>');
$escaped = $this->item->getTitle();
$this->assertStringNotContainsString('<script>', $escaped);
}
}

📋 Lista de Verificación de Solicitud de Cambio

Sección titulada «📋 Lista de Verificación de Solicitud de Cambio»

Antes de enviar un PR, asegúrese de:

  • El código sigue estándares de codificación XOOPS
  • Todas las pruebas pasan
  • Nuevas características tienen pruebas
  • Documentación actualizada si es necesario
  • Sin conflictos de fusión con rama main
  • Los mensajes de commit son descriptivos
  • La descripción de PR explica cambios
  • Los problemas relacionados están vinculados

🏗️ Registros de Decisiones de Arquitectura

Sección titulada «🏗️ Registros de Decisiones de Arquitectura»

Los ADRs documentan decisiones arquitectónicas significativas.

# ADR-XXX: Título
## Estado
Proposed | Accepted | Deprecated | Superseded
## Contexto
¿Cuál es el problema que estamos abordando?
## Decisión
¿Cuál es el cambio que se propone?
## Consecuencias
¿Cuáles son los efectos positivos y negativos?
## Alternativas Consideradas
¿Qué otras opciones se evaluaron?
ADRTítuloEstado
ADR-001Arquitectura ModularAceptado
ADR-002Acceso a Base de Datos Orientado a ObjetosAceptado
ADR-003Motor de Plantillas SmartyAceptado
ADR-004Diseño del Sistema de SeguridadAceptado
ADR-005Middleware PSR-15 (4.0.x)Propuesto

Los colaboradores son reconocidos a través de:

  • Lista de Colaboradores - Listado en repositorio
  • Notas de Versión - Créditos en versiones
  • Salón de la Fama - Colaboradores destacados
  • Certificación de Módulo - Insignia de calidad para módulos

  • Hoja de Ruta de XOOPS 4.0
  • Conceptos Principales
  • Desarrollo de Módulos


#xoops #contributing #open-source #community #development #coding-standards