Pedoman Berkontribusi
🤝 Berkontribusi pada XOOPS
Section titled “🤝 Berkontribusi pada XOOPS”Bergabunglah dengan komunitas XOOPS dan bantu menjadikannya CMS terbaik di dunia.
📋 Ikhtisar
Section titled “📋 Ikhtisar”XOOPS adalah proyek sumber terbuka yang berkembang berkat kontribusi komunitas. Baik Anda memperbaiki bug, menambahkan fitur, menyempurnakan dokumentasi, atau membantu orang lain, kontribusi Anda sangat berharga.
🗂️ Bagian Isi
Section titled “🗂️ Bagian Isi”Pedoman
Section titled “Pedoman”- Kode Etik
- Alur Kerja Kontribusi
- Pedoman Permintaan Tarik
- Pelaporan Masalah
Gaya Kode
Section titled “Gaya Kode”- Standar Pengkodean PHP
- Standar JavaScript
- Pedoman CSS
- Standar template Smarty
Keputusan Arsitektur
Section titled “Keputusan Arsitektur”- Indeks ADR
- template ADR
- ADR-001: Arsitektur Modular
- ADR-002: Abstraksi Basis Data
🚀 Memulai
Section titled “🚀 Memulai”1. Menyiapkan Lingkungan Pengembangan
Section titled “1. Menyiapkan Lingkungan Pengembangan”# Fork the repository on GitHub# Then clone your forkgit clone https://github.com/YOUR_USERNAME/XoopsCore27.gitcd XoopsCore27
# Add upstream remotegit remote add upstream https://github.com/XOOPS/XoopsCore27.git
# Install dependenciescomposer install2. Buat Cabang Fitur
Section titled “2. Buat Cabang Fitur”# Sync with upstreamgit fetch upstreamgit checkout -b feature/my-feature upstream/main3. Lakukan Perubahan
Section titled “3. Lakukan Perubahan”Ikuti standar pengkodean dan tulis tes untuk fitur baru.
4. Kirim Permintaan Tarik
Section titled “4. Kirim Permintaan Tarik”# Commit changesgit add .git commit -m "Add: Brief description of changes"
# Push to your forkgit push origin feature/my-featureKemudian buat Permintaan Tarik di GitHub.
📝 Standar Pengkodean
Section titled “📝 Standar Pengkodean”Standar PHP
Section titled “Standar PHP”XOOPS mengikuti standar pengkodean PSR-1, PSR-4, dan 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'); }}Konvensi Utama
Section titled “Konvensi Utama”| Aturan | Contoh |
|---|---|
| Nama kelas | PascalCase |
| Nama metode | camelCase |
| Konstanta | UPPER_SNAKE_CASE |
| Variabel | $camelCase |
| File | ClassName.php |
| Indentasi | 4 spasi |
| Panjang garis | Maks 120 karakter |
template Smarty
Section titled “template Smarty”{* File: templates/mymodule_index.tpl *}{* Description: Index page template *}
<{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"}>🔀 Alur Kerja Git
Section titled “🔀 Alur Kerja Git”Penamaan Cabang
Section titled “Penamaan Cabang”| Ketik | Pola | Contoh |
|---|---|---|
| Fitur | feature/description | feature/add-user-export |
| Perbaikan bug | fix/description | fix/login-validation |
| Perbaikan terbaru | hotfix/description | hotfix/security-patch |
| Rilis | release/version | release/2.7.0 |
Komit Pesan
Section titled “Komit Pesan”Ikuti komitmen konvensional:
<type>(<scope>): <subject>
<body>
<footer>Jenis:
feat: Fitur barufix: Perbaikan bugdocs: Dokumentasistyle: Gaya kode (pemformatan)refactor: Pemfaktoran ulang kodetest: Menambahkan teschore: Pemeliharaan
Contoh:
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 #123fix(forms): resolve XSS vulnerability in text input
Properly escape user input in XoopsFormText render method.
Security: CVE-2024-XXXX🧪 Pengujian
Section titled “🧪 Pengujian”Menjalankan Tes
Section titled “Menjalankan Tes”# Run all tests./vendor/bin/phpunit
# Run specific test suite./vendor/bin/phpunit --testsuite unit
# Run with coverage./vendor/bin/phpunit --coverage-html coverage/Tes Menulis
Section titled “Tes Menulis”<?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); }}📋 Daftar Periksa Permintaan Tarik
Section titled “📋 Daftar Periksa Permintaan Tarik”Sebelum mengirimkan PR, pastikan:
- Kode mengikuti standar pengkodean XOOPS
- Semua tes lulus
- Fitur baru ada pengujiannya
- Dokumentasi diperbarui jika diperlukan
- Tidak ada konflik penggabungan dengan cabang utama
- Pesan penerapan bersifat deskriptif
- Deskripsi PR menjelaskan perubahan
- Masalah terkait ditautkan
🏗️ Catatan Keputusan Arsitektur
Section titled “🏗️ Catatan Keputusan Arsitektur”ADR mendokumentasikan keputusan arsitektur yang signifikan.
template ADR
Section titled “template ADR”# ADR-XXX: Title
## StatusProposed | Accepted | Deprecated | Superseded
## ContextWhat is the issue we're addressing?
## DecisionWhat is the change being proposed?
## ConsequencesWhat are the positive and negative effects?
## Alternatives ConsideredWhat other options were evaluated?ADR saat ini
Section titled “ADR saat ini”| ADR | Judul | Status |
|---|---|---|
| ADR-001 | Arsitektur Modular | Diterima |
| ADR-002 | Akses Database Berorientasi Objek | Diterima |
| ADR-003 | Mesin template Smarty | Diterima |
| ADR-004 | Desain Sistem Keamanan | Diterima |
| ADR-005 | PSR-15 Middleware (4.0.x) | Diusulkan |
🎖️ Pengakuan
Section titled “🎖️ Pengakuan”Kontributor diakui melalui:
- Daftar Kontributor - Terdaftar di repositori
- Catatan Rilis - Dikreditkan dalam rilis
- Hall of Fame - Kontributor luar biasa
- Sertifikasi module - Lencana kualitas untuk module
🔗 Dokumentasi Terkait
Section titled “🔗 Dokumentasi Terkait”- Peta Jalan XOOPS 4.0
- Konsep core
- Pengembangan module
📚 Sumber Daya
Section titled “📚 Sumber Daya”#xoops #kontribusi #sumber terbuka #komunitas #pengembangan #standar pengkodean