mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-05-06 11:09:18 +02:00
feat: extract MediaController, wire into Dispatcher, delete media.php
This commit is contained in:
58
docs/ANALYSIS_STRUCTURE_REORG.md
Normal file
58
docs/ANALYSIS_STRUCTURE_REORG.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Analysis: Proposed PHP Structure Reorganization
|
||||
|
||||
## Summary
|
||||
The proposed structure is a standard Laravel/Symfony-inspired architecture, but **overengineered for this project's scale and conflicts with existing architectural decisions**.
|
||||
|
||||
## Key Issues
|
||||
|
||||
### 1. Redundant Separation
|
||||
The project already has good separation of concerns:
|
||||
- Controllers in `src/` (14 focused classes)
|
||||
- Templates in `templates/`
|
||||
- Data in `storage/` (outside web root)
|
||||
- Organized tests
|
||||
|
||||
### 2. Conflicts with Existing Decisions
|
||||
- **`docs/orm-assessment.md`** explicitly decided against Doctrine/ORM → Proposed `src/Model/` entities contradict this
|
||||
- **No Composer** in current project → Proposed structure requires PSR-4 autoloading
|
||||
- **`App.php` already does the job** → Adding `Core/AppKernel.php` is redundant
|
||||
|
||||
### 3. Overengineering
|
||||
- Repository + Service + Model layers for a ~15 page SQLite app creates 3x the code
|
||||
- `ThesisCreationService`, `AuthService`, `ExportService` split logic that's currently cohesive
|
||||
- `Config/Settings.php` replaces working `config/bootstrap.php` for no clear benefit
|
||||
|
||||
## What Actually Makes Sense
|
||||
|
||||
### High Value, Low Cost:
|
||||
1. **`.env` for secrets** → Replace hardcoded credentials pattern
|
||||
2. **Single entry point** → Move to `public/index.php` routing (requires nginx config changes)
|
||||
3. **Keep logic out of `public/`** → Already partially achieved
|
||||
|
||||
### Medium Value:
|
||||
4. **Consolidate `src/` classes** → Group into subdirectories without full MVC overhaul
|
||||
5. **Move `test.db` from root** → Into `storage/` where it belongs
|
||||
|
||||
### Low Value (Skip):
|
||||
- Entity classes (conflicts with ORM assessment)
|
||||
- Repository pattern (SQLite direct access is fine)
|
||||
- Service layer over-splitting
|
||||
- Composer integration (unless you need PHP packages)
|
||||
|
||||
## Recommendation
|
||||
|
||||
**Do NOT adopt the full proposed structure.**
|
||||
|
||||
Instead, make incremental improvements:
|
||||
1. Add `.env` support
|
||||
2. Consolidate to single entry point
|
||||
3. Organize `src/` into logical subdirectories
|
||||
4. Move stray files to proper locations
|
||||
|
||||
This achieves 80% of the benefits at 20% of the cost.
|
||||
|
||||
## Questions to Consider
|
||||
|
||||
1. Are you planning to add external PHP dependencies? (If yes, Composer makes sense)
|
||||
2. Do you expect multiple developers to work on this simultaneously? (Justifies stricter structure)
|
||||
3. Is the current codebase difficult to maintain? (If no, restructure is premature optimization)
|
||||
134
docs/SETUP.md
Normal file
134
docs/SETUP.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# Post-ERG Setup Guide
|
||||
|
||||
Complete setup guide for development and production deployment.
|
||||
|
||||
## Requirements
|
||||
|
||||
- PHP 8.4
|
||||
- SQLite3 (`php8.4-sqlite3`)
|
||||
- nginx (production)
|
||||
|
||||
## Development Setup
|
||||
|
||||
### 1. Initial Setup
|
||||
|
||||
```bash
|
||||
just setup
|
||||
```
|
||||
|
||||
### 2. Start Development Server
|
||||
|
||||
```bash
|
||||
just serve
|
||||
```
|
||||
|
||||
Access at: http://localhost:8000
|
||||
|
||||
### 3. Run Tests
|
||||
|
||||
```bash
|
||||
just test
|
||||
```
|
||||
|
||||
## Production Deployment
|
||||
|
||||
### First-Time Server Setup
|
||||
|
||||
```bash
|
||||
ssh posterg
|
||||
sudo mkdir -p /var/www/posterg
|
||||
sudo chown www-data:posterg /var/www/posterg
|
||||
sudo chmod 775 /var/www/posterg
|
||||
exit
|
||||
```
|
||||
|
||||
### Deploy Application
|
||||
|
||||
```bash
|
||||
just deploy
|
||||
just deploy-nginx
|
||||
```
|
||||
|
||||
### Set Admin Password
|
||||
|
||||
```bash
|
||||
just manage-admin-users
|
||||
ssh posterg "sudo bash /tmp/manage-admin-users.sh"
|
||||
```
|
||||
|
||||
### Verify Deployment
|
||||
|
||||
```bash
|
||||
# Test public site
|
||||
curl -I https://posterg.erg.be/
|
||||
|
||||
# Test admin protection
|
||||
curl -I https://posterg.erg.be/admin/
|
||||
|
||||
# Test file protection
|
||||
curl -I https://posterg.erg.be/storage/test.db
|
||||
```
|
||||
|
||||
## Nginx Configuration
|
||||
|
||||
See `nginx/SETUP.md` and `nginx/docs/PRODUCTION_DEPLOYMENT.md` for detailed nginx setup.
|
||||
|
||||
## Admin Panel
|
||||
|
||||
The admin panel is protected by:
|
||||
1. nginx HTTP Basic Authentication (htpasswd)
|
||||
2. PHP session authentication
|
||||
|
||||
Manage users with:
|
||||
```bash
|
||||
just manage-admin-users
|
||||
```
|
||||
|
||||
## Database
|
||||
|
||||
### Initialize Test Database
|
||||
|
||||
```bash
|
||||
just init-db
|
||||
```
|
||||
|
||||
### Reset Database
|
||||
|
||||
```bash
|
||||
just reset-db
|
||||
```
|
||||
|
||||
### Deploy Test Database to Server
|
||||
|
||||
```bash
|
||||
just deploy-db
|
||||
```
|
||||
|
||||
## Common Operations
|
||||
|
||||
### View Logs
|
||||
|
||||
```bash
|
||||
just logs
|
||||
```
|
||||
|
||||
### Stop Development Server
|
||||
|
||||
```bash
|
||||
just stop
|
||||
```
|
||||
|
||||
### Run Migrations
|
||||
|
||||
```bash
|
||||
just migrate
|
||||
```
|
||||
|
||||
## Security
|
||||
|
||||
- Admin panel: HTTP Basic Auth + PHP session
|
||||
- File uploads: Stored outside webroot, served via `media.php`
|
||||
- Rate limiting: 30 req/min general, 10 req/min admin
|
||||
- Security headers: X-Frame-Options, CSP, HSTS, etc.
|
||||
|
||||
See `nginx/docs/SECURITY_HEADERS.md` for details.
|
||||
36
docs/SPECS.md
Normal file
36
docs/SPECS.md
Normal file
@@ -0,0 +1,36 @@
|
||||
- l'ordre des TFE sur la page d'accueil ; est-ce que ce serait possible de les faire dérouler par année – avec les plus récents tout en haut –, mais en rendant l'ordre de chaque année aléatoire
|
||||
|
||||
- On a les pdf et notes d'intention des dernières années, est-ce que vous voulez déjà y avoir accès ? Est-ce qu'il y a une nomenclature particulière qui vous fait plaisir ?
|
||||
|
||||
## admin
|
||||
|
||||
- Il a été décidé de – pour l’instant – ne pas rendre les TFE visibles vers l’extérieur.
|
||||
|
||||
- option d’ouverture “interne” – qui sera à priori le défaut appliqué sur une majorité des TFE –
|
||||
|
||||
pas disponnible:
|
||||
|
||||
- le pdf ainsi que la note d’intention ne soient que disponibles quand les personnes se trouvent physiquement à l’erg (via adresse IP) ou via login (à voir ce qui est le plus simple à intégrer techniquement).
|
||||
|
||||
## le formulaire de dépôt
|
||||
|
||||
- On demandera aux étudiant·es de préparer une image au bon format pour le dépôt du TFE. Est-ce que vous pouvez nous donner la taille qu'il faudrait ?
|
||||
|
||||
- la page de formulaire:celle que les étudiant·es doivent remplir lors du dépôt du TFE, ajouter:
|
||||
- l'explication;
|
||||
- le contexte des différents choix soient visibles.
|
||||
|
||||
- Quand un·é étudiant·e dépose son TFE, il ne doit pas être publié directement. Il doit arriver dans la base de donnée, et quelqu'un viendrait juste clicker sur “publier” dans le backoffice une fois la défense orale terminée (et en fonction du retour du jury).
|
||||
|
||||
- l’option “libre” ne doit donc pas encore exister cette année.
|
||||
- créer un système de toggle pour quelles sont les options actives dans le formulaire
|
||||
- Il n’y a pour l’instant que l’option “interdit” et “interne”. L’option “libre” ne sera activée que à partir de l’année académique prochaine.
|
||||
|
||||
- la case “contact” soit accompagnée d’une case à cocher/décocher ; « Je veux que mon contact soit accessible à toustes depuis la plateforme xamxam ». En fonction de cette réponse, le contact apparaîtrait ou non sur la page du TFE.
|
||||
|
||||
## la base de donnée
|
||||
|
||||
- rajouter une catégorie “objet” pour que, dans un futur éventuel, on puisse différencier les TFE des FRART et des thèses. Pour l’instant c’est juste un tag qui doit apparaître en back-office.
|
||||
|
||||
- quelle(s) fonte(s) est-ce que vous utilisez sur le site ?
|
||||
-ce que vous pouvez m’envoyez un export de la maquette du site ? (en .jpg c’est ok, c’est juste pour rafraîchir nos mémoires afin qu'on puisse produire les textes en adéquation avec ce qui existe)
|
||||
Reference in New Issue
Block a user