2
0
forked from Wavyzz/dolibarr

Fix: Solve errors in migrate with postgresql

This commit is contained in:
Laurent Destailleur
2010-08-01 21:42:57 +00:00
parent 4e58a9e8c4
commit 23e503b3f0
5 changed files with 212 additions and 190 deletions

View File

@@ -68,7 +68,7 @@ class DolibarrModules
/** /**
* \brief Fonction d'activation. Insere en base les constantes et boites du module * \brief Fonction d'activation. Insere en base les constantes et boites du module
* \param array_sql Tableau de requete sql a executer a l'activation * \param array_sql Tableau de requete sql a executer a l'activation
* \param options Options when enabling module * \param options Options when enabling module ('', 'noboxes')
* \return int 1 if OK, 0 if KO * \return int 1 if OK, 0 if KO
*/ */
function _init($array_sql, $options='') function _init($array_sql, $options='')
@@ -163,7 +163,7 @@ class DolibarrModules
/** /**
* \brief Fonction de desactivation. Supprime de la base les constantes et boites du module * \brief Fonction de desactivation. Supprime de la base les constantes et boites du module
* \param array_sql tableau de requete sql a executer a la desactivation * \param array_sql tableau de requete sql a executer a la desactivation
* \param options Options when disabling module * \param options Options when disabling module ('', 'noboxes')
* \return int 1 if OK, 0 if KO * \return int 1 if OK, 0 if KO
*/ */
function _remove($array_sql, $options='') function _remove($array_sql, $options='')
@@ -173,28 +173,28 @@ class DolibarrModules
$this->db->begin(); $this->db->begin();
// Remove line in activation module // Remove line in activation module (entry in table llx_dolibarr_modules)
if (! $err) $err+=$this->_dbunactive(); if (! $err) $err+=$this->_dbunactive();
// Remove activation module line // Remove activation module line (constant MAIN_MODULE_MYMODULE in llx_const)
if (! $err) $err+=$this->_unactive(); if (! $err) $err+=$this->_unactive();
// Remove activation of module's style sheet // Remove activation of module's style sheet (constant MAIN_MODULE_MYMODULE_CSS in llx_const)
if (! $err) $err+=$this->delete_style_sheet(); if (! $err) $err+=$this->delete_style_sheet();
// Remove activation of module's new tabs // Remove activation of module's new tabs (MAIN_MODULE_MYMODULE_TABS_XXX in llx_const)
if (! $err) $err+=$this->delete_tabs(); if (! $err) $err+=$this->delete_tabs();
// Remove activation of module's triggers // Remove activation of module's triggers (MAIN_MODULE_MYMODULE_TRIGGERS in llx_const)
if (! $err) $err+=$this->delete_triggers(); if (! $err) $err+=$this->delete_triggers();
// Remove list of module's available boxes // Remove list of module's available boxes (entry in llx_boxes)
if (! $err && $options != 'noboxes') $err+=$this->delete_boxes(); if (! $err && $options != 'noboxes') $err+=$this->delete_boxes();
// Remove module's permissions from list of available permissions // Remove module's permissions from list of available permissions (entries in llx_rights_def)
if (! $err) $err+=$this->delete_permissions(); if (! $err) $err+=$this->delete_permissions();
// Remove module's menus // Remove module's menus (entries in llx_menu)
if (! $err) $err+=$this->delete_menus(); if (! $err) $err+=$this->delete_menus();
// Remove module's directories // Remove module's directories
@@ -859,6 +859,7 @@ class DolibarrModules
$sql_del.= " WHERE ".$this->db->decrypt('name')." = '".$this->const_name."'"; $sql_del.= " WHERE ".$this->db->decrypt('name')." = '".$this->const_name."'";
$sql_del.= " AND entity IN (0,".$conf->entity.")"; $sql_del.= " AND entity IN (0,".$conf->entity.")";
dol_syslog("DolibarrModules::insert_permissions sql=".$sql_del);
$resql=$this->db->query($sql_del); $resql=$this->db->query($sql_del);
if ($resql) if ($resql)
{ {
@@ -1201,7 +1202,7 @@ class DolibarrModules
/** /**
* \brief Insert activation triggers from modules in llx_const * \brief Insert activation triggers from modules in llx_const
* \return int Number of errors (0 if ok) * \return int Number of errors (0 if ok)
*/ */
function insert_triggers() function insert_triggers()
{ {
@@ -1230,6 +1231,11 @@ class DolibarrModules
dol_syslog("DolibarrModules::insert_triggers sql=".$sql); dol_syslog("DolibarrModules::insert_triggers sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if (! $resql)
{
$this->error=$this->db->lasterror();
dol_syslog("DolibarrModules::insert_triggers ".$this->error);
}
} }
return $err; return $err;
} }

View File

@@ -34,7 +34,7 @@
include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php"); include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
/** /**
* \class modWebcalendar * \class modWebcalendar
* \brief Description and activation class for module Webcalendar * \brief Description and activation class for module Webcalendar
*/ */
@@ -69,7 +69,7 @@ class modWebcalendar extends DolibarrModules
$this->special = 1; $this->special = 1;
// Name of png file (without png) used for this module // Name of png file (without png) used for this module
$this->picto='calendar'; $this->picto='calendar';
// Defined if the directory /mymodule/inc/triggers/ contains triggers or not // Defined if the directory /mymodule/inc/triggers/ contains triggers or not
$this->triggers = 1; $this->triggers = 1;
@@ -127,11 +127,11 @@ class modWebcalendar extends DolibarrModules
* The init function add previous constants, boxes and permissions into Dolibarr database. * The init function add previous constants, boxes and permissions into Dolibarr database.
* It also creates data directories. * It also creates data directories.
*/ */
function init() function init($options='')
{ {
$sql = array(); $sql = array();
return $this->_init($sql); return $this->_init($sql,$options);
} }
/** /**
@@ -139,11 +139,11 @@ class modWebcalendar extends DolibarrModules
* Remove from database constants, boxes and permissions from Dolibarr database. * Remove from database constants, boxes and permissions from Dolibarr database.
* Data directories are not deleted. * Data directories are not deleted.
*/ */
function remove() function remove($options='')
{ {
$sql = array(); $sql = array();
return $this->_remove($sql); return $this->_remove($sql,$options);
} }
} }

