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,14 +113,14 @@ 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)
{ {
@ -124,13 +128,15 @@ function UnActivate($value,$requiredby=1)
$modName = $value; $modName = $value;
$ret='';
// Desactivation du module // Desactivation du module
if ($modName) if ($modName)
{ {
$file = $modName . ".class.php"; $file = $modName . ".class.php";
include_once(DOL_DOCUMENT_ROOT."/includes/modules/$file"); include_once(DOL_DOCUMENT_ROOT."/includes/modules/$file");
$objMod = new $modName($db); $objMod = new $modName($db);
$objMod->remove(); $result=$objMod->remove();
} }
// Desactivation des modules qui dependent de lui // Desactivation des modules qui dependent de lui
@ -142,7 +148,7 @@ function UnActivate($value,$requiredby=1)
} }
} }
return 0; 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

@ -63,31 +63,71 @@ 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;
$this->db->begin();
// Insere une entree dans llx_dolibarr_modules // Insere une entree dans llx_dolibarr_modules
$err+=$this->_dbactive(); if (! $err) $err+=$this->_dbactive();
// Insere la constante d'activation module // Insere la constante d'activation module
$err+=$this->_active(); if (! $err) $err+=$this->_active();
// Insere les constantes associees au module dans llx_const // Insere les constantes associees au module dans llx_const
$err+=$this->insert_const(); if (! $err) $err+=$this->insert_const();
// Insere les boites dans llx_boxes_def // Insere les boites dans llx_boxes_def
$err+=$this->insert_boxes(); if (! $err) $err+=$this->insert_boxes();
// Insere les permissions associees au module actif dans llx_rights_def // Insere les permissions associees au module actif dans llx_rights_def
$err+=$this->insert_permissions(); if (! $err) $err+=$this->insert_permissions();
// Insere les constantes associees au module dans llx_const // Insere les constantes associees au module dans llx_const
$err+=$this->insert_menus(); 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 // Cree les repertoires
if (is_array($this->dirs)) if (is_array($this->dirs))
@ -99,48 +139,24 @@ class DolibarrModules
if (create_exdir($dir) < 0) if (create_exdir($dir) < 0)
{ {
$this->error = $langs->trans("ErrorCanNotCreateDir",$dir); $this->error = $langs->trans("ErrorCanNotCreateDir",$dir);
dolibarr_syslog("DolibarrModules::_init error"); dolibarr_syslog("DolibarrModules::_init ".$this->error, LOG_ERR);
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 // Renvoi valeur de retour
if ($err > 0) return 0; if (! $err)
{
$this->db->commit();
return 1; 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,12 +709,30 @@ 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);
if ($result > 0)
{
$this->menu[$key]['rowid']=$result;
}
else
{
$this->error=$menu->error;
$err++; $err++;
} }
} }
}
if (! $err)
{
$this->db->commit();
}
else
{
dolibarr_syslog("DolibarrModules::insert_menus ".$this->error, LOG_ERR);
$this->db->rollback();
}
return $err; return $err;
} }