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

Retrait de instadia au profit de unicaen/instadia

parent c473517c
Loading
Loading
Loading
Loading
Loading
+0 −25
Changes for config/module.config.php: 0 added lines, 25 removed lines.
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ use Laminas\ServiceManager\Factory\InvokableFactory;
use Unicaen\Console\Router\Simple;
use UnicaenApp\Controller\CacheControllerFactory;
use UnicaenApp\Controller\ConsoleController;
use UnicaenApp\Controller\InstadiaControllerFactory;
use UnicaenApp\DeveloperTools\MessageCollectorService;
use UnicaenApp\DeveloperTools\MessageCollectorServiceFactory;
use UnicaenApp\Form\Element\SearchAndSelect2;
@@ -26,7 +25,6 @@ use UnicaenApp\ORM\Query\Functions\Chr;
use UnicaenApp\ORM\Query\Functions\CompriseEntre;
use UnicaenApp\ORM\Query\Functions\PasHistorise;
use UnicaenApp\ORM\Query\Functions\Replace;
use UnicaenApp\Service\InstadiaServiceFactory;
use UnicaenApp\Service\Mailer\MailerService;
use UnicaenApp\Service\Mailer\MailerServiceFactory;
use UnicaenApp\Service\SQL\RunSQLService;
@@ -42,8 +40,6 @@ use UnicaenApp\View\Helper\HeadScript;
use UnicaenApp\View\Helper\HeadScriptFactory;
use UnicaenApp\View\Helper\InlineScript;
use UnicaenApp\View\Helper\InlineScriptFactory;
use UnicaenApp\View\Helper\InstadiaViewHelper;
use UnicaenApp\View\Helper\InstadiaViewHelperFactory;
use UnicaenApp\View\Helper\MessageCollectorHelper;
use UnicaenApp\View\Helper\MessageCollectorHelperFactory;
use UnicaenApp\View\Helper\Messenger;
@@ -217,18 +213,6 @@ return [
                    ],
                ],
            ],
            'instadia'         => [
                'type'          => 'Literal',
                'options'       => [
                    'route'    => '/instadia',
                    'defaults' => [
                        '__NAMESPACE__' => 'UnicaenApp\Controller',
                        'controller'    => 'Instadia',
                        'action'        => 'index',
                    ],
                ],
                'may_terminate' => true,
            ],
            // The following is a route to simplify getting started creating
            // new controllers and actions without needing to create a new
            // module. Simply drop new controllers in, and you can access them
@@ -349,7 +333,6 @@ return [

            MailerService::class    => MailerServiceFactory::class,
            RunSQLService::class    => RunSQLServiceFactory::class,
            'instadia'              => InstadiaServiceFactory::class,
            HostLocalization::class => HostLocalizationFactory::class,
            RedirectResponse::class => RedirectResponseFactory::class,

@@ -409,7 +392,6 @@ return [
            'headLink'          => HeadLink::class,
            'headScript'        => HeadScript::class,
            'inlineScript'      => InlineScript::class,
            'instadia'          => InstadiaViewHelper::class,
            'messageCollector'  => MessageCollectorHelper::class,
            'uploader'          => UploaderHelper::class,
            'Uploader'          => UploaderHelper::class,
@@ -425,7 +407,6 @@ return [
            HeadLink::class               => HeadLinkFactory::class,
            HeadScript::class             => HeadScriptFactory::class,
            InlineScript::class           => InlineScriptFactory::class,
            InstadiaViewHelper::class     => InstadiaViewHelperFactory::class,
            MessageCollectorHelper::class => MessageCollectorHelperFactory::class,
            UploaderHelper::class         => UploaderHelperFactory::class,
        ],
@@ -486,7 +467,6 @@ return [
        ],
        'factories'    => [
            'UnicaenApp\Controller\Cache'    => CacheControllerFactory::class,
            'UnicaenApp\Controller\Instadia' => InstadiaControllerFactory::class,
        ],
    ],

@@ -687,11 +667,6 @@ return [
                    'action'     => ['js', 'css', 'printable-css'],
                    'roles'      => [],
                ],
                [
                    'controller' => 'UnicaenApp\Controller\Instadia',
                    'action'     => ['index'],
                    'roles'      => [],
                ],
            ],
        ],
    ],

