un exemple opérationnel

Adapter SPIP pour un Intranet

  guide des modifications

SPIP présente de nombreux atouts pour un usage collaboratif, mais pour rendre son fonctionnement adéquat pour un travail de groupe, quelques adaptations (simples : intégrer quelques plugins et modifier quelques squelettes standards) peuvent s’avérer nécessaires...

Cet exemple explicite une mise en œuvre détaillée, sous forme d’un guide opératoire à suivre par un webmestre..

Article publié le 12 janvier 2023, et actualisé en août 2024


 Le contexte

Dans l’antenne d’une association régionale, en ces temps de Covid-bronchiolite-etc, la responsable locale souhaite mettre en place un espace de travail collaboratif, partagé entre ses animateurs, ses bénévoles, son adjointe et même un groupe-projet d’étudiants qui pourraient ainsi journaliser leurs réflexions, bien sûr en respectant des confidentialités particulières, et enfin informer en toute transparence sa hiérarchie distante.

 Formalisation des besoins fonctionnels

Confidentialité extérieur**

Première précaution, le contenu de cet Intranet doit rester confidentiel, d’accès réservé aux seules personnes nominativement autorisées par la/les personnes responsables responsables (administrateur).

Détails personnels des auteurs

La gouvernance souhaiterait faciliter le lien direct entre animateurs, en publiant en interne les villes de résidence et numéros de téléphone personnels entre animateurs [1], mais aussi gérer les possesseurs de clé du local, et leur signature de la Charte Informatique indispensable.

Organisation d’une structure en ’secteurs’

SPIP organise les articles par rubriques, gérées par secteur ou rubrique de premier niveau ; il faut penser/comprendre que la gestion organisationnelle de tous les objets éditoriaux est fondée, en SPIP et avec les plugins, sur un découpage en Rubriques (et en Zones d’accès) : voir la gestion de Accès Restreint. : chaque partie en accès différencié (selon habilitations) est gérée dans un secteur propre.

Gestion de groupes d’intervenants

Les autorisations d’accès seront données à des membres individuellement habilités, identifiés et inscrits comme auteur SPIP, dont le statut d’auteur définira en grande partie les droits d’accès en consultation, et puis de rédaction pour modifier les articles dans certaines rubriques :

  • droit de modifications : cela dépend essentiellement des Statuts d’auteur, et sont réparties entre administrateur [2], auteurs rédacteurs [3], et visiteur [4] ; enfin la publication finalisant des articles dans une rubrique spécifique est permise pour des Administrateurs restreints
  • habilitations distinctes : tous les membres de cette structure locale n’ont pas forcément à ’tout’ voir et connaitre, en particulier certaines informations des projets stratégiques de l’antenne, ou les éléments de suivi financier des conventions de l’antenne...
    Par exemple, les stagiaires-étudiants d’un groupe-projet n’auront accès que à leur espace de travail pour rédiger les rapports d’avancement....
  • modifications collaboratives : autoriser la coopération selon les groupes d’auteurs-rédacteurs évoqués ci-dessus, va nécessiter que :
    • les autres rédacteurs du groupe puissent intervenir pour modifier-amender un article après sa rédaction [5] et par les administrateurs qu’un article "en rédaction’, donc lorsqu’il est passé par son auteur initial au statut d’article "Proposé".
    • tous les membres d’un groupe doivent pouvoir modifier les articles de leur collègue, après rédaction initiale, mais avant ’fermeture’ lors de la validation par le ou les Administrateur ; nous verrons que ces dernières exigences sont... moins faciles à automatiser !

Ergonomie publique adaptée

Les squelettes de la dist permettent déjà une consultation facile du contenu publié sur le site, et comme SPIP intègre son moteur de recherche textuel dans toutes ces pages, il n’y a pas besoin de créer de nouveaux squelettes dans un premier temps, la mise en œuvre de ces fonctionnalités dans l’espace public reste jusqu’à présent limitée à des modifications marginales des squelettes originaux (voir aussi Présentation de la dist (SPIP3.1)).

Personnalisation thème et CSS

