Développement d'un programme de mise à jour

Un article de OviWiki.

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 :

require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php';
$tables = new bab_synchronizeSql();
$tables->fromSqlFile(dirname(__FILE__) . '/sql/dump.sql');

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.

require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php';
$tables = new bab_synchronizeSql();

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 :

bab_debug($tables->getDifferences());
$babBody->babPopup('');

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.