data/schema-oracle.sql

deleted100644 → 0
+0 −18
Changes for data/schema-oracle.sql: 0 added lines, 18 removed lines.
Original line number Diff line number Diff line
/* Si vous voulez utiliser Instadia!! */
CREATE
  TABLE INSTADIA
  (
    ID            NUMBER (*,0) NOT NULL ,
    USER_ID       NUMBER (*,0) ,
    RUBRIQUE      VARCHAR2 (80 CHAR) NOT NULL ,
    SOUS_RUBRIQUE VARCHAR2 (80 CHAR) ,
    HORODATAGE    DATE NOT NULL ,
    CONTENU       VARCHAR2 (3000 CHAR) NOT NULL
  )
  LOGGING ;
ALTER TABLE INSTADIA ADD CONSTRAINT INSTADIA_PK PRIMARY KEY ( id ) ;

ALTER TABLE INSTADIA ADD CONSTRAINT INSTADIA_USER_FK FOREIGN KEY ( USER_ID )
REFERENCES "USER" ( ID ) ON DELETE SET NULL NOT DEFERRABLE ;

CREATE SEQUENCE INSTADIA_ID_SEQ;
 No newline at end of file
+0 −126
Changes for doc/Widgets.dokuwiki: 0 added lines, 126 removed lines.
Original line number Diff line number Diff line
@@ -337,129 +337,3 @@ Popajax comporte un certain nombre de méthodes :
| posPop | Aucun | this | Repositionne le popover |
| getContent | Aucun | element Jquery ou undefined | Retourne l'élément qui contient le texte du popover |
| setContent | string | this | Permet de peupler le contenu du popover |



====== Instadia ======

Instadia est un système de messagerie instantanée persistant contextuel.
Cela signifie que :
  * Les messages sont stockés en base de données
  * Chaque fil de messagerie peut être lié à un contexte particulier.
  * Il est possible de dialoguer en temps réel avec des interlocuteurs.
  * Les messages restent visibles sans pouvoir être effecés

Instadia peut être intégré très simplement au coeur d'une application pour, par exemple, suivre un dossier ou commenter tel ou tel item.

L'intérêt est que :
  * les informations de suivi sont visibles dans leur contexte. Il n'y a pas besoin d'aller chercher l'historique d'une conversation dans sa boite mail.
  * les informations sont PARTAGÉES. Un nouvel utilisateur peut voir ce qui c'est dit précédemment

<WRAP center round important 60%>
Dans Instadia, chaque fil de conversation correspond à une rubrique et éventuellement à une sous-rubrique.
Par exemple dans Uniform nous avons une rubrique formation pour signaler qu'on parle de formation, et une sous-rubrique par code de formation. Ainsi nous avons bien un fil de discussion par formation.
</WRAP>

Instadia est intégré à UnicaenApp.
Les préresuis pour l'utiliser sont les suivants :
  * votre application doit reposer sur une base de données
  * vous devez utiliser UnicaenAuth (uniquement si vous voulez authentifier vos utilisateurs)
  * une table, nommée instadia, doit être créée. Vous en trouverez la structure ci-dessous (code pour Oracle):

<code sql>
CREATE
  TABLE INSTADIA
  (
    ID            NUMBER (*,0) NOT NULL ,
    USER_ID       NUMBER (*,0) ,
    RUBRIQUE      VARCHAR2 (80 CHAR) NOT NULL ,
    SOUS_RUBRIQUE VARCHAR2 (80 CHAR) ,
    HORODATAGE    DATE NOT NULL ,
    CONTENU       VARCHAR2 (3000 CHAR) NOT NULL
  )
  LOGGING ;
ALTER TABLE INSTADIA ADD CONSTRAINT INSTADIA_PK PRIMARY KEY ( id ) ;

