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

Web dev

Truc, astuces et tuto sur le CMS SPIP ou sur le développement web en général.

Des rédacteurs restreints dans #SPIP

Chacun sa rubrique !

Il est possible d’améliorer un peu la gestion des utilisateurs de SPIP. Dans cet exemple, on va :

- Pouvoir restreindre un rédacteur à une ou plusieurs rubriques. C’est similaire au administrateur restreint.
- Limiter la création d’article par les administrateurs/rédacteurs restreints à leur rubrique uniquement.
C’est assez pratique si vous n’avez pas envie que des articles soit poster n’importe ou sur le site.

On commence par permettre de lier aussi les rédacteurs à une rubrique, il faut placer ce code dans le fichier config/mes_options.php :

  1. <?php
  2. define('_STATUT_AUTEUR_RUBRIQUE', '0minirezo,1comite');

Ensuite on ajoute la vérification des accès restreints dans l’autorisation a créé des articles dans une rubrique.
Attention, c’est une surcharge de fonction, cela veut dire qu’elle va remplacer celle du core de SPIP.

Il faut mettre ce code dans un fichier de fonction (mes_fonctions.php par exemple).

  1. <?php
  2. /**
  3.  * Autorisation de créer un article dans une rubrique $id
  4.  *
  5.  * Il faut pouvoir voir la rubrique et pouvoir créer un article…
  6.  *
  7.  * @param  string $faire Action demandée
  8.  * @param  string $type Type d'objet sur lequel appliquer l'action
  9.  * @param  int $id Identifiant de l'objet
  10.  * @param  array $qui Description de l'auteur demandant l'autorisation
  11.  * @param  array $opt Options de cette autorisation
  12.  * @return bool          true s'il a le droit, false sinon
  13.  **/
  14. function autoriser_rubrique_creerarticledans($faire, $type, $id, $qui, $opt) {
  15.         return
  16.                 $id
  17.                 and autoriser('voir', 'rubrique', $id)
  18.                 and autoriser('creer', 'article')
  19.  
  20.                 // Vérifier l'accès restreint avant d'autoriser la publication
  21.                 and (
  22.                          !$qui['restreint'] or !$id
  23.                          or in_array($id, $qui['restreint'])
  24.                  );
  25. }

Executer du code lorsqu’un utilisateur ce connecte sous SPIP

J’avais besoin d’exécuter un peu de code lorsqu’un utilisateur ce connecte à SPIP. Il y a un moyen assez simple de le faire : dans le traiter du formulaire login.

La connexion de l’utilisateur ce fait dans la partie vérifier du formulaire CVT. Cela veut dire que la session a été créé.

  1. function prefix_formulaire_traiter($flux) {
  2.  
  3.         if ($flux['args']['form'] == 'login') {
  4.                 // Coder ici
  5.         }
  6.  
  7.         return $flux;
  8. }

Bien entendu je préfèrerai avoir un pipeline post_login, ce serai plus simple et plus lisible dans le code.
Cela viendra peut-être avec SPIP 3.2 !


Executer du code lorsqu’un inscription est validée sous SPIP

Ou comment avoir un pipeline post_inscription

Dans SPIP, il n’y a pas de pipeline post_inscription. Difficile donc d’exécuter facilement du code lorsque l’inscription est validé par l’utilisateur. Cela va peut être changé avec SPIP 3.2.

En attendant, voici un bricolage avec le pipeline post_edition :

  1. function prefix_post_edition($flux) {
  2.  
  3.     // Confirmation d'une inscription
  4.     if ($flux['args']['table'] == 'spip_auteurs'
  5.         and $flux['args']['statut_ancien'] == 'nouveau'
  6.         and $flux['args']['action'] == 'instituer'
  7.         and $flux['data']['statut'] == '6forum' ) { // Limité aux visiteurs
  8.         $id_auteur = $flux['args']['id_objet'];
  9.         // Faire des trucs ici.
  10.     }
  11.  
  12.     return $flux;
  13. }

Activer un thème Wordpress enfant sans perdre la configuration du thème parent

Quand on active un thème Wordpress enfant, après avoir configuré le thème parent, on perd soudainement la configuration.
C’est relativement agaçant, Wordpress devrait faire une fusion des deux configurations et non pas ignorer la configuration du thème parent.

En attendant que les développeurs de Wordpress ce réveil, il est possible de dupliquer la configuration.
Il faut chercher dans la table wp_options la valeur :

theme_mods_NomDuTheme

Et copier le contenu (un tableau sérialisé) dans la valeur :

theme_mods_NomDuThemeEnfant

Cela évite d’avoir à tout refaire, mais franchement, faut le savoir !


Afficher le fichier template utilisé par Wordpress

Souvent, quand on récupère le Wordpress d’un client avec 1 zillions de plugins et un thème « premium theme forest », c’est souvent la merde pour savoir quel fichier édités pour ajouter le bouton de partage Facebook.

Wordpress, dans un soucis d’épurer le code, ne possède pas de méthode « mode inclure » comme SPIP, c’est bien dommage.

Heureusement, on peut en bricoler un dans function.php :

  1. <?php
  2. add_action('wp_head', 'show_template');
  3. function show_template() {
  4.         global $template;
  5.         print_r($template);
  6. }

Cela va afficher le fichier template utilisé par Wordpress dans l’en-tête de toutes les pages du site.

C’est pas la panacée mais ça aide un peu.

Voir en ligne : Which template page is being used ?