Οδηγίες συνεισφοράς
🤝 Συμβολή στο XOOPS
Ενότητα με τίτλο «🤝 Συμβολή στο XOOPS»Γίνετε μέλος της κοινότητας XOOPS και βοηθήστε να γίνει η καλύτερη CMS στον κόσμο.
📋 Επισκόπηση
Ενότητα με τίτλο «📋 Επισκόπηση»Το XOOPS είναι ένα έργο ανοιχτού κώδικα που ευδοκιμεί στις συνεισφορές της κοινότητας. Είτε επιδιορθώνετε σφάλματα, προσθέτετε λειτουργίες, βελτιώνετε την τεκμηρίωση ή βοηθάτε άλλους, οι συνεισφορές σας είναι πολύτιμες.
🗂️ Περιεχόμενα ενότητας
Ενότητα με τίτλο «🗂️ Περιεχόμενα ενότητας»# Οδηγίες
Ενότητα με τίτλο «# Οδηγίες»- Κώδικας Δεοντολογίας
- Ροή εργασιών συνεισφοράς
- Οδηγίες αιτήματος έλξης
- Αναφορά ζητημάτων
# Στυλ κώδικα
Ενότητα με τίτλο «# Στυλ κώδικα»- PHP Πρότυπα κωδικοποίησης
- Πρότυπα JavaScript
- CSS Οδηγίες
- Πρότυπα Smarty Template
# Αρχιτεκτονικές Αποφάσεις
Ενότητα με τίτλο «# Αρχιτεκτονικές Αποφάσεις»- ADR Ευρετήριο
- Πρότυπο ADR
- ADR-001: Modular Architecture
- ADR-002: Abstraction βάσης δεδομένων
🚀 Ξεκινώντας
Ενότητα με τίτλο «🚀 Ξεκινώντας»# 1. Ρύθμιση περιβάλλοντος ανάπτυξης
Ενότητα με τίτλο «# 1. Ρύθμιση περιβάλλοντος ανάπτυξης»# 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 install# 2. Δημιουργία κλάδου χαρακτηριστικών
Ενότητα με τίτλο «# 2. Δημιουργία κλάδου χαρακτηριστικών»# Sync with upstreamgit fetch upstreamgit checkout -b feature/my-feature upstream/main# 3. Κάντε αλλαγές
Ενότητα με τίτλο «# 3. Κάντε αλλαγές»Ακολουθήστε τα πρότυπα κωδικοποίησης και γράψτε δοκιμές για νέες δυνατότητες.
# 4. Υποβολή αιτήματος έλξης
Ενότητα με τίτλο «# 4. Υποβολή αιτήματος έλξης»# Commit changesgit add .git commit -m "Add: Brief description of changes"
# Push to your forkgit push origin feature/my-featureΣτη συνέχεια, δημιουργήστε ένα αίτημα έλξης στο GitHub.
📝 Πρότυπα κωδικοποίησης
Ενότητα με τίτλο «📝 Πρότυπα κωδικοποίησης»# PHP Πρότυπα
Ενότητα με τίτλο «# PHP Πρότυπα»Το 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"}>🔀 Git Workflow
Ενότητα με τίτλο «🔀 Git Workflow»# Ονομασία κλάδου
Ενότητα με τίτλο «# Ονομασία κλάδου»| Τύπος | Μοτίβο | Παράδειγμα |
|---|---|---|
| Χαρακτηριστικό | feature/description | feature/add-user-export |
| Διόρθωση σφαλμάτων | fix/description | fix/login-validation |
| Επείγουσα επιδιόρθωση | hotfix/description | hotfix/security-patch |
| Έκδοση | release/version | release/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 #123fix(forms): resolve XSS vulnerability in text input
Properly escape user input in XoopsFormText render method.
Security: CVE-2024-XXXX🧪 Δοκιμή
Ενότητα με τίτλο «🧪 Δοκιμή»# Τρέξιμο τεστ
Ενότητα με τίτλο «# Τρέξιμο τεστ»# 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 τεκμηριώνουν σημαντικές αρχιτεκτονικές αποφάσεις.
# ADR Πρότυπο
Ενότητα με τίτλο «# 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
Ενότητα με τίτλο «# Τρέχουσες ADR»| ADR | Τίτλος | Κατάσταση |
|---|---|---|
| ADR-001 | Modular Architecture | Αποδεκτό |
| ADR-002 | Πρόσβαση στη βάση δεδομένων αντικειμενοστρεφής | Αποδεκτό |
| ADR-003 | Smarty Template Engine | Αποδεκτό |
| ADR-004 | Σχεδιασμός Συστήματος Ασφαλείας | Αποδεκτό |
| ADR-005 | PSR-15 Middleware (4.0.x) | Προτεινόμενο |
🎖️ Αναγνώριση
Ενότητα με τίτλο «🎖️ Αναγνώριση»Οι συντελεστές αναγνωρίζονται μέσω:
- Λίστα Συντελεστών - Καταχωρίζεται στο αποθετήριο
- Σημειώσεις Έκδοσης - Πιστώνονται στις εκδόσεις
- Hall of Fame - Εξαιρετικοί συντελεστές
- Πιστοποίηση ενότητας - Σήμα ποιότητας για ενότητες
🔗 Σχετική τεκμηρίωση
Ενότητα με τίτλο «🔗 Σχετική τεκμηρίωση»- XOOPS 4.0 Οδικός χάρτης
- Βασικές Έννοιες
- Ανάπτυξη Ενοτήτων