Initial commit
This commit is contained in:
93
README.md
Normal file
93
README.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# thalim-newsletter
|
||||
|
||||
Plugin WordPress qui compose les newsletters mensuelles du laboratoire THALIM à partir du contenu déjà publié sur le site, et les exporte en HTML prêt pour un envoi email.
|
||||
|
||||
- **Version :** 1.0.0
|
||||
- **Auteur :** THALIM Dev
|
||||
- **Licence :** GPL v2 or later
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
cd wp-content/plugins
|
||||
git clone gitea@figureslibres.io:valentin_le_moign/thalim-plugin-newsletter.git thalim-newsletter
|
||||
```
|
||||
|
||||
Puis activer depuis l'admin WordPress. Dans le cadre du projet THALIM, le clonage est automatisé par `bootstrap.sh` du repo [`thalim-stack`](https://figureslibres.io/valentin_le_moign/thalim-stack).
|
||||
|
||||
## Utilisation
|
||||
|
||||
Une fois activé, le plugin ajoute une page d'administration : **Outils → Newsletter** (capacité requise : `edit_others_posts`).
|
||||
|
||||
Le workflow :
|
||||
|
||||
1. Sélection d'un mois (sélecteur année-mois)
|
||||
2. Chargement AJAX (`thalim_nl_load_month`) des contenus éligibles, regroupés par catégorie parente
|
||||
3. Cases à cocher pour inclure ou exclure chaque publication / séance
|
||||
4. Champs **intro**, **conclusion**, **URL d'inscription**, **URL de désinscription**
|
||||
5. Sauvegarde : crée un post WordPress dans la catégorie **Newsletter** (`20`) avec le HTML email complet en `post_content`
|
||||
6. Bouton **Exporter en HTML** (`thalim_nl_export_html`) → téléchargement du fichier `newsletter-THALIM-{mois}.html`
|
||||
|
||||
Une liste des newsletters déjà sauvegardées permet de revenir éditer un mois passé.
|
||||
|
||||
## Fenêtres d'éligibilité par catégorie
|
||||
|
||||
Les contenus pertinents d'un mois donné ne sont pas seulement « les posts publiés ce mois-ci » — chaque catégorie a sa propre logique de fenêtre temporelle (cf. `WINDOW_TYPES` dans `includes/class-post-query.php`) :
|
||||
|
||||
| Catégorie | Fenêtre |
|
||||
| -------------------------------------------------- | ---------------------- |
|
||||
| Appels (`8`), Soutenances (`14`) | `datetime_to_fin` (du `datetime` à `date_de_fin`) |
|
||||
| Colloques (`10`), Séminaires (`11`) | `debut_minus35_to_fin` (de `date_de_debut - 35j` à `date_de_fin`) |
|
||||
| Ouvrages (`15`), Articles (`16`) | `datetime_plus3m` (du `datetime` à `datetime + 3 mois`) |
|
||||
| **Toutes les autres** | `datetime_plus35d` (du `datetime` à `datetime + 35 jours`) |
|
||||
|
||||
Quand `datetime` (ou `date_de_debut`) est vide, le `post_date` sert de fallback. Cette logique permet par ex. à un appel à communication d'apparaître dans toutes les newsletters jusqu'à sa date de fin.
|
||||
|
||||
## Catégories couvertes
|
||||
|
||||
La liste des catégories éligibles n'est **pas** codée en dur dans le plugin — elle est calculée dynamiquement via `Thalim_NL_Post_Query::get_eligible_categories()` (toutes les catégories WordPress, groupées par parent). Les constantes en haut de `thalim-newsletter.php` (`THALIM_NL_CAT_APPELS = 8`, etc.) ne servent qu'à associer les fenêtres temporelles spéciales aux catégories concernées :
|
||||
|
||||
| Constante | ID | Description |
|
||||
| ------------------------------- | --- | ----------------- |
|
||||
| `THALIM_NL_CAT_APPELS` | 8 | Appels |
|
||||
| `THALIM_NL_CAT_COLLOQUES` | 10 | Colloques |
|
||||
| `THALIM_NL_CAT_SEMINAIRES` | 11 | Séminaires |
|
||||
| `THALIM_NL_CAT_COMMS` | 13 | Communications |
|
||||
| `THALIM_NL_CAT_SOUTENANCES` | 14 | Soutenances |
|
||||
| `THALIM_NL_CAT_OUVRAGES` | 15 | Ouvrages |
|
||||
| `THALIM_NL_CAT_ARTICLES` | 16 | Articles |
|
||||
| `THALIM_NL_CAT_NEWSLETTER` | 20 | Newsletter (catégorie où sont sauvegardés les digests) |
|
||||
|
||||
> IDs vérifiés en DB le 2026-03-20. À mettre à jour en cas de migration ou de réorganisation des taxonomies.
|
||||
|
||||
## Format HTML email
|
||||
|
||||
`includes/class-html-exporter.php` génère un HTML compatible clients mail :
|
||||
|
||||
- Layout **table-based**, largeur 600 px
|
||||
- **Styles inline** sur tous les éléments
|
||||
- Polices : **Gelasio** (Google Fonts `@import`, fallback Georgia) pour les titres, Arial/Helvetica pour le corps
|
||||
- Media queries pour le rendu mobile
|
||||
- Preheader caché (texte d'aperçu dans les boîtes mail)
|
||||
|
||||
Le HTML complet est généré à la sauvegarde et stocké tel quel dans `post_content` — l'export se contente de le renvoyer.
|
||||
|
||||
## Prérequis
|
||||
|
||||
- WordPress 6.0+
|
||||
- PHP 7.4+
|
||||
- Plugin **Pods** (le pod `post` et son champ catégorie pour la triple écriture)
|
||||
|
||||
## Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── thalim-newsletter.php # point d'entrée, constantes, bootstrap
|
||||
├── assets/
|
||||
│ ├── admin.css # styles de la page admin
|
||||
│ └── admin.js # interactions (sélecteur mois, cases, export)
|
||||
└── includes/
|
||||
├── class-post-query.php # requêtes SQL custom + fenêtres temporelles par catégorie
|
||||
├── class-html-exporter.php # génération du HTML email (tables, inline styles)
|
||||
└── class-admin-page.php # UI Tools > Newsletter + handlers AJAX + sauvegarde
|
||||
```
|
||||
Reference in New Issue
Block a user