Compte rendu : Drink & Drupal Toulouse décembre 2013

Hier soir, j’ai fait une présentation de Drupal Commons 3.5 lors du Drink & Drupal à la cantine à Toulouse.

Je mettrais les slides en ligne bientôt.

DrinknDrupal1

Ambiance très sympa.

Nous en avons profité pour faire un petit test rapide de « talky.io« , une plateforme dont le code est en partie Open Source de webconférence basée sur WebRTC.

C’était assez fun de passer en webcam alors qu’on était tous dans la même pièce. Ceci dit, tout le monde a été d’accord sur l’intérêt d’intégrer cette technologie (ou une autre telle que Google Hangout – avec l’avantage que la session se retrouve archivée pour le public) lors des prochaines présentations, de sorte que d’autres puissent être de la partie, même s’ils sont loin ou indisponibles.…

Read more

Méthodologie d’audit d’un site Drupal

Éléments à fournir pour l’audit du code :

  • fichiers sources du site

  • base de données du site

  • documentation fonctionnelle et technique

Démarche suivie :

Afin d’obtenir une vue d’ensemble du site, les étapes suivantes ont été observées :

  1. Recherche de la présence d’erreurs critiques remontées par les différents logs.

  2. Étude des modules coeur et contributeurs activés, recherche de hacks dans leurs fichiers.

  3. Examen du code des modules développés spécifiquement

  4. Examen du theme du site

Détails des contrôles effectués lors de ces étapes :

  • contrôle du rapport général de Drupal

  • contrôle du watchdog de Drupal

  • différentiel entre les fichiers du coeur de Drupal et le coeur du site à versions égales (annexe diff-modules-core)

  • différentiel entre les fichiers des modules contributeurs de Drupal et ceux du site à versions égales (annexe diff-modules-contrib)

  • utilisation du module drupal « hacked » pour recouper les informations avec les résultats des différentiels (voir annexe rapport-hacked)

  • examen des hacks détectés par les différentiels et de leur impact sur le site

  • vérification des modules activés et non-activés (voir stats)

  • vérification manuelle du code custom, combiné avec une vérification avec le module « coder »

  • examen du theme du site (voir annexe templates-pages)

En cas de mauvaises pratiques http://drupal.org/best-practices/do-not-hack-core il faut en évaluer les implications.…

Read more

Evolution de la complexité cyclomatique de Drupal 4 à 8

Voici les données brutes, l’analyse viendra plus tard.

