From d1c980b0be8987410fa2a3ddc4dd6e9794aa7584 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 8 Mar 2024 11:57:07 +0100 Subject: [PATCH 1/2] Factoring fetchObjectLinked --- htdocs/core/class/commonobject.class.php | 98 +++--------------------- htdocs/core/lib/functions.lib.php | 23 +++++- 2 files changed, 29 insertions(+), 92 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index cac72ca1e49..73e22b7bce7 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4200,98 +4200,20 @@ abstract class CommonObject if (!empty($this->linkedObjectsIds)) { $tmparray = $this->linkedObjectsIds; foreach ($tmparray as $objecttype => $objectids) { // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...) - // Parse element/subelement (ex: project_task, cabinetmed_consultation, ...) - $module = $element = $subelement = $objecttype; - $regs = array(); - if ($objecttype != 'supplier_proposal' && $objecttype != 'order_supplier' && $objecttype != 'invoice_supplier' - && preg_match('/^([^_]+)_([^_]+)/i', $objecttype, $regs)) { - $module = $element = $regs[1]; - $subelement = $regs[2]; - } + $element_properties = getElementProperties($objecttype); + $element = $element_properties['element']; + $classPath = $element_properties['classpath']; + $classFile = $element_properties['classfile']; + $className = $element_properties['classname']; + $module = $element_properties['module']; - $classpath = $element.'/class'; - // To work with non standard classpath or module name - if ($objecttype == 'facture') { - $classpath = 'compta/facture/class'; - } elseif ($objecttype == 'facturerec') { - $classpath = 'compta/facture/class'; - $module = 'facture'; - } elseif ($objecttype == 'propal') { - $classpath = 'comm/propal/class'; - } elseif ($objecttype == 'supplier_proposal') { - $classpath = 'supplier_proposal/class'; - } elseif ($objecttype == 'shipping') { - $classpath = 'expedition/class'; - $subelement = 'expedition'; - $module = 'expedition'; - } elseif ($objecttype == 'delivery') { - $classpath = 'delivery/class'; - $subelement = 'delivery'; - $module = 'delivery_note'; - } elseif ($objecttype == 'invoice_supplier' || $objecttype == 'order_supplier') { - $classpath = 'fourn/class'; - $module = 'fournisseur'; - } elseif ($objecttype == 'fichinter') { - $classpath = 'fichinter/class'; - $subelement = 'fichinter'; - $module = 'ficheinter'; - } elseif ($objecttype == 'subscription') { - $classpath = 'adherents/class'; - $module = 'adherent'; - } elseif ($objecttype == 'contact') { - $module = 'societe'; - } - // Set classfile - $classfile = strtolower($subelement); - $classname = ucfirst($subelement); - - if ($objecttype == 'order') { - $classfile = 'commande'; - $classname = 'Commande'; - } elseif ($objecttype == 'invoice_supplier') { - $classfile = 'fournisseur.facture'; - $classname = 'FactureFournisseur'; - } elseif ($objecttype == 'order_supplier') { - $classfile = 'fournisseur.commande'; - $classname = 'CommandeFournisseur'; - } elseif ($objecttype == 'supplier_proposal') { - $classfile = 'supplier_proposal'; - $classname = 'SupplierProposal'; - } elseif ($objecttype == 'facturerec') { - $classfile = 'facture-rec'; - $classname = 'FactureRec'; - } elseif ($objecttype == 'subscription') { - $classfile = 'subscription'; - $classname = 'Subscription'; - } elseif ($objecttype == 'project' || $objecttype == 'projet') { - $classpath = 'projet/class'; - $classfile = 'project'; - $classname = 'Project'; - } elseif ($objecttype == 'conferenceorboothattendee') { - $classpath = 'eventorganization/class'; - $classfile = 'conferenceorboothattendee'; - $classname = 'ConferenceOrBoothAttendee'; - $module = 'eventorganization'; - } elseif ($objecttype == 'conferenceorbooth') { - $classpath = 'eventorganization/class'; - $classfile = 'conferenceorbooth'; - $classname = 'ConferenceOrBooth'; - $module = 'eventorganization'; - } elseif ($objecttype == 'mo') { - $classpath = 'mrp/class'; - $classfile = 'mo'; - $classname = 'Mo'; - $module = 'mrp'; - } - - // Here $module, $classfile and $classname are set, we can use them. + // Here $module, $classFile and $className are set, we can use them. if (isModEnabled($module) && (($element != $this->element) || $alsosametype)) { if ($loadalsoobjects && (is_numeric($loadalsoobjects) || ($loadalsoobjects === $objecttype))) { - dol_include_once('/'.$classpath.'/'.$classfile.'.class.php'); - //print '/'.$classpath.'/'.$classfile.'.class.php '.class_exists($classname); - if (class_exists($classname)) { + dol_include_once('/'.$classPath.'/'.$classFile.'.class.php'); + if (class_exists($className)) { foreach ($objectids as $i => $objectid) { // $i is rowid into llx_element_element - $object = new $classname($this->db); + $object = new $className($this->db); $ret = $object->fetch($objectid); if ($ret >= 0) { $this->linkedObjects[$objecttype][$i] = $object; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index d2d4a4558f8..ce423636f28 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -12140,6 +12140,10 @@ function getElementProperties($elementType) $module = 'facture'; $subelement = 'facture'; $table_element = 'facture'; + } elseif ($elementType == 'facturerec') { + $classpath = 'compta/facture/class'; + $module = 'facture'; + $classname = 'FactureRec'; } elseif ($elementType == 'commande' || $elementType == 'order') { $classpath = 'commande/class'; $module = 'commande'; @@ -12160,13 +12164,14 @@ function getElementProperties($elementType) $element = 'supplierproposal'; $classfile = 'supplier_proposal'; $subelement = 'supplierproposal'; - } elseif ($elementType == 'shipping') { - $classpath = 'expedition/class'; - $subelement = 'expedition'; - $module = 'expedition_bon'; + // } elseif ($elementType == 'shipping') { // TODO atm-john @2024-03-08 : $elementType == 'shipping' already set. And what is expedition_bon module using class shipping ? This line make no sense ... + // $classpath = 'expedition/class'; + // $subelement = 'expedition'; + // $module = 'expedition_bon'; } elseif ($elementType == 'delivery') { $classpath = 'delivery/class'; $subelement = 'delivery'; + // TODO atm-john @2024-03-08 : Strange definition found on fetchObjectLinked of common object, before factoring, the value was $module = 'delivery_note'; Who's right? $module = 'expedition'; } elseif ($elementType == 'contract') { $classpath = 'contrat/class'; @@ -12280,6 +12285,16 @@ function getElementProperties($elementType) $classname = 'EmailSenderProfile'; $table_element = 'c_email_senderprofile'; $subelement = ''; + } elseif ($objectType == 'conferenceorboothattendee') { + $classpath = 'eventorganization/class'; + $classfile = 'conferenceorboothattendee'; + $classname = 'ConferenceOrBoothAttendee'; + $module = 'eventorganization'; + } elseif ($objectType == 'conferenceorbooth') { + $classpath = 'eventorganization/class'; + $classfile = 'conferenceorbooth'; + $classname = 'ConferenceOrBooth'; + $module = 'eventorganization'; } if (empty($classfile)) { From cc6fbef64d25bd2bcd7104d1cb42708492451a95 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 12 Mar 2024 14:44:48 +0100 Subject: [PATCH 2/2] Update functions.lib.php --- htdocs/core/lib/functions.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 8159bc5436e..62b0d8b42d2 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -12296,12 +12296,12 @@ function getElementProperties($elementType) $classname = 'EmailSenderProfile'; $table_element = 'c_email_senderprofile'; $subelement = ''; - } elseif ($objectType == 'conferenceorboothattendee') { + } elseif ($elementType == 'conferenceorboothattendee') { $classpath = 'eventorganization/class'; $classfile = 'conferenceorboothattendee'; $classname = 'ConferenceOrBoothAttendee'; $module = 'eventorganization'; - } elseif ($objectType == 'conferenceorbooth') { + } elseif ($elementType == 'conferenceorbooth') { $classpath = 'eventorganization/class'; $classfile = 'conferenceorbooth'; $classname = 'ConferenceOrBooth';