Bien sûr, vous pourrez d’abord appliquer un thème et/ou modifier les CSS pour mettre le site aux couleurs de la structure.
Toutefois, on ci-après propose une amélioration cosmétique un peu plus complexe à programmer /avec un pipeline/ pour la mise en exergue des zones de saisie : le fonds blanc uniforme des formulaires de saisie rend parfois difficile d’identifier immédiatement les champs à remplir dans l’espace privé ; un simple CSS peut aider vos utilisateurs.
Les administrateurs et webmestres SPIP prennent facilement l’habitude de travailler presque uniquement dans l’espace privé, qui offre effectivement toutes les facilités d’accès et de modification aux contenus en-cours d’élaboration-rédaction ; mais cette interface est inadaptée aux visiteurs occasionnels, et comme l’une des principales facilites de SPIP est justement la personnalisation progressive de l’interface publique par la modification des squelettes...

Pour développer la participation des rédacteurs inscrits, mais visiteurs professionnels, on a jugé préférable de montrer les titres de ces articles en-cours dans l’interface publique : à charge aux intéressés de se connecter pour réagir...ce sera l’occasion de montrer comment Utiliser des modèles de SPIP [6] pour généraliser cet affichage public facilement.

Et certains adaptations plus ergonomiques ne seront pas encore automatisées : ainsi pour qu’un article soit modifiable par les autres auteurs du groupe, nous verrons qu’il faudrait que ceux-ci soient préalablement rajoutes comme auteurs de l’article : mais cela n’est pas disponible en standard [7].

Enfin pour faciliter l’identification entre membres qui ne se connaissent pas encore, une personnalisation des auteurs est aussi proposée, apportée par un ensemble de ’badges’, s’appuyant sur un système de mots-clés, indiquant leur statut dans l’association qui ne sera sans doute pas décrit dans cet article... déjà bien assez long !

Quelques limitations

Il n’a pas été souhaité de :
- mettre en place un système directement Wiki [8] en rédaction libre directement dans l’espace public, laissant plutôt travailler en FramaPad,
- gérer dans l’immédiat les participations des membres aux activités(actuellement dépendantes des mails croisés, pas toujours lus), et leurs statistiques de participations d’un simple clic individuel ; à partir du plugin Réservations(dont le nom ne traduit pas le caractère "facultatif"), et sur la base d’une programmation annoncée par un administrateur, il est en effet facile d’installer sous SPIP un écran de saisie individualisée pour partager les venues aux réunions prévues ou ateliers [9], dont les CR seront bien sûr mis en-ligne privée et consultables sur cet Intranet [10].
- à noter aussi qu’il serait théoriquement possible, d’après les plugins disponibles pour SPIP, d’intégrer un stockage NextCloud à la gestion de l’Intranet réservé aux membres (formule à approfondir...).


 Comment faire

La majeure partie du travail consiste à intégrer quelques plugins SPIP parmi les plus courants, en particulier : Iintranet/Extranet, les deux plugins de Champs Extras, le plugin Accès Restreint, Autorité,... sans oublier de les configurer !

Confidentialité : le plugin Intranet

L’installation et configuration immédiate de ce plugin constitue un garde-fou de sécurité pour la totalité de votre Intranet....
Dans un second temps, l’usage du plugin Accès Restreint s’imposera sans doute (voir ci-après).

Compléter les Auteurs : Champs Extras

Après installation des deux plugins, il faudra ajouter quelques champs définis : la Ville, le téléphone, un champ à cocher pour la clé (voir deux types de clés : boite et/ou local ?) [11], et un champ date de signature de la Charte Informatique [12]

Structuration en secteurs

Un travail de réflexion impliquant des responsables de l’association doit aboutir à une arborescence en secteurs, puis rubriques et sous-rubriques, définies en fonction d’une clarté de navigation d’accès pour que les visiteurs puissent trouver facilement l’information voulue.... sans oublier des zones confidentielles pour des besoins particuliers, et un secteur protégé pour mémoriser la journalisation technique et les améliorations du site (partagé entre Webmestre et autres Administrateurs pour la traçabilité technique).
Cette structuration dépend de chaque activité et du fonctionnement de l’organisation, en sachant que SPIP permet très facilement de déplacer des articles ou des rubriques complètes dans l’arborescence crée : celle-ci peut devoir s’adapter aux contraintes d’accès par groupes, à analyser ci-dessous.

Gestion des Groupes et Zones : Accès Restreint

Installation du plugin accès restreint et configuration : interdire la lecture des documents joints (pour une protection d’accès analogue à celle de leurs objets de base, les articles de rattachement).

L’identification des zones