ALTER TABLE INSTADIA ADD CONSTRAINT INSTADIA_USER_FK FOREIGN KEY ( USER_ID )
REFERENCES "USER" ( ID ) ON DELETE SET NULL NOT DEFERRABLE ;

CREATE SEQUENCE INSTADIA_ID_SEQ;
</code>


Une aide de vue <php>UnicaenApp\View\Helper\InstadiaViewHelper</php> a été créée pour simplifier l'intégration.
En voici un exemple d'utilisation :
<code php>
/* Dans une vue */

<?php echo $this->instadia()->setRubrique('essai')->setTitle('Mon test'); ?>

</code>

Voici le résultat (un clic sur le lien ouvre la fenêtre de CHAT) :
{{ :develop:unicaen2:moduleunicaenunicaenapp:viewhelpers:instadia.png?nolink |}}

Et voici maintenant ce qu'on peut faire avec le Widget :

===== Options =====

^Nom (dataset)       ^ Nom (Json)   ^ Type    ^ Valeur par défaut ^ Description ^
| user-id            | userId       | integer | undefined | ID de l'utilisateur courant (facultatif) |
| user-label         | userLabel    | string  | 'Anonyme' | Nom de l'utilisateur (ou undefined) |
| user-hash          | userHash     | string  | undefined | Hash permettant de récupérer le Gravatar de l'utilisateur courant (formule : md5(strtolower(trim($email))) |
| refresh-delay      | refreshDelay | integer | 2000 | Délai de rafraichissement de la fenêtre des messages (en millisecondes) |
| title              | title        | string  | Messagerie instantanée | Titre de la fenêtre de Chat et nom du lien |
| rubrique           | rubrique     | string  | undefined | Rubrique |
| sousRubrique       | sous-rubrique| string  | undefined | Sous-rubrique |
| url                | url          | string  | undefined | URL de communication avec le serveur |
| information        | information  | string  | undefined | Message d'information sur la fenêtre de Chat |
| width              | width        | integer | 500       | Largeur de la fenêtre de Chat |
| height             | height       | integer | 700       | Hauteur de la fenêtre de Chat |
| readOnly           | read-only    | boolean | false     | Fenêtre de Chat en simple visualisation |
===== Événements =====

Les événements permettent de réagir à des changements d'état.
Les closures ou les fonctions qui seront appelées se verront transmettre deux arguments :
  - l'événement en lui-même
  - l'objet instadia (ce qui permet de le manipuler).
==== Liste des événements ====

^ Événement ^ Description ^
| afficher | affiche la fenêtre de Chat |
| cacher | ferme la fenêtre de Chat |
| envoyer | Lorsqu'un message est envoyé |
| addMessage | Lorsqu'un message est ajouté |

===== Méthodes =====
Popajax comporte un certain nombre de méthodes :
^ Nom ^ Arguments ^ Valeur de retour ^ Description ^
| afficherCacher | Aucun | this | Permet d'afficher la fenêtre de Chat si elle n'est pas affichée ou de la masquer si elle est affichée. |
| estAffiche | Aucun | boolean | Retourne true si elle est affichée, false sinon |
| afficher | Aucun | this | Affiche le Chat |
| cacher | Aucun | this | Masque le Chat |
| envoyer | Aucun | this | Envoie le message saisi |
| addMessage | user, horodatage, content | this | Poste un nouveau message user = id,label,hash |
| getMessage | Aucun | string | Retourne le texte en cours de saisie |
| setMessage | string | this | Change le texte en cours de saisie |
| getUser    | Aucun | id,label,hash | retourne l'utilisateur courant |

====== Avancé ======
Un service Instadia (<php> $sl->get('instadia');</php>) permet de :
  * lister les messages : <php>getMessages($rubrique = null, $sousRubrique = null)</php>
  * Sauvegarder un message : <php>save(UnicaenApp\Entity\Db\Instadia $instadia)</php>
  * Créer un Hash pour un utilisateur donné : <php>makeHash(UnicaenAuth\Entity\Db\AbstractUser $user)</php>
  * Réagir au post d'un nouveau message selon la rubrique : <php>onSend( $rubrique, $sousRubrique, $callback)</php>

