Initial commit
This commit is contained in:
103
README.md
Normal file
103
README.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# thalim-hal-importer
|
||||
|
||||
Plugin WordPress qui importe les publications du laboratoire THALIM depuis l'archive ouverte [HAL](https://hal.science/) (structure `254015`) et les transforme en posts WordPress avec tous les champs Pods renseignés.
|
||||
|
||||
- **Version :** 2.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-hal-importer.git thalim-hal-importer
|
||||
```
|
||||
|
||||
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 → HAL Import** (capacité requise : `edit_others_posts`).
|
||||
|
||||
La page propose deux flux d'import :
|
||||
|
||||
### 1. Aperçu live + import incrémental
|
||||
|
||||
- Filtres : plage de dates (`producedDate_s`) et auteur (idHAL d'un membre THALIM)
|
||||
- Liste les publications HAL correspondantes avec statut coloré :
|
||||
- **vert** : déjà importée (présence du meta `hal_id` côté WP)
|
||||
- **jaune** : prête à être importée (au moins un auteur HAL matche un user WordPress)
|
||||
- **rouge** : aucun auteur THALIM identifié → ignorée
|
||||
- Bouton **Importer** : crée tous les posts « prêts » en statut `pending` (à publier après relecture)
|
||||
- Cache des aperçus en transient (5 min, clé hashée sur les filtres), rafraîchissable manuellement
|
||||
- Bouton **Test API** pour vérifier la connexion
|
||||
|
||||
### 2. Import en masse via CSV (legacy SPIP)
|
||||
|
||||
Permet d'importer des publications anciennes par lots de 100 :
|
||||
|
||||
- Upload d'un CSV avec une colonne `hal_id` + d'un fichier de contexte SPIP (axes/tags/programmes/owner par publication)
|
||||
- Traitement par batchs séquentiels (cliquer plusieurs fois)
|
||||
- Rapport CSV téléchargeable en fin de file
|
||||
- Annulation possible à tout moment
|
||||
|
||||
## Mapping des types HAL → catégories WordPress
|
||||
|
||||
`DOC_TYPE_MAP` dans `includes/class-importer.php` :
|
||||
|
||||
| Type HAL | Description | Catégorie WP |
|
||||
| ------------- | ---------------------------- | ------------ |
|
||||
| `ART` | Article | `16` |
|
||||
| `COUV` | Chapitre d'ouvrage | `16` |
|
||||
| `OUV` | Ouvrage | `15` |
|
||||
| `COMM` | Communication | `13` |
|
||||
| `ISSUE` | Direction de numéro | `16` |
|
||||
| `PROCEEDINGS` | Direction d'ouvrage / actes | `15` |
|
||||
| `THESE` | Thèse | `14` |
|
||||
| `HDR` | HDR | `14` |
|
||||
| `SON` | Son | `19` |
|
||||
| `VIDEO` | Vidéo | `19` |
|
||||
|
||||
`COMM`, `THESE`, `HDR`, `SON`, `VIDEO` sont traités comme événements et utilisent le champ Pods `date_de_debut`. Les autres utilisent `datetime`.
|
||||
|
||||
## Champs HAL → champs WP
|
||||
|
||||
À l'import, chaque publication remplit :
|
||||
|
||||
- **Identification** : `hal_id`, `hal_url` (URI HAL), `lien_externe_1` (PDF si dispo) avec titre `Document HAL // HAL Document`
|
||||
- **Titre** : `post_title` (issu de HAL)
|
||||
- **Catégorie** : triple écriture (term assignment + meta `categorie` + meta `_pods_categorie`)
|
||||
- **Auteurs HAL → membres** : matching via `authIdHal_s` ↔ user meta `identifiant_hal`. Stockage en triple-pattern Pods (`membres` add_post_meta + `_pods_membres`)
|
||||
- **Date** : `date_de_debut` ou `datetime` selon le type, optionnellement backdaté sur `producedDate_s`
|
||||
- **Métadonnées** : `journal`, `editeur`, `sous-titre` (book/conference title), `lieu` (city/country pour PROCEEDINGS), `reference_bibliographique` (`citationFull_s`)
|
||||
- **Fonction** : `fonction_auteur` (varie selon doc type : « Auteur du chapitre // Chapter author », « Direction de numéro // Editor-in-Chief », etc.)
|
||||
- **Axes thématiques** : cascade `spip_context` → co-auteurs THALIM → owner. Source effective stockée dans `$importer->last_axes_source`
|
||||
- **Programmes de recherche** et **étiquettes** : depuis `spip_context` (import CSV uniquement)
|
||||
|
||||
## Dédoublonnage
|
||||
|
||||
L'import vérifie le meta `hal_id` avant chaque insertion : une publication ne peut pas être importée deux fois. Le `is_imported($hal_id)` est aussi affiché en colonne de statut dans l'aperçu.
|
||||
|
||||
## Prérequis
|
||||
|
||||
- WordPress 6.0+
|
||||
- PHP 7.4+
|
||||
- Plugin **Pods** (le pod `post` et le champ user `identifiant_hal`)
|
||||
- IDs de catégorie WordPress conformes au mapping (8/13/14/15/16/19) — codés en dur dans `DOC_TYPE_MAP`
|
||||
|
||||
## Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── thalim-hal-importer.php # point d'entrée, constantes, bootstrap
|
||||
└── includes/
|
||||
├── class-hal-api.php # client API HAL (fetch_publications, fetch_by_hal_ids)
|
||||
├── class-admin-page.php # UI Tools > HAL Import (aperçu + CSV)
|
||||
└── class-importer.php # mapping HAL → posts WP (triple-storage, axes cascade)
|
||||
```
|
||||
|
||||
## API HAL
|
||||
|
||||
- Base : `https://api.archives-ouvertes.fr/search/`
|
||||
- Structure THALIM : `254015`
|
||||
- Documentation : <https://api.archives-ouvertes.fr/docs>
|
||||
Reference in New Issue
Block a user