var Phenix = function () {
Troll du Web depuis 1996

SPIP

Truc et astuce autour du CMS SPIP. Je travail depuis 2012 avec ce CMS dont j’apprécie l’ouverture et la communauté.

Éxecuter du code quand une commande est payée

Lorsque l’on utilise le plugin commande et que l’on souhaite exécuter une peu de code lorsqu’une commande est payée, il suffit d’utiliser ce petit pipeline :

  1. function prefixe_post_edition($flux) {
  2. if ($flux['args']['table'] == table_objet_sql('commande')
  3. and $flux['args']['action'] == 'instituer'
  4. and $flux['args']['statut_ancien'] == 'encours'
  5. and $flux['data']['statut'] == 'paye'
  6. ) {
  7. $id_commande = $flux['args']['id_objet'];
  8. // Coder ici
  9. }
  10. return $flux;
  11. }

Ajouter un nouveau type d’auteur à #SPIP

Dans le fichier config/mes_options.php :

  1. <?php
  2. $GLOBALS['liste_des_statuts']['inscrit'] = 'inscrit';
  3.  
  4. // Placer la corbeille à la fin du tableau
  5. $backup_corbeille = $GLOBALS['liste_des_statuts']['texte_statut_poubelle'];
  6. unset($GLOBALS['liste_des_statuts']['texte_statut_poubelle']);
  7. $GLOBALS['liste_des_statuts']['texte_statut_poubelle'] = $backup_corbeille;

La clé du tableau $GLOBALS[’liste_des_statuts’] sert également de chaîne de langue pour traduire le statut.
La valeur sera quand à elle enregistrée dans la base de donnée comme statut d’auteur.

Il y a aussi la constante AUTEURS_MIN_REDAC qui détermine si le statut fait partie des des visiteurs ou non.

  1. <?php
  2. define('AUTEURS_MIN_REDAC', "0minirezo,1comite,5poubelle");

Exectuer du code quand un auteur est ajouté à #SPIP

Lorsqu’on ajoute un auteur, on a parfois envie d’automatiser certaine action : ajout automatique dans une zone d’accès restreint, ajout de mots-clés, ou tout simplement envoyer un mail.

Du coup, voici un pipeline qui fera le travail ! Il pourrait y avoir un effet indésirable cependant : lorsqu’un auteur est ressuscité de la corbeille, le pipeline se déclenche à nouveau.
Si c’est un problème, le pipeline post_insertion peut aussi être utilisé. Il contient cependant beaucoup moins d’information que post_edition.

  1. <?php
  2. function prefix_post_edition($flux) {
  3. if ($flux['args']['table'] == table_objet_sql('auteur')
  4. and $flux['args']['action'] == 'instituer'
  5. and $flux['args']['statut_ancien'] == '5poubelle'
  6. ) {
  7. $id_auteur = $flux['args']['id_objet'];
  8. $statut = $flux['data']['statut'];
  9. // Coder ici !
  10. }
  11.  
  12. return $flux;
  13. }

Une fonction bash pour chercher dans les fichiers de langue #SPIP

Une petite fonction bash qui va chercher dans les fichiers de langue de SPIP après un mot en particulier.
Toujours pratique pour ne pas déclarer 10 fois la même chaîne de langue.

Il suffit d’ajouter ceci dans votre fichier .bashrc.

  1. # Recherche dans les fichiers de langue SPIP
  2. search_spip_lang () {
  3. LANG=${2:-"fr"} # On cherche par défaut dans le français. Mais le deuxième paramètre est la langue
  4. ag -G "lang/(.*)_$LANG.php" -- "$1" .
  5. }

Un second paramètre peut être utiliser pour chercher dans une langue précise (sinon, il cherche en français).

Exemple :

Recherche en français du mot « spip ».

  1. search_spip_lang spip

Recherche en anglais du mot « spip ».

  1. search_spip_lang spip en

Ici j’utilise la commande ag pour chercher dans les fichiers. Il suffit de l’installer :

  1. sudo apt install silversearcher-ag

Ack pourrait sans doute aussi faire le travail, mais ag est plus rapide :)


Executer du code lorsqu’un article #SPIP est publié

Petit pipeline SPIP cool : quand un article SPIP est publié, on exécute le code.

Pratique par exemple pour envoyer une notification spéciale.

  1. <?php
  2. function prefix_post_edition($flux) {
  3. if ($flux['args']['table'] == table_objet_sql('article')
  4. and $flux['args']['action'] == 'instituer'
  5. and $flux['args']['statut_ancien'] != 'publie'
  6. and $flux['data']['statut'] == 'publie'
  7. ) {
  8. $id_article = $flux['args']['id_objet'];
  9. // Coder ici !
  10. }