Team-Azerty

phpBB 3.1 Ascraeus

Dernière modification  jeudi 18 février 2016

Page 1 : phpBB 3.1 Ascraeus

Historique :

Avant de se lancer dans le vif du sujet, petit rappel de l'historique des versions de phpBB :

  • phpBB 1.0 : Sortie le 16/12/2000
  • phpBB 2.0 "Golden Super Furry Linen" : sortie le 04/04/2002
  • phpBB 3.0 "Olympus" : sortie le 13/07/2007
  • phpBB 3.1 "Ascraeus" : Sortie le 28/10/2014

7 ans de développement ont été nécessaires pour cette version. Pourtant, la marche entre phpBB 3.1 et 3.0 est bien plus grande qu'entre phpBB 2.0 et 3.0, c'est ce que nous allons voir dans cet article.

Les nouveautés visibles

La liste de toutes les nouveautés de phpBB se retrouve sur cette page. Néanmoins, plusieurs nouveautés ont attiré mon attention :

  • Une utilisation de l'AJAX intelligente : sur les pièces jointes.
  • Fin de pages intermédiaires de confirmation.
  • Thème reponsive
  • Système de notification
  • Oath login, c'est à dire la possibilité d'utiliser les réseaux sociaux pour se connecter.

Le système de notification est selon moi le plus intéressant. En effet, selon votre paramétrage, vous pouvez recevoir une notification pour :

  • Notifications de publication de message
  • Quelqu'un a répondu à un sujet que vous avez mis en favori.
  • Quelqu'un a répondu à un sujet dans un forum que vous surveillez.
  • Quelqu'un vous a cité dans un message.
  • Quelqu'un a créé un sujet dans un forum que vous surveillez.
  • Notifications de modération
  • Un sujet ou un message a besoin d'être approuvé.
  • Quelqu'un a rapporté un message.
  • Notifications diverses
  • Quelqu'un a demandé à adhérer au groupe dont vous êtes le chef.
  • Quelqu'un vous a envoyé un message privé.

La notification en elle même se fait à l'instar de ce qu'on peut voir sur facebook : Modification du titre de la page ainsi qu'un menu déroulant :

Pour le reste, vous retrouverez toutes vos habitudes, et c'est aussi ça la force de ce phpBB 3.1 : Des évolutions, mais la façon de l'utiliser est strictement identique, les anciens utilisateurs ne seront pas perdus.

La vraie révolution est sous le capot

Mais si la partie visible semble peu différente, la vraie révolution, et la raison pour laquelle le développement a été aussi long, c'est le code du forum qui a été entièrement revu.

Un code entièrement réécrit

Si la précédente version de phpBB était compatible PHP 4.3.3, là, pour utiliser la dernière version du forum il faudra avoir PHP 5.3. La raison :

  • Utilisation des namespace
  • Utilisation de Symfony
  • Utilisation de pattern MVC (Model-Vue-Controleur).

Le code de phpBB a été largement modifié, comme indiqué sur leur page de lancement : "1k bug fixes, 1.5k improvements, 11k commits". On comprend pourquoi il a fallu prêt de 7 ans de develloppement pour arriver à ce résultat !

Un développement d'extention facilité

Sans être un modeur très expérimenté, j'ai apporté quelques contributions sur phpBB, que ce soit des mods pour les salles d'arcade pour phpBB 2.0, ou des boutons G+ pour phpBB 3.0 en passant par le Mod At Glance. Avec la sortie de phpBB 3.1, je me suis donc lancé dans l'écriture d'un mod, pour ma culture personnelle, mais aussi pour faire dans l'utile, car le mod que je cherchais n'existait pas.
Sans rentrer de le détail de développement, une chose m'a frappé, c'est la différence entre ce qui se faisait avant, et maintenant. Sur phpBB 2.0 comme sur phpBB 3.0, le développement de mod, impliquait de modifier le code source du moteur même. Ces modifications parfois à la hussarde comportaient plusieurs problématiques :

  • Il fallait maitriser le code de phpBB pour développer un mod
  • L'installation était parfoie ardue.
  • À force de modifications, le forum pouvait être instable, et la base de données pouvait rapidement être "pourrie" par des mods désinstallés. De plus les mises à jour étaient souvent problématiques avec un forum rempli de mod.

Une solution d'industrialisation avait été mise en place avec MODX, un document XML qui décrivait la procédure à suivre pour l'installation. Cette installation pouvait être même automatisée avec EasyMod pour pbpHH 2.0 puis AutoMod pour phpBB 3.0. Néanmois, si l'installation était rendue plus facile, cela n'enlevait pas les problèmes de compatibilité et d'instabilité évoqués précédemment.

Les events :

Aujourd'hui avec phpBB 3.1, ces problématiques n'existent plus. Exit les mod, bonjour les extensions ! Et ce n'est pas qu'un simple changement de nom, cela va bien plus loin. En effet, maintenant, inutile de modifier le moteur de phpBB, c'est même interdit ! Les extensions sont "à part", dans le répertoire ext. La personnalisation se fait donc via des "Listeners" et des "Event" dont la liste se trouve ici : https://wiki.phpbb.com/Event_List.
Ainsi, si vous souhaitez modifier la façon dont est affichée la liste des messages d'un sujet (viewtopic.php), c'est l'event core.viewtopic_get_post_data, si vous souhaitez modifier l'affichage d'un message c'est l'event core.viewtopic_modify_post_row. Pour chacun de ces évènements, vous allez mapper une fonction dans votre listner qui se charge de faire la modification :

