var Phenix = function () {

Troll du Web depuis 1996

Supprimer complètement un fichier d’un dépôt git

Cela arrive de temps en temps, sur une application qu’on connait mal ou qu’on a pas conçue : on fait un dépôt git, le git ignore, et on oublie un fichier de configuration avec des password dedans.

Et bien sur, manque de pot, vous avez déjà tout envoyer dans un dépôt public Github. Vraiment, c’est pas votre journée...

Bref, il existe une petite astuce pour supprimer un fichier de tout les commits du dépôt. C’est un peu lent, car il va réécrire chaque commit que vous avez fait sur le projet.

  1. git filter-branch --tree-filter 'rm filename' HEAD

Après il faut utiliser git push -f pour réécrire le dépôt en ligne. Généralement, on évite cette opération, mais dans le cas d’un fichier avec des codes d’accès, c’est un moindre mal.
Et bien entendu, cela ne vous dispense pas de changer le password en question !

Voir en ligne : Permanently remove files and folders from Git repo

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. }

Autoriser un auteur s’il est présent dans la zone d’une rubrique #SPIP (acces restreint)

Une petite fonction d’autorisation sympas : autoriser un auteur (peu importe son statut) à publier dans une rubrique, s’il est dans la zone de cette rubrique. :

  1. <?php
  2. function autoriser_accesrestreint_publiedans($faire, $type, $id, $qui, $opt) {
  3. include_spip('accesrestreint_fonctions');
  4. // On récupère les zones de la rubrique
  5. $zones = accesrestreint_zones_rubrique_et_hierarchie($id);
  6. foreach ($zones as $zone) {
  7. // Est-ce que l'auteur appartient à la zone ?
  8. if (accesrestreint_acces_zone($zone, $qui['id_auteur'])) {
  9. return true;
  10. }
  11. }
  12.  
  13. return false;
  14. }

Ensuite, on peut surcharger les autorisations de SPIP pour qu’elles tiennent compte de cette fonction :

  1. <?php
  2. /**
  3.  * Surcharge de l'autorisation de publication dans les rubriques. On va prendre
  4.  * en compte l'accès restreint. Si un auteur est dans la zone de la rubrique, on
  5.  * l'autorise à publier
  6.  */
  7. function autoriser_rubrique_publierdans($faire, $type, $id, $qui, $opt) {
  8. if (autoriser('publiedans', 'accesrestreint', $id, $qui, $opt)) {
  9. return true;
  10. }
  11.  
  12. return autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt);
  13. }
  14.  
  15. /**
  16.  * Surcharge de l'autorisation de création d'article pour prendre en compte
  17.  * l'autorisation d'accesrestreint
  18.  */
  19. function autoriser_rubrique_creerarticledans($faire, $type, $id, $qui, $opt) {
  20.  
  21. if (autoriser('publiedans', 'accesrestreint', $id, $qui, $opt)) {
  22. return true;
  23. }
  24.  
  25. return autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt);
  26. }