Gestion erreur sur activation modules

This commit is contained in:
Laurent Destailleur 2008-01-30 00:15:59 +00:00
parent bb767ee54c
commit 57819c7a16
3 changed files with 182 additions and 124 deletions

View File

@ -113,11 +113,11 @@ class modMyModule extends DolibarrModules
// Main menu entries
$this->menus = array(); // List of menus to add
$r=0;
$r=1;
// Example:
// $r++;
// $this->menu[$r]=array('fk_menu'=>0,'type'=>'top','titre'=>'Agenda','mainmenu'=>'agenda','leftmenu'=>'agenda','url'=>'/comm/action/index.php','langs'=>'commercial','position'=>100,'perms'=>'$user->rights->agenda->myactions->read','target'=>'','user'=>0);
// $r++;
}

View File

@ -1,8 +1,8 @@
<?php
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Éric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -58,9 +58,10 @@ if ($_GET["action"] == 'reset' && $user->admin)
}
/**
\brief Active un module
\param value Nom du module a activer
\param withdeps Active/désactive aussi les dépendances
\brief Enable a module
\param value Nom du module a activer
\param withdeps Active/desactive aussi les dependances
\return string Error message or '';
*/
function Activate($value,$withdeps=1)
{
@ -68,6 +69,8 @@ function Activate($value,$withdeps=1)
$modName = $value;
$ret='';
// Activation du module
if ($modName)
{
@ -91,12 +94,13 @@ function Activate($value,$withdeps=1)
return $langs->trans("ErrorModuleRequireDolibarrVersion",versiontostring($vermin));
}
$objMod->init();
$result=$objMod->init();
if ($result <= 0) $ret=$objMod->error;
}
if ($withdeps)
{
// Activation des modules dont le module dépend
// Activation des modules dont le module depend
for ($i = 0; $i < sizeof($objMod->depends); $i++)
{
Activate($objMod->depends[$i]);
@ -109,40 +113,42 @@ function Activate($value,$withdeps=1)
}
}
return 0;
return $ret;
}
/**
\brief Désactive un module
\param value Nom du module a désactiver
\param requiredby 1=Desactive aussi modules dépendants
\brief Disable a module
\param value Nom du module a desactiver
\param requiredby 1=Desactive aussi modules dependants
*/
function UnActivate($value,$requiredby=1)
{
global $db, $modules;
$modName = $value;
// Desactivation du module
if ($modName)
{
$file = $modName . ".class.php";
include_once(DOL_DOCUMENT_ROOT."/includes/modules/$file");
$objMod = new $modName($db);
$objMod->remove();
}
// Desactivation des modules qui dependent de lui
if ($requiredby)
{
for ($i = 0; $i < sizeof($objMod->requiredby); $i++)
{
UnActivate($objMod->requiredby[$i]);
}
}
return 0;
global $db, $modules;
$modName = $value;
$ret='';
// Desactivation du module
if ($modName)
{
$file = $modName . ".class.php";
include_once(DOL_DOCUMENT_ROOT."/includes/modules/$file");
$objMod = new $modName($db);
$result=$objMod->remove();
}
// Desactivation des modules qui dependent de lui
if ($requiredby)
{
for ($i = 0; $i < sizeof($objMod->requiredby); $i++)
{
UnActivate($objMod->requiredby[$i]);
}
}
return $ret;
}
@ -158,7 +164,7 @@ print_fiche_titre($langs->trans("ModulesSetup"),'','setup');
// Recherche les modules
$dir = DOL_DOCUMENT_ROOT . "/includes/modules/";
// Charge tableaux modules, nom, numero, orders depuis répertoire dir
// Charge tableaux modules, nom, numero, orders depuis r<EFBFBD>pertoire dir
$handle=opendir($dir);
$filename = array();
$modules = array();

View File

