> For the complete documentation index, see [llms.txt](https://documentation.efalia.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.efalia.com/connecteurs/connecteurs-metiers/publiccrm.md).

# PublicCRM

## Introduction

Le connecteur MGDex-PublicCRM est une déclinaison métier du connecteur générique [MGDex](/connecteurs/connecteurs-generiques/mgdex.md), préparée pour les produits GFI — Iodas et PublicCRM. Il permet à PublicCRM d'interroger les documents Multigest marqués comme **publiables** ou **distribuables**, via une base de données intermédiaire et/ou des WebServices REST.

{% hint style="info" %}
Dans la documentation source, PublicCRM est rattaché aux « produits GFI (Iodas et PublicCRM) ». **Nexpublica** — désigné comme éditeur d'[Iodas](/connecteurs/connecteurs-metiers/iodas.md) — est le nom actuel de cette gamme collectivités, anciennement éditée par GFI. PublicCRM serait donc, comme Iodas, un produit Nexpublica, sans que cela soit formellement confirmé par la documentation source de ce connecteur.
{% endhint %}

{% hint style="warning" %}
🚧 Il existe par ailleurs un connecteur « PCRM Rio » côté [Efalia Doc](/connecteurs/connecteurs-metiers/pcrm-rio.md). Il s'agirait probablement du même produit tiers PublicCRM, mais relié à Efalia Doc par un connecteur technique différent de celui décrit ici, propre à Multigest. Ce rapprochement n'a pas pu être vérifié à partir des sources disponibles et reste à confirmer auprès de l'équipe projet.
{% endhint %}

## Architecture du connecteur

Comme les autres déclinaisons de MGDex, le connecteur repose sur une base de données MySQL intermédiaire, alimentée quotidiennement à partir de Multigest par un script de synchronisation. PublicCRM (ou un outil de restitution tel que Business Object) peut ensuite accéder aux données :

* soit en se connectant directement à cette base intermédiaire ;
* soit via les WebServices REST exposés par MGDex, qui interrogent la base intermédiaire et construisent la réponse en fonction des paramètres transmis.

### Synthèse des flux techniques

| Flux                          | Source                      | Destination                    | Protocole / port                              | Contenu                                                   |
| ----------------------------- | --------------------------- | ------------------------------ | --------------------------------------------- | --------------------------------------------------------- |
| Synchronisation quotidienne   | Multigest                   | Base MySQL intermédiaire MGDex | Script SQL planifié (tâche quotidienne, \~4h) | Documents publiables/distribuables et leurs métadonnées   |
| Interrogation directe         | PublicCRM / Business Object | Base MySQL intermédiaire       | Connexion SQL directe                         | Lecture des tables `mgdex_*`                              |
| Interrogation via WebServices | PublicCRM                   | MGDex (API REST)               | HTTP REST (JSON ou HTML)                      | Listes paginées, métadonnées, téléchargement de documents |

## Pré-requis techniques

MGDex doit être installé sur un serveur avec accès HTTP, disposant de **PHP 7.1.3** et de **MySQL 5.7** — idéalement à côté de Multigest. Le module est développé en PHP avec le framework Symfony 3.

## Objets et propriétés de la base de données

### mgdex\_armoire

Liste des armoires concernées par l'export.

* `id`, `name`
* `typology` — 1 pour une armoire en mode dossier, 0 pour une armoire en mode fichier
* `pathfile` — chemin physique de stockage des documents de l'armoire

### mgdex\_global\_document

Liste des documents exportés, toutes armoires confondues.

* `id` — identifiant unique du document
* `document_id` — identifiant du document dans son armoire
* `repository` — nom de l'armoire source
* `ged_folder_id` — identifiant du dossier GED dans l'armoire source
* `middle_path`, `folder`, `sub_folder`, `filename`, `extension` — éléments de construction du chemin du document
* `date_scan`, `date_creation`, `date_update`, `user_creation`, `user_update`, `filesize`
* `publiable` — métadonnée « publiable » remontée pour faciliter les recherches
* `modediff` — métadonnée « modediff » remontée pour faciliter les recherches

### mgdex\_global\_metadata

Liste des métadonnées associées à chaque document de la table précédente.

* `id`
* `document_id` — identifiant unique du document (= `id` de `mgdex_global_document`)
* `metadata_key`, `metadata_value`

## Installation du connecteur

{% stepper %}
{% step %}

## Installation du module MGDex

1. Créer le dossier d'installation sur le serveur (par exemple `mgdex`) et y déployer les sources fournies.
2. Paramétrer l'accès à la base de données dans `app/config/parameters.yml` (`database_host`, `database_port`, `database_name`, `database_user`, `database_password`).
3. Vérifier la version de PHP disponible (`php -v`) ; si elle est inférieure à 7.1.3 ou absente, ajouter le répertoire contenant `php.exe` à la variable d'environnement `PATH`.
4. Depuis la racine du projet, créer la base et installer le schéma de données :

   ```
   cd C:\serverPath\mgdex
   php bin/console doctrine:database:create
   php bin/console doctrine:schema:update --force
   ```

{% hint style="danger" %}
Il est strictement interdit de modifier le modèle de données directement depuis la base de données. Ce modèle est généré par l'application Symfony ; toute modification manuelle pourrait être écrasée ou rendre l'application inopérante.
{% endhint %}

5. Créer le Virtual Host Apache (fichier `vhost.conf`, inclus depuis `httpd.conf`) et la résolution associée dans le fichier `hosts` du serveur.
   {% endstep %}

{% step %}

## Script de synchronisation quotidienne

1. Paramétrer le fichier `synchronizeDatas.bat` avec les identifiants MySQL et le chemin du fichier `importFromMultigest.sql` :

   ```
   mysql -u[USER] -p[PASSWORD] mtgweb < [PATH/FROM/SERVER/]importFromMultigest.sql
   ```
2. Programmer son exécution quotidienne (idéalement vers 4h du matin) via le planificateur de tâches Windows :

   ```
   schtasks /create /tn EfaliaMGDexDailyImport /tr C:\serverPath\MGDexExtra\synchronizeDatas.bat /sc DAILY /st 04:00:00
   ```

{% endstep %}

{% step %}

## Vérification des WebServices

Tester les principaux WebServices (voir ci-dessous) pour confirmer que la base intermédiaire est correctement alimentée et exposée.
{% endstep %}
{% endstepper %}

## WebServices

### Liste des documents publiables

Retourne tous les documents dont la métadonnée `publiable` vaut `C`, dont la date de création est postérieure à la date passée en paramètre. Les paramètres `first` et `quantity` permettent de paginer les résultats.

```
http://mgdex/publiables/{date}/{first}{quantity}.{format}
```

* `date` (obligatoire) : date à partir de laquelle retourner les résultats (format `AAAA-MM-JJ`).
* `first`, `quantity` (facultatifs) : pagination.
* `format` (facultatif) : `html` ou `json`.

Exemple d'appel : `http://mgdex/publiables/2018-06-01/100/50.json`

### Nombre de documents publiables disponibles

```
http://mgdex/publiables/count/{date}.{format}
```

Exemple d'appel : `http://mgdex/publiables/count/2018-06-01.json`

### Liste des documents distribuables

Retourne tous les documents dont la métadonnée `modediff` contient la valeur `W`, dont la date de création est postérieure à la date passée en paramètre. Mêmes paramètres de pagination que ci-dessus.

```
http://mgdex/distribuables/{date}/{first}{quantity}.{format}
```

Exemple d'appel : `http://mgdex/distribuables/2018-06-01/100/50.json`

### Nombre de documents distribuables disponibles

```
http://mgdex/distribuables/count/{date}.{format}
```

Exemple d'appel : `http://mgdex/distribuables/count/2018-06-01.json`

### Métadonnées d'un document

Retourne les métadonnées d'un document à partir de son identifiant unique.

```
http://mgdex/document/metadatas/{id}.{format}
```

Exemple d'appel : `http://mgdex/document/metadatas/1000409.json`

### Téléchargement d'un document

Retourne le fichier binaire stocké en GED. Le format `binary` retourne directement le flux binaire ; le format `json` retourne le contenu encodé en base64, encapsulé dans un fichier JSON. Le format par défaut est `binary`.

```
http://mgdex/document/download/{id}.{format}
```

Exemple d'appel : `http://mgdex/document/download/1000409`

## Vérifications post-installation

* Base intermédiaire créée et accessible, schéma de données installé.
* Tâche planifiée de synchronisation créée et exécutée avec succès (`schtasks /run /tn EfaliaMGDexDailyImport`).
* Test d'appel des WebServices `publiables` et `distribuables` : réponse cohérente avec le contenu de Multigest.
* Test de téléchargement d'un document via `document/download`.

## Glossaire

| Terme              | Définition                                                            |
| ------------------ | --------------------------------------------------------------------- |
| MGDex              | Connecteur Multigest en lecture seule (MultiGest Data Extractor)      |
| Publiable          | Statut d'un document autorisé à être publié vers PublicCRM            |
| Distribuable       | Statut d'un document autorisé à être distribué/diffusé vers PublicCRM |
| Base intermédiaire | Base MySQL relais alimentée quotidiennement depuis Multigest          |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://documentation.efalia.com/connecteurs/connecteurs-metiers/publiccrm.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
