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 // Main menu entries
$this->menus = array(); // List of menus to add $this->menus = array(); // List of menus to add
$r=0; $r=1;
// Example: // 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); // $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 <?php
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org> * Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Éric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * 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 \brief Enable a module
\param value Nom du module a activer \param value Nom du module a activer
\param withdeps Active/désactive aussi les dépendances \param withdeps Active/desactive aussi les dependances
\return string Error message or '';
*/ */
function Activate($value,$withdeps=1) function Activate($value,$withdeps=1)
{ {
@ -68,6 +69,8 @@ function Activate($value,$withdeps=1)
$modName = $value; $modName = $value;
$ret='';
// Activation du module // Activation du module
if ($modName) if ($modName)
{ {
@ -91,12 +94,13 @@ function Activate($value,$withdeps=1)
return $langs->trans("ErrorModuleRequireDolibarrVersion",versiontostring($vermin)); return $langs->trans("ErrorModuleRequireDolibarrVersion",versiontostring($vermin));
} }
$objMod->init(); $result=$objMod->init();
if ($result <= 0) $ret=$objMod->error;
} }
if ($withdeps) 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++) for ($i = 0; $i < sizeof($objMod->depends); $i++)
{ {
Activate($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 \brief Disable a module
\param value Nom du module a désactiver \param value Nom du module a desactiver
\param requiredby 1=Desactive aussi modules dépendants \param requiredby 1=Desactive aussi modules dependants
*/ */
function UnActivate($value,$requiredby=1) function UnActivate($value,$requiredby=1)
{ {
global $db, $modules; global $db, $modules;
$modName = $value; $modName = $value;
// Desactivation du module $ret='';
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 // Desactivation du module
if ($requiredby) if ($modName)
{ {
for ($i = 0; $i < sizeof($objMod->requiredby); $i++) $file = $modName . ".class.php";
{ include_once(DOL_DOCUMENT_ROOT."/includes/modules/$file");
UnActivate($objMod->requiredby[$i]); $objMod = new $modName($db);
} $result=$objMod->remove();
} }
return 0; // 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 // Recherche les modules
$dir = DOL_DOCUMENT_ROOT . "/includes/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); $handle=opendir($dir);
$filename = array(); $filename = array();
$modules = array(); $modules = array();

View File

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