Chapitre: Migration d'une application vers jelix 1.3.x
« Nouveautés | ^ Introduction |
− Table des matières
Lors d'une migration d'une version Jelix à une autre, il y a toujours au moins ces étapes à faire :
- Remplacer le répertoire
lib/
de jelix par celui contenu dans le paquet jelix. - Ne pas oublier de remettre dans le nouveau répertoire
lib/
vos éventuelles bibliothèques personnelles si vous en aviez mis dans l'ancien. - supprimer tous les fichiers dans le répertoire
temp/votre_appli
- adapter votre code en suivant les instructions indiquées pour chaque ancienne version de Jelix. Voir ci-dessous.
Mettre à jour depuis Jelix 1.3.3 ¶
- si vous le souhaitez, vous pouvez utiliser le nouveau système de hashage dans jAuth, apparue dans la version 1.2.10 et 1.3.4, pour stocker les mots de passe de manière plus sécurisée. Suivez alors la doc de migration dédiée.
Mettre à jour depuis Jelix 1.2 ¶
Voici les instructions à suivre dans l'ordre.
Sauvegarde ¶
Tout d'abord, faites une sauvegarde de votre base de données, de vos fichiers de configuration etc.
Répertoires temporaires ¶
Comme d'habitude, vous devez vider le contenu de votre répertoire
temp/votreapp/
. Vous pouvez aussi supprimer les autres répertoires
temporaires temp/votreapp-cli/
et temp/votreapp-scripts/
, ils ne
sont plus utilisés.
Appliquer le patch pour jelix 1.3.9 ¶
Depuis la dernière version de la branche 1.3, il y a eu quelques correctifs dans les scripts de migrations, mais qui n'ont pas été publié dans une nouvelle version de Jelix 1.3, faute d'avoir un PHP assez vieux pour regénérer les paquets.
Téléchargez donc https://download.jelix.org/jelix/releases/1.3.x/1.3.9/jelix_1.3.9_patch.zip, et dézippez-le
à partir du répertoire parent de lib/
. Cela remplacera quelques fichiers. Vous pouvez trouvez ceci également ici
https://github.com/jelix/jelix/tree/jelix-1.4.x/build/patch .
Changez le fichier application.init.php ¶
Ce script ne doit plus définir des constantes JELIX_APP_*, mais doit définir les
divers chemins de l'application avec l'objet jApp::initPaths()
. Vous pouvez
maintenant accéder à chaque chemin en utilisant cet objet jApp
.
jCoordinator génère cependant les constantes JELIX_APP_* pour garder une
compatibilité, mais vous devez tout de même supprimer l'utilisation de ces
constantes dans vos modules, car elles ne seront plus disponibles dans des
versions ultérieures.
Votre script application.init.php
doit contenir ce genre d'instruction :
$appPath = dirname (__FILE__).'/';
require ($appPath.'../lib/jelix/init.php');
jApp::initPaths(
$appPath
//$appPath.'www/',
//$appPath.'var/',
//$appPath.'var/log/',
//$appPath.'var/config/',
//$appPath.'scripts/'
);
jApp::setTempBasePath(realpath($appPath.'../temp/testapp/').'/');
Suppression de fichiers ¶
Vous pouvez supprimer application-cli.init.php
et
jelix-scripts.init.php
, ils sont maintenant inutiles. Sans oublier
toutefois de remplacer dans vos scripts en ligne de commandes (normalement, dans
le répertoire scripts/
de votre application), l'utilisation de
application-cli.init.php
par application.init.php
.
Modifications générales ¶
- Si vous avez activé la minification des fichiers js et css dans la réponse
HTML, cela ne fonctionnera plus, la configuration a changé. Certaines
options ont disparu, le répertoire
www/cache/minify
n'est plus utilisé, et un fichier minify.php doit être installé danswww/
. Copiez le fichierlib/jelix-scripts/templates/www/minify.php.tpl
dansvotre_appli/www/minify.php
. L'outils de mise à jour du module jelix modifiera la configuration pour vous. Voyez la partie sur minify pour en savoir plus. - Si vous voulez utiliser PHPUnit pour ajouter des tests unitaires, copiez le
fichier
lib/jelix-scripts/templates/tests/runtests.php
dans le répertoiretests/
de votre application. Et lisez le chapitre sur les tests unitaires pour savoir comment en écrire.
Mise à jour des modules ¶
Mettez à jour les sources des modules tiers que vous avez installés, et qui sont compatibles avec Jelix 1.3.
Et pour vos propres modules, vous devez adapter le code source en faisant les modifications suivantes :
- comme indiqué plus haut, remplacez l'usage des constantes JELIX_APP_* par
l'utilisation de l'objet
jApp
. - dans les fichiers module.xml, indiquez que le module est compatible avec
Jelix 1.3 (changer l'attribut maxversion). Exemple :
<jelix minversion="1.1" maxversion="1.3.*"/>
- L'API et le schéma de donnée de jAcl2Db a changé.
- les identifiants des groupes d'utilisateurs ne sont plus des nombres, mais
des noms (chaines). Par conséquent, il vous faudra modifier vos données si
elles contiennent des identifiants de groupes. Lors de la migration, Jelix
utilise la valeur de l'ancien champs "code" d'un groupe comme identifiant,
si il est renseigné (ce champs a été supprimé). L'identifiant
__anonymous
est réservé. - il faut remplacer vos appels de
jAcl2DbUserGroup::getGroupByCode
parjAcl2DbUserGroup::getGroup
. L'argument est le même : l'identifiant/code du groupe. En revanchegetGroup()
renvoie un objet correspondant à l'ensemble des champs du groupe, et non seulement son id. - vous pouvez maintenant regrouper vos "sujets" de droits en les assignant à
des "groupes de sujets". Cela améliore la lisibilité de l'interface
d'administration. Vous avez pour cela des nouvelles sous commandes avec la
commande
cmd.php acl2right
: subject_group_create, subject_group_list, subject_group_delete.
- les identifiants des groupes d'utilisateurs ne sont plus des nombres, mais
des noms (chaines). Par conséquent, il vous faudra modifier vos données si
elles contiennent des identifiants de groupes. Lors de la migration, Jelix
utilise la valeur de l'ancien champs "code" d'un groupe comme identifiant,
si il est renseigné (ce champs a été supprimé). L'identifiant
Nouvelles API que vous pouvez utiliser (non exhaustives):
jApp
qui contient un certain nombre de méthode pour récupérer divers cheminsjApp::loadPlugin
pour charger les plugins de n'importe quel composant (API interne)jInstallerApplication
pour récupérer la liste des points d'entrées, les modules utilisés ,jLog::logEx()
pour journaliser facilement les exceptionsjRequest::isAjax()
pour savoir si la requête est une requête faites par xmlHttpRequestjRequest::getIp()
jSoapClient
pour effectuer des requêtes soap, avec les informations de connexion dans le fichier profiles.ini.php.jFormsJQ.addSubmitHandler()
en JavaScript, pour ajouter du code pour faire des vérifications supplémentaires lors de la soumission du formulaire.
API que vous ne pouvez plus utiliser :
jUrl::parseFromRequest()
Mise à jour du script installer.php ¶
Dans le dossier install de votre application, éditer le script installer.php en changeant application-cli.init.php par application.init.php
Mise à jour de Jelix ¶
Après toutes les modifications effectuées, vous devez lancer le script installer.php de votre application. Le module jelix fera le reste des modifications, en particulier :
- dans vos fichiers de configuration.
- il crééra un nouveau fichier profiles.ini.php, qui remplace vos fichiers dbprofils.ini.php, cache.ini.php, jkvdbprofiles.ini.php. Ces fichiers seront supprimés.
- ajoute le nouveau script cmd.php à la racine de votre application, pour
lancer les commandes jelix-scripts à partir de votre application.
cmd.php
remplace le scriptlib/jelix-scripts/jelix.php
qui n'existe plus.
Le module jacl2db, si vous l'utilisez, mettra à jour votre base de données.
Autres modifications éventuelles ¶
Quand une erreur survient, une page spécifique s'affiche dorénavant. Vous pouvez la redéfinir pour mieux l'intégrer dans le design de votre site. Voir la rubrique dédié pour le faire.
La page d'erreur n'affiche plus les détails de l'erreur (pour des raisons de sécurité et de "convivialité"). Durant le développement, pour avoir les infos sur les informations sur l'erreur et sur d'autres choses, activez la debug barre et éventuellement certains fichiers de log.
Mettre à jour depuis jelix 1.1 et précédent ¶
Suivez les indications de migration de chaque version intermédiaire, avant de mettre à jour pour jelix 1.3.