Définir une zone par groupe :
- Administrateurs permanents (auxquels on ajoutera peut-être les Visiteurs institutionnels hiérarchiques)..
- le projet Stagiaires : ajouter les Permanents (et la hiérarchie ?),
aux étudiants définis comme rédacteurs et administrateurs restreint de cette rubrique.
- des zones selon vote arborescence de secteurs...
- rajouter une zone "Communs" [13] comprenant tous les auteurs (sauf les visiteurs = extérieurs) pour gérer en interne les réunions, partager informations communes, etc...

Attention aux superpositions

Le fonctionnement des habilitations du plugin Accès Restreint est traditionnellement "restrictif par cumul" (c’est-à-dire qu’il opère un "ET Logique" entre toutes les zones concernées pour donner ou non autorisation de lecture à l’auteur connecté !).
En d’autres termes, pour qu’un article d’une rubrique "couverte par plusieurs zones" soit accessible à un auteur, il faut que cet auteur soit déclaré dans toutes les zones couvrantes Alors restez simple : une zone par rubrique !
Et vérifier régulièrement que votre couverture de confidentialité est totale, en utilisant un navigateur différent en mode non-connecté à votre SPIP [14].

Autoriser les modifications : plugin Autorité

Pour permettre aux rédacteurs de modifier/compléter les articles de leur groupe, installer donc le plugin Autorité, et configurer juste le choix Rédacteur modifie proposé ; nul doute qu’en fonction de vos besoins, vous y trouverez d’autres paramétrages à adapter...

Une noisette d’appel des Articles en modèle

On souhaite garder la convivialité et l’ergonomie de l’interface public, mais il faut aussi donner accès aux articles "proposés" en plus des articles "publiés" dans la navigation courante SPIP affichant des articles, c’est-à-dire :
- la page de squelette sommaire, avec les articles récents,
- la page de squelette plan
- la page de squelette résultats de recherche,
- et ultérieurement les pages de squelette par mots-clés.

