From ce7db0004bdf68664cc32f03a45f504189c32ee6 Mon Sep 17 00:00:00 2001
From: Quatadah Nasdami
Date: Wed, 22 Jun 2022 14:41:46 +0200
Subject: [PATCH 01/11] two changes to feature request
---
htdocs/core/class/commonobject.class.php | 3 +++
htdocs/core/lib/files.lib.php | 7 +++++++
2 files changed, 10 insertions(+)
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 4a95bb7d345..ff240501d1e 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -5516,6 +5516,9 @@ abstract class CommonObject
if ($this->element == 'bank_account' && !empty($conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) {
$setsharekey = true;
}
+ if ($this->element == 'product' && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) {
+ $setsharekey = true;
+ }
if ($this->element == 'contrat' && !empty($conf->global->CONTRACT_ALLOW_EXTERNAL_DOWNLOAD)) {
$setsharekey = true;
}
diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php
index 482831191d6..e8134c6f0dd 100644
--- a/htdocs/core/lib/files.lib.php
+++ b/htdocs/core/lib/files.lib.php
@@ -1727,6 +1727,13 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess
}
}
+ // Update table of files
+ if ($donotupdatesession == 1) {
+ $sharefile = 0;
+ if ($TFile['type'][$i] == 'application/pdf' && strpos($_SERVER["REQUEST_URI"], 'product') !== false && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) $sharefile = 1;
+ $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile), $TFile['name'][$i], 'uploaded', $sharefile);
+ }
+
$nbok++;
} else {
$langs->load("errors");
From 205022b4c852d421e6b33bb5640303bbe158f47f Mon Sep 17 00:00:00 2001
From: Quatadah Nasdami
Date: Thu, 23 Jun 2022 18:09:00 +0200
Subject: [PATCH 02/11] removing useless block
---
htdocs/core/lib/files.lib.php | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php
index e8134c6f0dd..beb25a3d5fe 100644
--- a/htdocs/core/lib/files.lib.php
+++ b/htdocs/core/lib/files.lib.php
@@ -1717,7 +1717,9 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess
// Update index table of files (llx_ecm_files)
if ($donotupdatesession == 1) {
- $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile).($resupload == 2 ? '.noexe' : ''), $TFile['name'][$i], 'uploaded', 0, $object);
+ $sharefile = 0;
+ if ($TFile['type'][$i] == 'application/pdf' && strpos($_SERVER["REQUEST_URI"], 'product') !== false && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) $sharefile = 1;
+ $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile).($resupload == 2 ? '.noexe' : ''), $TFile['name'][$i], 'uploaded', $sharefile, $object);
if ($result < 0) {
if ($allowoverwrite) {
// Do not show error message. We can have an error due to DB_ERROR_RECORD_ALREADY_EXISTS
@@ -1727,13 +1729,6 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess
}
}
- // Update table of files
- if ($donotupdatesession == 1) {
- $sharefile = 0;
- if ($TFile['type'][$i] == 'application/pdf' && strpos($_SERVER["REQUEST_URI"], 'product') !== false && !empty($conf->global->PRODUCT_ALLOW_EXTERNAL_DOWNLOAD)) $sharefile = 1;
- $result = addFileIntoDatabaseIndex($upload_dir, basename($destfile), $TFile['name'][$i], 'uploaded', $sharefile);
- }
-
$nbok++;
} else {
$langs->load("errors");
From d7d02fee9a9eaf7b41c494041d18724cc6119114 Mon Sep 17 00:00:00 2001
From: Faustin
Date: Mon, 27 Jun 2022 16:08:06 +0200
Subject: [PATCH 03/11] NEW #21395 : Added option for dark theme mode in
display - color and theme
---
htdocs/admin/ihm.php | 10 ++++++++++
htdocs/core/lib/usergroups.lib.php | 21 +++++++++++++++++++++
htdocs/langs/en_US/admin.lang | 9 +++++++--
htdocs/langs/fr_FR/admin.lang | 20 ++++++++++++--------
4 files changed, 50 insertions(+), 10 deletions(-)
diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php
index 959d881041d..5ad497205ab 100644
--- a/htdocs/admin/ihm.php
+++ b/htdocs/admin/ihm.php
@@ -104,6 +104,16 @@ if ($action == 'update') {
dolibarr_set_const($db, "MAIN_THEME", GETPOST("main_theme", 'aZ09'), 'chaine', 0, '', $conf->entity);
dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity);
+ if (GETPOSTISSET('THEME_DARKMODEENABLED')) {
+ $val = GETPOST('THEME_DARKMODEENABLED');
+ if (!$val) {
+ dolibarr_del_const($db, "THEME_DARKMODEENABLED", $conf->entity);
+ }
+ if ($val) {
+ dolibarr_set_const($db, "THEME_DARKMODEENABLED", $val, 'chaine', 0, '', $conf->entity);
+ }
+ }
+
if (GETPOSTISSET('THEME_TOPMENU_DISABLE_IMAGE')) {
$val=GETPOST('THEME_TOPMENU_DISABLE_IMAGE');
if (!$val) {
diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php
index 538fc299564..eed9043afa6 100644
--- a/htdocs/core/lib/usergroups.lib.php
+++ b/htdocs/core/lib/usergroups.lib.php
@@ -455,6 +455,27 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false)
include DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/theme_vars.inc.php';
}
+ //Dark mode
+ if ($foruserprofile) {
+ //Nothing
+ } else {
+ $listofdarkmodes = array(
+ '0' => $langs->trans("AlwaysDisabled"),
+ '1' => $langs->trans("AccordingToBrowser"),
+ '2' => $langs->trans("AlwaysEnabled")
+ );
+ print '';
+ print '| '.$langs->trans("DarkThemeMode").' | ';
+ print '';
+ if ($edit) {
+ print $form->selectarray('THEME_DARKMODEENABLED', $listofdarkmodes, isset($conf->global->THEME_DARKMODEENABLED) ? $conf->global->THEME_DARKMODEENABLED : 0);
+ } else {
+ print $listofdarkmodes[isset($conf->global->THEME_DARKMODEENABLED) ? $conf->global->THEME_DARKMODEENABLED : 0];
+ }
+ print ' |
';
+ }
+
+
// TopMenuDisableImages
if ($foruserprofile) {
/*
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 95ed076f347..4c3d8c32799 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -897,7 +897,7 @@ Permission701=Read donations
Permission702=Create/modify donations
Permission703=Delete donations
Permission771=Read expense reports (yours and your subordinates)
-Permission772=Create/modify expense reports (for you and your subordinates)
+Permission772=Create/modify expense reports (for you and your subordinates)
Permission773=Delete expense reports
Permission775=Approve expense reports
Permission776=Pay expense reports
@@ -2169,7 +2169,7 @@ EMailsWillHaveMessageID=Emails will have a tag 'References' matching this syntax
PDF_SHOW_PROJECT=Show project on document
ShowProjectLabel=Project Label
PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME=Include alias in thirdparty name
-THIRDPARTY_ALIAS=Name thirdparty - Alias thirdparty
+THIRDPARTY_ALIAS=Name thirdparty - Alias thirdparty
ALIAS_THIRDPARTY=Alias thirdparty - Name thirdparty
PDF_USE_ALSO_LANGUAGE_CODE=If you want to have some texts in your PDF duplicated in 2 different languages in the same generated PDF, you must set here this second language so generated PDF will contains 2 different languages in same page, the one chosen when generating PDF and this one (only few PDF templates support this). Keep empty for 1 language per PDF.
PDF_USE_A=Gererate PDF documents with format PDF/A instead of defaut format PDF
@@ -2277,3 +2277,8 @@ INVOICE_ADD_ZATCA_QR_CODEMore=Some Arabic countries need this QR Code on their i
INVOICE_ADD_SWISS_QR_CODE=Show the swiss QR-Bill code on invoices
UrlSocialNetworksDesc=Url link of social network. Use {socialid} for the variable part that contains the social network ID.
IfThisCategoryIsChildOfAnother=If this category is a child of another one
+
+DarkThemeMode=Dark theme mode
+AlwaysDisabled=Always disabled
+AccordingToBrowser=According to browser
+AlwaysEnabled=Always Enabled
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 7ac18213e1e..68aa93b7b5d 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -190,7 +190,7 @@ Compression=Compression
CommandsToDisableForeignKeysForImport=Commande pour désactiver les clés étrangères à l'importation
CommandsToDisableForeignKeysForImportWarning=Requis si vous voulez être en mesure de restaurer votre « dump » SQL plus tard
ExportCompatibility=Compatibilité du fichier d'exportation généré
-ExportUseMySQLQuickParameter=Utiliser le paramètre --quick
+ExportUseMySQLQuickParameter=Utiliser le paramètre --quick
ExportUseMySQLQuickParameterHelp=Le paramètre '--quick' aide à réduire la consommation de RAM pour les longues listes
MySqlExportParameters=Paramètres de l'exportation MySQL
PostgreSqlExportParameters= Paramètres de l'exportation PostgreSQL
@@ -338,7 +338,7 @@ MenuHandlers=Gestionnaires de menu
MenuAdmin=Édition menu
DoNotUseInProduction=Ne pas utiliser en production
ThisIsProcessToFollow=Procédure de mise à jour:
-ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative
+ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative
StepNb=Étape %s
FindPackageFromWebSite=Rechercher le paquet qui répond à votre besoin (par exemple sur le site web %s).
DownloadPackageFromWebSite=Télécharger le package (par exemple depuis le site web officiel %s)
@@ -1377,7 +1377,7 @@ NumberingModules=Modèles de numérotation
DocumentModules=Modèles de documents
##### Module password generation
PasswordGenerationStandard=Renvoie un mot de passe généré selon l'algorythme interne de Dolibarr :%s caractères contenant chiffres et minuscules
-PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement.
+PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement.
PasswordGenerationPerso=Renvoie un mot de passe en fonction d'une configuration personnalisée.
SetupPerso=Selon votre configuration
PasswordPatternDesc=Description du masque du mot de passe
@@ -1455,7 +1455,7 @@ OrdersNumberingModules=Modèles de numérotation des commandes
OrdersModelModule=Modèles de document des commandes
FreeLegalTextOnOrders=Mention complémentaire sur les commandes
WatermarkOnDraftOrders=Filigrane sur les brouillons de commandes (aucun si vide)
-ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable.
+ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable.
BANK_ASK_PAYMENT_BANK_DURING_ORDER=Demander le compte bancaire cible durant la commande
##### Interventions #####
InterventionsSetup=Configuration du module Interventions
@@ -1645,7 +1645,7 @@ TestNotPossibleWithCurrentBrowsers=Une détection automatique n'est pas possible
DefaultValuesDesc=Vous pouvez définir/forcer ici la valeur par défaut que vous voulez obtenir lorsque vous créez un nouvel enregistrement, et/ou les filtres par défaut ou ordre de tri des listes.
DefaultCreateForm=Valeurs par défaut (sur les formulaires de création)
DefaultSearchFilters=Filtres de recherche par défaut
-DefaultSortOrder=Ordre de tri par défaut
+DefaultSortOrder=Ordre de tri par défaut
DefaultFocus=Champs par défaut ayant le focus
DefaultMandatory=Champs de formulaire obligatoires
##### Products #####
@@ -1864,7 +1864,7 @@ ChequeReceiptsNumberingModule=Module de numérotation des bordereaux de remises
MultiCompanySetup=Configuration du module Multi-société
##### Suppliers #####
SuppliersSetup=Configuration du module Fournisseurs
-SuppliersCommandModel=Modèle de commande fournisseur complet
+SuppliersCommandModel=Modèle de commande fournisseur complet
SuppliersCommandModelMuscadet=Modèle de commande fournisseur complet (ancienne implémentation du modèle Cornas)
SuppliersInvoiceModel=Modèle de facture fournisseur complet
SuppliersInvoiceNumberingModel=Modèles de numérotation des factures fournisseur
@@ -1899,7 +1899,7 @@ NbMajMin=Nombre minimal de caractères majuscules
NbNumMin=Nombre minimal de caractères numériques
NbSpeMin=Nombre minimal de caractères spéciaux
NbIteConsecutive=Nombre maximal de répétition des mêmes caractères
-NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique
+NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique
SalariesSetup=Configuration du module salaires
SortOrder=Ordre de tri
Format=Format
@@ -1920,7 +1920,7 @@ GoOntoContactCardToAddMore=Rendez-vous sur l'onglet "Notifications" d'un tiers p
Threshold=Seuil
BackupDumpWizard=Assistant pour créer le fichier dump de la base de données
BackupZipWizard=Assistant pour générer l'archive du répertoire documents
-SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante :
+SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante :
SomethingMakeInstallFromWebNotPossible2=Pour cette raison, le processus de mise à jour décrit ici est une processus manuel que seul un utilisateur ayant des droits privilégiés peut réaliser.
InstallModuleFromWebHasBeenDisabledByFile=L'installation de module externe depuis l'application a été désactivé par l'administrator. Vous devez lui demander de supprimer le fichier %s pour permettre cette fonctionnalité.
ConfFileMustContainCustom=Installer ou créer un module externe à partir de l'application nécessite de sauvegarder les fichiers du module dans le répertoire %s. Pour que ce répertoire soit reconnu par Dolibarr, vous devez paramétrer le fichier de configuration conf/conf.php en ajoutant les 2 lignes suivantes :
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='%s/custom';
@@ -2263,3 +2263,7 @@ IconOnly=Icon only - Text on tooltip only
INVOICE_ADD_ZATCA_QR_CODE=Show the ZATCA QR code on invoices
INVOICE_ADD_ZATCA_QR_CODEMore=Some Arabic countries need this QR Code on their invoices
UrlSocialNetworksDesc=Url link of social network. Use {socialid} for the variable part that contains the social network ID.
+DarkThemeMode=Mode thème sombre
+AlwaysDisabled=Toujours désactivé
+AccordingToBrowser=Selon le navigateur
+AlwaysEnabled=Toujours activé
\ No newline at end of file
From 3e66ca1636dd80c64a79d2d033b3866ae88bf18a Mon Sep 17 00:00:00 2001
From: Faustin
Date: Mon, 27 Jun 2022 16:18:54 +0200
Subject: [PATCH 04/11] NEW #21395 : Added picto text to inform that option
does not work with all themes
---
htdocs/core/lib/usergroups.lib.php | 1 +
htdocs/langs/en_US/admin.lang | 3 ++-
htdocs/langs/fr_FR/admin.lang | 3 ++-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php
index eed9043afa6..4aa2942884d 100644
--- a/htdocs/core/lib/usergroups.lib.php
+++ b/htdocs/core/lib/usergroups.lib.php
@@ -472,6 +472,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false)
} else {
print $listofdarkmodes[isset($conf->global->THEME_DARKMODEENABLED) ? $conf->global->THEME_DARKMODEENABLED : 0];
}
+ print $form->textwithpicto('', $langs->trans("DoesNotWorkWithAllThemes"));
print '';
}
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 4c3d8c32799..bec98616b11 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -2281,4 +2281,5 @@ IfThisCategoryIsChildOfAnother=If this category is a child of another one
DarkThemeMode=Dark theme mode
AlwaysDisabled=Always disabled
AccordingToBrowser=According to browser
-AlwaysEnabled=Always Enabled
\ No newline at end of file
+AlwaysEnabled=Always Enabled
+DoesNotWorkWithAllThemes=Will not work with all themes
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 68aa93b7b5d..3c653717801 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -2266,4 +2266,5 @@ UrlSocialNetworksDesc=Url link of social network. Use {socialid} for the variabl
DarkThemeMode=Mode thème sombre
AlwaysDisabled=Toujours désactivé
AccordingToBrowser=Selon le navigateur
-AlwaysEnabled=Toujours activé
\ No newline at end of file
+AlwaysEnabled=Toujours activé
+DoesNotWorkWithAllThemes=Ne fonctionne pas avec tous les thèmes
\ No newline at end of file
From 811b11cab255c4bd45b73a53766ab66d800a8d03 Mon Sep 17 00:00:00 2001
From: Faustin
Date: Tue, 28 Jun 2022 16:33:00 +0200
Subject: [PATCH 05/11] NEW #21397 : added option to auto define barcode
numbers for third-parties in barcode module setup
---
htdocs/admin/barcode.php | 81 +++-
.../mod_barcode_thirdparty_standard.php | 354 ++++++++++++++++++
2 files changed, 434 insertions(+), 1 deletion(-)
create mode 100644 htdocs/core/modules/barcode/mod_barcode_thirdparty_standard.php
diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php
index ee0fcd5d130..d03d227470a 100644
--- a/htdocs/admin/barcode.php
+++ b/htdocs/admin/barcode.php
@@ -55,6 +55,16 @@ if ($action == 'setbarcodeproducton') {
$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' && empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK)) {
+ $res = dolibarr_set_const($db, "BARCODE_STANDARD_THIRDPARTY_MASK", '020{000000000}', '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 = GETPOST('code_id', 'int');
@@ -241,6 +251,66 @@ if ($conf->product->enabled) {
print '';
}
+// Select barcode numbering module
+if ($conf->societe->enabled) {
+ print load_fiche_titre($langs->trans("BarCodeNumberManager")." (".$langs->trans("ThirdParty").")", '', '');
+
+ print '';
+ print '
';
+ print '';
+ print '| '.$langs->trans("Name").' | ';
+ print ''.$langs->trans("Description").' | ';
+ print ''.$langs->trans("Example").' | ';
+ print ''.$langs->trans("Status").' | ';
+ print ''.$langs->trans("ShortInfo").' | ';
+ 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();
+ print '';
+ print '| '.(isset($modBarCode->name) ? $modBarCode->name : $modBarCode->nom)." | \n";
+ print $modBarCode->info($langs);
+ print ' | ';
+ print ''.$modBarCode->getExample($langs)." | \n";
+
+ if (!empty($conf->global->BARCODE_THIRDPARTY_ADDON_NUM) && $conf->global->BARCODE_THIRDPARTY_ADDON_NUM == "$file") {
+ print '';
+ print img_picto($langs->trans("Activated"), 'switch_on');
+ print ' | ';
+ } else {
+ print '';
+ print img_picto($langs->trans("Disabled"), 'switch_off');
+ print ' | ';
+ }
+ print '';
+ $s = $modBarCode->getToolTip($langs, null, -1);
+ print $form->textwithpicto('', $s, 1);
+ print ' | ';
+ print "
\n";
+ }
+ }
+ closedir($handle);
+ }
+ }
+ print "
\n";
+ print '
';
+}
/*
* CHOIX ENCODAGE
@@ -251,7 +321,16 @@ print load_fiche_titre($langs->trans("BarcodeEncodeModule"), '', '');
if (empty($conf->use_javascript_ajax)) {
print '';
+
+ return $texte;
+ }
+
+
+ /**
+ * Return an example of result returned by getNextValue
+ *
+ * @param Translate $langs Object langs
+ * @param Societe $objthirdparty Object third-party
+ * @return string Return string example
+ */
+ public function getExample($langs, $objthirdparty = 0)
+ {
+ $examplebarcode = $this->getNextValue($objthirdparty, '');
+ if (!$examplebarcode) {
+ $examplebarcode = $langs->trans('NotConfigured');
+ }
+ if ($examplebarcode == "ErrorBadMask") {
+ $langs->load("errors");
+ $examplebarcode = $langs->trans($examplebarcode);
+ }
+
+ return $examplebarcode;
+ }
+ /**
+ * Return literal barcode type code from numerical rowid type of barcode
+ *
+ * @param Database $db Database
+ * @param int $type Type of barcode (EAN, ISBN, ...) as rowid
+ * @return string
+ */
+ public function literalBarcodeType($db, $type = '')
+ {
+ global $conf;
+ $out = '';
+
+ $sql = "SELECT rowid, code, libelle as label";
+ $sql .= " FROM ".MAIN_DB_PREFIX."c_barcode_type";
+ $sql .= " WHERE rowid = '".$db->escape($type)."'";
+ $sql .= " AND entity = ".((int) $conf->entity);
+ $result = $db->query($sql);
+ if ($result) {
+ $num = $db->num_rows($result);
+
+ if ($num > 0) {
+ $obj = $db->fetch_object($result);
+ $out .= $obj->label; //take the label corresponding to the type rowid in the database
+ }
+ } else {
+ dol_print_error($db);
+ }
+
+ return $out;
+ }
+ /**
+ * Return next value
+ *
+ * @param Societe $objthirdparty Object third-party
+ * @param string $type Type of barcode (EAN, ISBN, ...)
+ * @return string Value if OK, '' if module not configured, <0 if KO
+ */
+ public function getNextValue($objthirdparty, $type = '')
+ {
+ global $db, $conf;
+
+ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
+ require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php'; // to be able to call function barcode_gen_ean_sum($ean)
+
+ if (empty($type)) {
+ $type = $conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY;
+ } //get barcode type configuration for companies if $type not set
+
+ // TODO
+
+ // Get Mask value
+ $mask = '';
+ if (!empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK)) {
+ $mask = $conf->global->BARCODE_STANDARD_THIRDPARTY_MASK;
+ }
+
+ if (empty($mask)) {
+ $this->error = 'NotConfigured';
+ return '';
+ }
+
+ $field = 'barcode';
+ $where = '';
+
+ $now = dol_now();
+
+ $numFinal = get_next_value($db, $mask, 'societe', $field, $where, '', $now);
+ //Begin barcode with key: for barcode with key (EAN13...) calculate and substitute the last character (* or ?) used in the mask by the key
+ if ((substr($numFinal, -1)=='*') or (substr($numFinal, -1)=='?')) { // if last mask character is * or ? a joker, probably we have to calculate a key as last character (EAN13...)
+ $literaltype = '';
+ $literaltype = $this->literalBarcodeType($db, $type);//get literal_Barcode_Type
+ switch ($literaltype) {
+ case 'EAN13': //EAN13 rowid = 2
+ if (strlen($numFinal)==13) {// be sure that the mask length is correct for EAN13
+ $ean = substr($numFinal, 0, 12); //take first 12 digits
+ $eansum = barcode_gen_ean_sum($ean);
+ $ean .= $eansum; //substitute the las character by the key
+ $numFinal = $ean;
+ }
+ break;
+ // Other barcode cases with key could be written here
+ default:
+ break;
+ }
+ }
+ //End barcode with key
+ return $numFinal;
+ }
+
+
+ /**
+ * Check validity of code according to its rules
+ *
+ * @param DoliDB $db Database handler
+ * @param string $code Code to check/correct
+ * @param Societe $thirdparty Object third-party
+ * @param int $thirdparty_type 0 = customer/prospect , 1 = supplier
+ * @param string $type type of barcode (EAN, ISBN, ...)
+ * @return int 0 if OK
+ * -1 ErrorBadCustomerCodeSyntax
+ * -2 ErrorCustomerCodeRequired
+ * -3 ErrorCustomerCodeAlreadyUsed
+ * -4 ErrorPrefixRequired
+ */
+ public function verif($db, &$code, $thirdparty, $thirdparty_type, $type)
+ {
+ global $conf;
+
+ //var_dump($code.' '.$thirdparty->ref.' '.$thirdparty_type);exit;
+
+ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
+
+ $result = 0;
+ $code = strtoupper(trim($code));
+
+ if (empty($code) && $this->code_null && empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK)) {
+ $result = 0;
+ } elseif (empty($code) && (!$this->code_null || !empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK))) {
+ $result = -2;
+ } else {
+ if ($this->verif_syntax($code, $type) >= 0) {
+ $is_dispo = $this->verif_dispo($db, $code, $thirdparty);
+ if ($is_dispo <> 0) {
+ $result = -3;
+ } else {
+ $result = 0;
+ }
+ } else {
+ if (dol_strlen($code) == 0) {
+ $result = -2;
+ } else {
+ $result = -1;
+ }
+ }
+ }
+
+ dol_syslog(get_class($this)."::verif type=".$thirdparty_type." result=".$result);
+ return $result;
+ }
+
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Return if a code is used (by other element)
+ *
+ * @param DoliDB $db Handler acces base
+ * @param string $code Code to check
+ * @param Societe $thirdparty Objet third-party
+ * @return int 0 if available, <0 if KO
+ */
+ public function verif_dispo($db, $code, $thirdparty)
+ {
+ // phpcs:enable
+ $sql = "SELECT barcode FROM ".MAIN_DB_PREFIX."societe";
+ $sql .= " WHERE barcode = '".$db->escape($code)."'";
+ if ($thirdparty->id > 0) {
+ $sql .= " AND rowid <> ".$thirdparty->id;
+ }
+
+ $resql = $db->query($sql);
+ if ($resql) {
+ if ($db->num_rows($resql) == 0) {
+ return 0;
+ } else {
+ return -1;
+ }
+ } else {
+ return -2;
+ }
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Return if a barcode value match syntax
+ *
+ * @param string $codefortest Code to check syntax
+ * @param string $typefortest Type of barcode (ISBN, EAN, ...)
+ * @return int 0 if OK, <0 if KO
+ */
+ public function verif_syntax($codefortest, $typefortest)
+ {
+ // phpcs:enable
+ global $conf;
+
+ $result = 0;
+
+ // Get Mask value
+ $mask = empty($conf->global->BARCODE_STANDARD_THIRDPARTY_MASK) ? '' : $conf->global->BARCODE_STANDARD_THIRDPARTY_MASK;
+ if (!$mask) {
+ $this->error = 'NotConfigured';
+ return -1;
+ }
+
+ dol_syslog(get_class($this).'::verif_syntax codefortest='.$codefortest." typefortest=".$typefortest);
+
+ $newcodefortest = $codefortest;
+
+ // Special case, if mask is on 12 digits instead of 13, we remove last char into code to test
+ if (in_array($typefortest, array('EAN13', 'ISBN'))) { // We remove the CRC char not included into mask
+ if (preg_match('/\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}/i', $mask, $reg)) {
+ if (strlen($reg[1]) == 12) {
+ $newcodefortest = substr($newcodefortest, 0, 12);
+ }
+ dol_syslog(get_class($this).'::verif_syntax newcodefortest='.$newcodefortest);
+ }
+ }
+
+ $result = check_value($mask, $newcodefortest);
+ if (is_string($result)) {
+ $this->error = $result;
+ return -1;
+ }
+
+ return $result;
+ }
+}
From 3f7fe8d68894d371939be286b15cb00e69e79012 Mon Sep 17 00:00:00 2001
From: Faustin
Date: Tue, 28 Jun 2022 16:39:34 +0200
Subject: [PATCH 06/11] NEW #21397 : small fix
---
htdocs/admin/barcode.php | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php
index d03d227470a..ce394f24d76 100644
--- a/htdocs/admin/barcode.php
+++ b/htdocs/admin/barcode.php
@@ -321,7 +321,8 @@ print load_fiche_titre($langs->trans("BarcodeEncodeModule"), '', '');
if (empty($conf->use_javascript_ajax)) {
print '
');
+ }
+
if ($description) {
fwrite($fichier, $description);
}
From b5c0f1ac29cdd66bb20ab92ff96e5e9192d70a6e Mon Sep 17 00:00:00 2001
From: bagtaib
Date: Mon, 4 Jul 2022 14:32:40 +0200
Subject: [PATCH 11/11] corrected the url of the image
---
htdocs/core/lib/xcal.lib.php | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php
index cd300546e46..6b5c92881c5 100644
--- a/htdocs/core/lib/xcal.lib.php
+++ b/htdocs/core/lib/xcal.lib.php
@@ -377,8 +377,7 @@ function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filt
$tmpevent['author'] = $event->author_alias ? $event->author_alias : 'unknown';
//$tmpevent['category'] = '';
$tmpevent['desc'] = $event->description;
- $tmpevent['image'] = $event->image;
-
+ $tmpevent['image'] = $GLOBALS['website']->virtualhost.'/medias/'.$event->image;
$event = $tmpevent;
}