require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; $langs->load("errors"); $langs->load("admin"); $mode = GETPOST('mode', 'alpha') ? GETPOST('mode', 'alpha') : (isset($_SESSION['mode']) ? $_SESSION['mode'] : 0); $action = GETPOST('action', 'alpha'); $value = GETPOST('value', 'alpha'); if (!$user->admin) { 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; } /*
/** * Enable a module * * @param string $value Name of module to activate * @param int $withdeps Activate/Disable also all dependencies * @return string Error message or ''; */ function activateModule($value, $withdeps = 1) { global $db, $modules, $langs, $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; } } } $objMod = new $modName($db); // Test if PHP version ok $verphp = versionphparray(); $vermin = isset($objMod->phpmin) ? $objMod->phpmin : 0; if (is_array($vermin) && versioncompare($verphp, $vermin) < 0) { return $langs->trans("ErrorModuleRequirePHPVersion", versiontostring($vermin)); } // Test if Dolibarr version ok $verdol = versiondolibarrarray(); $vermin = isset($objMod->need_dolibarr_version) ? $objMod->need_dolibarr_version : 0; //print 'eee '.versioncompare($verdol,$vermin).' - '.join(',',$verdol).' - '.join(',',$vermin);exit; if (is_array($vermin) && versioncompare($verdol, $vermin) < 0) { return $langs->trans("ErrorModuleRequireDolibarrVersion", versiontostring($vermin)); } // Test if javascript requirement ok if (!empty($objMod->need_javascript_ajax) && empty($conf->use_javascript_ajax)) { return $langs->trans("ErrorModuleRequireJavascript"); } $result = $objMod->init(); if ($result <= 0) { $ret = $objMod->error; } if (!$ret && $withdeps) { if (isset($objMod->depends) && is_array($objMod->depends) && !empty($objMod->depends)) { // Activation des modules dont le module depend $num = count($objMod->depends); for ($i = 0; $i < $num; $i++) { foreach ($modulesdir as $dir) { if (file_exists($dir . $objMod->depends[$i] . ".class.php")) { activateModule($objMod->depends[$i]); } } } } if (isset($objMod->conflictwith) && is_array($objMod->conflictwith) && !empty($objMod->conflictwith)) { // Desactivation des modules qui entrent en conflit $num = count($objMod->conflictwith); for ($i = 0; $i < $num; $i++) { foreach ($modulesdir as $dir) { if (file_exists($dir . $objMod->conflictwith[$i] . ".class.php")) { unActivateModule($objMod->conflictwith[$i], 0); } } } } } return $ret; }
} $conf->global->MAIN_REMOVE_INSTALL_WARNING = 1; } // If we ask to force some modules to be enabled if (!empty($force_install_module)) { if (!defined('DOL_DOCUMENT_ROOT') && !empty($dolibarr_main_document_root)) { define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root); } $tmparray = explode(',', $force_install_module); foreach ($tmparray as $modtoactivate) { $modtoactivatenew = preg_replace('/\\.class\\.php$/i', '', $modtoactivate); print $langs->trans("ActivateModule", $modtoactivatenew) . '<br>'; $file = $modtoactivatenew . '.class.php'; dolibarr_install_syslog('step5: activate module file=' . $file); $res = dol_include_once("/core/modules/" . $file); $res = activateModule($modtoactivatenew, 1); if (!$result) { print 'ERROR in activating module file=' . $file; } } } dolibarr_install_syslog('step5: remove MAIN_NOT_INSTALLED const'); $resql = $db->query("DELETE FROM " . MAIN_DB_PREFIX . "const WHERE " . $db->decrypt('name') . "='MAIN_NOT_INSTALLED'"); if (!$resql) { dol_print_error($db, 'Error in setup program'); } $db->commit(); } } else { print $langs->trans("ErrorFailedToConnect") . "<br>"; }
/** * Enable a module * * @param string $value Name of module to activate * @param int $withdeps Activate/Disable also all dependencies * @return string Error message or ''; */ function activateModule($value, $withdeps = 1) { global $db, $modules, $langs, $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; } } } $objMod = new $modName($db); // Test if PHP version ok $verphp = versionphparray(); $vermin = isset($objMod->phpmin) ? $objMod->phpmin : 0; if (is_array($vermin) && versioncompare($verphp, $vermin) < 0) { return $langs->trans("ErrorModuleRequirePHPVersion", versiontostring($vermin)); } // Test if Dolibarr version ok $verdol = versiondolibarrarray(); $vermin = isset($objMod->need_dolibarr_version) ? $objMod->need_dolibarr_version : 0; //print 'eee'.versioncompare($verdol,$vermin).join(',',$verdol).' - '.join(',',$vermin);exit; if (is_array($vermin) && versioncompare($verdol, $vermin) < 0) { return $langs->trans("ErrorModuleRequireDolibarrVersion", versiontostring($vermin)); } // Test if javascript requirement ok if (!empty($objMod->need_javascript_ajax) && empty($conf->use_javascript_ajax)) { return $langs->trans("ErrorModuleRequireJavascript"); } $result = $objMod->init(); if ($result <= 0) { $ret = $objMod->error; } if (!$ret && $withdeps) { if (isset($objMod->depends) && is_array($objMod->depends) && !empty($objMod->depends)) { // Activation des modules dont le module depend $num = count($objMod->depends); for ($i = 0; $i < $num; $i++) { foreach ($modulesdir as $dir) { if (file_exists($dir . $objMod->depends[$i] . ".class.php")) { activateModule($objMod->depends[$i]); } } } } if (isset($objMod->conflictwith) && is_array($objMod->conflictwith) && !empty($objMod->conflictwith)) { // Desactivation des modules qui entrent en conflit $num = count($objMod->conflictwith); for ($i = 0; $i < $num; $i++) { foreach ($modulesdir as $dir) { if (file_exists($dir . $objMod->conflictwith[$i] . ".class.php")) { unActivateModule($objMod->conflictwith[$i], 0); } } } } } return $ret; }