Skip to content

daryl40000/Moncine

Repository files navigation

Moncine

Version : 1.0.5

Auteur : Stéphane MATER
Licence : GNU General Public License v3.0 ou ultérieure (GPL-3.0-or-later)

Application web pour gérer une dvdthèque personnelle : films, envies, notes, enrichissement TMDB, import/export CSV, comptes utilisateurs.


Fonctionnalités actuelles (v1.0)

Domaine Disponible
Collection & envies Mes films, Mes envies, sagas, statistiques (dont temps de vision cumulé), questionnaire du soir, listes imprimables (PDF via le navigateur)
Prêts Demandes entre amis, réservation, validation et retour (/mes-prets.php)
Stockage médias Fichiers volumineux hors www/ (MONCINE_MEDIA_PATH, admin Gestion → Médias)
Foyers & famille Collection partagée par foyer ; envies et historique personnels
Catalogue partagé Fiches œuvres, enrichissement TMDB / OMDB, affiches
Comptes Connexion, rôles admin/utilisateur, gestion des comptes
Mots de passe & compte Mon compte, changement, oublié par e-mail, reset admin, suppression du compte (utilisateurs)
Inscription publique Confirmation e-mail, approbation admin optionnelle (si activée)
Exemplaire personnel Support, format image/son (séparés du catalogue)
Maintenance catalogue Doublons, fusion, journal admin, nettoyage affiches, sauvegarde / restauration base SQLite
Soumissions catalogue Proposer une œuvre (utilisateur) ; validation admin ; notifications in-app + e-mail
Profil & recherche Ville optionnelle ; recherche par pseudo/ville ; masquer son profil de la recherche
Amis & groupe famille Demandes d’ami ; créer / rejoindre un groupe ; collection partagée
Envies du groupe Voir les envies de tous les membres ; tri par demandes ; bouton « Moi aussi »
Partage visiteur Lien lecture seule Mes films / Mes envies + fiche film (sans compte)
EAN catalogue Plusieurs codes-barres par œuvre (DVD, Blu-ray, 4K) pour le catalogue
Données Import / export CSV, affiches

Prochaines étapes (v0.8 → v1.0)

  • Soumissions au catalogue (v0.7.4)
  • Profil ville & recherche utilisateurs (v0.7.6)
  • Amis & groupes famille (v0.7.7)
  • Envies du groupe & ajout rapide (v0.7.8)
  • UX thème sombre & composant filtres (ui-pill) (v0.7.9)
  • Sécurité sociale (recherche, blocage, limites) (v0.7.10)
  • Partage visiteur (v0.8.0)
  • EAN multiples par œuvre catalogue (v0.8.0)
  • Versions recherchées sur les envies (support + EAN) (v0.8.2)
  • Profil public utilisateur (amis / groupe) (v0.8.3)
  • Temps de vision cumulé (statistiques) (v0.8.4)
  • Sauvegarde / restauration base SQLite (admin) (v0.8.5)
  • Accueil vignettes, bouton profil, partage e-mail / Bluesky (v0.8.6)
  • Recherche acteur/réalisateur sur tout le catalogue (v0.8.7)
  • Suite cibles d’achat (partage visiteur + « J’ai acheté » avec choix de version) (v0.8.8) — comparateur de prix reporté
  • Prêts entre utilisateurs (phase 8) (v0.8.9)
  • Stockage fichiers (racine MONCINE_MEDIA_PATH, hors www) (v0.9.0)
  • Listes imprimables Mes films / Mes envies (v0.9.1) — alternative à l’export PDF serveur
  • Export PDF serveur (phase 10, optionnel plus tard)
  • Mes BD
  • Collections de magazines
  • Magazines PDF & lecteur intégré

Détail : ROADMAP.md. Historique des versions : CHANGELOG.md.


Comprendre le code (par où commencer)

