diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 5056559a2d4..fb52b9b8fc9 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -10497,7 +10497,7 @@ abstract class CommonObject
}
// Create lines
- if (!empty($this->table_element_line) && !empty($this->fk_element)) {
+ if (!empty($this->table_element_line) && !empty($this->fk_element) && !empty($this->lines)) {
foreach ($this->lines as $line) {
$keyforparent = $this->fk_element;
$line->$keyforparent = $this->id;
diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php
index 3b61c736971..6d8bcef1bc3 100644
--- a/htdocs/core/lib/files.lib.php
+++ b/htdocs/core/lib/files.lib.php
@@ -1597,7 +1597,9 @@ function dol_delete_file($file, $disableglob = 0, $nophperrors = 0, $nohook = 0,
}
}
} else {
- $ok = false; // to avoid false positive
+ if (empty($nophperrors)) {
+ $ok = false; // to avoid false positive
+ }
dol_syslog("No files to delete found", LOG_DEBUG);
}
} else {
diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php
index c243285abe2..ae13e84ebe6 100644
--- a/htdocs/core/lib/website.lib.php
+++ b/htdocs/core/lib/website.lib.php
@@ -1080,11 +1080,11 @@ function getNbOfImagePublicURLOfObject($object)
* @param Object $object Object
* @param int $no Numero of image (if there is several images. 1st one by default)
* @param string $extName Extension to differentiate thumb file name ('', '_small', '_mini')
- * @param int $cover 1=Add a filter on field "cover", 0=Exclude "cover" images, -1=No filter
+ * @param int $cover 1=Sort with cover then position, -1=Filter on cover last then position, 0=Exclude cover and filter on position first
* @return string HTML img content or '' if no image found
* @see getNbOfImagePublicURLOfObject(), getPublicFilesOfObject(), getImageFromHtmlContent()
*/
-function getImagePublicURLOfObject($object, $no = 1, $extName = '', $cover = -1)
+function getImagePublicURLOfObject($object, $no = 1, $extName = '', $cover = 1)
{
global $db;
@@ -1099,8 +1099,12 @@ function getImagePublicURLOfObject($object, $no = 1, $extName = '', $cover = -1)
$sql .= " WHERE entity IN (".getEntity($object->element).")";
$sql .= " AND src_object_type = '".$db->escape($object->element)."' AND src_object_id = ".((int) $object->id); // Filter on object
$sql .= " AND ".$db->regexpsql('filename', $regexforimg, 1);
- $sql .= ($cover >= 0 ? " AND cover = ".((int) $cover) : "");
- $sql .= $db->order("cover,position,rowid", "ASC,ASC,ASC");
+ $sql .= ($cover ? "" : " AND cover <> 1");
+ if ($cover == 1) {
+ $sql .= $db->order("cover,position,rowid", "ASC,ASC,ASC");
+ } else {
+ $sql .= $db->order("cover,position,rowid", "DESC,ASC,ASC");
+ }
$resql = $db->query($sql);
if ($resql) {
diff --git a/htdocs/core/modules/modAgenda.class.php b/htdocs/core/modules/modAgenda.class.php
index 0cbbbb0dd8b..171abd78213 100644
--- a/htdocs/core/modules/modAgenda.class.php
+++ b/htdocs/core/modules/modAgenda.class.php
@@ -604,15 +604,10 @@ class modAgenda extends DolibarrModules
*/
public function init($options = '')
{
- global $conf;
-
// Permissions
$this->remove($options);
- $sql = array(
- "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape($this->const[0][2])."' AND type='action' AND entity = ".((int) $conf->entity),
- // "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape($this->const[0][2])."','action',".((int) $conf->entity).")"
- );
+ $sql = array();
return $this->_init($sql, $options);
}
diff --git a/htdocs/core/tpl/card_presend.tpl.php b/htdocs/core/tpl/card_presend.tpl.php
index 7a048d9384f..d9375ab26a9 100644
--- a/htdocs/core/tpl/card_presend.tpl.php
+++ b/htdocs/core/tpl/card_presend.tpl.php
@@ -21,23 +21,20 @@
* or see https://www.gnu.org/
*/
-/*
- * Code to output content when action is presend
- *
- * $trackid must be defined
- * $modelmail
- * $defaulttopic and $defaulttopiclang
- * $diroutput
- * $arrayoffamiliestoexclude=array('system', 'mycompany', 'object', 'objectamount', 'date', 'user', ...);
- * $file
- */
/**
- * @var int<0,1> $diroutput
+ * @var string $trackid
+ * @var string $modelmail
* @var string $defaulttopic
* @var string $defaulttopiclang
- * @var string[] $arrayoffamiliestoexclude
+ * @var int<0,1> $diroutput
+ * @var string[] $arrayoffamiliestoexclude Example: array('system', 'mycompany', 'object', 'objectamount', 'date', 'user', ...);
* @var string $file
+ * @var string $action
* @var CommonObject $object
+ * @var Conf $conf
+ * @var DoliDB $db
+ * @var HookManager $hookmanager
+ * @var Translate $langs
*/
'
@phan-var-force int<0,1> $diroutput
diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php
index f671fe90cd9..db579e5ab5f 100644
--- a/htdocs/holiday/document.php
+++ b/htdocs/holiday/document.php
@@ -104,7 +104,7 @@ if (($id > 0) || $ref) {
}
-$upload_dir = $conf->holiday->dir_output.'/'.get_exdir(0, 0, 0, 1, $object, '');
+$upload_dir = $conf->holiday->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 1, $object, '');
$modulepart = 'holiday';
// Protection if external user
@@ -303,7 +303,7 @@ if ($object->id) {
$permissiontoadd = $user->hasRight('holiday', 'write');
$permtoedit = $user->hasRight('holiday', 'write');
$param = '&id='.$object->id;
- $relativepathwithnofile = dol_sanitizeFileName($object->ref).'/';
+ $relativepathwithnofile = get_exdir(0, 0, 0, 1, $object, '').'/';
$savingdocmask = dol_sanitizeFileName($object->ref).'-__file__';
include DOL_DOCUMENT_ROOT.'/core/tpl/document_actions_post_headers.tpl.php';
diff --git a/htdocs/install/mysql/data/llx_accounting_account_fr.sql b/htdocs/install/mysql/data/llx_accounting_account_fr.sql
index b1d2a719664..2c274c6c3b5 100644
--- a/htdocs/install/mysql/data/llx_accounting_account_fr.sql
+++ b/htdocs/install/mysql/data/llx_accounting_account_fr.sql
@@ -247,7 +247,7 @@ INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, acc
INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5252,'PCG25-DEV','IMMO', '278',5226,'Mali de fusion sur actifs financiers','1');
INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5253,'PCG25-DEV','IMMO', '279',5226,'Versements restant à effectuer sur titres immobilisés non libérés','1');
INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5254,'PCG25-DEV','IMMO', '28',5968,'Amortissements des immobilisations','1');
-INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5255,'PCG25-DEV','IMMO', '280',5254,'Amortissements des immobilisations incorporelles et des frais d''''établissement (même ventilation que celle du compte 20)','1');
+INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5255,'PCG25-DEV','IMMO', '280',5254,'Amortissements des immobilisations incorporelles et des frais d''établissement (même ventilation que celle du compte 20)','1');
INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5256,'PCG25-DEV','IMMO', '2801',5255,'Frais d''établissement (même ventilation que celle du compte 201)','1');
INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5257,'PCG25-DEV','IMMO', '2803',5255,'Frais de développement','1');
INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, account_number, account_parent, label, active) VALUES (__ENTITY__, 5258,'PCG25-DEV','IMMO', '2805',5255,'Concessions et droits similaires, brevets, licences, solutions informatiques, droits et valeurs similaires','1');
diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php
index 6a69f9575b2..67c2d00fc78 100644
--- a/htdocs/install/upgrade2.php
+++ b/htdocs/install/upgrade2.php
@@ -4157,7 +4157,7 @@ function migrate_delete_old_files($db, $langs, $conf)
//print ''DOL_DOCUMENT_ROOT.$filetodelete."
\n";
if (preg_match('/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
//print "Process file ".$filetodelete."\n";
- $result = dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, 0, 0, null, true, 0);
+ $result = dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match('/\*/', $filetodelete) ? 1 : 0), 0, null, true, 0);
if (!$result) {
$langs->load("errors");
print '
'.$langs->trans("Error").': '.$langs->trans("ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
diff --git a/htdocs/langs/el_GR/companies.lang b/htdocs/langs/el_GR/companies.lang
index 02a97523afa..18d3f4f6df1 100644
--- a/htdocs/langs/el_GR/companies.lang
+++ b/htdocs/langs/el_GR/companies.lang
@@ -463,5 +463,5 @@ IDOfPaymentInAnExternalSystem=Αναγνωριστικό του τρόπου π
AADEWebserviceCredentials=Στοιχεία πρόσβασης υπηρεσιών ΑΑΔΕ
ThirdPartyMustBeACustomerToCreateBANOnStripe=Το τρίτο μέρος πρέπει να είναι πελάτης για να επιτρέπεται η καταχώρηση των τραπεζικών του στοιχείων από το Stripe
NewSocNameForClone=Νέο όνομα εταιρίας
-ConfirmCloneThirdparties=Είστε σίγουροι ότι θέλετε να δημιουργήσετε αντίγραφο της εταιρίας
%s;
+ConfirmCloneThirdparties=Είστε σίγουροι ότι θέλετε να δημιουργήσετε αντίγραφο της εταιρίας
%s
SocialNetworksBusiness=Κοινωνικά δίκτυα εταιρίας
diff --git a/htdocs/langs/fr_CA/website.lang b/htdocs/langs/fr_CA/website.lang
index 343f62fb804..be642d35a98 100644
--- a/htdocs/langs/fr_CA/website.lang
+++ b/htdocs/langs/fr_CA/website.lang
@@ -44,13 +44,13 @@ YouCanAlsoDeployToAnotherWHP=
Exécutez votre site Web dans un fournisseur d'h
CheckVirtualHostPerms=Vérifiez également que l'utilisateur de l'hôte virtuel (par exemple www-data) dispose des autorisations %s sur les fichiers dans
%s
TestDeployOnWeb=Tester/déployer sur le Web
PreviewSiteServedByWebServer=Aperçu %s dans un nouvel onglet.
Le %s sera servi par un serveur Web externe (comme Apache, Nginx, IIS). Vous devez installer et configurer ce serveur avant de pointer vers le répertoire :
%s
URL servie par un serveur externe :
%s
-PreviewSiteServedByDolibarr=Aperçu %s dans un nouvel onglet.
Le %s sera servi par le serveur Dolibarr, il n'a donc pas besoin d'installer de serveur Web supplémentaire (comme Apache, Nginx, IIS).
L'inconvénient est que les URL des pages ne sont pas conviviales et commencez par le chemin de votre Dolibarr.
URL servie par Dolibarr :
%s
Pour déployer ou tester en utilisant votre propre serveur Web externe (comme Apache, Nginx, Lighttp), utilisez le lien "
class='notranslate'>%s".
+PreviewSiteServedByDolibarr=Aperçu %s dans un nouvel onglet.
Le %s sera servi par le serveur Dolibarr, il n'a donc pas besoin d'installer de serveur Web supplémentaire (comme Apache, Nginx, IIS).
L'inconvénient est que les URL des pages ne sont pas conviviales et commencez par le chemin de votre Dolibarr.
URL servie par Dolibarr :
%s
Pour déployer ou tester en utilisant votre propre serveur Web externe (comme Apache, Nginx, Lighttp), utilisez le lien "%s".
VirtualHostUrlNotDefined=L'URL de l'hôte virtuel servi par le serveur Web externe n'est pas définie
NoPageYet=Pas encore de pages
YouCanCreatePageOrImportTemplate=Vous pouvez créer une nouvelle page ou importer un modèle de site Web complet
SyntaxHelp=Aide sur des astuces de syntaxe spécifiques
YouCanEditHtmlSourceckeditor=Vous pouvez modifier le code source HTML en utilisant le bouton « Source » dans l'éditeur.
-YouCanEditHtmlSource=
Vous pouvez inclure du code PHP dans cette source en utilisant les balises <?php ?>. Les variables globales suivantes sont disponibles : $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.
Vous pouvez également inclure le contenu d'une autre page/conteneur avec la syntaxe suivante :
<?php includeContainer('alias_du_conteneur_à_inclure'); ?>
Vous pouvez créer une redirection vers une autre page/conteneur avec la syntaxe suivante (Remarque : n'affichez aucun contenu avant une redirection) :
<?php redirectToContainer('alias_du_conteneur_vers_la_rediriger'); ?>
Vous pouvez également effectuer une redirection avec des paramètres GET :
<?php redirectToContainer('alias_of_container_to_redirect_to', '', 0, 0, $array_of_get_params); ?>
Pour ajouter un lien vers une autre page, utilisez la syntaxe :
<a href="alias_de_la_page_à_lier_à.php">monlien<a>
Vous pouvez définir dynamiquement le titre de la page et les balises méta SEO (titre, mots-clés, description). Définissez simplement les variables suivantes :
$__PAGE__TITLE__ = "Valeur du titre …";
$__PAGE__KEYWORDS__ = "mot-clé1, mot-clé2, mot-clé3 …"; // Séparé par des virgules
$__PAGE__DESC__ = "Description …";
À inclure un
lien pour télécharger un fichier stocké dans le répertoire
documents, utilisez le wrapper
document.php :
Exemple, pour un fichier dans documents/ecm (à enregistrer), la syntaxe est :
class='notranslate'>
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">Pour un fichier dans documents/medias (répertoire ouvert pour accès public), la syntaxe est :
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">Pour un fichier partagé avec un lien de partage (accès ouvert à l'aide de la clé de hachage de partage du fichier), la syntaxe est :
<a href="/document.php?hashp=publicsharekeyoffile">b0342f ccfda19bz0
+YouCanEditHtmlSource=
Vous pouvez inclure du code PHP dans cette source en utilisant les balises
<?php ?>. Les variables globales suivantes sont disponibles : $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.
Vous pouvez également inclure le contenu d'une autre page/conteneur avec la syntaxe suivante :
<?php includeContainer('alias_du_conteneur_à_inclure'); ?> Vous pouvez créer une redirection vers une autre page/conteneur avec la syntaxe suivante (Remarque : n'affichez aucun contenu avant une redirection) :
<?php redirectToContainer('alias_du_conteneur_vers_la_rediriger'); ?>Vous pouvez également effectuer une redirection avec des paramètres GET :
<?php redirectToContainer('alias_of_container_to_redirect_to', '', 0, 0, $array_of_get_params); ?> Pour ajouter un lien vers une autre page, utilisez la syntaxe :
<a href="alias_de_la_page_à_lier_à.php">monlien<a> Vous pouvez définir dynamiquement le titre de la page et les balises méta SEO (titre, mots-clés, description). Définissez simplement les variables suivantes :
$__PAGE__TITLE__ = "Valeur du titre …";
$__PAGE__KEYWORDS__ = "mot-clé1, mot-clé2, mot-clé3 …"; // Séparé par des virgules
$__PAGE__DESC__ = "Description …";
À inclure un
lien pour télécharger un fichier stocké dans le répertoire
documents, utilisez le wrapper
document.php :
Exemple, pour un fichier dans documents/ecm (à enregistrer), la syntaxe est :
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">Pour un fichier dans documents/medias (répertoire ouvert pour accès public), la syntaxe est :
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">Pour un fichier partagé avec un lien de partage (accès ouvert à l'aide de la clé de hachage de partage du fichier), la syntaxe est :
<a href="/document.php?hashp=publicsharekeyoffile">b0342f ccfda19bz0
YouCanEditHtmlSource1=
Pour inclure une
image stockée dans le répertoire
medias (répertoire ouvert au public), utilisez le chemin relatif commençant par
/medias, exemple :
<img src="/medias/image/myimagepath/filename.ext">
YouCanEditHtmlSource2=Pour une image partagée avec un lien de partage (accès libre à l'aide de la clé de hachage de partage du fichier), utilisez le wrapper :
<img src="/viewimage.php?hashp=12345679012...">
YouCanEditHtmlSource3=Pour obtenir l'URL de l'image d'un objet PHP, utilisez
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang
index 423aefb5ee8..106bb9eb483 100644
--- a/htdocs/langs/fr_FR/website.lang
+++ b/htdocs/langs/fr_FR/website.lang
@@ -62,7 +62,7 @@ NoPageYet=Pas de page pour l'instant
YouCanCreatePageOrImportTemplate=Vous pouvez créer une nouvelle page ou importer un modèle de site Web complet.
SyntaxHelp=Aide sur quelques astuces spécifiques de syntaxe
YouCanEditHtmlSourceckeditor=Vous pouvez éditer le code source en activant l'éditeur HTML avec le bouton "Source".
-YouCanEditHtmlSource=
Vous pouvez inclure du code PHP dans cette source en utilisant les tags
<?php ?>. Les variables globales suivantes sont disponibles : $conf, $db, $mysoc, $utilisateur, $website, $websitepage, $weblangs, $pagelangs.
Vous pouvez également inclure du contenu d'une autre page/conteneur avec la syntaxe suivante :
<?php includeContainer('alias_of_container_to_include'); ?> Vous pouvez effectuer une redirection vers une autre page/conteneur avec la syntaxe suivante (Remarque : ne génère aucun contenu avant une redirection) :
<?php redirectToContainer(' alias_of_container_to_redirect_to'); ?>Vous pouvez également effectuer une redirection avec les paramètres GET :
<?php redirectToContainer('alias_of_container_to_redirect_to', '', 0, 0, $array_of_get_params); ?> Pour ajouter un lien vers une autre page, utilisez la syntaxe :
<a href="alias_of_page_to_link_to.php" >monlien<a> Pour inclure un
lien pour télécharger un fichier stocké dans le répertoire
documents, utilisez l'encapsuleur
document.php :
Exemple, pour un fichier dans documents/ecm (besoin d'être loggué), la syntaxe est :
<a href="/document.php?modulepart=ecm&fichier= [relative_dir/]filename.ext">Pour un fichier dans des documents/médias (répertoire ouvert en accès public), la syntaxe est:
<a href="/document.php?modulepart=medias&fichier=[relative_dir/]filename.ext">Pour un fichier partagé avec un lien de partage (accès ouvert en utilisant la clé de partage de fichier), la syntaxe est:
<a href="/document.php?hashp=publicsharekeyoffile">
+YouCanEditHtmlSource=
Vous pouvez inclure du code PHP dans cette source en utilisant les tags
<?php ?>. Les variables globales suivantes sont disponibles : $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.
Vous pouvez également inclure du contenu d'une autre page/conteneur avec la syntaxe suivante :
<?php includeContainer('alias_of_container_to_include'); ?> Vous pouvez effectuer une redirection vers une autre page/conteneur avec la syntaxe suivante (Remarque : ne génère aucun contenu avant une redirection) :
<?php redirectToContainer(' alias_of_container_to_redirect_to'); ?>Vous pouvez également effectuer une redirection avec les paramètres GET :
<?php redirectToContainer('alias_of_container_to_redirect_to', '', 0, 0, $array_of_get_params); ?> Pour ajouter un lien vers une autre page, utilisez la syntaxe :
<a href="alias_of_page_to_link_to.php" >monlien<a> Pour inclure un
lien pour télécharger un fichier stocké dans le répertoire
documents, utilisez l'encapsuleur
document.php :
Exemple, pour un fichier dans documents/ecm (besoin d'être loggué), la syntaxe est :
<a href="/document.php?modulepart=ecm&fichier= [relative_dir/]filename.ext">Pour un fichier dans des documents/médias (répertoire ouvert en accès public), la syntaxe est:
<a href="/document.php?modulepart=medias&fichier=[relative_dir/]filename.ext">Pour un fichier partagé avec un lien de partage (accès ouvert en utilisant la clé de partage de fichier), la syntaxe est:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
Pour inclure une
image stockée dans le répertoire
medias (répertoire ouvert au public), utilisez le chemin relatif commençant par
/medias, exemple:
<img src="/medias/image/myimagepath/filename.ext">
YouCanEditHtmlSource2=Pour une image partagée avec un lien de partage (accès libre à l'aide de la clé de partage de fichier), utilisez l'encapsuleur :
<img src="/viewimage.php?hashp=12345679012...">
YouCanEditHtmlSource3=Pour obtenir l'adresse URL de l'image d'un objet PHP, utilisez
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">