From 2455d8fe5202fd040f9a522d6056dc3fab95a0f7 Mon Sep 17 00:00:00 2001 From: atm-greg Date: Mon, 4 Apr 2022 14:31:48 +0200 Subject: [PATCH 1/4] avoid fetch_objectlinked for each page of the document --- htdocs/core/class/commonobject.class.php | 8 ++++++++ htdocs/core/lib/pdf.lib.php | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 232aa6b5789..f7eb6a67263 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -123,6 +123,11 @@ abstract class CommonObject */ public $linkedObjects; + /** + * @var boolean is linkedObjects full loaded. Loaded by ->fetchObjectLinked + */ + public $linkedObjectsFullLoaded = false; + /** * @var Object To store a cloned copy of object before to edit it and keep track of old properties */ @@ -3834,6 +3839,9 @@ abstract class CommonObject } else { $sql .= "(fk_source = ".((int) $sourceid)." AND sourcetype = '".$this->db->escape($sourcetype)."')"; $sql .= " ".$clause." (fk_target = ".((int) $targetid)." AND targettype = '".$this->db->escape($targettype)."')"; + if ($sourceid == $this->id && $sourcetype == $this->element && $targetid == $this->id && $targettype == $this->element && $clause == 'OR') { + $this->linkedObjectsFullLoaded = true; + } } $sql .= " ORDER BY ".$orderby; diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index ea8c6c2ce23..b273f93b69f 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2282,7 +2282,9 @@ function pdf_getLinkedObjects(&$object, $outputlangs) $linkedobjects = array(); - $object->fetchObjectLinked(); + if (empty($object->linkedObjectsFullLoaded)) { + $object->fetchObjectLinked(); + } foreach ($object->linkedObjects as $objecttype => $objects) { if ($objecttype == 'facture') { From ad145c94ca5a9ad2f4632e7b7621ab1ad5fd1547 Mon Sep 17 00:00:00 2001 From: atm-greg Date: Mon, 4 Apr 2022 17:23:34 +0200 Subject: [PATCH 2/4] add comment --- htdocs/core/class/commonobject.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index f7eb6a67263..a8233a3d29f 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -125,6 +125,7 @@ abstract class CommonObject /** * @var boolean is linkedObjects full loaded. Loaded by ->fetchObjectLinked + * important for pdf generation time reduction */ public $linkedObjectsFullLoaded = false; From 59fec7d0949cf860f01753d484242e7436f54e5f Mon Sep 17 00:00:00 2001 From: atm-greg Date: Tue, 5 Apr 2022 15:10:31 +0200 Subject: [PATCH 3/4] implement cache managed by current object --- htdocs/core/class/commonobject.class.php | 4 ++++ htdocs/core/lib/pdf.lib.php | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a8233a3d29f..e04ac12636d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3779,6 +3779,10 @@ abstract class CommonObject { global $conf, $hookmanager, $action; + // important for pdf generation time reduction + // this boolean is true if $this->linkedObjects has already been loaded with all objects linked without filter + if ($this->linkedObjectsFullLoaded) return 1; + $this->linkedObjectsIds = array(); $this->linkedObjects = array(); diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index b273f93b69f..ea8c6c2ce23 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2282,9 +2282,7 @@ function pdf_getLinkedObjects(&$object, $outputlangs) $linkedobjects = array(); - if (empty($object->linkedObjectsFullLoaded)) { - $object->fetchObjectLinked(); - } + $object->fetchObjectLinked(); foreach ($object->linkedObjects as $objecttype => $objects) { if ($objecttype == 'facture') { From aa42df9961e4c0865b8f1382b870317ab521281b Mon Sep 17 00:00:00 2001 From: atm-greg Date: Tue, 5 Apr 2022 15:11:37 +0200 Subject: [PATCH 4/4] just for glory --- htdocs/core/class/commonobject.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index e04ac12636d..02d016d2ce7 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -15,6 +15,7 @@ * Copyright (C) 2018-2021 Frédéric France * Copyright (C) 2018 Josep Lluís Amador * Copyright (C) 2021 Gauthier VERDOL + * Copyright (C) 2021 Grégory Blémand * * 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