# CapDataOpera - plugin pour WordPress

[![Pipeline badge](https://gitlab.com/capdataopera/capdataopera-php-sdk/badges/develop/pipeline.svg)](https://gitlab.com/capdataopera/capdataopera-php-sdk) [![Coverage badge](https://gitlab.com/capdataopera/capdataopera-php-sdk/badges/develop/coverage.svg)](https://gitlab.com/capdataopera/capdataopera-php-sdk)

> Plugin wordpress permettant de génerer un feed RDF respectant l’ontologie de CapDataCulture : https://rof.pages.logilab.fr/capdata-ontology/v1/owl/.


Le plugin **CapDataOpera** pour WordPress permet aux maisons d'opéra et aux théâtres de publier leurs programmations en ligne au format **RDF** (Resource Description Framework). Cela aide à structurer et partager les données de manière compréhensible pour les machines et les humains.

## Principales Fonctionnalités

1. **Exportation de Données** : Vous pouvez définir quelles informations (comme les types d'événements, les lieux, les personnes, etc.) seront exportées au format RDF depuis votre site WordPress.

2. **Génération de RDF** : Ce plugin génère un flux RDF accessible via un lien sur votre site, rendant vos données accessibles aux autres.

## Configuration Requise

- **PHP** : Version 7.4 ou supérieure.
- **WordPress** : Version 6.0 ou supérieure.
- **Version Actuelle du Plugin** : 1.0.

## Installation

Vous pouvez installer le plugin de deux manières :

1. **Via Composer** :
    - Exécutez la commande suivante : `composer require capdataopera/wordpress-plugin`

2. **Manuellement via le répertoire des plugins WordPress** :
    - Téléchargez le plugin depuis [le répertoire WordPress](https://fr.wordpress.org/plugins/capdataopera-wordpress-plugin/).

## Utilisation Basique

Pour utiliser le plugin, vous devez ajouter quelques lignes de code dans le fichier **functions.php** de votre thème WordPress. Voici un aperçu des étapes principales :

1. **Configurer l'accès au Feed RDF** :
    - On utilise le hook filter *capdata/get_rdf_route* pour définir la route du feed (par défaut c'est *feeds/programmation.rdf*).
```php
<?php

add_filter( 'capdata/get_rdf_route', 'configure_my_route' );
 
function configure_my_route() 
{
    return 'mon-lien-feeds';
}
```

Pour acceder au feed, il faut à partir du navigateur utiliser l'url configuré. Dans notre exemple c'est : 
```
https://mon-site.com/mon-lien-feeds
```

Si ce n'est pas encore configuré, ce sera par défaut :

```
https://mon-site.com/feeds/programmation.rdf
```
2. **Sélectionner les Données à Exporter** :
- Utilisez des hooks pour spécifier quelles informations seront exportées. 
- Exemple 1 : en utilisant le Helpers du plugin 
```php
<?php

// Ceci est un helper du plugin permettant de recuperer les données
use CapDataOpera\Wordpress\Helpers\Helpers as CapdataHelpers;

add_filter( 'capdata/get_datas_personnes', 'load_my_persons_datas', 10, 1 );

add_filter( 'capdata/get_datas_lieux', 'load_my_locations_datas', 10, 1 );


function load_my_persons_datas($defaults): array 
{
    //Récupération des données suivant le post type
    $results = CapdataHelpers::get_post_datas('artistes');

    return $results;
}

function load_my_locations_datas($defaults): array
{
    //Récupération des données suivant la taxonomie
    $results = CapdataHelpers::get_category_datas('locations');

    return $results;
}
...
```

- Exemple 2 en utilisant directement le fonction wordpress
```php
<?php

add_filter( 'capdata/get_datas_personnes', 'load_my_persons_datas', 10, 1 );

add_filter( 'capdata/get_datas_lieux', 'load_my_locations_datas', 10, 1 );


function load_my_persons_datas($defaults): array 
{
    $args = array(
        'post_type'   => 'artistes',
        'post_status' => 'publish',
        'numberposts' => -1,
        'order'       => 'DESC',
    );
    
    // Récuperation des post type des artistes
    $results = get_post($args);

    return $results;
}

function load_my_locations_datas($defaults): array
{
    $args = [
        'taxonomy' => 'locations',
        'hide_empty' => false,
    ];
    
    // Récuperation des taxonomie locations
    $results = get_terms($args);

    return $results;
}
...
```

3. **Mapper les Données** :
    - Appliquez des mappings pour transformer vos données dans le bon format.
    - Exemple:
```php
<?php

use CapDataOpera\PhpSdk\Model\Personne;
use CapDataOpera\PhpSdk\Model\Lieu;

add_filter('capdata/get_transformed_lieu', function (Lieu $result, $source) {
    if ($source instanceof \WP_Term) {
        $source_lieu = new \stdClass();
        $source_lieu->id = $source->term_id;
        $source_lieu->name = $source->name;
        $source_lieu->slug = $source->slug;
        $source_lieu->description = $source->description;
        
        $result->setName($source_lieu->name);

        if (trim($tdc_lieu->description) != "") {
            $result->setDescription($source_lieu->description);
        }
    }

    return $result;
}, 10, 2);

add_filter('capdata/get_transformed_personne', function (Personne $result, $source) {
    // personne mapping
    if ($source instanceof \WP_Post) {
        $fullname = explode(',', $source->post_title);
        $result->setPrenom(trim($fullname[0] ?? ""));
        $result->setNom(trim($fullname[1] ?? ""));
        
        //Utilisation de get_field Advanced Custom Form
        $biography = get_field("field_artiste_biography", $source->ID);
        $description = get_field("field_artiste_accroche", $source->ID);


        if ($biography != "") {
            $result->setBiographie($biography);
        }
        
        //Utilisation de capdata_get_immutable_date qui nous peret d'obrenir une date immutable
        $result->setDateCreationRessource(capdata_get_immutable_date($source->post_date));
        $result->setDateModificationRessource(capdata_get_immutable_date($source->post_modified));
    }

    return $result;
}, 10, 2);
/* ... */
```

## Points Clés à Retenir

- **Personnalisation des Données** : Vous pouvez choisir quelles données sont exportées pour chaque type d'entité (comme les personnes, lieux, etc.).
- **Entités Supportées** : Le plugin supporte toutes es entités du SDK telles que les personnes, lieux, productions, etc.
- **Fonctionnalités Avancées** : Vous pouvez personnaliser le comportement du plugin en utilisant des hooks et des filtres pour adapter le flux RDF à vos besoins.

## Contributions et Crédits

- Le développement du plugin a été réalisé par [Rezo Zero](https://www.rezo-zero.com/).

Pour plus de détails techniques, consultez la [documentation complète du plugin](https://gitlab.com/capdataopera/capdataopera-wordpress-plugin/).
