Carnet Wiki

Gestion des Statuts

La gestion des statuts des objets editoriaux est simplifiée en SPIP 3 :
-  declaration autonome pour chaque objet editorial
-  gestion des libellés et images associés automatisée

Deux champssont gérés dans presque tous les objets éditoriaux : statut et maj :
-  maj enregistre automatiquement la dernière date de modification
-  statut est utilisé implicitement dans toutes les boucles de publication de l’espace public

C’est le champ statut qu’on étudie ici.
Attention les auteurs ont une gestion de statut spécifique (qui ne sera pas étudiée ici ) !

Statuts de publication

Par défaut, tous les objets éditoriaux de SPIP disposent d’un champ texte statut, d’origine historique, qui sert à contrôler la publication des éléments sur le site public, mais également à piloter le work-flow interne de SPIP.

Les valeurs par défaut [1] sont successivement :
-  prepa
-  prop
-  publie
-  refuse
-  poubelle (ou poub ? )

Elles sont enregistrées dans la déclaration de tables SQL des objets connus de SPIP, avec la déclaration des libellés et images correspondantes.

Comment ajouter un nouveau statut ?

-  Doc pour SPIP 2 : http://marcimat.magraine.net/Statut....
-  Doc pour SPIP 3 : API editer_objet.

Il suffit de rajouter une ligne à la définition de votre objet éditorial, dans le sous-tableau de declarer_tables_objets_sql, tel que créé dans le sous-dossier ./base/ qui contient la définition de votre nouvelle table ;
par exemple :

'statut_textes_instituer' => array(
	'prepa'    => 'texte_statut_en_cours_redaction',
	'prop'     => 'texte_statut_propose_evaluation',
	'publie'   => 'texte_statut_publie',
	'refuse'   => 'texte_statut_refuse',
	'poubelle' => 'texte_statut_poubelle',
	'pourvu' => 'texte_statut_pourvue'
),

Et votre nouveau statut est automatiquement disponible dans le bloc de modification des status (le bloc « info » dans la page d’affichage en espace privé de l’objet).

’texte_statut_pourvue’ étant la référence d’une chaîne de langue, il faut également définir la chaîne dans un fichier de langue.

Si l’objet concerné est monobjet, un objet que vous avez défini dans un plugin, alors vous pourrez définir la chaîne dans le fichier de langue dédié à cet objet lang/monobjet_fr.php. Pour que SPIP puisse y accéder, il faut alors, dans la déclaration du statut pour statut_textes_instituer, préfixer le nom de la chaîne par le nom du module :

'pourvu' => 'monobjet:texte_statut_pourvue'

Icone du statut
Si vous voulez créer une mini-image-icone pour ce nouveau statut (dans ./prive/themes/spip/images/, de nom puce-nouveau_statut-8.png ), votre image est automatiquement récupérée et disponible.... [2].

Si cette methode ne fonctionne pas, vous pouvez forcer la definition des puces comme ceci :

 'statut_images' => array(
	'prepa'    => '../prive/themes/spip/images/puce-preparer-8.png',
	'prop'     => '../prive/themes/spip/images/puce-proposer-8.png',
	'publie'   => '../prive/themes/spip/images/puce-publier-8.png',
	'refuse'   => '../prive/themes/spip/images/puce-refuser-8.png',
	'poubelle' => '../prive/themes/spip/images/puce-supprimer-8.png',
	'pourvu' => '../prive/themes/spip/images/puce-pourvu-8.png',
)

Il est recommandé, dans le cadre d’un plugin, d’avoir votre nouvelle puce dans le repertoire du plugin et de pointer vers ce fichier, ce qui evite la perte de la puce lors d’une mise a jour de SPIP.

Il ne vous restera plus qu’a utiliser ce statut supplémentaire dans vos boucles de sélection dans vos squelettes....

A tester : Pour mieux intégrer les affichages implicites de SPIP, il est même possible de redéfinir quelques utilisations prédéfinies, de la même façon :

'statut'=> 
array(
	array(
		'champ'     => 'statut',
		'publie'    => 'publie,pourvu',
		'previsu'   => 'publie,prop,prepa,pourvu',
		'post_date' => 'date', 
		'exception' => array('statut','tout')
	),

Le champs post_date sert à gérer la post-publication (doit-on afficher l’objet dans le futur), penser donc à que le champs indiqué existe bien (« date », ou « date_publication », ...)

A venir : une balise #STATUT_ICON
En réflexion, la possibilité d’ajouter une nouvelle balise générique, qui se chargera d’afficher (dans l’espace public) la mini-icône descriptive de l’etat (comme dans le privé).
Pour information, la ligne courante utilisée (en SPIP 3 : par exemple ./prive/objets/liste/articles[25]..) est <td class='statut'>[(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE})]<td> ; pour avoir la puce affichée (et sa légende) en fin de ligne, vous recopiez ce code, que vous collez à la fin de votre libellé #TITRE : exemple :

<B_articles>
 <ul class="spip">
   <BOUCLE_articles(ARTICLES) {id_rubrique} {par num titre}{!par date}{tout}>
           <li [class=(#STATUT|!={publie})"art_a_verifier"]>
                <a href="#URL_ARTICLE" [title="(#INTRODUCTION|textebrut)"]>
		 #TITRE</a>
		 <span class='statut'>[ (#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE})]<span></li>
   </BOUCLE_articles>
 </ul>
 </B_articles>

De façon analogue, vous pouvez rajouter le logo par[<span class='logo'>(#LOGO_RUBRIQUE|image_reduire{20})</span>]

Et pour gérer le work-flow !

La modification de statut doit être traitée par action/editer_objet.php [  ] objet_instituer() ; mais elle peut être suppléée par action/editer_xxx.php [] xxx_instituer()...

Pour personnaliser les traitements aux changements d’etats, il vous faut donc aussi créer un ./action/editer_xxx.php dans lequel vous créerez les fonctions :
-  xxx_modifier($objet, $id, $set)
-  xxxx_instituer($objet, $id, $set)

Dans lesquelles vous définissez les étapes et traitements complémentaires voulus (avant d’appeler éventuellement directement la fonction d’origine : objet_modifier($objet, $id, $set) standard !


Pour un modèle de Work-Flow ?

Pour gérer un modèle de work-flow plus complet, mais qui s’intègre bien dans l’espace privé de SPIP, j’avais autrefois [3] pensé à utiliser un changement de rubriques à chaque validation ; mais cela implique aussi de changer les auteurs, et/ou d’utiliser les administrateurs restreints [4].
Les découvertes exposées dans cet article m’orientent, pour une meme problématique, vers un traitement post-fixé d’après la gestion des statuts, avec peut-etre une utilisation des options dans les autorisations (à suivre)...

[2Enfin, à l’exception d’un bug à mon premier essai.... à confirmer !!

[3SPIP 2 !

[4les autorisations n’étaient pas très documentées à cette époque, à part http://www.spip.net/fr_article3896.html, d’où la rédaction de Autorisations Dans Spip... voir maintenant http://www.spip.net/fr_article5528.html et http://programmer.spip.net/autoriser ...

YannX - Mise à jour :3 janvier 2024 à 12h47min