View File

@@ -1713,158 +1713,6 @@ function migrate_modeles($db,$langs,$conf)
//print $langs->trans("AlreadyDone"); //print $langs->trans("AlreadyDone");
} }
/*
* Supprime fichiers obsoletes
*/
function migrate_delete_old_files($db,$langs,$conf)
{
$result=true;
dolibarr_install_syslog("upgrade2::migrate_delete_old_files");
// List of files to delete
$filetodeletearray=array(
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_demo.class.php',
DOL_DOCUMENT_ROOT.'/includes/menus/barre_left/default.php',
DOL_DOCUMENT_ROOT.'/includes/menus/barre_top/default.php',
DOL_DOCUMENT_ROOT.'/includes/modules/modComptabiliteExpert.class.php',
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_modPhenix_Phenixsynchro.class.php',
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_modWebcalendar_webcalsynchro.class.php',
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_modCommande_Ecotax.class.php',
);
foreach ($filetodeletearray as $filetodelete)
{
//print '<b>'.$filetodelete."</b><br>\n";
if (file_exists($filetodelete))
{
$result=dol_delete_file($filetodelete);
}
if (! $result)
{
$langs->load("errors");
print '<div class="error">'.$langs->trans("Error").': '.$langs->trans("ErrorFailToDeleteFile",$filetodelete);
print ' '.$langs->trans("RemoveItManuallyAndPressF5ToContinue").'</div>';
}
}
return $result;
}
/*
* Remove deprecated directories
*/
function migrate_delete_old_dir($db,$langs,$conf)
{
$result=true;
dolibarr_install_syslog("upgrade2::migrate_delete_old_dir");
// List of files to delete
$filetodeletearray=array(
DOL_DOCUMENT_ROOT.'/includes/modules/facture/terre',
DOL_DOCUMENT_ROOT.'/includes/modules/facture/mercure'
);
foreach ($filetodeletearray as $filetodelete)
{
//print '<b>'.$filetodelete."</b><br>\n";
if (file_exists($filetodelete))
{
$result=dol_delete_dir_recursive($filetodelete);
}
if (! $result)
{
$langs->load("errors");
print '<div class="error">'.$langs->trans("Error").': '.$langs->trans("ErrorFailToDeleteDir",$filetodelete);
print ' '.$langs->trans("RemoveItManuallyAndPressF5ToContinue").'</div>';
}
}
return $result;
}
/*
* Disable/Reenable features modules.
* We must do this when internal menu of module or permissions has changed
* or when triggers have moved.
*/
function migrate_reload_modules($db,$langs,$conf)
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules");
if (! empty($conf->global->MAIN_MODULE_AGENDA))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Agenda");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modAgenda.class.php');
$mod=new modAgenda($db);
$mod->remove('noboxes');
$mod->init('noboxes');
}
if (! empty($conf->global->MAIN_MODULE_PHENIX))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Phenix");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modPhenix.class.php');
$mod=new modPhenix($db);
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_WEBCALENDAR))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Webcalendar");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modWebcalendar.class.php');
$mod=new modWebcalendar($db);
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_MANTIS))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Mantis");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modMantis.class.php');
$mod=new modMantis($db);
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_SOCIETE))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Societe");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modSociete.class.php');
$mod=new modSociete($db);
$mod->remove('noboxes');
$mod->init('noboxes');
}
if (! empty($conf->global->MAIN_MODULE_PRODUIT)) // Permission has changed into 2.7
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Produit");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modProduct.class.php');
$mod=new modProduct($db);
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_SERVICE)) // Permission has changed into 2.7
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Service");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modService.class.php');
$mod=new modService($db);
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_COMMANDE)) // Permission has changed into 2.9
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Commande");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modCommande.class.php');
$mod=new modCommande($db);
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_FACTURE)) // Permission has changed into 2.9
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Facture");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modFacture.class.php');
$mod=new modFacture($db);
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_FOURNISSEUR)) // Permission has changed into 2.9
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Fournisseur");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modFournisseur.class.php');
$mod=new modFournisseur($db);
$mod->init();
}
}
/* /*
* Correspondance des expeditions et des commandes clients dans la table llx_co_exp * Correspondance des expeditions et des commandes clients dans la table llx_co_exp
@@ -3200,6 +3048,168 @@ function migrate_directories($db,$langs,$conf,$oldname,$newname)
} }
/*
* Supprime fichiers obsoletes
*/
function migrate_delete_old_files($db,$langs,$conf)
{
$result=true;
dolibarr_install_syslog("upgrade2::migrate_delete_old_files");
// List of files to delete
$filetodeletearray=array(
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_demo.class.php',
DOL_DOCUMENT_ROOT.'/includes/menus/barre_left/default.php',
DOL_DOCUMENT_ROOT.'/includes/menus/barre_top/default.php',
DOL_DOCUMENT_ROOT.'/includes/modules/modComptabiliteExpert.class.php',
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_modPhenix_Phenixsynchro.class.php',
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_modWebcalendar_webcalsynchro.class.php',
DOL_DOCUMENT_ROOT.'/includes/triggers/interface_modCommande_Ecotax.class.php',
);
foreach ($filetodeletearray as $filetodelete)
{
//print '<b>'.$filetodelete."</b><br>\n";
if (file_exists($filetodelete))
{
$result=dol_delete_file($filetodelete);
}
if (! $result)
{
$langs->load("errors");
print '<div class="error">'.$langs->trans("Error").': '.$langs->trans("ErrorFailToDeleteFile",$filetodelete);
print ' '.$langs->trans("RemoveItManuallyAndPressF5ToContinue").'</div>';
}
}
return $result;
}
/*
* Remove deprecated directories
*/
function migrate_delete_old_dir($db,$langs,$conf)
{
$result=true;
dolibarr_install_syslog("upgrade2::migrate_delete_old_dir");
// List of files to delete
$filetodeletearray=array(
DOL_DOCUMENT_ROOT.'/includes/modules/facture/terre',
DOL_DOCUMENT_ROOT.'/includes/modules/facture/mercure'
);
foreach ($filetodeletearray as $filetodelete)
{
//print '<b>'.$filetodelete."</b><br>\n";
if (file_exists($filetodelete))
{
$result=dol_delete_dir_recursive($filetodelete);
}
if (! $result)
{
$langs->load("errors");
print '<div class="error">'.$langs->trans("Error").': '.$langs->trans("ErrorFailToDeleteDir",$filetodelete);
print ' '.$langs->trans("RemoveItManuallyAndPressF5ToContinue").'</div>';
}
}
return $result;
}
/*
* Disable/Reenable features modules.
* We must do this when internal menu of module or permissions has changed
* or when triggers have moved.
*/
function migrate_reload_modules($db,$langs,$conf)
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules");
if (! empty($conf->global->MAIN_MODULE_AGENDA))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Agenda");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modAgenda.class.php');
$mod=new modAgenda($db);
$mod->remove('noboxes');
$mod->init('noboxes');
}
if (! empty($conf->global->MAIN_MODULE_PHENIX))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Phenix");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modPhenix.class.php');
$mod=new modPhenix($db);
$mod->remove('noboxes');
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_WEBCALENDAR))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Webcalendar");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modWebcalendar.class.php');
$mod=new modWebcalendar($db);
$mod->remove('noboxes');
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_MANTIS))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Mantis");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modMantis.class.php');
$mod=new modMantis($db);
$mod->remove('noboxes');
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_SOCIETE))
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Societe");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modSociete.class.php');
$mod=new modSociete($db);
$mod->remove('noboxes');
$mod->init('noboxes');
}
if (! empty($conf->global->MAIN_MODULE_PRODUIT)) // Permission has changed into 2.7
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Produit");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modProduct.class.php');
$mod=new modProduct($db);
//$mod->remove('noboxes');
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_SERVICE)) // Permission has changed into 2.7
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Service");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modService.class.php');
$mod=new modService($db);
//$mod->remove('noboxes');
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_COMMANDE)) // Permission has changed into 2.9
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Commande");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modCommande.class.php');
$mod=new modCommande($db);
//$mod->remove('noboxes');
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_FACTURE)) // Permission has changed into 2.9
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Facture");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modFacture.class.php');
$mod=new modFacture($db);
//$mod->remove('noboxes');
$mod->init();
}
if (! empty($conf->global->MAIN_MODULE_FOURNISSEUR)) // Permission has changed into 2.9
{
dolibarr_install_syslog("upgrade2::migrate_reload_modules Reactivate module Fournisseur");
require_once(DOL_DOCUMENT_ROOT.'/includes/modules/modFournisseur.class.php');
$mod=new modFournisseur($db);
//$mod->remove('noboxes');
$mod->init();
}
}
/** /**
* Reload menu if dynamic menus * Reload menu if dynamic menus
@@ -3209,29 +3219,29 @@ function migrate_directories($db,$langs,$conf,$oldname,$newname)
*/ */
function migrate_reload_menu($db,$langs,$conf) function migrate_reload_menu($db,$langs,$conf)
{ {
global $conf; global $conf;
dolibarr_install_syslog("upgrade2::migrate_reload_menu"); dolibarr_install_syslog("upgrade2::migrate_reload_menu");
// Define list of menu handlers to initialize // Define list of menu handlers to initialize
$listofmenuhandler=array('auguria'); // We set here only dinamic menu handlers $listofmenuhandler=array('auguria'); // We set here only dinamic menu handlers
foreach ($listofmenuhandler as $key) foreach ($listofmenuhandler as $key)
{ {
print '<tr><td colspan="4">'; print '<tr><td colspan="4">';
//print "x".$key; //print "x".$key;
print '<br>'; print '<br>';
print '<b>'.$langs->trans('Upgrade').'</b>: '.$langs->trans('MenuHandler')." ".$key."<br>\n"; print '<b>'.$langs->trans('Upgrade').'</b>: '.$langs->trans('MenuHandler')." ".$key."<br>\n";
// Load sql ini_menu_handler.sql file // Load sql ini_menu_handler.sql file
$dir = DOL_DOCUMENT_ROOT."/includes/menus/"; $dir = DOL_DOCUMENT_ROOT."/includes/menus/";
$file='init_menu_'.$key.'.sql'; $file='init_menu_'.$key.'.sql';
if (file_exists($dir.$file)) if (file_exists($dir.$file))
{ {
$result=run_sql($dir.$file,1,'',1); $result=run_sql($dir.$file,1,'',1);
} }
print '</td></tr>'; print '</td></tr>';
} }
} }

