From a66a897a07ef4f7bbee2b469e8fa2f7bf3d8269e Mon Sep 17 00:00:00 2001 From: William Mead Date: Thu, 18 Dec 2025 11:22:33 +0100 Subject: [PATCH 1/4] Fixed document API agenda event list and download --- htdocs/api/class/api_documents.class.php | 1 + htdocs/core/lib/files.lib.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index ab4c85f865d..7867318a418 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -602,6 +602,7 @@ class Documents extends DolibarrApi } $upload_dir = getMultidirOutput($object) . '/'.dol_sanitizeFileName($object->ref); + $upload_dir = $conf->agenda->multidir_output[$object->entity ?? $conf->entity].'/'.get_exdir(0, 0, 0, 1, $object, 'agenda'); } elseif ($modulepart == 'expensereport') { require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 130c9542b7e..4359709c08c 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -3254,7 +3254,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } $modulepartsuffix = str_replace('tax-', '', $modulepart); $original_file = $conf->tax->dir_output.'/'.($modulepartsuffix != 'tax' ? $modulepartsuffix.'/' : '').$original_file; - } elseif ($modulepart == 'actions' && !empty($conf->agenda->dir_output)) { + } elseif (($modulepart == 'actions' || $modulepart == 'actioncomm') && !empty($conf->agenda->dir_output)) { // Wrapping for events if ($fuser->hasRight('agenda', 'myactions', $read)) { $accessallowed = 1; From 86328e840eaf01a8e57e193e1edca804463bf2b6 Mon Sep 17 00:00:00 2001 From: William Mead Date: Thu, 18 Dec 2025 11:25:31 +0100 Subject: [PATCH 2/4] Cleaned code --- htdocs/api/class/api_documents.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index 7867318a418..bfdd4dec0ab 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -601,7 +601,6 @@ class Documents extends DolibarrApi throw new RestException(404, 'Event not found'); } - $upload_dir = getMultidirOutput($object) . '/'.dol_sanitizeFileName($object->ref); $upload_dir = $conf->agenda->multidir_output[$object->entity ?? $conf->entity].'/'.get_exdir(0, 0, 0, 1, $object, 'agenda'); } elseif ($modulepart == 'expensereport') { require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; From a31e01bd7715d7c24292610d53a327ac7a14c0a2 Mon Sep 17 00:00:00 2001 From: William Mead Date: Fri, 19 Dec 2025 08:50:50 +0100 Subject: [PATCH 3/4] Refactored to use getMultidirOutput --- htdocs/api/class/api_documents.class.php | 3 +-- htdocs/core/lib/functions.lib.php | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index bfdd4dec0ab..2efd1f4b0db 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -600,8 +600,7 @@ class Documents extends DolibarrApi if (!$result) { throw new RestException(404, 'Event not found'); } - - $upload_dir = $conf->agenda->multidir_output[$object->entity ?? $conf->entity].'/'.get_exdir(0, 0, 0, 1, $object, 'agenda'); + $upload_dir = getMultidirOutput($object) . '/'.dol_sanitizeFileName($object->ref); } elseif ($modulepart == 'expensereport') { require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index b3281b05fbe..8680919af62 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -161,6 +161,8 @@ function getMultidirOutput($object, $module = '', $forobject = 0, $mode = 'outpu } elseif ($module == 'knowledgerecord') { $module = 'knowledgemanagement'; $subdirectory = '/knowledgerecord'; + } elseif ($module == 'action' || $module == 'actioncomm' || $module = 'event') { + $module = 'agenda'; } // Get the relative path of directory From 1d32ded07f425754780bb651515db8904921f123 Mon Sep 17 00:00:00 2001 From: William Mead Date: Fri, 19 Dec 2025 16:26:35 +0100 Subject: [PATCH 4/4] Refactored and cleaned code --- htdocs/api/class/api_documents.class.php | 5 ++- htdocs/core/lib/functions.lib.php | 50 ++++++++++++++++-------- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index 2efd1f4b0db..f0f96871792 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -587,8 +587,8 @@ class Documents extends DolibarrApi throw new RestException(500, 'Error while fetching object: '.$object->error); } - $upload_dir = $conf->product->multidir_output[$object->entity ?? $conf->entity].'/'.get_exdir(0, 0, 0, 1, $object, 'product'); - } elseif ($modulepart == 'agenda' || $modulepart == 'action' || $modulepart == 'event') { + $upload_dir = getMultidirOutput($object) . '/'.dol_sanitizeFileName($object->ref); + } elseif ($modulepart == 'agenda' || $modulepart == 'action' || $modulepart == 'event' || $modulepart == 'actioncomm') { require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; if (!DolibarrApiAccess::$user->hasRight('agenda', 'myactions', 'read') && !DolibarrApiAccess::$user->hasRight('agenda', 'allactions', 'read')) { @@ -600,6 +600,7 @@ class Documents extends DolibarrApi if (!$result) { throw new RestException(404, 'Event not found'); } + $upload_dir = getMultidirOutput($object) . '/'.dol_sanitizeFileName($object->ref); } elseif ($modulepart == 'expensereport') { require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 8680919af62..2233a60dee1 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -146,23 +146,39 @@ function getMultidirOutput($object, $module = '', $forobject = 0, $mode = 'outpu } // Special case for backward compatibility - if ($module == 'fichinter') { - $module = 'ficheinter'; - } elseif ($module == 'invoice_supplier') { - $module = 'supplier_invoice'; - } elseif ($module == 'order_supplier') { - $module = 'supplier_order'; - } elseif ($module == 'recruitmentjobposition') { - $module = 'recruitment'; - $subdirectory = '/recruitmentjobposition'; - } elseif ($module == 'recruitmentcandidature') { - $module = 'recruitment'; - $subdirectory = '/recruitmentcandidature'; - } elseif ($module == 'knowledgerecord') { - $module = 'knowledgemanagement'; - $subdirectory = '/knowledgerecord'; - } elseif ($module == 'action' || $module == 'actioncomm' || $module = 'event') { - $module = 'agenda'; + switch ($module) { + case 'fichinter': + $module = 'ficheinter'; + break; + case 'invoice_supplier': + $module = 'supplier_invoice'; + break; + case 'order_supplier': + $module = 'supplier_order'; + break; + case 'recruitmentjobposition': + $module = 'recruitment'; + $subdirectory = '/recruitmentjobposition'; + break; + case 'recruitmentcandidature': + $module = 'recruitment'; + $subdirectory = '/recruitmentcandidature'; + break; + case 'knowledgerecord': + $module = 'knowledgemanagement'; + $subdirectory = '/knowledgerecord'; + break; + case 'service': + case 'produit': + $module = 'product'; + break; + case 'action': + case 'actioncomm': + case 'event': + $module = 'agenda'; + break; + default: + break; } // Get the relative path of directory