* Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2011-2013 Juanjo Menent * Copyright (C) 2024 MDW * * 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 * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/admin/barcode.php * \ingroup barcode * \brief Page to setup barcode module */ // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formbarcode.class.php'; // Load translation files required by the page $langs->load("admin"); // Security Check Access if (!$user->admin) { accessforbidden(); } // Get Parameters $action = GETPOST('action', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php /* * Actions */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; if ($action == 'setbarcodeproducton') { $barcodenumberingmodule = GETPOST('value', 'alpha'); $res = dolibarr_set_const($db, "BARCODE_PRODUCT_ADDON_NUM", $barcodenumberingmodule, 'chaine', 0, '', $conf->entity); if ($barcodenumberingmodule == 'mod_barcode_product_standard' && !getDolGlobalString('BARCODE_STANDARD_PRODUCT_MASK')) { $res = dolibarr_set_const($db, "BARCODE_STANDARD_PRODUCT_MASK", '04{0000000000}', 'chaine', 0, '', $conf->entity); } } elseif ($action == 'setbarcodeproductoff') { $res = dolibarr_del_const($db, "BARCODE_PRODUCT_ADDON_NUM", $conf->entity); } if ($action == 'setbarcodethirdpartyon') { $barcodenumberingmodule = GETPOST('value', 'alpha'); $res = dolibarr_set_const($db, "BARCODE_THIRDPARTY_ADDON_NUM", $barcodenumberingmodule, 'chaine', 0, '', $conf->entity); if ($barcodenumberingmodule == 'mod_barcode_thirdparty_standard' && !getDolGlobalString('BARCODE_STANDARD_THIRDPARTY_MASK')) { $res = dolibarr_set_const($db, "BARCODE_STANDARD_THIRDPARTY_MASK", '04{0000000000}', 'chaine', 0, '', $conf->entity); } } elseif ($action == 'setbarcodethirdpartyoff') { $res = dolibarr_del_const($db, "BARCODE_THIRDPARTY_ADDON_NUM", $conf->entity); } if ($action == 'setcoder') { $coder = GETPOST('coder', 'alpha'); $code_id = GETPOSTINT('code_id'); $sqlp = "UPDATE ".MAIN_DB_PREFIX."c_barcode_type"; $sqlp .= " SET coder = '".$db->escape($coder)."'"; $sqlp .= " WHERE rowid = ".((int) $code_id); $sqlp .= " AND entity = ".$conf->entity; $resql = $db->query($sqlp); if (!$resql) { dol_print_error($db); } } elseif ($action == 'update') { $location = GETPOST('GENBARCODE_LOCATION', 'alpha'); $res = dolibarr_set_const($db, "GENBARCODE_LOCATION", $location, 'chaine', 0, '', $conf->entity); $coder_id = GETPOST('PRODUIT_DEFAULT_BARCODE_TYPE', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_DEFAULT_BARCODE_TYPE", $coder_id, 'chaine', 0, '', $conf->entity); $coder_id = GETPOST('GENBARCODE_BARCODETYPE_THIRDPARTY', 'alpha'); $res = dolibarr_set_const($db, "GENBARCODE_BARCODETYPE_THIRDPARTY", $coder_id, 'chaine', 0, '', $conf->entity); if ($res > 0) { setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { setEventMessages($langs->trans("Error"), null, 'errors'); } } elseif ($action == 'updateengine') { $sql = "SELECT rowid, coder"; $sql .= " FROM ".MAIN_DB_PREFIX."c_barcode_type"; $sql .= " WHERE entity = ".$conf->entity; $sql .= " ORDER BY code"; $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); $i = 0; while ($i < $num) { $obj = $db->fetch_object($resql); if (GETPOST('coder'.$obj->rowid, 'alpha')) { $coder = GETPOST('coder'.$obj->rowid, 'alpha'); $code_id = $obj->rowid; $sqlp = "UPDATE ".MAIN_DB_PREFIX."c_barcode_type"; $sqlp .= " SET coder = '".$db->escape($coder)."'"; $sqlp .= " WHERE rowid = ".((int) $code_id); $sqlp .= " AND entity = ".$conf->entity; $upsql = $db->query($sqlp); if (!$upsql) { dol_print_error($db); } } $i++; } } } /* * View */ $form = new Form($db); $formbarcode = new FormBarCode($db); $help_url = 'EN:Module_Barcode|FR:Module_Codes_Barre|ES:Módulo Código de barra|DE:Modul_Barcode'; llxHeader('', $langs->trans("BarcodeSetup"), $help_url, '', 0, 0, '', '', '', 'mod-admin page-barcode'); $linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("BarcodeSetup"), $linkback, 'title_setup'); // Detect bar codes modules $barcodelist = array(); clearstatcache(); // Scan list of all barcode included provided by external modules $dirbarcode = array_merge(array("/core/modules/barcode/doc/"), $conf->modules_parts['barcode']); foreach ($dirbarcode as $reldir) { $dir = dol_buildpath($reldir); $newdir = dol_osencode($dir); // Check if directory exists (we do not use dol_is_dir to avoid loading files.lib.php) if (!is_dir($newdir)) { continue; } $handle = @opendir($newdir); if (is_resource($handle)) { while (($file = readdir($handle)) !== false) { if (substr($file, 0, 1) != '.' && substr($file, 0, 3) != 'CVS') { if (is_readable($newdir.$file)) { if (preg_match('/(.*)\.modules\.php$/i', $file, $reg)) { $filebis = $reg[1]; // Loading encoding class require_once $newdir.$file; $classname = "mod".ucfirst($filebis); $module = new $classname($db); '@phan-var-force ModeleBarCode $module'; // Show modules according to features level if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) { continue; } if ($module->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1) { continue; } if ($module->isEnabled()) { $barcodelist[$filebis] = $module->info($langs); } } } } } } } '@phan-var-force array $barcodelist'; // Select barcode numbering module if (isModEnabled('product')) { print load_fiche_titre($langs->trans("BarCodeNumberManager")." (".$langs->trans("Product").")", '', ''); print '
'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; $dirbarcodenum = array_merge(array('/core/modules/barcode/'), $conf->modules_parts['barcode']); foreach ($dirbarcodenum as $dirroot) { $dir = dol_buildpath($dirroot, 0); $handle = @opendir($dir); if (is_resource($handle)) { while (($file = readdir($handle)) !== false) { if (preg_match('/^mod_barcode_product_.*php$/', $file)) { $file = substr($file, 0, dol_strlen($file) - 4); try { dol_include_once($dirroot.$file.'.php'); } catch (Exception $e) { dol_syslog($e->getMessage(), LOG_ERR); } $modBarCode = new $file(); '@phan-var-force ModeleNumRefBarCode $modBarCode'; print ''; print ''; print '\n"; if (getDolGlobalString('BARCODE_PRODUCT_ADDON_NUM') == "$file") { print ''; } else { print ''; } print ''; print "\n"; } } closedir($handle); } } print "
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Example").''.$langs->trans("Status").''.$langs->trans("ShortInfo").'
'.(isset($modBarCode->name) ? $modBarCode->name : $modBarCode->nom)."\n"; print $modBarCode->info($langs); print ''.$modBarCode->getExample($langs)."'; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ''; $s = $modBarCode->getToolTip($langs, null, -1); print $form->textwithpicto('', $s, 1); print '
\n"; print '
'; } // Select barcode numbering module if (isModEnabled('societe')) { print load_fiche_titre($langs->trans("BarCodeNumberManager")." (".$langs->trans("ThirdParty").")", '', ''); print '
'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; $dirbarcodenum = array_merge(array('/core/modules/barcode/'), $conf->modules_parts['barcode']); foreach ($dirbarcodenum as $dirroot) { $dir = dol_buildpath($dirroot, 0); $handle = @opendir($dir); if (is_resource($handle)) { while (($file = readdir($handle)) !== false) { if (preg_match('/^mod_barcode_thirdparty_.*php$/', $file)) { $file = substr($file, 0, dol_strlen($file) - 4); try { dol_include_once($dirroot.$file.'.php'); } catch (Exception $e) { dol_syslog($e->getMessage(), LOG_ERR); } $modBarCode = new $file(); '@phan-var-force ModeleNumRefBarCode $modBarCode'; print ''; print ''; print '\n"; if (getDolGlobalString('BARCODE_THIRDPARTY_ADDON_NUM') && $conf->global->BARCODE_THIRDPARTY_ADDON_NUM == "$file") { print ''; } else { print ''; } print ''; print "\n"; } } closedir($handle); } } print "
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Example").''.$langs->trans("Status").''.$langs->trans("ShortInfo").'
'.(isset($modBarCode->name) ? $modBarCode->name : $modBarCode->nom)."\n"; print $modBarCode->info($langs); print ''.$modBarCode->getExample($langs)."'; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ''; $s = $modBarCode->getToolTip($langs, null, -1); print $form->textwithpicto('', $s, 1); print '
\n"; print '
'; } /* * CHOIX ENCODAGE */ print '
'; print load_fiche_titre($langs->trans("BarcodeEncodeModule"), '', ''); if (empty($conf->use_javascript_ajax)) { print '
'; print ''; print ''; } print '
'; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; $sql = "SELECT rowid, code as encoding, libelle as label, coder, example"; $sql .= " FROM ".MAIN_DB_PREFIX."c_barcode_type"; $sql .= " WHERE entity = ".$conf->entity; $sql .= " ORDER BY code"; dol_syslog("admin/barcode.php", LOG_DEBUG); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); $i = 0; while ($i < $num) { $obj = $db->fetch_object($resql); print ''; print ''; // Show example print ''; print '\n"; $i++; } } print "
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Example").''.$langs->trans("CodeBarGenerator").'
'; print dol_escape_htmltag($obj->label); print "\n"; print $langs->trans('BarcodeDesc'.$obj->encoding); //print "L'EAN se compose de 8 characters, 7 chiffres plus une cle de verification.
"; //print "L'utilisation des symbologies EAN8 impose la souscription et l'abonnement aupres d'organismes comme GENCOD.
"; //print "Codes numeriques utilises exclusivement a l'identification des produits susceptibles d'etre vendus au grand public."; print '
'; if ($obj->coder && $obj->coder != -1) { $result = 0; foreach ($dirbarcode as $reldir) { $dir = dol_buildpath($reldir, 0); $newdir = dol_osencode($dir); // Check if directory exists (we do not use dol_is_dir to avoid loading files.lib.php) if (!is_dir($newdir)) { continue; } $result = @include_once $newdir.$obj->coder.'.modules.php'; if ($result) { break; } } if ($result) { $classname = "mod".ucfirst($obj->coder); if (class_exists($classname)) { $module = new $classname($db); if ($module->encodingIsSupported($obj->encoding)) { // Build barcode on disk (not used, this is done to make debug easier) $result = $module->writeBarCode($obj->example, $obj->encoding, 'Y'); // Generate on the fly and output barcode with generator $url = DOL_URL_ROOT.'/viewimage.php?modulepart=barcode&generator='.urlencode($obj->coder).'&code='.urlencode($obj->example).'&encoding='.urlencode($obj->encoding); //print $url; print ''; } else { print $langs->trans("FormatNotSupportedByGenerator"); } } else { print 'ErrorClassNotFoundInModule '.$classname.' '.$obj->coder; } } } else { print ''.$langs->trans("ChooseABarCode").''; } print ''; print $formbarcode->setBarcodeEncoder($obj->coder, $barcodelist, $obj->rowid, 'form'.$i); print "
\n"; print '
'; if (empty($conf->use_javascript_ajax)) { print $form->buttonsSaveCancel("Save", ''); } print "
"; /* * Other options */ print load_fiche_titre($langs->trans("OtherOptions"), '', ''); print ""; print ''; print ""; print '
'; print ''; print ''; print ''; print ''; print ''; print ''; // Chemin du binaire genbarcode sous linux if (!isset($_SERVER['WINDIR'])) { print ''; print ''; print ''; print ''; print ''; } // Module products if (isModEnabled('product')) { print ''; print ''; print ''; print ''; print ''; } // Module thirdparty if (isModEnabled('societe')) { print ''; print ''; print ''; print ''; print ''; } print "
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
'.$langs->trans("GenbarcodeLocation").''; print ''; if (getDolGlobalString('GENBARCODE_LOCATION') && !@file_exists($conf->global->GENBARCODE_LOCATION)) { $langs->load("errors"); print '
'.$langs->trans("ErrorFileNotFound", getDolGlobalString('GENBARCODE_LOCATION')).''; } print '
 
'.$langs->trans("SetDefaultBarcodeTypeProducts").''; print $formbarcode->selectBarcodeType(getDolGlobalString('PRODUIT_DEFAULT_BARCODE_TYPE'), "PRODUIT_DEFAULT_BARCODE_TYPE", 1); print ' 
'.$langs->trans("SetDefaultBarcodeTypeThirdParties").''; print $formbarcode->selectBarcodeType(getDolGlobalString('GENBARCODE_BARCODETYPE_THIRDPARTY'), "GENBARCODE_BARCODETYPE_THIRDPARTY", 1); print ' 
\n"; print '
'; print '
'; print ''; print "
"; print '
'; print '
'; // End of page llxFooter(); $db->close();