public function getLoginPageOptions($parameters, &$object, &$action, HookManager $hookManager) { global $langs; require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; $langs->load('otp@otp'); if (versioncompare(versiondolibarrarray(), array('3', '8', '0')) >= 0) { $this->results = array('options' => array('table' => '<tr> <td class="nowrap center valignmiddle"><input type="text" name="otp" class="flat" size="20" id="otp" tabindex="3" placeholder="' . $langs->trans('OTPCode') . '"></td></tr>')); } else { $this->results = array('options' => array('table' => '<tr> <td> <label for="otp"><strong>' . $langs->trans('OTPCode') . '</strong></label></td><td><input type="text" name="otp" class="flat" size="15" id="otp" tabindex="3"></td></tr>')); } }
print '<td align="right">' . $langs->trans("Failed") . '</td></tr>'; $db->rollback(); } } } else { print '<div class="error">' . $langs->trans("Error") . ' ' . $db->lasterror() . '</div>'; } } } } /* * Remove deprecated indexes and constraints for Mysql */ if ($ok && preg_match('/mysql/', $db->type)) { $versioncommande = array(4, 0, 0); if (count($versioncommande) && count($versionarray) && versioncompare($versioncommande, $versionarray) <= 0) { // Suppression vieilles contraintes sans noms et en doubles // Les contraintes indesirables ont un nom qui commence par 0_ ou se termine par ibfk_999 $listtables = array(MAIN_DB_PREFIX . 'adherent_options', MAIN_DB_PREFIX . 'bank_class', MAIN_DB_PREFIX . 'c_ecotaxe', MAIN_DB_PREFIX . 'c_methode_commande_fournisseur', MAIN_DB_PREFIX . 'c_input_method'); $listtables = $db->DDLListTables($conf->db->name, ''); foreach ($listtables as $val) { // Database prefix filter if (preg_match('/^' . MAIN_DB_PREFIX . '/', $val)) { //print "x".$val."<br>"; $sql = "SHOW CREATE TABLE " . $val; $resql = $db->query($sql); if ($resql) { $values = $db->fetch_array($resql); $i = 0; $createsql = $values[1]; while (preg_match('/CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`/i', $createsql, $reg) && $i < 100) {
$versionfrom = $migarray['from']; $versionto = $migarray['to']; $versionarray = preg_split('/[\\.-]/', $version); $dolibarrversionfromarray = preg_split('/[\\.-]/', $versionfrom); $dolibarrversiontoarray = preg_split('/[\\.-]/', $versionto); // Define string newversionxxx that are used for text to show $newversionfrom = preg_replace('/(\\.[0-9]+)$/i', '.*', $versionfrom); $newversionto = preg_replace('/(\\.[0-9]+)$/i', '.*', $versionto); $newversionfrombis = ''; if (versioncompare($dolibarrversiontoarray, $versionarray) < -2) { $newversionfrombis = ' ' . $langs->trans("or") . ' ' . $versionto; } if ($ok) { if (count($dolibarrlastupgradeversionarray) >= 2) { // Now we check if this is the first qualified choice if ($allowupgrade && empty($foundrecommandedchoice) && (versioncompare($dolibarrversiontoarray, $dolibarrlastupgradeversionarray) > 0 || versioncompare($dolibarrversiontoarray, $versionarray) < -2)) { $foundrecommandedchoice = 1; // To show only once $recommended_choice = true; } } else { // We can not recommand a choice. // A version of install may be known, but we need last upgrade. } } $choice .= '<tr class="listofchoices ' . ($recommended_choice ? 'choiceselected' : '') . '">'; $choice .= '<td class="listofchoices nowrap" align="center"><b>' . $langs->trans("Upgrade") . '<br>' . $newversionfrom . $newversionfrombis . ' -> ' . $newversionto . '</b></td>'; $choice .= '<td class="listofchoices">'; $choice .= $langs->trans("UpgradeDesc"); if ($recommended_choice) { $choice .= '<br>';
/** * Enable a module * @param value Name of module to activate * @param withdeps Activate/Disable also all dependencies * @return string Error message or ''; */ function Activate($value,$withdeps=1) { global $db, $modules, $langs, $conf; $modName = $value; $ret=''; // Activate module if ($modName) { $modFile = $modName . ".class.php"; // Loop on each directory $found=false; foreach ($conf->file->dol_document_root as $type => $dirroot) { $modulesdir[] = $dirroot."/includes/modules/"; if ($type == 'alt') { $handle=@opendir($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 . '/includes/modules/')) { $modulesdir[] = $dirroot . '/' . $file . '/includes/modules/'; } } } closedir($handle); } } } 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 (is_array($objMod->depends) && !empty($objMod->depends)) { // Activation des modules dont le module depend for ($i = 0; $i < sizeof($objMod->depends); $i++) { if (file_exists(DOL_DOCUMENT_ROOT."/includes/modules/".$objMod->depends[$i].".class.php")) { Activate($objMod->depends[$i]); } } } if (isset($objMod->conflictwith) && is_array($objMod->conflictwith)) { // Desactivation des modules qui entrent en conflit for ($i = 0; $i < sizeof($objMod->conflictwith); $i++) { if (file_exists(DOL_DOCUMENT_ROOT."/includes/modules/".$objMod->conflictwith[$i].".class.php")) { UnActivate($objMod->conflictwith[$i],0); } } } } return $ret; }
// Define string newversionxxx that are used for text to show $newversionfrom=preg_replace('/(\.[0-9]+)$/i','.*',$versionfrom); $newversionto=preg_replace('/(\.[0-9]+)$/i','.*',$versionto); $newversionfrombis=''; if (versioncompare($dolibarrversiontoarray,$versionarray) < -2) // From x.y.z -> x.y.z+1 { $newversionfrombis=' '.$langs->trans("or").' '.$versionto; } if ($ok) { if (count($dolibarrlastupgradeversionarray) >= 2) // If a database access is available and last upgrade version is known { // Now we check if this is the first qualified choice if ($allowupgrade && empty($foundrecommandedchoice) && (versioncompare($dolibarrversiontoarray,$dolibarrlastupgradeversionarray) > 0 || versioncompare($dolibarrversiontoarray,$versionarray) < -2) ) { $foundrecommandedchoice=1; // To show only once $recommended_choice = true; } } else { // We can not recommand a choice. // A version of install may be known, but we need last upgrade. } } $choice .= '<tr class="listofchoices '.($recommended_choice ? 'choiceselected' : '').'">'; $choice .= '<td class="listofchoices nowrap" align="center"><b>'.$langs->trans("Upgrade").'<br>'.$newversionfrom.$newversionfrombis.' -> '.$newversionto.'</b></td>'; $choice .= '<td class="listofchoices">';
require_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php'; } // Need 22ko memory // If install or upgrade process not done or not completely finished, we call the install page. if (!empty($conf->global->MAIN_NOT_INSTALLED) || !empty($conf->global->MAIN_NOT_UPGRADED)) { dol_syslog("main.inc: A previous install or upgrade was not complete. Redirect to install page.", LOG_WARNING); header("Location: " . DOL_URL_ROOT . "/install/index.php"); exit; } // If an upgrade process is required, we call the install page. if (!empty($conf->global->MAIN_VERSION_LAST_UPGRADE) && $conf->global->MAIN_VERSION_LAST_UPGRADE != DOL_VERSION || empty($conf->global->MAIN_VERSION_LAST_UPGRADE) && !empty($conf->global->MAIN_VERSION_LAST_INSTALL) && $conf->global->MAIN_VERSION_LAST_INSTALL != DOL_VERSION) { $versiontocompare = empty($conf->global->MAIN_VERSION_LAST_UPGRADE) ? $conf->global->MAIN_VERSION_LAST_INSTALL : $conf->global->MAIN_VERSION_LAST_UPGRADE; require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; $dolibarrversionlastupgrade = preg_split('/[.-]/', $versiontocompare); $dolibarrversionprogram = preg_split('/[.-]/', DOL_VERSION); $rescomp = versioncompare($dolibarrversionprogram, $dolibarrversionlastupgrade); if ($rescomp > 0) { dol_syslog("main.inc: database version " . $versiontocompare . " is lower than programs version " . DOL_VERSION . ". Redirect to install page.", LOG_WARNING); header("Location: " . DOL_URL_ROOT . "/install/index.php"); exit; } } // Creation of a token against CSRF vulnerabilities if (!defined('NOTOKENRENEWAL')) { $token = dol_hash(uniqid(mt_rand(), TRUE)); // Generates a hash of a random number // roulement des jetons car cree a chaque appel if (isset($_SESSION['newtoken'])) { $_SESSION['token'] = $_SESSION['newtoken']; } $_SESSION['newtoken'] = $token;
$db->commit(); } else { print '<tr><td>' . $langs->trans("RemoveDuplicates") . '</td>'; print '<td align="right">' . $langs->trans("Failed") . '</td></tr>'; $db->rollback(); } } } else { print '<div class="error">' . $langs->trans("Error") . '</div>'; } /* * Remove deprecated indexes and constraints for Mysql */ if ($ok && preg_match('/mysql/', $db->type)) { $versioncommande = explode('.', '4.0'); if (sizeof($versioncommande) && sizeof($versionarray) && versioncompare($versioncommande, $versionarray) <= 0) { // Suppression vieilles contraintes sans noms et en doubles // Les contraintes indesirables ont un nom qui commence par 0_ ou se termine par ibfk_999 $listtables = array(MAIN_DB_PREFIX . 'adherent_options', MAIN_DB_PREFIX . 'bank_class', MAIN_DB_PREFIX . 'c_ecotaxe', MAIN_DB_PREFIX . 'c_methode_commande_fournisseur', MAIN_DB_PREFIX . 'c_input_method'); $listtables = $db->DDLListTables($conf->db->name, ''); foreach ($listtables as $val) { // Database prefix filter if (preg_match('/^' . MAIN_DB_PREFIX . '/', $val)) { //print "x".$val."<br>"; $sql = "SHOW CREATE TABLE " . $val; $resql = $db->query($sql); if ($resql) { $values = $db->fetch_array($resql); $i = 0; $createsql = $values[1]; while (preg_match('/CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`/i', $createsql, $reg) && $i < 100) {
} } } else { print '<div class="error">'.$langs->trans("Error").'</div>'; } /* * Remove deprecated indexes and constraints for Mysql */ if ($ok && preg_match('/mysql/',$db->type)) { $versioncommande=explode('.','4.0'); if (sizeof($versioncommande) && sizeof($versionarray) && versioncompare($versioncommande,$versionarray) <= 0) // Si mysql >= 4.0 { // Suppression vieilles contraintes sans noms et en doubles // Les contraintes indesirables ont un nom qui commence par 0_ ou se termine par ibfk_999 $listtables=array( 'llx_adherent_options', 'llx_bank_class', 'llx_c_ecotaxe', 'llx_c_methode_commande_fournisseur', // table renamed 'llx_c_input_method'); $listtables = $db->DDLListTables($conf->db->name,''); foreach ($listtables as $val) { //print "x".$val."<br>"; $sql = "SHOW CREATE TABLE ".$val; $resql = $db->query($sql);
/** * Adds a product to the order * * @param Commande $object Order object * @param Product $prod Product to add * @param int $qty Quantity of the product * @throws Exception */ public static function addOrderLine(Commande $object, Product $prod, $qty) { global $db, $conf, $mysoc, $langs; require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; $tva_tx = get_default_tva($mysoc, $object->thirdparty, $prod->id); $tva_npr = get_default_npr($mysoc, $object->thirdparty, $prod->id); if (!empty($conf->global->PRODUIT_MULTIPRICES) && !empty($object->thirdparty->price_level)) { $pu_ht = $prod->multiprices[$object->thirdparty->price_level]; $pu_ttc = $prod->multiprices_ttc[$object->thirdparty->price_level]; $price_base_type = $prod->multiprices_base_type[$object->thirdparty->price_level]; if (isset($prod->multiprices_tva_tx[$object->thirdparty->price_level])) { $tva_tx = $prod->multiprices_tva_tx[$object->thirdparty->price_level]; } if (isset($prod->multiprices_recuperableonly[$object->thirdparty->price_level])) { $tva_npr = $prod->multiprices_recuperableonly[$object->thirdparty->price_level]; } } elseif (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; $prodcustprice = new Productcustomerprice($db); $filter = array('t.fk_product' => $prod->id, 't.fk_soc' => $object->thirdparty->id); $result = $prodcustprice->fetch_all('', '', 0, 0, $filter); if ($result >= 0) { if (count($prodcustprice->lines) > 0) { $pu_ht = price($prodcustprice->lines[0]->price); $pu_ttc = price($prodcustprice->lines[0]->price_ttc); $price_base_type = $prodcustprice->lines[0]->price_base_type; $prod->tva_tx = $prodcustprice->lines[0]->tva_tx; } else { $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_base_type = $prod->price_base_type; } } else { throw new Exception($prodcustprice->error); } } else { $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_base_type = $prod->price_base_type; } // if price ht is forced (ie: calculated by margin rate and cost price) if (!empty($price_ht)) { $pu_ht = price2num($price_ht, 'MU'); $pu_ttc = price2num($pu_ht * (1 + $tva_tx / 100), 'MU'); } elseif ($tva_tx != $prod->tva_tx) { if ($price_base_type != 'HT') { $pu_ht = price2num($pu_ttc / (1 + $tva_tx / 100), 'MU'); } else { $pu_ttc = price2num($pu_ht * (1 + $tva_tx / 100), 'MU'); } } // Define output language if (!empty($conf->global->MAIN_MULTILANGS) && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) { $outputlangs = $langs; $newlang = ''; if (empty($newlang) && GETPOST('lang_id')) { $newlang = GETPOST('lang_id'); } if (empty($newlang)) { $newlang = $object->thirdparty->default_lang; } if (!empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); } $desc = !empty($prod->multilangs[$outputlangs->defaultlang]["description"]) ? $prod->multilangs[$outputlangs->defaultlang]["description"] : $prod->description; } else { $desc = $prod->description; } // Add custom code and origin country into description if (empty($conf->global->MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE) && (!empty($prod->customcode) || !empty($prod->country_code))) { $tmptxt = '('; if (!empty($prod->customcode)) { $tmptxt .= $langs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode; } if (!empty($prod->customcode) && !empty($prod->country_code)) { $tmptxt .= ' - '; } if (!empty($prod->country_code)) { $tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0); } $tmptxt .= ')'; $desc = dol_concatdesc($desc, $tmptxt); } //3.9.0 version added support for price units if (versioncompare(versiondolibarrarray(), array(3, 9, 0)) >= 0) { $fk_unit = $prod->fk_unit; } else { $fk_unit = null; } // Local Taxes $localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty); $localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty); $info_bits = 0; if ($tva_npr) { $info_bits |= 0x1; } //Percent remise if (!empty($object->thirdparty->remise_percent)) { $percent_remise = $object->thirdparty->remise_percent; } else { $percent_remise = 0; } // Insert line $result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, $prod->id, $percent_remise, $info_bits, 0, $price_base_type, $pu_ttc, '', '', $prod->type, -1, 0, 0, null, 0, '', 0, $fk_unit); if ($result < 0) { throw new Exception($langs->trans('ErrorAddOrderLine', $prod->ref)); } }
$versioncommande = explode('.', $reg[1]); //print var_dump($versioncommande); //print var_dump($versionarray); if (count($versioncommande) && count($versionarray) && versioncompare($versioncommande, $versionarray) <= 0) { // Version qualified, delete SQL comments $buf = preg_replace('/^--\sV([0-9\.]+)/i', '', $buf); //print "Ligne $i qualifiee par version: ".$buf.'<br>'; } } if ($choix == 2 && preg_match('/^--\sPOSTGRESQL\sV([0-9\.]+)/i', $buf, $reg)) { $versioncommande = explode('.', $reg[1]); //print var_dump($versioncommande); //print var_dump($versionarray); if (count($versioncommande) && count($versionarray) && versioncompare($versioncommande, $versionarray) <= 0) { // Version qualified, delete SQL comments $buf = preg_replace('/^--\sPOSTGRESQL\sV([0-9\.]+)/i', '', $buf); //print "Ligne $i qualifiee par version: ".$buf.'<br>'; } } // Ajout ligne si non commentaire if (!preg_match('/^--/i', $buf)) $buffer .= $buf; } fclose($fp); // Si plusieurs requetes, on boucle sur chaque $listesql = explode(';', $buffer); foreach ($listesql as $req) {
/** * Reload menu if dynamic menus, if modified by version * * @param DoliDB $db Database handler * @param Translate $langs Object langs * @param Conf $conf Object conf * @param string $versionto Version target * @return void */ function migrate_reload_menu($db, $langs, $conf, $versionto) { global $conf; dolibarr_install_syslog("upgrade2::migrate_reload_menu"); // Define list of menu handlers to initialize $listofmenuhandler = array(); $versiontoarray = explode('.', $versionto); // Script for VX (X<2.9) -> V2.9 $afterversionarray = explode('.', '2.8.9'); $beforeversionarray = explode('.', '2.9.9'); if (versioncompare($versiontoarray, $afterversionarray) >= 0 && versioncompare($versiontoarray, $beforeversionarray) <= 0) { $listofmenuhandler['auguria'] = 1; // We set here only dynamic menu handlers } // Script for VX (X<3.2) -> V3.2 $afterversionarray = explode('.', '3.1.9'); $beforeversionarray = explode('.', '3.2.9'); if (versioncompare($versiontoarray, $afterversionarray) >= 0 && versioncompare($versiontoarray, $beforeversionarray) <= 0) { $listofmenuhandler['auguria'] = 1; // We set here only dynamic menu handlers } foreach ($listofmenuhandler as $key => $val) { print '<tr><td colspan="4">'; //print "x".$key; print '<br>'; print '<b>' . $langs->trans('Upgrade') . '</b>: ' . $langs->trans('MenuHandler') . " " . $key . "<br>\n"; // Load sql ini_menu_handler.sql file $dir = DOL_DOCUMENT_ROOT . "/core/menus/"; $file = 'init_menu_' . $key . '.sql'; if (file_exists($dir . $file)) { $result = run_sql($dir . $file, 1, '', 1, $key); } print '</td></tr>'; } }
if ($row['rowid'] == $user->id) { echo '<strong>'; } echo $row['firstname'] . ' ' . $row['lastname'] . ' :'; echo '<PRE>' . dol_buildpath('cdav/server.php', 2) . '/calendars/' . $user->login . '/' . $row['rowid'] . '-cal-' . $row['login'] . '</PRE><br/>'; if ($row['rowid'] == $user->id) { echo '</strong>'; } } } else { echo '<PRE>' . dol_buildpath('cdav/server.php', 2) . '/calendars/' . $user->login . '/' . $user->id . '-cal-' . $user->login . '</PRE>'; } } elseif ($type == 'ICS') { echo '<h3>' . $langs->trans('URLforICS') . '</h3>'; if (isset($user->rights->agenda->allactions->read) && $user->rights->agenda->allactions->read) { if (versioncompare(versiondolibarrarray(), array(3, 7, 9)) > 0) { $fk_soc_fieldname = 'fk_soc'; } else { $fk_soc_fieldname = 'fk_societe'; } $sql = 'SELECT u.rowid, u.login, u.firstname, u.lastname FROM ' . MAIN_DB_PREFIX . 'user u WHERE ' . $fk_soc_fieldname . ' IS NULL ORDER BY login'; $result = $db->query($sql); while ($row = $db->fetch_array($result)) { echo '<h4>' . $row['firstname'] . ' ' . $row['lastname'] . ' :</h4>'; echo "<PRE>" . $langs->trans('Full') . " :\n" . dol_buildpath('cdav/ics.php', 2) . '?token=' . base64url_encode(mcrypt_ecb(MCRYPT_BLOWFISH, CDAV_URI_KEY, $row['rowid'] . '+ø+full', MCRYPT_ENCRYPT)) . "\n\n"; echo $langs->trans('NoLabel') . " :\n" . dol_buildpath('cdav/ics.php', 2) . '?token=' . base64url_encode(mcrypt_ecb(MCRYPT_BLOWFISH, CDAV_URI_KEY, $row['rowid'] . '+ø+nolabel', MCRYPT_ENCRYPT)) . '</PRE><br/>'; } } else { echo "<PRE>" . $langs->trans('Full') . " :\n" . dol_buildpath('cdav/ics.php', 2) . '?token=' . base64url_encode(mcrypt_ecb(MCRYPT_BLOWFISH, CDAV_URI_KEY, $user->id . '+ø+full', MCRYPT_ENCRYPT)) . "\n\n";
print '<ul>'; print '<li><strong>' . DOL_VERSION . '</strong>'; $result = getURLContent('http://sourceforge.net/projects/dolibarr/rss'); //var_dump($result['content']); $sfurl = simplexml_load_string($result['content']); if ($sfurl) { $i = 0; $version = '0.0'; while (!empty($sfurl->channel[0]->item[$i]->title) && $i < 10000) { $title = $sfurl->channel[0]->item[$i]->title; if (preg_match('/([0-9]+\\.([0-9\\.]+))/', $title, $reg)) { $newversion = $reg[1]; $newversionarray = explode('.', $newversion); $versionarray = explode('.', $version); //var_dump($newversionarray);var_dump($versionarray); if (versioncompare($newversionarray, $versionarray) > 0) { $version = $newversion; } } $i++; } // Show version if ($version != '0.0') { print ' (' . $langs->trans("LastStableVersion") . ': <b>' . $version . '</b>'; if (DOL_VERSION == $version) { $youuselaststable = 1; print $langs->trans("YouUseLastStableVersion"); } print ')'; } print ' / <a href="http://www.gnu.org/copyleft/gpl.html">GNU-GPL v3+</a></li>';
print "<td align=\"center\">\n"; //if ($conf->global->COMPANY_ADDON_PDF != "$name") //{ print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">'; print img_picto($langs->trans("Enabled"),'on'); print '</a>'; //} //else //{ // print img_picto($langs->trans("Enabled"),'on'); //} print "</td>"; } else { if (versioncompare($module->phpmin,versionphparray()) > 0) { print "<td align=\"center\">\n"; print img_picto(dol_escape_htmltag($langs->trans("ErrorModuleRequirePHPVersion",join('.',$module->phpmin))),'off'); print "</td>"; } else { print "<td align=\"center\">\n"; print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'off').'</a>'; print "</td>"; } } // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name;
/** * 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; }
} else { $error_msg[] = '<span class="normal bold red">' . $value['directory'] . ' ' . $MESSAGE['RECORD_MODIFIED_FAILED'] . '</span> '; } } } } /** * Now check modules folder with entries in addons */ $modules = scan_current_dir(LEPTON_PATH . '/modules'); if (count($modules['path']) > 0) { foreach ($modules['path'] as &$value) { $code_version = get_modul_version($value); $db_version = get_modul_version($value, false); if ($db_version != null && $code_version != null) { if (versioncompare($db_version, $code_version, '>')) { $error_msg[] = '<span class="normal bold red">' . $value . ' ( ' . $db_version . ' > ' . $code_version . ' ) ' . $MESSAGE['GENERIC_MODULE_VERSION_ERROR'] . '</span>'; continue; } else { require LEPTON_PATH . '/modules/' . $value . "/info.php"; load_module(LEPTON_PATH . '/modules/' . $value); $msg[] = '<span class="normal bold green">' . $value . ' :: ' . $MESSAGE['ADDON_MODULES_RELOADED'] . '</span>'; } } } } else { $error_msg[] = '<span class="normal bold red">' . $MESSAGE['ADDON_ERROR_RELOAD'] . '</span>'; } break; case 'reload_templates': $templates = scan_current_dir(LEPTON_PATH . '/templates');
$db->commit(); } } else { print $langs->trans("ErrorFailedToConnect") . "<br>"; } } elseif (empty($action) || preg_match('/upgrade/i', $action)) { if ($db->connected) { $conf->setValues($db); // Define if we need to update the MAIN_VERSION_LAST_UPGRADE value in database $tagdatabase = false; if (empty($conf->global->MAIN_VERSION_LAST_UPGRADE)) { $tagdatabase = true; } else { $mainversionlastupgradearray = preg_split('/[.-]/', $conf->global->MAIN_VERSION_LAST_UPGRADE); $targetversionarray = preg_split('/[.-]/', $targetversion); if (versioncompare($targetversionarray, $mainversionlastupgradearray) > 0) { $tagdatabase = true; } } if ($tagdatabase) { dolibarr_install_syslog('step5: set MAIN_VERSION_LAST_UPGRADE const to value ' . $targetversion); $resql = $db->query("DELETE FROM " . MAIN_DB_PREFIX . "const WHERE " . $db->decrypt('name') . "='MAIN_VERSION_LAST_UPGRADE'"); if (!$resql) { dol_print_error($db, 'Error in setup program'); } $resql = $db->query("INSERT INTO " . MAIN_DB_PREFIX . "const(name,value,type,visible,note,entity) VALUES (" . $db->encrypt('MAIN_VERSION_LAST_UPGRADE', 1) . "," . $db->encrypt($targetversion, 1) . ",'chaine',0,'Dolibarr version for last upgrade',0)"); if (!$resql) { dol_print_error($db, 'Error in setup program'); } $conf->global->MAIN_VERSION_LAST_UPGRADE = $targetversion; } else {
/** * testConvertTime2Seconds * * @return void */ public function testVersionCompare() { global $conf,$user,$langs,$db; $conf=$this->savconf; $user=$this->savuser; $langs=$this->savlangs; $db=$this->savdb; $result=versioncompare(array(3,1,-4),array(3,1,1)); print __METHOD__." result=".$result."\n"; $this->assertEquals(-3,$result); $result=versioncompare(array(3,1,0),array(3,1,1)); print __METHOD__." result=".$result."\n"; $this->assertEquals(-3,$result); $result=versioncompare(array(3,1,0),array(3,2,0)); print __METHOD__." result=".$result."\n"; $this->assertEquals(-2,$result); $result=versioncompare(array(3,1,0),array(3,1,0)); print __METHOD__." result=".$result."\n"; $this->assertEquals(0,$result); return $result; }
} // If upgrade elseif (preg_match('/upgrade/i',$action)) { if ($db->connected == 1) { $conf->setValues($db); // Define if we need to update the MAIN_VERSION_LAST_UPGRADE value in database $tagdatabase=false; if (empty($conf->global->MAIN_VERSION_LAST_UPGRADE)) $tagdatabase=true; // We don't know what it was before, so now we consider we are version choosed. else { $mainversionlastupgradearray=preg_split('/[.-]/',$conf->global->MAIN_VERSION_LAST_UPGRADE); $targetversionarray=preg_split('/[.-]/',$targetversion); if (versioncompare($targetversionarray,$mainversionlastupgradearray) > 0) $tagdatabase=true; } if ($tagdatabase) { dolibarr_install_syslog('install/etape5.php set MAIN_VERSION_LAST_UPGRADE const to value '.$targetversion, LOG_DEBUG); $resql=$db->query("DELETE FROM llx_const WHERE ".$db->decrypt('name')."='MAIN_VERSION_LAST_UPGRADE'"); if (! $resql) dol_print_error($db,'Error in setup program'); $resql=$db->query("INSERT INTO llx_const(name,value,type,visible,note,entity) values(".$db->encrypt('MAIN_VERSION_LAST_UPGRADE',1).",".$db->encrypt($targetversion,1).",'chaine',0,'Dolibarr version for last upgrade',0)"); if (! $resql) dol_print_error($db,'Error in setup program'); $conf->global->MAIN_VERSION_LAST_UPGRADE=$targetversion; } else { dolibarr_install_syslog('install/etape5.php We run an upgrade to version '.$targetversion.' but database was already upgraded to '.$conf->global->MAIN_VERSION_LAST_UPGRADE.'. We keep MAIN_VERSION_LAST_UPGRADE as it is.', LOG_DEBUG); }