View File

@@ -169,6 +169,7 @@ function run_sql($sqlfile,$silent=1,$entity='',$usesavepoint=1)
$table=$reg[1]; $table=$reg[1];
if (! isset($listofmaxrowid[$table])) if (! isset($listofmaxrowid[$table]))
{ {
//var_dump($db);
$sqlgetrowid='SELECT MAX(rowid) as max from '.$table; $sqlgetrowid='SELECT MAX(rowid) as max from '.$table;
$resql=$db->query($sqlgetrowid); $resql=$db->query($sqlgetrowid);
if ($resql) if ($resql)
@@ -179,6 +180,7 @@ function run_sql($sqlfile,$silent=1,$entity='',$usesavepoint=1)
} }
else else
{ {
dol_syslog('Admin.lib::run_sql Failed to get max rowid for '.$table.' '.$db->lasterror().' sql='.$sqlgetrowid, LOG_ERR);
if (! $silent) print '<tr><td valign="top" colspan="2">'; if (! $silent) print '<tr><td valign="top" colspan="2">';
if (! $silent) print '<div class="error">'.$langs->trans("Failed to get max rowid for ".$table)."</div></td>"; if (! $silent) print '<div class="error">'.$langs->trans("Failed to get max rowid for ".$table)."</div></td>";
if (! $silent) print '</tr>'; if (! $silent) print '</tr>';

View File

@@ -313,14 +313,18 @@ class DoliDb
} }
/** /**
* \brief Renvoie la version du serveur * \brief Return version of server
* \return string Chaine version * \return string String with version
*/ */
function getVersion() function getVersion()
{ {
$resql=$this->query('SHOW server_version'); $resql=$this->query('SHOW server_version');
$liste=$this->fetch_array($resql); if ($resql)
return $liste['server_version']; {
$liste=$this->fetch_array($resql);
return $liste['server_version'];
}
return '';
} }
/** /**
@@ -429,7 +433,7 @@ class DoliDb
/** /**
* \brief Convert request to PostgreSQL syntax, execute it and return the resultset * \brief Convert request to PostgreSQL syntax, execute it and return the resultset
* \param query SQL query string * \param query SQL query string
* \param usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). * \param usesavepoint 0=Default mode, 1=Run a savepoint before and a rollback to savepoint if error (this allow to have some request with errors inside global transactions).
* \return resource Resultset of answer * \return resource Resultset of answer
*/ */
function query($query,$usesavepoint=0) function query($query,$usesavepoint=0)