ข้ามไปยังเนื้อหา

แนวทางการมีส่วนร่วม

เข้าร่วมชุมชน XOOPS และช่วยทำให้ชุมชน CMS ดีที่สุดในโลก


XOOPS เป็นโครงการโอเพ่นซอร์สที่ประสบความสำเร็จจากการมีส่วนร่วมของชุมชน ไม่ว่าคุณจะแก้ไขข้อบกพร่อง เพิ่มฟีเจอร์ ปรับปรุงเอกสาร หรือช่วยเหลือผู้อื่น การมีส่วนร่วมของคุณก็มีคุณค่า


  • หลักจรรยาบรรณ
  • ขั้นตอนการทำงานสมทบ
  • แนวทางการขอดึง
  • การรายงานปัญหา
  • PHP มาตรฐานการเข้ารหัส
  • มาตรฐานJavaScript
  • CSS หลักเกณฑ์
  • มาตรฐานเทมเพลต Smarty
  • ADR ดัชนี
  • ADR เทมเพลต
  • ADR-001: สถาปัตยกรรมแบบโมดูลาร์
  • ADR-002: ฐานข้อมูลนามธรรม

Terminal window
# Fork the repository on GitHub
# Then clone your fork
git clone https://github.com/YOUR_USERNAME/XoopsCore27.git
cd XoopsCore27
# Add upstream remote
git remote add upstream https://github.com/XOOPS/XoopsCore27.git
# Install dependencies
composer install
Terminal window
# Sync with upstream
git fetch upstream
git checkout -b feature/my-feature upstream/main

ปฏิบัติตามมาตรฐานการเขียนโค้ดและเขียนการทดสอบฟีเจอร์ใหม่ๆ

Terminal window
# Commit changes
git add .
git commit -m "Add: Brief description of changes"
# Push to your fork
git push origin feature/my-feature

จากนั้นสร้าง Pull Request บน GitHub


XOOPS เป็นไปตามมาตรฐานการเข้ารหัส PSR-1, PSR-4 และ 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');
}
}
กฎตัวอย่าง
ชื่อคลาสPascalCase
ชื่อวิธีการcamelCase
ค่าคงที่UPPER_SNAKE_CASE
ตัวแปร$camelCase
ไฟล์ClassName.php
การเยื้อง4 ช่อง
ความยาวบรรทัดสูงสุด 120 ตัวอักษร
{* 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"}>

พิมพ์รูปแบบตัวอย่าง
คุณสมบัติfeature/descriptionfeature/add-user-export
แก้ไขข้อผิดพลาดfix/descriptionfix/login-validation
โปรแกรมแก้ไขด่วนhotfix/descriptionhotfix/security-patch
ปล่อยrelease/versionrelease/2.7.0

ปฏิบัติตามข้อผูกพันทั่วไป:

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

ประเภท:

  • feat: คุณลักษณะใหม่
  • fix: แก้ไขข้อบกพร่อง
  • docs: เอกสารประกอบ
  • style: รูปแบบโค้ด (การจัดรูปแบบ)
  • refactor: การปรับโครงสร้างโค้ดใหม่
  • test: การเพิ่มการทดสอบ
  • chore: การบำรุงรักษา

ตัวอย่าง:

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

Terminal window
# Run all tests
./vendor/bin/phpunit
# Run specific test suite
./vendor/bin/phpunit --testsuite unit
# Run with coverage
./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);
}
}

ก่อนที่จะส่ง PR ตรวจสอบให้แน่ใจว่า:

  • รหัสเป็นไปตามมาตรฐานการเข้ารหัส XOOPS
  • ผ่านการทดสอบทั้งหมด
  • คุณสมบัติใหม่มีการทดสอบ
  • เอกสารได้รับการอัปเดตหากจำเป็น
  • ไม่มีข้อขัดแย้งในการผสานกับสาขาหลัก
  • ข้อความยืนยันเป็นแบบอธิบาย
  • PR คำอธิบายอธิบายการเปลี่ยนแปลง
  • มีการเชื่อมโยงประเด็นที่เกี่ยวข้องแล้ว

ADR บันทึกการตัดสินใจทางสถาปัตยกรรมที่สำคัญ

markdown
# ADR-XXX: Title
## Status
Proposed | Accepted | Deprecated | Superseded
## Context
What is the issue we're addressing?
## Decision
What is the change being proposed?
## Consequences
What are the positive and negative effects?
## Alternatives Considered
What other options were evaluated?
ADRชื่อเรื่องสถานะ
ADR-001สถาปัตยกรรมแบบแยกส่วนยอมรับแล้ว
ADR-002การเข้าถึงฐานข้อมูลเชิงวัตถุยอมรับแล้ว
ADR-003เครื่องมือเทมเพลต Smartyยอมรับแล้ว
ADR-004การออกแบบระบบรักษาความปลอดภัยยอมรับแล้ว
ADR-005PSR-15 มิดเดิลแวร์ (4.0.x)เสนอ

ผู้ร่วมให้ข้อมูลได้รับการยอมรับผ่าน:

  • รายชื่อผู้ร่วมให้ข้อมูล - มีรายชื่ออยู่ในพื้นที่เก็บข้อมูล
  • หมายเหตุการเผยแพร่ - ให้เครดิตในการเผยแพร่
  • หอเกียรติยศ - ผู้มีส่วนร่วมที่โดดเด่น
  • การรับรองโมดูล - ป้ายคุณภาพสำหรับโมดูล

  • XOOPS 4.0 แผนการทำงาน
  • แนวคิดหลัก
  • การพัฒนาโมดูล


#xoops #contributing #open-source #community #development #coding-มาตรฐาน