Fichier Rôle
lib/bootstrap.php Chargé par chaque page : config, base, connexion obligatoire
lib/Auth.php Qui est connecté, login, pages publiques
lib/UserContext.php ID utilisateur et foyer pour « Mes films » / envies
lib/FoyerRepository.php Foyers (collection partagée)
lib/Database.php SQLite + migrations automatiques
lib/FilmRepository.php Accès aux films de l’utilisateur courant
www/*.php Une page = un fichier (contrôleur léger)
www/partage.php Liste partagée visiteur (lecture seule, sans compte)
www/gerer-partages.php Création / révocation des liens de partage
www/quiz.php / www/resultat.php Questionnaire du soir et proposition de film
www/imprimer-films.php / www/imprimer-envies.php Listes imprimables (Mes films / Mes envies)
templates/*.php HTML affiché (via View::render)

Documentation : questionnaire du soir · listes imprimables.


Structure du projet

Moncine/
├── www/              pages web
├── lib/              code PHP (+ cli/migrate.php)
├── templates/        vues HTML
├── sql/
│   ├── schema.sql    schéma complet (install fraîche)
│   ├── migrations/   évolutions SQL (001, 002…)
│   └── migrations_legacy/  historique dev (non exécuté)
├── data/             base SQLite, clés API, affiches (non versionné)
├── tests/            tests PHPUnit
└── doc/

Prérequis

  • PHP 8.2+ avec extension sqlite3
  • Composer (pour les tests)

Installation et test en local

cd /chemin/vers/Moncine
composer install
php lib/cli/migrate.php --fresh   # première fois (crée data/moncine.db)
php -S localhost:8080 -t www

Ouvrir http://localhost:8080 — à la première visite, créez le compte administrateur sur /premier-compte.php.

Variables d’environnement utiles

Variable Rôle
MONCINE_DATA_PATH Dossier des données (base SQLite, clés API, affiches). Par défaut : ./data/
MONCINE_MEDIA_PATH Racine des fichiers volumineux (PDF, exports…). Par défaut : ./data/media/
MONCINE_BASE_URL URL publique de l’app (liens dans les e-mails : inscription, reset MDP, changement d’e-mail)
MONCINE_TRUST_PROXY Mettre 1 derrière Nginx/YunoHost pour le limiteur de tentatives (IP client via X-Real-IP / X-Forwarded-For)
MONCINE_MAIL_FROM Adresse expéditeur des e-mails transactionnels
MONCINE_TMDB_API_KEY Clé API TMDB (enrichissement catalogue). Sinon : fichier tmdb_api_key.txt dans MONCINE_DATA (voir data/tmdb_api_key.txt.example)

Ne versionnez jamais les fichiers sous data/.keys/, data/sessions/, data/auth_rate_limit/ ni les fichiers *_api_key.txt (déjà exclus par .gitignore).


Comptes utilisateurs et foyers

  • Premier lancement : /premier-compte.php (administrateur + foyer par défaut)
  • Connexion : /connexion.php
  • Paramètres → Compte (profil, mot de passe) : /parametres.php ; import et propositions catalogue dans le même menu
  • Gestion des comptes : /utilisateurs.php (admin uniquement)
  • Foyers : /foyers.php (admin — collection partagée entre membres)

Les membres d’un même foyer voient la même collection ; chacun garde ses envies et son historique.


Migrations SQL

  • Install fraîche : sql/schema.sql si la base est vide, puis sql/migrations/*.sql
  • Mise à jour : php lib/cli/migrate.php

Les fichiers dans sql/migrations_legacy/ ne sont pas appliqués (historique uniquement).

Important : sauvegardez data/moncine.db avant une mise à jour.

Version Migrations notables
v0.7 Foyers, collection partagée (008011)
v0.8.0 Partage visiteur (017_share_links), EAN catalogue (023_oeuvre_eans)
v0.8.2 Versions recherchées sur envies (024_wishlist_targets)
v0.8.3 Profil public /utilisateur.php (stats, vignettes, listes lecture seule)
v0.8.4 Temps de vision cumulé sur /statistiques.php (aucune migration SQL)
v0.8.5 Sauvegarde / restauration moncine.db depuis /maintenance-catalogue.php (aucune migration SQL)
v0.8.6 Accueil (vignettes), bouton profil, partage lien e-mail / Bluesky (aucune migration SQL)
v0.8.7 Recherche personnes sur le catalogue + statut bibliothèque (aucune migration SQL)
v0.8.8 Phase 7 bis : partage visiteur des cibles d’achat, « J’ai acheté » avec choix de version, EAN chiffres seuls (025)
v0.8.9 Prêts entre amis (018, 026)
v0.9.0 Stockage médias local (019_stored_objects), page /maintenance-medias.php ; UX proposition questionnaire (/resultat.php)
v0.9.1 Listes imprimables /imprimer-films.php, /imprimer-envies.php (aucune migration SQL)
v0.9.2 Sécurité médias et listes imprimables (aucune migration SQL)
v0.9.3 Inscription publique (027, 028), throttle auth session + IP
v0.9.4 Correctifs inscription / reset MDP (aucune migration SQL)
v0.9.5 Suppression du compte depuis Mon compte (aucune migration SQL)
v0.9.6 Durcissement sécurité comptes : inscription chiffrée, changement d’e-mail confirmé (029), MONCINE_TRUST_PROXY
v1.0.0 Version de production — même schéma que 0.9.6 ; schema.sql inclut email_change_requests
v1.0.3 Admin : remplacer / supprimer la clé API TMDB depuis Importer (aucune migration SQL)
v1.0.4 Correctif suppression compte membre d’un groupe famille (group_members)
v1.0.5 Affiches dans MONCINE_DATA/posters/ + poster.php ; suppression compte (foyers) ; inscription sans groupe auto

Tests automatisés (PHPUnit)

Vérifie l’import/export (détection de format, parsing CSV, import bibliothèque et catalogue) sur une base SQLite temporaire.

composer test

Import / export

  • Export : page /export.php (CSV collection, envies, historique)
  • Import : page /import.php (bibliothèque ou catalogue admin)
  • Impression : bouton Version imprimable sur Mes films et Mes envies → PDF via le navigateur (doc/listes-imprimables.md)

Les affiches locales sont stockées dans data/posters/ (ou {MONCINE_DATA_PATH}/posters/, au même niveau que moncine.db). Elles sont affichées via poster.php (compatible Nginx/YunoHost). Après une mise à jour depuis une ancienne version, déplacez éventuellement www/posters/* vers ce dossier.

About

Application pour la gestion d'une collection personnelle de film

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors