Commit 7c78467d authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Update readme.md

parent ba751969
Loading
Loading
Loading
Loading
Loading
+108 −1
Changes for readme.md: 108 added lines, 1 removed line.
Original line number Diff line number Diff line
UnicaenEvenement
====
---

Bonne pratique pour créer un nouveau type d'événement
===

1 - Commencer par déclarer un type d'événement
---

Un nouveau type d'événement suppose d'ajouter une instance de ```UnicaenEvenement\Entity\Db\Type```.
Cet ajout peut être réalisé via l'interface du module.
Un type d'événement a besoin des informations suivantes :
* un code
* un libelle
* une description (facultative)
* une liste de paramètres (facultative)
* une période de recursion (facultative) (**TODO modifier le formulaire pour permettre la saisie de la période de récurence**) 

Dans des fin de meilleure implémentation, il est aussi recommendé de déclarer une constante pour avoir accés rapidement au type d'événement.
Ces déclarations peuvent être faite dans le fichier Provider\Event\EventsProvider.php.

```php 
class EventProvider {
    const MON_EVENT = 'mon_event';
}
```

2 - Créer l'événement
---

L'événement peut être placer dans répertoire associé à celui-ci : ```Application\Event\MonEvent```
Celui-ci doit hérité du service ```EvenementService```.

Exemple de création pour MonEvent
```php
<?php

namespace Application\Event\MonEvent;

use Application\Provider\EvenementProvider;
use DateTime;
use Exception;
use UnicaenEvenement\Entity\Db\Etat;
use UnicaenEvenement\Entity\Db\Evenement;
use UnicaenEvenement\Entity\Db\Type;
use UnicaenEvenement\Service\Evenement\EvenementService;

class MonEventEvenement extends EvenementService {

    /**
     * @param DateTime|null $dateTraitement
     * @return Evenement
     */
    public function creer(DateTime $dateTraitement = null) : Evenement
    {
        /** @var Type $type */
        $type = $this->getTypeService()->findByCode(EvenementProvider::MON_EVENT);
        $description = "Mon event";
        $evenement = $this->createEvent($description, $description, null, $type, null, $dateTraitement);
        $this->ajouter($evenement);
        return $evenement;
    }

    /**
     * @param Evenement $evenement
     * @return string
     */
    public function traiter(Evenement $evenement) : string
    {
        try {
            //todo écrire procédure de l'événement
        } catch(Exception $e) {
            $evenement->setLog($e->getMessage());
            $this->update($evenement);
            return Etat::ECHEC;
        }
        $evenement->setLog("Ok!");
        $this->update($evenement);
        return Etat::SUCCES;
    }
}
```

Pensez à écrire la factory associée et le trait en cas d'ajout pas une action d'un controller.

3 - Déclaration du lien entre l'événement et le "Service" associé
---

Dans le fichier de configuration ```unicaen-evenement.global.php```, il faut indiquer que le type d'événement créé va exploiter un ```Event``` à celui-ci.

```php
return [
    'unicaen-evenement' => [
        'service' => [
            EventProvider::MON_EVENT => MonEventEvenement::class,
        ],
    ],
];
```

Ce lien est exploité par le module lorsque passe sur les instances d'événement à traiter.
Pour récupérer la méthode ```traiter()``` qui est associé à l'événement.

---

Route console pour lancer le traitement des événements.
===

```sh
$ docker exec preecog php public/index.php traiter-evenements
@@ -6,6 +113,6 @@ $ docker exec preecog php public/index.php traiter-evenements

Déclaration dans la crontab
```sh 
# - Traitement des événements en attente
# - Traitement des évènements en attente
*/1 *   * * *   root cd /var/www/html && php public/index.php traiter-evenements 1> /dev/null 2>&1
```