Développement d'un programme de mise à jour : Différence entre versions
(→bab_setUpgradeLogMsg($addon_name, $message, $uid = '')) |
(→Programme de mise à jour d'un module) |
||
| (10 révisions intermédiaires par 3 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
| + | [[Catégorie:Développement de modules]] | ||
== Programme de mise à jour du noyau == | == Programme de mise à jour du noyau == | ||
| − | + | Lors de chaque mise à jour, la fonction ovidentia_upgrade($version_base,$version_ini) est appelée, il faut qu'elle renvoie TRUE pour que la mise à jour soit acceptée. | |
| − | La fonction se trouve dans le fichier upgrade.php | + | La fonction se trouve dans le fichier upgrade.php. |
== Programme de mise à jour d'un module == | == Programme de mise à jour d'un module == | ||
| − | + | Le principe est identique pour les modules, la fonction doit être dans le fichier init.php et s'appeller addon_upgrade($version_base,$version_ini) où addon est le nom du module. | |
| + | |||
| + | === Modification et création des tables === | ||
| + | |||
| + | Il existe dans Ovidentia un outil pour créer et mettre a jour des tables à partir de requêtes SQL. | ||
| + | |||
| + | Exemple en utilisant la méthode fromSqlFile pour synchroniser à partir d'un fichier : | ||
| + | |||
| + | <source lang="php"> | ||
| + | |||
| + | require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php'; | ||
| + | $tables = new bab_synchronizeSql(); | ||
| + | $tables->fromSqlFile(dirname(__FILE__) . '/sql/dump.sql'); | ||
| + | |||
| + | </source> | ||
| + | |||
| + | Dans le fichier SQL, seules les requêtes <code>CREATE TABLE</code> seront traitées, si la table existe déjà et si les colonnes ne sont pas identiques, des ALTER TABLES seront executés pour mettre a jour la table avec le moins de perte de données possibles. | ||
| + | |||
| + | ==== Constructeur ==== | ||
| + | Pour utiliser la synchronisation, une instance de la classe bab_synchronizeSql doit être créée. | ||
| + | |||
| + | <source lang="php"> | ||
| + | require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php'; | ||
| + | $tables = new bab_synchronizeSql(); | ||
| + | </source> | ||
| + | |||
| + | ==== fromSqlFile ==== | ||
| + | |||
| + | Permet de définir les requêtes SQL via un fichier SQL. | ||
| + | |||
| + | ==== fromSqlString ==== | ||
| + | |||
| + | Permet de définir les requêtes SQL via une chaîne de caractères. | ||
| + | |||
| + | |||
| + | |||
| + | Sur l'objet <code>bab_synchronizeSql</code> il existe des méthodes pour tester les actions effectuées : | ||
| + | |||
| + | ==== isWorkedTable($table) ==== | ||
| + | |||
| + | retourne <code>true</code> si la table a été trouvée dans le fichier SQL et vérifiée sur le serveur | ||
| + | |||
| + | ==== isCreatedTable($table) ==== | ||
| + | |||
| + | retourne <code>true</code> si la table a été crée | ||
| + | |||
| + | |||
| + | ==== isModifiedTable($table) ==== | ||
| + | |||
| + | retourne <code>true</code> si la table a été modifiée mais pas crée | ||
| + | |||
| + | ==== isUnmodifiedTable($table) ==== | ||
| + | |||
| + | retourne <code>true</code> si la table n'a pas été modifiée | ||
| + | |||
| + | |||
| + | ==== Vérification du traitement ==== | ||
| + | |||
| + | la méthode <code>getDifferences()</code>. | ||
| + | |||
| + | Lors du traitement de la synchronisation, une variable tableau est remplie avec les différences trouvées entre la base et le fichier SQL il est possible d'afficher ce tableau afin de s'assurer que le fichier SQL a bien une syntaxe correcte. En effet, le fichier SQL peut contenir des erreur que le serveur MySQL ne remarque pas, le script de synchronisation considère l'erreur comme un changement à effectuer sur la table. | ||
| + | |||
| + | exemple de code pour visualiser les erreurs : | ||
| + | |||
| + | <source lang="php"> | ||
| + | |||
| + | bab_debug($tables->getDifferences()); | ||
| + | $babBody->babPopup(''); | ||
| + | |||
| + | </source> | ||
| + | |||
| + | Dans ce cas, on affiche une popup pour voir les erreurs dans la console de debug, si le message est un tableau vide, c'est qu'il n'y a pas d'erreurs. | ||
== Outils à utiliser dans le programme de reprise == | == Outils à utiliser dans le programme de reprise == | ||
| Ligne 15 : | Ligne 87 : | ||
=== Paramètres === | === Paramètres === | ||
| − | * $version_base : le numéro de version | + | * $version_base : le numéro de version stockée dans la base de données |
| − | * $version_ini : le numéro de version | + | * $version_ini : le numéro de version stockée dans les fichiers (fichier ini) |
lors de la mise à jour, le numéro de version $version_ini est généralement supérieur à $version_base | lors de la mise à jour, le numéro de version $version_ini est généralement supérieur à $version_base | ||
| Ligne 22 : | Ligne 94 : | ||
=== $babBody->addError($message) === | === $babBody->addError($message) === | ||
| − | Les messages d'erreur doivent être enregistrés avec la fonction $babBody->addError, il faut ensuite | + | Les messages d'erreur doivent être enregistrés avec la fonction $babBody->addError, il faut ensuite renvoyer FALSE pour que la mise à jour ne soit pas acceptée. |
=== bab_isTable($table) === | === bab_isTable($table) === | ||
| − | + | Teste l'existence d'une table. | |
=== bab_isTableField($table, $field) === | === bab_isTableField($table, $field) === | ||
| − | + | Teste l'existence d'un champ de table. | |
=== <nowiki>bab_setUpgradeLogMsg($addon_name, $message, $uid = '')</nowiki> === | === <nowiki>bab_setUpgradeLogMsg($addon_name, $message, $uid = '')</nowiki> === | ||
| − | Permet d'enregistrer un message | + | Permet d'enregistrer un message personnalisé dans le log de mise à jour (table bab_upgrade_messages) |
| + | |||
| + | dans le cas du noyau $addon_name doit être renseigné avec la constante BAB_ADDON_CORE_NAME. | ||
| + | |||
| + | $uid est un identifiant unique optionnel en chaîne de caractère qui peut être renseigné pour identifier un message. | ||
=== bab_getUpgradeLogMsg($addon_name, $uid) === | === bab_getUpgradeLogMsg($addon_name, $uid) === | ||
Version actuelle en date du 22 juin 2009 à 17:17
Sommaire
Programme de mise à jour du noyau
Lors de chaque mise à jour, la fonction ovidentia_upgrade($version_base,$version_ini) est appelée, il faut qu'elle renvoie TRUE pour que la mise à jour soit acceptée.
La fonction se trouve dans le fichier upgrade.php.
Programme de mise à jour d'un module
Le principe est identique pour les modules, la fonction doit être dans le fichier init.php et s'appeller addon_upgrade($version_base,$version_ini) où addon est le nom du module.
Modification et création des tables
Il existe dans Ovidentia un outil pour créer et mettre a jour des tables à partir de requêtes SQL.
Exemple en utilisant la méthode fromSqlFile pour synchroniser à partir d'un fichier :
<source lang="php">
require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php'; $tables = new bab_synchronizeSql(); $tables->fromSqlFile(dirname(__FILE__) . '/sql/dump.sql');
</source>
Dans le fichier SQL, seules les requêtes CREATE TABLE seront traitées, si la table existe déjà et si les colonnes ne sont pas identiques, des ALTER TABLES seront executés pour mettre a jour la table avec le moins de perte de données possibles.
Constructeur
Pour utiliser la synchronisation, une instance de la classe bab_synchronizeSql doit être créée.
<source lang="php"> require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php'; $tables = new bab_synchronizeSql(); </source>
fromSqlFile
Permet de définir les requêtes SQL via un fichier SQL.
fromSqlString
Permet de définir les requêtes SQL via une chaîne de caractères.
Sur l'objet bab_synchronizeSql il existe des méthodes pour tester les actions effectuées :
isWorkedTable($table)
retourne true si la table a été trouvée dans le fichier SQL et vérifiée sur le serveur
isCreatedTable($table)
retourne true si la table a été crée
isModifiedTable($table)
retourne true si la table a été modifiée mais pas crée
isUnmodifiedTable($table)
retourne true si la table n'a pas été modifiée
Vérification du traitement
la méthode getDifferences().
Lors du traitement de la synchronisation, une variable tableau est remplie avec les différences trouvées entre la base et le fichier SQL il est possible d'afficher ce tableau afin de s'assurer que le fichier SQL a bien une syntaxe correcte. En effet, le fichier SQL peut contenir des erreur que le serveur MySQL ne remarque pas, le script de synchronisation considère l'erreur comme un changement à effectuer sur la table.
exemple de code pour visualiser les erreurs :
<source lang="php">
bab_debug($tables->getDifferences()); $babBody->babPopup();
</source>
Dans ce cas, on affiche une popup pour voir les erreurs dans la console de debug, si le message est un tableau vide, c'est qu'il n'y a pas d'erreurs.
Outils à utiliser dans le programme de reprise
Paramètres
- $version_base : le numéro de version stockée dans la base de données
- $version_ini : le numéro de version stockée dans les fichiers (fichier ini)
lors de la mise à jour, le numéro de version $version_ini est généralement supérieur à $version_base
$babBody->addError($message)
Les messages d'erreur doivent être enregistrés avec la fonction $babBody->addError, il faut ensuite renvoyer FALSE pour que la mise à jour ne soit pas acceptée.
bab_isTable($table)
Teste l'existence d'une table.
bab_isTableField($table, $field)
Teste l'existence d'un champ de table.
bab_setUpgradeLogMsg($addon_name, $message, $uid = '')
Permet d'enregistrer un message personnalisé dans le log de mise à jour (table bab_upgrade_messages)
dans le cas du noyau $addon_name doit être renseigné avec la constante BAB_ADDON_CORE_NAME.
$uid est un identifiant unique optionnel en chaîne de caractère qui peut être renseigné pour identifier un message.
bab_getUpgradeLogMsg($addon_name, $uid)
Permet de récupérer un message enregistré au préalable avec la fonction bab_setUpgradeLogMsg.
Cette fonction permet de vérifier si une tâche à été effectuée ou non.