===== Système de callback pour générer une action suite à un post de message =====
Ceci est une portion de code à placer dans la méthode onBootstrap de la classe Module de votre application.

<code php>

$sm = $e->getApplication()->getServiceManager();
/** @var \UnicaenApp\Service\InstadiaService $instadia */
$instadia = $sm->get('instadia');
$instadia->onSend('maRubrique', null, function( \UnicaenApp\Entity\Db\Instadia $instadia){
    /* DO WHAT YOU WANT */
});

</code>
+0 −2
Changes for doc/Widgets.md: 0 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -100,5 +100,3 @@ Exemple de vue contenant le lien à ouvrir :
[PopAjax](./widgets/pop-ajax.md)

[TabAjax](./widgets/tab-ajax.md)

[Instadia](./widgets/instadia.md)
 No newline at end of file

doc/widgets/instadia.md

deleted100644 → 0
+0 −160
Changes for doc/widgets/instadia.md: 0 added lines, 160 removed lines.
Original line number Diff line number Diff line

Instadia
========

Instadia est un système de messagerie instantanée persistant contextuel.
Cela signifie que :

-   Les messages sont stockés en base de données
-   Chaque fil de messagerie peut être lié à un contexte particulier.
-   Il est possible de dialoguer en temps réel avec des interlocuteurs.
-   Les messages restent visibles sans pouvoir être effecés

Instadia peut être intégré très simplement au coeur d\'une application
pour, par exemple, suivre un dossier ou commenter tel ou tel item.

L\'intérêt est que :

-   les informations de suivi sont visibles dans leur contexte. Il n\'y
    a pas besoin d\'aller chercher l\'historique d\'une conversation
    dans sa boite mail.
-   les informations sont PARTAGÉES. Un nouvel utilisateur peut voir ce
    qui c\'est dit précédemment

\<WRAP center round important 60%\> Dans Instadia, chaque fil de
conversation correspond à une rubrique et éventuellement à une
sous-rubrique. Par exemple dans Uniform nous avons une rubrique
formation pour signaler qu\'on parle de formation, et une sous-rubrique
par code de formation. Ainsi nous avons bien un fil de discussion par
formation. \</WRAP\>

Instadia est intégré à UnicaenApp. Les préresuis pour l\'utiliser sont
les suivants :

-   votre application doit reposer sur une base de données
-   vous devez utiliser UnicaenAuth (uniquement si vous voulez
    authentifier vos utilisateurs)
-   une table, nommée instadia, doit être créée. Vous en trouverez la
    structure ci-dessous (code pour Oracle):

``` {.sql}
CREATE
  TABLE INSTADIA
  (
    ID            NUMBER (*,0) NOT NULL ,
    USER_ID       NUMBER (*,0) ,
    RUBRIQUE      VARCHAR2 (80 CHAR) NOT NULL ,
    SOUS_RUBRIQUE VARCHAR2 (80 CHAR) ,
    HORODATAGE    DATE NOT NULL ,
    CONTENU       VARCHAR2 (3000 CHAR) NOT NULL
  )
  LOGGING ;
ALTER TABLE INSTADIA ADD CONSTRAINT INSTADIA_PK PRIMARY KEY ( id ) ;

ALTER TABLE INSTADIA ADD CONSTRAINT INSTADIA_USER_FK FOREIGN KEY ( USER_ID )
REFERENCES "USER" ( ID ) ON DELETE SET NULL NOT DEFERRABLE ;

CREATE SEQUENCE INSTADIA_ID_SEQ;
```

Une aide de vue `UnicaenApp\View\Helper\InstadiaViewHelper`{.php} a été
créée pour simplifier l\'intégration. En voici un exemple d\'utilisation
:

``` {.php}
/* Dans une vue */

<?php echo $this->instadia()->setRubrique('essai')->setTitle('Mon test'); ?>

```

