From 7b999cef50edb79129c98531e79cf64d32536511 Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Tue, 26 Mar 2024 09:52:20 +0100 Subject: [PATCH] Compilation issue --- core/designdocument.class.inc.php | 53 +++++++++++++++++++++++++++++-- setup/modelfactory.class.inc.php | 12 +++---- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/core/designdocument.class.inc.php b/core/designdocument.class.inc.php index 6137f7fd1..b36bd10d1 100644 --- a/core/designdocument.class.inc.php +++ b/core/designdocument.class.inc.php @@ -26,7 +26,6 @@ namespace Combodo\iTop; -use DOMComment; use DOMDocument; use DOMFormatException; use DOMNode; @@ -35,9 +34,7 @@ use DOMXPath; use Exception; use IssueLog; use LogAPI; -use MFDocument; use MFElement; -use ModelFactory; use utils; /** @@ -242,6 +239,56 @@ class DesignElement extends \DOMElement return ''; } + + /** + * Compatibility with PHP8.0 + * + * @return \DOMElement|null + * + * @since 3.1.2 + */ + public function GetFirstElementChild() + { + if (property_exists($this, 'firstElementChild')) { + return $this->firstElementChild; + } + + $oChildNode = $this->firstChild; + while (!is_null($oChildNode)) { + if ($oChildNode instanceof \DOMElement) { + return $oChildNode; + } + $oChildNode = $oChildNode->nextSibling; + } + + return null; + } + + /** + * Compatibility with PHP8.0 + * + * @return \DOMElement|null + * + * @since 3.1.2 + */ + public function GetNextElementSibling() + { + if (property_exists($this, 'nextElementSibling')) { + return $this->nextElementSibling; + } + + $oSibling = $this->nextSibling; + while (!is_null($oSibling)) { + if ($oSibling instanceof \DOMElement) { + return $oSibling; + } + $oSibling = $oSibling->nextSibling; + } + + return null; + + } + /** * Returns the node directly under the given node * @param $sTagName diff --git a/setup/modelfactory.class.inc.php b/setup/modelfactory.class.inc.php index 945f3c703..4009a5afe 100644 --- a/setup/modelfactory.class.inc.php +++ b/setup/modelfactory.class.inc.php @@ -848,7 +848,7 @@ class ModelFactory // Do not continue deeper $oTargetNode = null; } else { - if (!$bSpecifiedMerge && $sMode === self::LOAD_DELTA_MODE_STRICT && ($sSearchId !== '' || is_null($oSourceNode->firstElementChild))) { + if (!$bSpecifiedMerge && $sMode === self::LOAD_DELTA_MODE_STRICT && ($sSearchId !== '' || is_null($oSourceNode->GetFirstElementChild()))) { $iLine = ModelFactory::GetXMLLineNumber($oSourceNode); $sItopNodePath = DesignDocument::GetItopNodePath($oSourceNode); throw new MFException($sItopNodePath.' at line '.$iLine.': could not be found or marked as removed (strict mode)', @@ -889,7 +889,7 @@ class ModelFactory $oTargetParentNode->insertBefore($oCommentNode, $oTargetNode); } // Continue deeper - for ($oSourceChild = $oSourceNode->firstElementChild; !is_null($oSourceChild); $oSourceChild = $oSourceChild->nextElementSibling) { + for ($oSourceChild = $oSourceNode->GetFirstElementChild(); !is_null($oSourceChild); $oSourceChild = $oSourceChild->GetNextElementSibling()) { $this->LoadFlattenDelta($oSourceChild, $oTargetDocument, $oTargetNode, $sMode); } $oTargetNode = null; @@ -898,7 +898,7 @@ class ModelFactory } if ($oTargetNode) { - if (is_null($oSourceNode->firstElementChild) && $oTargetParentNode instanceof MFElement) { + if (is_null($oSourceNode->GetFirstElementChild()) && $oTargetParentNode instanceof MFElement) { // Leaf node if ($sMode === self::LOAD_DELTA_MODE_STRICT && !$oSourceNode->hasAttribute('_rename_from') && trim($oSourceNode->GetText('')) !== '') { $iLine = ModelFactory::GetXMLLineNumber($oSourceNode); @@ -916,7 +916,7 @@ class ModelFactory } } } else { - for ($oSourceChild = $oSourceNode->firstElementChild; !is_null($oSourceChild); $oSourceChild = $oSourceChild->nextElementSibling) { + for ($oSourceChild = $oSourceNode->GetFirstElementChild(); !is_null($oSourceChild); $oSourceChild = $oSourceChild->GetNextElementSibling()) { // Continue deeper $this->LoadFlattenDelta($oSourceChild, $oTargetDocument, $oTargetNode, $sMode); } @@ -1042,7 +1042,7 @@ class ModelFactory } if (!$bIsRoot) { // Hard deletion is necessary - $oClassNode->remove(); + $oClassNode->parentNode->removeChild($oClassNode); } } @@ -1574,7 +1574,7 @@ EOF public function GetClass($sClassName, $bIncludeMetas = false) { // Check if class among XML classes - /** @var \MFElemen|null $oClassNode */ + /** @var \MFElement|null $oClassNode */ $oClassNode = $this->GetNodes("/itop_design/classes/class[@id='$sClassName']")->item(0); // If not, check if class among exposed meta classes (PHP classes)