Je les aies obtenues avec la commande suivante (en paramètre je passe le n° de version de Drupal :

phploc "drupal$1" --log-csv="~/drupal-analisys/d$1loc3.csv" --names="*.php,*.inc,*.module,*.yml"
Drupal 4 Drupal 5 Drupal 6 Drupal 7 Drupal 8
Directories 7 37 40 88 1 474
Files 73 83 179 382 6 025
Lines of Code (LOC) 39 397 46 223 71 710 207 763 812 817
Cyclomatic Complexity / Lines of Code 0,45 0,45 0,46 0,42 0,22
Comment Lines of Code (CLOC) 9 261 11 631 22 255 70 845 278 700
Non-Comment Lines of Code (NCLOC) 30 136 34 592 49 455 136 918 534 117
Logical Lines of Code (LLOC) 10 808 12 112 17 086 33 566 174 481
Namespaces 0 0 0 3 1 110
Interfaces 0 0 0 16 498
Traits 0 0 0 0 10
Classes 0 0 1 110 5 223
Abstract Classes 0 0 0 10 340
Concrete Classes 0 0 1 100 4 883
Average Class Length (LLOC) 0,00 0,00 57,00 40,04 26,33
Methods 0 0 4 1 042 28 246
Non-Static Methods 0 0 4 993 25 711
Static Methods 0 0 0 49 2 535
Public Methods 0 0 4 797 22 438
Non-Public Methods 0 0 0 245 5 808
Average Method Length (LLOC) 0,00 0,00 14,25 4,23 4,87
Cyclomatic Complexity / Number of Methods 0,00 0,00 5,25 2,64 2,06
Functions 1 337 1 468 2 024 4 211 3 957
Named Functions 1 337 1 468 2 024 4 211 3 568
Anonymous Functions 0 0 0 0 389
Constants 91 110 165 267 837
Global Constants 91 110 165 258 71
Class Constants 0 0 0 9 766
Attribute Accesses 2 617 2 905 3 849 7 361 50 386
Non-Static Attribute Accesses 2 617 2 905 3 849 7 294 49 357
Static Attribute Accesses 0 0 0 67 1 029
Method Calls 1 0 1 6 795 103 543
Non-Static Method Calls 1 0 1 6 636 95 186
Static Method Calls 0 0 0 159 8 357
Global Accesses 1 067 1 183 1 483 2 846 1 481
Global Variable Accesses 263 222 252 355 447
Super-Global Variable Accesses 230 229 277 426 294
Global Constant Accesses 574 732 954 2 065 740
Test Classes 0 0 0 0 0
Test Methods 0 0 0 0 0
Read more

Quelle version de Drupal est supportée + gestion de la compatibilité ascendante ?

Pour un DSI, un site se gère sur la longueur. Il doit minimiser le fardeau de la maintenance et des évolutions tout en assurant sa pérennité maximale.

Deux problématiques principaux se posent à lui par rapport au cycle de vie du produit qu’il à choisi : les corrections de bug et les mises à jour de sécurité d’une part et la gestion de la compatibilité ascendante d’autre part.

Pour Drupal la politique est la suivante. Les  nouvelles releases sont numérotés par 2 chiffres : une version majeure, et une version mineure.…

Read more

Drupal, histoire et part de marchés

Quelques dates clés :

  • 1999 : Dries Buytaert commence à travailler sur ce qui deviendra Drupal.
  • 2001 : C’est en janvier 2001 que le site Drupal.org est mis en ligne et que le code de Drupal est mis à disposition.
  • 2005 : avec la version 4.5, Drupal commence à faire effet boule de neige et à attirer de plus en plus de monde dans sa communauté (multiplication des conférences et sprints de code).
  • 2008 : Drupal commence à s’imposer en entreprise avec sa version 6 grâce la réputation de son code « developer friendly » et grâce à ses awards en tant que meilleur CMS.
Read more

Comparatif Drupal 7 et 8 : page hello world

Voici les différences entre un module « hello world » le plus simple possible, entre Drupal 7 (code source) et Drupal 8 (code source).

Drupal 7 Drupal 8
hello.info hello.info.yml
name = Hello world
description = Minimanlist Hello World in Drupal 7
package = helloworld
core = 7.x
files[] = hello.module
name: Hello World module
type: module
description: An Hello World module showing D8 capabilites
package: Example modules
core: 8.x
hello.module hello.module
<?php

function hello_menu() {

  $items = array(
      'hello_world' => array(
        'title' => 'Hello world',
        'page callback' => '_page_hello_world',
        'access callback' => TRUE,
      ),
    );

  return $items;
}

function _page_hello_world() {
  return array(    '#markup' => '<p>Hello world page text (from module) !</p>' );
}
<?php
function hello_menu() {
  $items['hello'] = array(
    'title' => 'Hello Page',
    'route_name' => 'hello.world',
  );
  return $items;
}
 hello.routing.yml
# hello.routing.yml
hello.world:
  path: 'helloworld'
  defaults:
    _content: '\Drupal\hello\HelloRouteController::index'
  requirements:
    _permission: 'access content'
 /lib/Drupal/hello/HelloRouteController.php
<?php

namespace Drupal\hello;

class HelloRouteController {

  public function index() {
    return array('#markup' => 'Hello workd page text (from controller) !');
  }

}

Comme on peut le voir, le .info est convertit en fichier YAML .info.yml.…

Read more

Drupal 8 API Mindmap

Carte heuristique des concepts importants et changement d’API dans Drupal 8.

Get the Flash Player to see this player.

Read more