Migrer un module vers une nouvelle version

Mettre à jour son module 4.1 en 5.0

Dernière mise à jour : 14/03/2016 à 11h23
Si aucun des éléments se trouvant dans cette documentation ne vous aide, référez-vous au forum et demandez de l'aide.



Cette documentation permet de rendre votre module compatible avec la version 5.0 de PHPBoost sans trop de modifications dans le code. Elle n'a pas pour but de le convertir en utilisant le modèle MVC et d'utiliser les nouvelles fonctionnalités. Effectuez les différentes étapes suivantes (peu importe l'ordre) pour mettre à jour votre module.



Le fichier de configuration







Le seul changement à effectuer dans le fichier /module/config.ini pour rendre votre module compatible avec la nouvelle version est le paramètre "compatibility". Remplacez la valeur par 5.0.



Pensez également à mettre à jour le numéro de version de votre module pour plus de cohérence.



Code TEXT :
compatibility="5.0"




Changements dans l'API







Requêtes SQL







L'ancien système utilisé pour les requêtes Sql (PersistenceContext::get_sql(), variable $Sql, requêtes se terminant par
__LINE__, __FILE__
) a été complètement supprimé.



Référez-vous à cette documentation pour convertir vos requêtes Sql : Exécuter des requêtes SQL.



Suppression de certaines variables globales







Les variables globales suivantes ont été supprimées :
$Sql, $Session, $User, $Template, $Cache
.



Equivalents :



Remplacer
$Sql
par
PersistenceContext::get_querier()
.



Remplacer
$Session
par
AppContext::get_session()
.



Remplacer
$User
par
AppContext::get_current_user()
.



La variable
$Template
est dépréciée depuis la 4.1. Utilisez la documentation pour déclarer les templates en PHP.



La variable
$Cache
est dépréciée et a été supprimée. Si vous avez vraiment besoin d'un cache pour votre module (pour affichage d'éléments dans un mini module par exemple), prenez exemple sur celui du module Téléchargements par exemple.



Fonctions relatives aux utilisateurs







Pensez à remplacer
login
par
display_name
dans vos requêtes faisant appel à la table member.



Remplacer
get_utheme()
par
AppContext::get_current_user()->get_theme()
.



Remplacer
get_ulang()
par
AppContext::get_current_user()->get_locale()
.



classe Date







La fonction
gmdate()
a été supprimée.



Proccédez de la manière suivante pour récupérer une date à partir d'un timestamp stocké en base de données (pour afficher la date au format JJ/MM/AAAA par exemple) :



Code PHP :
$date = !empty($row['timestamp']) ? new Date($row['timestamp'], Timezone::SERVER_TIMEZONE) : null;
$tpl->put_all(array(
    'DATE' => (!empty($date)) ? $date->format(Date::FORMAT_DAY_MONTH_YEAR) : ''
));
 




Consultez la documentation sur le traitement des dates pour obtenir les autres formats d'affichage.



Configuration du module







L'utilisation des paramètres de configuration serialisés dans le fichier desc.ini a été supprimée.



Utilisez la documentation créer une configuration pour votre module pour convertir les paramètres de configuration du module.



Système de catégories







L'ancien système de catégories a été complètement supprimé.



Pour utiliser le nouveau système de catégories, consultez cette documentation.



Mini-modules







Si vous utilisez un mini-module, ajoutez les fonctions suivantes dans la classe NomDeVotreModuleModuleMiniMenu.class.php :



Code PHP :
 
public function get_menu_id()
{
    return 'module-mini-nomdumodule';
}
public function get_menu_title()
{
    return 'Module title';
}
public function is_displayed()
{
    //Vérifiez ici les autorisations d'affichage si besoin
    return true;
}
 




Remplacez la fonction
display()
par
get_menu_content()
.



Au niveau du template lié au mini-module, supprimez les div
module-mini-container
,
module-mini-top
,
module-mini-contents
et
module-mini-bottom
pour ne garder que le contenu.



Remplacez :



Code TPL :
 
<div class="module-mini-container"# IF C_HORIZONTAL # style="width:auto;"# ENDIF #>
<div class="module-mini-top">
<h5 class="sub-title">Titre</h5>
</div>
<div class="module-mini-contents">
Contenu
</div>
<div class="module-mini-bottom"></div>
</div>
 




Par :



Code TPL :
 
Contenu
 




Javascript







Remplacez les fonctions spécifiques javascript scriptaculous par leur équivalent jQuery dans tous vox fichiers de templates si vous utilisiez des fonctions spécifiques comme Effect par exemple.



Constantes pour les messages d'erreur







Les anciennes constantes pour les messages d'erreur ont été supprimées.



Effectuez les remplacement suivants :



  • [font= courier new]E_USER_SUCCESS[/font] à remplacer par [font= courier new]MessageHelper::SUCCESS[/font]
  • [font= courier new]E_USER_NOTICE[/font] à remplacer par [font= courier new]MessageHelper::NOTICE[/font]
  • [font= courier new]E_USER_WARNING[/font] à remplacer par [font= courier new]MessageHelper::WARNING[/font]
  • [font= courier new]E_USER_ERROR[/font] à remplacer par [font= courier new]MessageHelper::ERROR[/font]







Sécurité







La sécurité de l'ensemble de PHPBoost a été renforcée dans cette nouvelle version.



Assurez-vous d'avoir l'input token dans tous vos formulaires :



Code TPL :
 
<input type="hidden" name="token" value="{TOKEN}">
 




Supprimez tous les accès directs aux variables
$_GET
et
$_POST
.



Utilisez la fonction
retrieve($var_type, $var_name, $default_value, $force_type = NULL, $flags = 0)
à la place.



Exemple :



Code PHP :
$id = retrieve(POST, 'id', 0, TINTEGER);
 




Templates d'administration







Les liens dans les templates d'administration doivent être mis à jour pour être affichés correctement dans le nouveau design de l'administration.



Remplacez :



Code TPL :
 
<div id="admin-quick-menu">
    <ul>
        <li class="title-menu">{TITLE}</li>
        <li>
            <a href="admin_menu_1.php"><img src="icone.png" alt="{L_MENU_1}" /></a>
 
            <a href="admin_menu_1.php" class="quick-link">{L_MENU_1}</a>
        </li>
        <li>
            <a href="admin_menu_2.php"><img src="icone.png" alt="{L_MENU_2}" /></a>
 
            <a href="admin_menu_2.php" class="quick-link">{L_MENU_2}</a>
        </li>
    </ul>
</div>
 




Par :



Code TPL :
 
<nav id="admin-quick-menu">
    <a href="" class="js-menu-button" onclick="open_submenu('admin-quick-menu');return false;" title="{L_MANAGEMENT}">
        <i class="fa fa-bars"></i> {L_MANAGEMENT}
    </a>
    <ul>
        <li>
            <a href="admin_menu_1.php" class="quick-link">{L_MENU_1}</a>
        </li>
        <li>
            <a href="admin_menu_2.php" class="quick-link">{L_MENU_2}</a>
        </li>
    </ul>
</nav>
 
Cette page a été vue 4871 fois