Voici le résultat (un clic sur le lien ouvre la fenêtre de CHAT) :
![](/develop/unicaen2/moduleunicaenunicaenapp/viewhelpers/instadia.png){.align-center}

Et voici maintenant ce qu\'on peut faire avec le Widget :

Options
-------

Nom (dataset)   Nom (Json)      Type      Valeur par défaut        Description
  --------------- --------------- --------- ------------------------ --------------------------------------------------------------------------------------------------------------
user-id         userId          integer   undefined                ID de l\'utilisateur courant (facultatif)
user-label      userLabel       string    \'Anonyme\'              Nom de l\'utilisateur (ou undefined)
user-hash       userHash        string    undefined                Hash permettant de récupérer le Gravatar de l\'utilisateur courant (formule : md5(strtolower(trim(\$email)))
refresh-delay   refreshDelay    integer   2000                     Délai de rafraichissement de la fenêtre des messages (en millisecondes)
title           title           string    Messagerie instantanée   Titre de la fenêtre de Chat et nom du lien
rubrique        rubrique        string    undefined                Rubrique
sousRubrique    sous-rubrique   string    undefined                Sous-rubrique
url             url             string    undefined                URL de communication avec le serveur
information     information     string    undefined                Message d\'information sur la fenêtre de Chat
width           width           integer   500                      Largeur de la fenêtre de Chat
height          height          integer   700                      Hauteur de la fenêtre de Chat
readOnly        read-only       boolean   false                    Fenêtre de Chat en simple visualisation
# Widgets Javascript

Événements
----------

Les événements permettent de réagir à des changements d\'état. Les
closures ou les fonctions qui seront appelées se verront transmettre
deux arguments :

1.  l\'événement en lui-même
2.  l\'objet instadia (ce qui permet de le manipuler).

### Liste des événements

Événement    Description
  ------------ -------------------------------
afficher     affiche la fenêtre de Chat
cacher       ferme la fenêtre de Chat
envoyer      Lorsqu\'un message est envoyé
addMessage   Lorsqu\'un message est ajouté

Méthodes
--------

Instadia comporte un certain nombre de méthodes :

Nom              Arguments                   Valeur de retour   Description
  ---------------- --------------------------- ------------------ ----------------------------------------------------------------------------------------------------------
afficherCacher   Aucun                       this               Permet d\'afficher la fenêtre de Chat si elle n\'est pas affichée ou de la masquer si elle est affichée.
estAffiche       Aucun                       boolean            Retourne true si elle est affichée, false sinon
afficher         Aucun                       this               Affiche le Chat
cacher           Aucun                       this               Masque le Chat
envoyer          Aucun                       this               Envoie le message saisi
addMessage       user, horodatage, content   this               Poste un nouveau message user = id,label,hash
getMessage       Aucun                       string             Retourne le texte en cours de saisie
setMessage       string                      this               Change le texte en cours de saisie
getUser          Aucun                       id,label,hash      retourne l\'utilisateur courant

Avancé
======

Un service Instadia (` $sl->get('instadia');`{.php}) permet de :

-   lister les messages :
    `getMessages($rubrique = null, $sousRubrique = null)`{.php}
-   Sauvegarder un message :
    `save(UnicaenApp\Entity\Db\Instadia $instadia)`{.php}
-   Créer un Hash pour un utilisateur donné :
    `makeHash(UnicaenAuth\Entity\Db\AbstractUser $user)`{.php}
-   Réagir au post d\'un nouveau message selon la rubrique :
    `onSend( $rubrique, $sousRubrique, $callback)`{.php}

Système de callback pour générer une action suite à un post de message
----------------------------------------------------------------------

Ceci est une portion de code à placer dans la méthode onBootstrap de la
classe Module de votre application.

``` {.php}

$sm = $e->getApplication()->getServiceManager();
/** @var \UnicaenApp\Service\InstadiaService $instadia */
$instadia = $sm->get('instadia');
$instadia->onSend('maRubrique', null, function( \UnicaenApp\Entity\Db\Instadia $instadia){
    /* DO WHAT YOU WANT */
});

```
Loading