Pour cela, il faut d’abord identifier la noisette concernée, par exemple dans la page sommaire, le bloc d’origine est appelé dans le fichier de squelette sommaire.html par l’instruction <code><INCLURE{fond=inclure/recents,env,ajax} /> qui contient

  1. <BOUCLE_articles(ARTICLES) {!par date} {pagination}>
  2.                 <li dir="#LANG_DIR" class="hentry clearfix text-#LANG_LEFT">
  3.                         [(#LOGO_ARTICLE_RUBRIQUE{#URL_ARTICLE}|image_reduire{150,*})]
  4.                         <h3 class="h2 entry-title"><a href="#URL_ARTICLE" rel="bookmark">#TITRE</a></h3>
  5.                         <small><abbr class="published"[ title="(#DATE|date_iso)"]>[(#DATE|affdate_jourcourt)]</abbr>[, <:par_auteur:> (#LESAUTEURS|supprimer_tags)]</small>
  6.                         [<div class="#EDIT{intro} introduction entry-content">(#INTRODUCTION)</div>]
  7.                 </li>
  8.                 </BOUCLE_articles>

Télécharger


Pour afficher tant les articles "publiés" que les "proposés", il suffit de modifier la boucle BOUCLE_articles pour rajouter un critère <BOUCLE_articles(ARTICLES) .... {statut IN #LISTE{publie,prop} }> [15]

Et, puisqu’on sélection des articles publiés ou proposés, cela serait sympa d’afficher l’icône de statut d’article : justement, il suffit d’une ligne SPIP pour ce faire :
[(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE}) ] : facile !

Enfin, le lien d’appel-consultation des articles #URL_ARTICLE utilisé ci-dessus n’est applicable qu’à un article "publié" ; si nous voulons aussi fournir un lien valide pour les rédacteurs (et administrateurs) habilités à modifier l’article —parce qu’ils en sont "auteur"— il faut dans ce cas faire appel à une URL vers l’espace privé [16] ! Dans ce cas, au lieu d’appeler #URL_ARTICLE, il faut appeler [#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE}].

Pour intégrer plus complètement cet appel dans le squelette, nous allons utiliser [#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE}(#AUTORISER{edter,article,#ID_ARTICLE})]})], la clause complémentaire e balise#AUTORISER contrôlant le droit de l’auteur connecté dans cette session à éditer cet article [17].

Bon, il resterait encore une amélioration à apporter (mais elle ne semble pas possible si simplement à ma connaissance,), ce serait qu’a l’enregistrement de la page modifiée, le retour se fasse à la page d’origine du public (avec un paramètre du genre #URL_PAGE=#SELF .... à voir si !), sans oublier le cas d’un blocage de SPIP (erreur de connexion ou "erreur technique" : cela arrive ;-) !

Bien, on met au point cette noisette dans le ./inclure/recents.html qui a été recopié dans le dossier ./squelettes/ par usage du plugin rubrique 884,...... (à vos tests), et il n’y a plus qu’a en généraliser l’usage !...

Pour cela, on transforme la noisette en un "modèle SPIP " que l’on va appeler article_appel : c’est tres compliqué = copiez le code correspondant dans un fichier ./modeles/article_appel.html :

  1. [ modèle d'appel d'une URL d'article pour modification optionnelle dans l'espace public (#REM) ]
  2.                 <BOUCLE_article_appel(ARTICLES) {id_article}{statut IN #LISTE{publie,prop} }>
  3.                 <li dir="#LANG_DIR" class="hentry clearfix text-#LANG_LEFT">
  4.           [ (#STATUT|=={publie}|?{
  5.                         [(#LOGO_ARTICLE_RUBRIQUE{#URL_ARTICLE}|image_reduire{150,*})] ,
  6.                         [(#LOGO_ARTICLE_RUBRIQUE{#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE}}|image_reduire{150,*})]
  7.            }) ][<div class="#EDIT{surtitre} surtitre entry-content">(#SURTITRE)</div>]
  8.                         <h3 class="h2 entry-title">[(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE}) ]<a href="[(#STATUT|=={publie}|?{#URL_ARTICLE,[#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE}(#AUTORISER{edter,article,#ID_ARTICLE})]})]" rel="bookmark">#TITRE</a></h3>
  9.                         [<div class="#EDIT{soustitre} soustitre entry-content">(#SOUSTITRE)</div>]
  10.             <small><abbr class="published"[ title="(#DATE|date_iso)"]>[(#DATE|affdate_jourcourt)]</abbr>[, <:par_auteur:> (#LESAUTEURS|supprimer_tags)]</small>
  11.                         [<div class="#EDIT{intro} introduction entry-content">(#INTRODUCTION)</div>]
  12.                 </li>
  13.                 </BOUCLE_article_appel>

Télécharger

Il reste juste à faire un ’Recherche et Remplace’ dans les squelettes....en remplaçant le bloc d’appel par
[(#MODELE{article_appel, id_article=#ID_ARTICLE}|)], dans les fichiers identifiés...

Quelques CSS complémentaires

Pour faciliter l’identification des champs de saisie sur fond blanc, l’idée est de faire mieux ressortir ces zones, en leur attribuant un fonds de couleur ; ici on choisit un fond jaune... [18] ; l’instruction CSS à utiliser est justement :

  1. /* colorer le fond des champs de saisie */
  2. .formulaire_spip input {background-color: yellow;}

Télécharger

(à rajouter aussi dans ./squelettes/css/perso.css)
Personnellement je préfère .formulaire_spip input {background-color:#FFFF99;} plus pâle..

Les rédacteurs apprécieront peut-être de retrouver cette personnalisation CSS dans l’espace privé : mais pour ajouter automatiquement la référence à une feuille de style perso_prive.css pour l’espace privé de SPIP, il semble qu’il me faille encore rajouter une "bidouille" dans le mes_options.php : ajouter =

  1. // ajout d'une feuille CSS perso_prive aux squelettes du privé Z (spip 3-4.x)
  2. // ?? à moins que cette option soit intégrée dans SPIP 4.1 ??
  3. // Header prive
  4. $GLOBALS['spip_pipeline']['header_prive'] .= "|header_prive_perso";
  5.  
  6. function header_prive_perso($flux) {
  7.     return $flux .= '  
  8.         <link rel="stylesheet" type="text/css" href="'
  9.             .find_in_path('css/prive_perso.css').'" media="all" />';
  10. }

Télécharger

L’autre solution serait de rajouter la ligne SPIP correspondante (soit :

  1. <!-- inclusion d'une CSS  prive_perso.css  dans le privé ( ..prive/squelettes\inclure/head.html ) -->
  2. [<link rel="stylesheet" href="(#CHEMIN{css/prive_perso.css}|direction_css)" type="text/css" />]

Télécharger

dans une copie du fichier ./prive/squelettes/inclure/head.html à copier modifiée dans ./squelettes/prive/squelettes/inclure/head.html (ou ./prive/squelettes/head/dist.html) appelant les styles Z du privé... ->
Voir aussi : https://programmer.spip.net/ Personnaliser les CSS de l’espace prive

Voilà ! On arrête les modifications à ce point....dense !


Je Remercie Loiseau2nuit qui a pris le temps d’une relecture complète de cet article, et suggéré et réalisé plusieurs correction de la rédaction initial !


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1Rappelons que nous avons déjà prévu d’interdire tout accès public à l’ensemble de cet Intranet Web, ce qui protège ces informations personnelles ; néanmoins, et selon les préconisations de la CNIL, l’accès à un système comportant de telles informations nécessite le respect du RGPD et la signature individuelle d’une Charte Informatique par chaque personne habilitée à consulter le site, puisque ce système comporte des renseignements d’identification personnelle.

[2Le statut administrateur a pratiquement tous les droits sur le contenu (articles) et sa validation, ainsi que sur les autorisations d’auteurs

[3Un rédacteur n’est autorisé qu’à des modifications visibles uniquement dans l’espace privé : rédiger et proposer des articles, ou commenter les articles de collègues, mais pas les amender en standard.

[4Ce statut visiteur permet une identification de visiteurs inscrits dans le SPIP, habilités uniquement à consulter l’espace public SPIP.

[5Rappelons qu’un article "en-cours de rédaction" n’est visible que par son auteur initial[[SPIP attribue automatiquement l’auteur initial à l’article lors de sa création, imposant aussi de choisir sa rubrique d’affectation, qui pourra être modifiée par l’Administrateur avant publication..

[6Voir Utiliser les Modèles de SPIP.

[7Nul doute que cette option ( ajouter automatiquement des auteurs-rédacteurs aptes à modifier un article en-cours de rédaction ou proposé serait fort facile à ajouter, par exemple à partir du plugin rubrique 179, mais je ne m’y suis pas lancé.

[8Pour adjoindre un secteur de rédaction libre Wiki, il aurait suffit d’implanter et configurer le plugin article 2077, voire de rajouter ensuite ses Rubriques aux zones d’accès Restreint.

[9Ainsi, les annonces et OdJ des réunions seront publiées sur le site, et pourraient être regroupées dans un agenda SPIP, automatiquement affiché.

[10En l’occurrence, pour gérer des participations aux réunions et activités, il faut rajouter les Plugins http://contrib.spip.net/rubrique184 et http://contrib.spip.net/4459 : voir aussi d’autres possibilités (qui ne s’applique en espace public QUE aux articles publiés) dans la rubrique https://contrib.spip.net/Calendrier... de ->https://contrib.spip.net..

[11Si vous voulez gérer vos trousseaux de clés, vous auriez la possibilité de créer avec la Fabrique un plugin pour définir un objet éditorial nouveau "Clé"....plus tard peut-être

[12Pareil, pour faire les choses bien, cette Charte Informatique est bien sûr disponible comme un Article, ou mieux une Page unique sur le site... et sortie de l’Intranet, pour pouvoir être consultée et acquittée avant inscription comme auteur !

[13Pouvoir définir des zones d’rubrique 179 comme "tous les auteurs des zones ....." serait une grande facilité, à condition que cette inclusion ensembliste soit dynamique, c’est-à-dire suive automatiquement toute modification d’un auteur dans l’une des zones sources !

[14En l’occurrence, j’ai découvert par hasard lors de la présentation de cet Intranet à un nouvel animateur, que je n’avais plus de protection sur certaines rubriques !!? Perte de paramétrage, ou plus probablement erreur du webmestre...

[15Bon d’accord, cela ne s’invente pas ; enfin si ! Voir SPIP Astuces courtes #Arrays !

[16L’espace "privé" en SPIP désigne l’interface d’édition, le back-office, qui n’est actuellement pas intégré à l’espace public de SPIP, au contraire de WordPress, justement recommandé dans mon association-cible pour son ergonomie ! Un comble pour des spipeurs ;-)

[17La compréhension du systèmes des Autorisations Dans Spip déborde du champ expliqué dans cet article...

[18Une autre solution plus "flashy" ;-) serait avec https://forums.commentcamarche.net/... (en JavaScript) !


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 12 janvier 2023, et actualisé en août 2024 .

Répondre à cet article