Workflows évolués pour Joomla! avec Seblod 1/4

12 vues
15 décembre 2014
Cyril
Joomla-Workflows

 

Définition d'un workflow

Lors des formations sur le CCK SEBLOD nous apprenons comment le cck permet de réaliser des workflows complexes pour Joomla.

Dans une gestion électronique de contenus, un contenu subit des évolutions que traduit généralement une notion d’état général. On parle souvent de soumission /correction /validation /publication /archivage /suppression par exemple.

Mais l'état d'un contenu n'est qu'une partie du workflow. On doit en fait croiser plusieurs notions ensemble comme: 

* des états (qui doivent être configurables par projet et par type de contenu)
* des groupes d'utilisateurs (publics, auteurs, relecteur, gestionnaires, administrateurs etc...)
* des droits d'accès et des permissions par profil d'utilisateurs qui peuvent interagir plus ou moins sur le contenu
* des notifications emails selon les actions effectuées
* une notion de version de contenu peut compléter le workflow pour permettre notamment de revenir vers une version précédente du contenu.

Ces notions ne sont pas si importantes dans des petits sites gérés par un petit groupe d'administrateurs. mais dans des sites plus conséquents et
surtout dans des outils web (intranet, extranets, gestion électronique de documents (GED)) un workflow dédié devient absolument indispensable.

Manque de workflow dans Joomla!

