Vous avez aimé What does the fox say? Vous aimerez encore plus celle-ci!

La nouvelle version d’Ubuntu, la 13.10 Saucy Salamander, est disponible au téléchargement!

Une nouvelle version de Wordpress est en préparation. Apparemment elle devrait sortir la semaine prochaine.

Alors, qu’il y a-t-il de nouveau dans cette version? Et bien, pas grand chose… Mais c’est pas mal quand-même!

Dorénavant, Wordpress téléchargera et appliquera automatiquement les mises à jour en tâche de fond. Il s’agira des mises à jour mineures et de sécurité, ce qui ne devrait pas poser de problème à la plupart des utilisateurs.

Se rapprocherait-on d’un monde où tous les sites Wordpress seraient à jours? Pas sûr, mais en tout cas c’est un pas dans la bonne direction!

Le client

Aujourd’hui je me suis retrouvé face à un problème extrêmement intéressant! Un client m’a contacté car il rencontrait un problème étrange… “La sauvegarde des menus ne fonctionnent plus dans l’administration !” me dit-il sur un ton qui sous-entend que j’ai encore fait quelque chose que je n’aurais pas dû (non non, promis, c’est pas moi!).

Constatation du problème

Après investigation, j’ai constaté que la sauvegarde fonctionnait pour les entrées existantes du menu, mais que Wordpress refusait obstinément de sauvegarder les nouvelles entrées. Cela ressemble étrangement à une limite de Wordpress, genre “Wordpress a décidé que vous ne pouvez pas avoir plus de 70 entrées dans un menu”.

Que se passe-t-il lorsque vous devez écrire un backend avec un nombre conséquent de contrôleurs dont l’affichage des résultats est paginé? Plusieurs possibilités:

  • Vous dupliquez votre code dans chaque contrôlleur, que ce soit via l’attribut $paginate du contrôleur, ou directement dans l’action
  • Ou bien vous paramétrez votre attribut $paginate directement dans l’AppController

La première solution ressemblera à ceci:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class postsController extends AppController {

    public $paginate = array(
        'limit' => 25,
        'order' => array( 'id' => 'asc' )
    );

    // la suite du code...
}

class commentsController extends AppController {

    public $paginate = array(
        'limit' => 25,
        'order' => array( 'id' => 'asc' )
    );

    // la suite du code...
}

Solution pas vraiment élégante, car si le client décide de changer le nombre de résultats par page, on est bon pour modifier tous les contrôleurs utilisant la pagination dans leurs résultats.

Dernièrement, j’ai eu à travailler sur un projet dont une des conditions du cahier des charges était de ne pas effacer les données présentes dans la base de données (excepté pour quelques tables…). À la place, le système devait changer l’état d’un champ de l’enregistrement qui indiquait au système qu’il ne devait plus le prendre en compte (pour info, le nom de ce champ était is_activated).

Code review

Javascript est langage de programmation parfois pas piqué des vers! Des choses censées être relativement simples peuvent vite devenir relativement compliquées!

Un exemple… Dernièrement j’étais en train d’écrire un plugin pour jQuery, et il me fallait être certain que la variable sur laquelle j’allais travailler était bien un tableau (array). En PHP, rien de plus facile! Un petit is_array() et en avant, on peut se concentrer sur la suite du code…

En Javascript par contre, que nenni! Il n’y a pas de fonction is_array()

Wordpress, une plateforme puissante et dynamique? Par pour tout le monde manifestement!

Dernièrement, des milliers de sites internet tournant sous Wordpress ont été la proie de bots qui tentaient de se connecter en tant qu’utilisateur admin via une attaque par force brute.

Ayant quelques sites clients tournant sous Wordpress, je me suis évidemment intéressé à la question et j’ai illico presto installé des plugins pour renforcer la sécurité des systèmes. Toutes ces solutions étaient plus ou moins compliquées, alors que dans mon esprit, la solution est plutôt simple (il est fort possible que mon raisonnement soit faux évidemment, je ne suis pas un expert en sécurité…).