static public function getSubscribedEvents() {
  return array(
    'core.viewtopic_get_post_data'   => 'modify_viewtopic_post_list',
    'core.viewtopic_modify_post_row' => 'modify_first_post_of_the_topic',
    'core.acp_board_config_edit_add' => 'acp_board_post_config',
  );
}


Comme indiqué dans la documentation, vous récupérez un tableau $event contenant les informations que vous pouvez modifier ou simplement consulter :

public function modify_viewtopic_post_list($event) {
  $topic_data = $event['topic_data'];
  $start      = $event['start'];
  $sql_ary    = $event['sql_ary'];
}


La modification proprement dire sera de modifier les éléments de ce tableau.

Vous souhaitez ajouter un élément dans le panneau d'administration, c'est encore plus simple :

public function acp_board_post_config($event) {
  if ($event['mode'] == 'post') {
    $display_vars   = $event['display_vars'];
    $add_config_var = array(
     'legendXiti'               => 'ACP_XITI_TITLE',
     'display_last_post_show'   => array(
       'lang'     => 'DISPLAY_LAST_POST_SHOW',
       'validate' => 'bool',
       'type'     => 'radio: yes_no',
       'explain'  => true
      )
    );
    $display_vars['vars'] = phpbb_insert_config_array($display_vars['vars'], $add_config_var, array('after' =>'posts_per_page'));
    $event['display_vars'] = array('title' => $display_vars['title'], 'vars' => $display_vars['vars']);
  }
}


Là j'ai ajouté un bouton radio dans la partie message, juste après la saisie du nombre de messages par page avec une légende. Bien entendu, on peut rajouter ces blocs d'administration dans des modules si le nombre est trop important ou sans lien avec les parties d'administration existantes.

La traduction est tout aussi simple, dans mon cas, pour la partie administration, j'ai juste eu à nommer correctement mon fichier (info_acp_display_last_post.php), et pour le front, j'ai fait un appel explicite $this->user->add_lang_ext('Aurelienazerty/DisplayLastPost', 'display_last_post');.

Une migration aisée :

La partie la plus intéressante est pour moi la gestion des données. Avant, il fallait souvent insérer les nouvelles données à la hussarde, en slq comme un sale. Maintenant, c'est fini ! Dans le dossier migration, vous récapitulez les modifications à faire dans la base de données. À partir de la version 1.2.1 de votre mod, vous avez besoin d'ajouter une valeur de configuration, c'est très simple, vous créez un fichier release_1_2_1.php dans le dossier migration :

class release_1_2_1 extends phpbbdbmigrationmigration {
  public function effectively_installed() {
    return !empty($this->config['display_last_post_show']);
  }
  public function update_data() {
    return array(
      array(
        'config.add', array('display_last_post_show', 1)
      )
    );
  }
}


A l'installation phpBB se charge d'ajouter dans la table config vos nouvelles variable, mais vous pouvez également ajouter des tables, des modules (onglets dans les panneaux d'administration, ou modérateur, ou utilisateur). A la désactivation de l'extension, il est possible de supprimer ces données, et ainsi garder votre base propre !

Pas de conflits avec les thèmes

Pour les administrateurs, avec phpBB 2.0 et 3.0 la présence de thèmes et de mod était souvent un casse-tête sans nom, puisqu'il fallait souvent reporter les modifications dans chaque template, avec, bien souvent, une opération manuelle, car la structure HTML était légèrement différente. Ici la solution était drastique : les thèmes étaient limités à ceux de base!
Heureusement, maintenant, via les Template Events, c'est beaucoup plus simple. Ainsi, par exemple, pour qu'une modification soit faite sur toutes les templates après les copyrights, il suffit de créer un fichier overall_footer_copyright_append.html et le mettre dans le dossier stylesalltemplateevent de votre extension. Autant vous dire que cette petite amélioration est une vraie délivrance pour moi !

La cerise sur le gâteau : vérification de version !

Vérifier la version de phpBB était déjà possible depuis la version 3.0. Là ce sont maintenant les extensions qui peuvent être concernées si le développeur a ajouté les lignes suivantes dans son composer.json :

"version-check": {
   "host": "phpbb.team-azerty.com",
   "directory": "/",
   "filename": "xiti.json"
}


Et mit côté serveur un json indiquant la version actuelle :

{
   "stable": {
     "1.0.0": {
     "current": "1.0.0",
     "download": "https://github.com/Aurelienazerty/DisplayLastPost/releases/tag/1.0",
     "announcement": "First Release",
     "eol": null,
     "security": false
    }
  }
}


Ainsi côté développeur, à chaque nouvelle release, vous pouvez notifier à vos utilisateurs qu'une nouvelle version est disponible.

Au final, si je devais retenir une avancée remarquable, c'est bien l'écriture des extensions ! Pour moi c'est passer de l'âge de pierre à l'ère industrielle !

Pour plus d'information sur l'écriture des extensions : Writing Extensions

Conclusion

Incontestablement, cette nouvelle version de phpBB est une vraie révolution. Avec phpBB Ascraeus, le moteur de forum se met au niveau technique des autres CMS. La révolution est incontestable, mais elle arrive avec quelques années de retard. En effet, si au début des années 2000, phpBB devait faire face à des concurrents comme vBulletin, aujourd'hui se sont les usages qui ont changé : blogs, et surtout réseaux sociaux ont largement supplanté les forums. Fort heureusement, phpBB peut compter sur une forte communauté, et la facilité de développement des extensions va, à mon avis largement contribuer à entretenir la flamme si se n'est la faire renaitre, c'est pour cela que de là à prédire la fin de phpBB il y a un gouffre que je ne franchirai pas ! Quoi qu'il en soit, je conclurai cet article en adressant toutes mes félicitations à l'équipe de développement qui a vraiment fait un super boulot !