Etats d'un article JoomlaMalheureusement Joomla ne gère pas de workflow nativement. On trouve bien une notion de champ 'état' qui est cependant limité à une petite liste de
valeurs (publié, dépublié, archivé, supprimé) et non modifiable.
Joomla propose bien une notification email automatique à la création de contenus mais là encore on ne peut contrôler le contenu ni le destinataire
du mail.
Bien sûr le niveau de granularité de joomla (l'article) ne permet pas non plus de définir des types de contenus spécialisés avec des règles de
workflow propres à chaque type de contenu.
On compte quelques extensions qui apportent des solutions partielles. Faut il en déduire que Joomla! est inadapté pour des applications web nécessitant
des workflows évolués ?
C'est sans compter avec le CCK Seblod qui, tout en restant dans l'écosystème Joomla! (un contenu Seblod est un article Joomla! étendu), permet
la programmation de workflows complexes.
Avec Seblod Joomla! voit son niveau de granularité passé de l'article monolithique aux champs qui constituent l'article. On dispose aussi d'une
interface graphique pour définir les comportements sur l'activation de conditions qui vont déclencher des actions comme les notifications emails

Workflows évolués avec Seblod pour Joomla

Quels sont les éléments que nous avons à notre disposition pour réaliser des workflows évolués sous Joomla! avec Seblod? Nous pouvons lister ces éléments suivants:

les états

L'état d'un contenu Seblod (= un article Joomla avec plus ou moins de champs) de base est le champ ARTICLE STATE qui reprend les valeurs des états possibles d'un article Joomla. La seule différence (et de taille) est que ce champ est modifiable et donc vous pouvez changer et ajouter ou supprimer des valeurs.
D'un point de vue technique il s'agit d'un champ de type SELECT SIMPLE qui est stocké en base de données exactement à l'endroit ou Joomla! stocke l'état d'un article c'est à dire dans la colonne STATE de la table #__content:

Etats d'un article Joomla par Seblod

Stockage en base de données de l'état par Seblod
Vous l'aurez compris, avec Seblod vous avez découpé Joomla! en champs et vous pouvez venir modifier chaque champs vous donnant un contrôle inégalé sur le CMS tout en restant DANS le CMS.

Evidemment la modification du champ ARTICLE STATE a un impact sur tout le projet Joomla. On ne viendra donc le modifier QUE si on est sûr de vouloir modifier les valeurs possibles des états de tout Joomla.

Une méthode plus conseillée est de créer, pour chaque type de contenu un nouveau champ d'états, stocké au même endroit dans la base mais avec d'autres valeurs possibles. Ainsi tout en respectant les valeurs standards (1= publié, 0= dépublié par exemple) on peut personnaliser pour chaque type de contenu les états du workflow.

les champs emails

Un élément essentiel d'un workflow est l'ensemble des emails de notification qui sont envoyés à certaines personnes selon certains événements (généralement des changements d'état).

Seblod propose des champs email qui ne se contentent pas de stocker la valeur d'un email destinataire, mais qui sont de véritables gestionnaire d'envoi de mails dont les destinataires, corps et objets sont paramétrables dynamiquement.

On fera autant de champs emails que de type de notifications nécessaires dans le workflow. Chaque champ sera activé ou non par des filtrages ACLs (selon les types d'internautes) et des plugins de restriction ou des états conditionnels selon des événements et des valeurs d'autres champs.

 

les ACLs

Un autre élément essentiel d'un workflow évolué est de jouer avec les ACLs de Joomla, eux même basés sur les groupes de Joomla!

Ici Seblod ne modifie rien sauf que la granularité du projet Seblod se situe maintenant au niveau des champs et non plus sur l'article complet.

On pourra donc affecter une ACL par champ

Filtrage par ACLs Joomla! sur des champs Seblod

Ainsi on pourra activer ou désactiver des champs selon l'internaute qui consulte la contenu. Attention cependant qu'un filtrage par ACL n'est pas équivalent à un masquage. Un champ filtré par les ACLs n'est pas seulement invisible, il n'est tout simplement pas sur la page.

 

les restrictions

On peut aussi activer ou désactiver un champ dynamiquement selon un filtrage autre que les ACLs mais (par exemple):

* si on est en création ou modification

* selon le groupe d'utilisateurs auquel appartient l'internaute

* selon la valeur d'un champ quelconque sur la page

Filtrage ACLs et plugins de restrictions sur des champs Seblod

A noter que le filtrage par ACL comme par un plugin de restriction s'effectue à l'affichage de la page. C'est tout différent avec la méthode suivante qui est dynamique!

les champs conditionnels

Une façon plus dynamique en effet de filtrer ou de modifier un champ est d'utiliser les états conditionnels de Seblod.

Ceux-ci permettent de définir d'une part des conditions et d'autre part des actions qui seront déclenchées sur l'activation de ces conditions.

Le grand intérêt des états conditionnels dans un workflow est qu'ils fonctionnent en dynamique selon les actions de l'internaute avant même qu'il valide ses changements.

Ainsi on pourra faire apparaître ou masquer des champs dynamiquement selon les valeurs choisies de certains champs. Dans un processus de workflow on s'en servira pour activer ou désactiver des champs emails qui seront des notifications lors d'un changement d'état.

Dans l'exemple ci-contre on voit le détail d'un état conditionnel sur un champ email qu'il est nécessaire d'expliquer un peu plus.

La partie gauche définit les actions qui seront effectuées, ici:

* le champ email sera activé (sinon il restera comme inexistant sur la page et le mail ne sera pas envoyé)

* le champ email sera rempli (c'est à dire l'email destinataire sera fourni et stocké)

La partie droite définit les déclencheurs des actions, ici:

* quand deux champs valent respectivement 02 et 14

* quand le champ email lui-même est vide

Etats conditionnels pour un workflow avec notification email

Cette dernière règle mérite qu'on s'y attarde car elle permet de ne déclencher l'envoi du mail qu'une seule fois. En effet, puisque le 3eme test porte sur la complétude du champ email (la valeur du destinataire) et que l'action consiste justement à remplir le champ, on a bien ici une méthode pour déclencher une notification email dans le workflow au PASSAGE de valeur (ici 02 et 14) et non seulement lorsque certains champs valent une certaine valeur.

Enfin il est important, pour que cette mécanique fonctionne, que le champ email possède bien un stockage sans quoi la valeur de l'email destinataire ne peut être stockée et donc ne peut servir de test au prochain passage.


les champs code

Pour les actions de workflow encore plus spécifiques Seblod nous propose des champs code dans lesquels on écrira du code en JavaScript ou PHP de façon complètement libre. On pourra aussi faire des requêtes SQL complexes dans les champs code PHP.

A noter qu'il y a trois sortes de champs code PHP:
* le champ code avant le rendu: il est exécuté à l'affichage de la page. On l'utilise donc pour masquer ou faire apparaitre des champs selon le contexte
* le champ code avant la sauvegarde: il est utilisé pour venir dynamiquement modifier des valeurs selon des règles qu'on aurait du mal à écrire avec les états conditionnels. Il est exécuté juste après avoir appuyé sur le bouton submit du formulaire mais avant le stockage en base de données (justement pour nous laisser le temps de venir modifier des choses)
* le champ code après la sauvegarde: identique au précédent mais qui est exécuté après la sauvegarde en base de données.

Ici dans notre problématique de workflow de validation, on peut être amené à utiliser un champ code 'avant la sauvegarde' pour venir placer un flag à une valeur pour que la prochaine fois que le contenu ou le formulaire d'édition du contenu est affiché, on puisse vérifier qu'on est déjà passé par là et donc ne pas déclencher tel ou tel événement.

EXEMPLE:
if ($fields['champ_test']->value)
if ($fields['champ_test']->value !=11)
$config['storages']['#__cck_store_form_montype']["mon_flag"]=1;

A noter ici qu'on ne s'est pas contenté d'écrire $fields["mon_flag"]=1 qui n'aurait eu aucun effet en base de données. En effet pour qu'un champs soit modifié manuellement en base il faut s'assurer que le tableau $config contienne bien les champs à stocker avec leur table associée.

Dans un prochain billet je vous montrerais un exemple simple de workflow qu'on peut réaliser avec ces notions!

Pulsar sponsor OR du JoomlaBusiness 2015
Import shipping pour hikashop
SOBI Pro: le menu principal ne s'affiche pas
JCEmediabox et css js compress
Elections 2016 ... le CMS Joomla! encore
Plugin merge css/js pour Joomla
Workflow et formulaires faciles avec Joomla! et Seblod 3/4
Ajouter une icône d'édition dans une liste SEBLOD
Fenêtre coulissante avec Joomla et Seblod
Pulsar gagne l'appel d'offre de la Sorbonne
Comparaison des CCKs pour Joomla!
Les avantages de Joomla! face à Drupal
Une agence web Joomla! au Drupagora
Developpements pour la Bibliotheque Mazarine
L'agence Pulsar sponsorise le JoomlaDay 2015
Comprendre les droits et niveaux d'accès de Joomla!
Nouveau site de Pulsar avec Seblod!
Astuces PHP lazy load sous joomla seblod warp
Advanced module manager et page d'accueil
Entrées grisées avec la mention [extrait] dans DOCMAN
Les solutions multi sites avec Joomla!
Pulsar au JoomlaDay 2014: Chaine de production
JoomlaDay 2015: Pulsar y était!
Un nouveau routeur pour Joomla!
Chargement Joomla avec Mootools de Google
Workflows généralisés avec Joomla! et Seblod (partie 4)
Pulsar sponsor du Joomladay
GED Open Source simple pour les PME
Multisites, multilangues et multidevices pour la SORBONNE
Pulsar, le JoomlaDay et Israël
Joomla meilleur cms open source 2011
Joomla! présent au salon AGORA CMS 2016
Comprendre le stockage des données avec SEBLOD
Workflow Joomla! évolué avec Seblod 2/4
Plugin de cache Joomla : les images ne s'affichent pas
Joomla! à nouveau élu meilleur CMS 2017
Les nouveautés de Joomla! 4
SEBLOD: supprimer un script à moindre coût
Ajouter le bouton DOCLINK avec Jevents et SobiPro
Développement multi sites avec Joomla et Seblod
SEBLOD et J2store au JoomlaDay Israël 2017
Override joomla du template 'category' lié à un menu
Pulsar présente le JoomlaBusiness à l'AFUP
Paramètres hikashop des items de menu
sh404SEF: URLs n'apparaissent pas
Pulsar developpe la passerelle Joomla LUCENE SOLR
Monétisez votre workflow avec Joomla!
Critère de correspondance pour la recherche SEBLOD
Référencement naturel, cocons sémantiques et Joomla!
Pulsar forme au CCK SEBLOD pour Joomla!
Pulsar certifie ses formateurs Joomla!
Edition front end avec Hikashop et Virtuemart
Chasse aux bugs des templates Warp
Job board intégré à votre site Joomla!
Optimisation et vitesse de votre site Joomla!
Extensions Joomla: accessibilité, menu vertical et réseaux sociaux
Virtuemart: flèches quantité ne fonctionnent pas
com_search joomla 2.5 recherche sans accents
Pulsar au JoomlaDay Israel 2016
E-commerce avec Seblod
Pulsar présente le job board du nouveau site web Dynamique Emploi
Sommaire automatique pour Joomla
Soirée CMS open-source en PHP
Projets multi langues et multi sites avec Seblod
CMS Day: Joomla pour les projets du secteur public
Indiegogo: contrôle de version avancé avec SEBLOD
Pulsar présente JOOMLA à AGORA CMS
Quelles extensions choisir pour son site joomla ?
Les solutions e-commerce avec Joomla!
Transformer un article en contenu SEBLOD
JoomlaDay 2015: Joomla! pour les applis pro
Pulsar présente son expertise SEBLOD au JoomlaDay 2013
Joomla 4 : professionnalisation et performance
Super BreadCrumb for Joomla 1.5 1.6 & 1.7
Pulsar présente le CMS Joomla! au club STARINUX
Pulsar et Joomla pour les sites évolués au JoomlaDay 2014
Joomla! fête ses 10 ans!
Pulsar présente le projet pour la Sorbonne au JoomlaDay!
Pourquoi nous avons ajouté WordPress à notre offre
Joomla et les CCK
Pulsar primé pour le site de la Sorbonne
Sites multi langues mobiles avec Joomla et Seblod
Gestion Electronique de Documents sur mesure
3 nouvelles extensions Joomla! de Pulsar dans la JED
Personnalisation du backoffice de Joomla!
l'AFUJ exposant au salon Open Source Summit 2015
Correctif de Pulsar dans le routeur de Joomla
Ajouter Cufon à votre site Joomla!:
Joomla! meilleur CMS PHP Open Source
Pulsar, sponsor OR du JoomlaDay 2017
Astuce: suppression des éléments Seblod