@ -61,87 +61,103 @@ class DolibarrModules
}
/**
* \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
* \return int 1 si ok, 0 si erreur
*/
function _init($array_sql)
{
global $langs;
$err='';
// Insere une entree dans llx_dolibarr_modules
$err+=$this->_dbactive();
// Insere la constante d'activation module
$err+=$this->_active();
// Insere les constantes associees au module dans llx_const
$err+=$this->insert_const();
// Insere les boites dans llx_boxes_def
$err+=$this->insert_boxes();
// Insere les permissions associees au module actif dans llx_rights_def
$err+=$this->insert_permissions();
// Insere les constantes associees au module dans llx_const
$err+=$this->insert_menus();
// Cree les repertoires
if (is_array($this->dirs))
{
foreach ($this->dirs as $key => $dir)
{
if ($dir && ! file_exists($dir))
{
if (create_exdir($dir) < 0)
{
$this->error = $langs->trans("ErrorCanNotCreateDir",$dir);
dolibarr_syslog("DolibarrModules::_init error");
dolibarr_syslog("ErrorCanNotCreateDir $dir");
}
}
}
}
// Execute les requetes sql complementaires
for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
{
$sql=$array_sql[$i];
$result=$this->db->query($sql);
if (! $result)
{
dolibarr_syslog("DolibarrModules.class::init Error sql=".$sql." - ".$this->db->error());
$err++;
}
}
// Cree les documents generables
if (is_array($this->docs))
{
foreach ($this->docs as $key => $doc)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."document_generator (rowid,name,classfile,class) VALUES ";
$sql .= "(".$doc[0].",'".addslashes($doc[1])."','".$doc[2]."','".$doc[3]."');";
$result=$this->db->query($sql);
if (! $result)
{
dolibarr_syslog("DolibarrModules.class::init Error sql=".$sql." - ".$this->db->error());
$err++;
}
}
}
// Renvoi valeur de retour
if ($err > 0) return 0;
return 1;
}
/**
* \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
* \return int 1 si ok, 0 si erreur
*/
function _init($array_sql)
{
global $langs;
$err=0;
$this->db->begin();
// Insere une entree dans llx_dolibarr_modules
if (! $err) $err+=$this->_dbactive();
// Insere la constante d'activation module
if (! $err) $err+=$this->_active();
// Insere les constantes associees au module dans llx_const
if (! $err) $err+=$this->insert_const();
// Insere les boites dans llx_boxes_def
if (! $err) $err+=$this->insert_boxes();
// Insere les permissions associees au module actif dans llx_rights_def
if (! $err) $err+=$this->insert_permissions();
// Insere les constantes associees au module dans llx_const
if (! $err) $err+=$this->insert_menus();
// Execute les requetes sql complementaires
for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
{
if (! $err)
{
$sql=$array_sql[$i];
$result=$this->db->query($sql);
if (! $result)
{
$this->error=$this->db->error();
dolibarr_syslog("DolibarrModules::_init Error sql=".$sql." - ".$this->error, LOG_ERR);
$err++;
}
}
}
// Cree les documents generables
if (is_array($this->docs))
{
foreach ($this->docs as $key => $doc)
{
if (! $err)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."document_generator (rowid,name,classfile,class) VALUES ";
$sql .= "(".$doc[0].",'".addslashes($doc[1])."','".$doc[2]."','".$doc[3]."');";
$result=$this->db->query($sql);
if (! $result)
{
$this->error=$this->db->error();
dolibarr_syslog("DolibarrModules::_init Error sql=".$sql." - ".$this->error, LOG_ERR);
$err++;
}
}
}
}
// Cree les repertoires
if (is_array($this->dirs))
{
foreach ($this->dirs as $key => $dir)
{
if ($dir && ! file_exists($dir))
{
if (create_exdir($dir) < 0)
{
$this->error = $langs->trans("ErrorCanNotCreateDir",$dir);
dolibarr_syslog("DolibarrModules::_init ".$this->error, LOG_ERR);
}
}
}
}
// Renvoi valeur de retour
if (! $err)
{
$this->db->commit();
return 1;
}
else
{
$this->db->rollback();
return 0;
}
}
/**
\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
@ -659,12 +675,30 @@ class DolibarrModules
$err=0;
$this->db->begin();
foreach ($this->menu as $key => $value)
{
$menu = new Menubase($this->db);
$menu->menu_handler='all';
$menu->module=$this->rights_class;
$menu->fk_menu=$this->menu[$key]['fk_menu'];
if ($this->menu[$key]['fk_menu'])
{
$numparent=$this->menu[$key]['fk_menu'];
if (isset($this->menu[$numparent]['rowid']))
{
$menu->fk_menu=$this->menu[$numparent]['rowid'];
}
else
{
$this->error="BadDefinitionOfMenuArrayInModuleDescriptor";
$err++;
}
}
else
{
$menu->fk_menu=0;
}
$menu->type=$this->menu[$key]['type'];
$menu->mainmenu=$this->menu[$key]['mainmenu'];
$menu->titre=$this->menu[$key]['titre'];
@ -675,13 +709,31 @@ class DolibarrModules
$menu->perms=$this->menu[$key]['perms'];
$menu->target=$this->menu[$key]['target'];
$menu->user=$this->menu[$key]['user'];
$result=$menu->create($user);
if ($result <= 0)
{
$err++;
}
if (! $err)
{
$result=$menu->create($user);
if ($result > 0)
{
$this->menu[$key]['rowid']=$result;
}
else
{
$this->error=$menu->error;
$err++;
}
}
}
if (! $err)
{
$this->db->commit();
}
else
{
dolibarr_syslog("DolibarrModules::insert_menus ".$this->error, LOG_ERR);
$this->db->rollback();
}
return $err;
}