/** * Disable a module * * @param string $value Nom du module a desactiver * @param int $requiredby 1=Desactive aussi modules dependants * @return string Error message or ''; */ function unActivateModule($value, $requiredby = 1) { global $db, $modules, $conf; // Check parameters if (empty($value)) { return 'ErrorBadParameter'; } $ret = ''; $modName = $value; $modFile = $modName . ".class.php"; // Loop on each directory to fill $modulesdir $modulesdir = dolGetModulesDirs(); // Loop on each modulesdir directories $found = false; foreach ($modulesdir as $dir) { if (file_exists($dir . $modFile)) { $found = @(include_once $dir . $modFile); if ($found) { break; } } } if ($found) { $objMod = new $modName($db); $result = $objMod->remove(); if ($result <= 0) { $ret = $objMod->error; } } else { //print $dir.$modFile; // TODO Replace this after DolibarrModules is moved as abstract class with a try catch to show module we try to disable has not been found or could not be loaded $genericMod = new DolibarrModules($db); $genericMod->name = preg_replace('/^mod/i', '', $modName); $genericMod->rights_class = strtolower(preg_replace('/^mod/i', '', $modName)); $genericMod->const_name = 'MAIN_MODULE_' . strtoupper(preg_replace('/^mod/i', '', $modName)); dol_syslog("modules::unActivateModule Failed to find module file, we use generic function with name " . $modName); $genericMod->_remove(array()); } // Desactivation des modules qui dependent de lui if (!$ret && $requiredby) { $countrb = count($objMod->requiredby); for ($i = 0; $i < $countrb; $i++) { //var_dump($objMod->requiredby[$i]); unActivateModule($objMod->requiredby[$i]); } } return $ret; }
accessforbidden(); } $specialtostring = array(0 => 'common', 1 => 'interfaces', 2 => 'other', 3 => 'functional', 4 => 'marketplace'); /* * Actions */ if ($action == 'set' && $user->admin) { $result = activateModule($value); if ($result) { setEventMessage($result, 'errors'); } header("Location: modules.php?mode=" . $mode); exit; } if ($action == 'reset' && $user->admin) { $result = unActivateModule($value); if ($result) { setEventMessage($result, 'errors'); } header("Location: modules.php?mode=" . $mode); exit; } /* * View */ $form = new Form($db); $_SESSION["mode"] = $mode; $help_url = 'EN:First_setup|FR:Premiers_paramétrages|ES:Primeras_configuraciones'; llxHeader('', $langs->trans("Setup"), $help_url); // Search modules dirs $modulesdir = array();
/** * Disable a module * * @param string $value Nom du module a desactiver * @param int $requiredby 1=Desactive aussi modules dependants * @return string Error message or ''; */ function unActivateModule($value, $requiredby = 1) { global $db, $modules, $conf; // Check parameters if (empty($value)) { return 'ErrorBadParameter'; } $ret = ''; $modName = $value; $modFile = $modName . ".class.php"; // Loop on each directory to fill $modulesdir $modulesdir = array(); foreach ($conf->file->dol_document_root as $type => $dirroot) { $modulesdir[] = $dirroot . "/core/modules/"; $handle = @opendir(dol_osencode($dirroot)); if (is_resource($handle)) { while (($file = readdir($handle)) !== false) { if (is_dir($dirroot . '/' . $file) && substr($file, 0, 1) != '.' && substr($file, 0, 3) != 'CVS' && $file != 'includes') { if (is_dir($dirroot . '/' . $file . '/core/modules/')) { $modulesdir[] = $dirroot . '/' . $file . '/core/modules/'; } } } closedir($handle); } } // Loop on each directory $found = false; foreach ($modulesdir as $dir) { if (file_exists($dir . $modFile)) { $found = @(include_once $dir . $modFile); if ($found) { break; } } } if ($found) { $objMod = new $modName($db); $result = $objMod->remove(); } else { // TODO Cannot instantiate abstract class //$genericMod = new DolibarrModul($db); //$genericMod->name=preg_replace('/^mod/i','',$modName); //$genericMod->rights_class=strtolower(preg_replace('/^mod/i','',$modName)); //$genericMod->const_name='MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',$modName)); dol_syslog("modules::unActivateModule Failed to find module file, we use generic function with name " . $modName); //$genericMod->_remove(); } // Desactivation des modules qui dependent de lui if ($requiredby) { $countrb = count($objMod->requiredby); for ($i = 0; $i < $countrb; $i++) { unActivateModule($objMod->requiredby[$i]); } } return $ret; }