private static function findEditedNodes($aoDiffs) { //AnwDebug::logdetail(" ------ findEditedNodes ------ "); $aoNewDiffs = array(); //find edited nodes (= near deletion + addition with the same tag) $nCountDiffs = count($aoDiffs); for ($i = 0; $i < $nCountDiffs; $i++) { //$bKeepDiffUnchanged = true; if (isset($aoDiffs[$i])) { $oDiff = $aoDiffs[$i]; if ($oDiff->getDiffType() == AnwDiff::TYPE_ADDED || $oDiff->getDiffType() == AnwDiff::TYPE_DELETED && !$oDiff->hasMovedDiff()) { $j = self::findEditedNodes_findNext($aoDiffs, $i); if ($j) { if ($oDiff->getDiffType() == AnwDiff::TYPE_ADDED) { $iDiffAdded = $i; $iDiffDeleted = $j; } else { $iDiffAdded = $j; $iDiffDeleted = $i; } $oDiffAdded = $aoDiffs[$iDiffAdded]; $oDiffDeleted = $aoDiffs[$iDiffDeleted]; //AnwDebug::logdetail("?!? ".htmlentities(AnwUtils::xmlDumpNode($oDiffAdded->getNode()))." (".$oDiffAdded->getNode()->nodeName.")"); if (AnwXml::xmlIsTextNode($oDiffAdded->getNode()) || AnwXml::xmlIsPhpNode($oDiffAdded->getNode())) { //--------------------------------------------------------- // EDITED NODE //--------------------------------------------------------- //AnwDebug::logdetail("?!?---> ".$oDiffAdded->getNode()->nodeValue); $oDiffReplacingAdded = new AnwDiffEdited($oDiffAdded, $oDiffDeleted); //AnwDebug::logdetail("findEditedNodes : AnwDiffEdited found : ".htmlentities(AnwUtils::xmlDumpNode($oDiffDeleted->getNode()))." --> ".htmlentities(AnwUtils::xmlDumpNode($oDiffAdded->getNode()))); //replace AnwDiffAdded with AnwDiffEdited, remove AnwDiffDeleted //$bKeepDiffUnchanged = false; //$aoNewDiffs[] = $oDiffReplacingAdded; //replace AnwDiffAdded $oDiff = $oDiffReplacingAdded; //replace AnwDiffAdded unset($aoDiffs[$iDiffDeleted]); //remove AnwDiffDeleted } else { //throw new AnwUnexpectedException("We shouldn't find anymore diffs here"); //--------------------------------------------------------- // DIFFS NODE //--------------------------------------------------------- } } } else { if ($oDiff->getDiffType() == AnwDiff::TYPE_DIFFS) { //continue search on childs $aoSubDiffs = self::findEditedNodes($oDiff->getAllDiffs()); $oDiff->setDiffs($aoSubDiffs); } } //if ($bKeepDiffUnchanged) //{ $aoNewDiffs[] = $oDiff; //} } } return $aoNewDiffs; }
private function findSubDeletedDiffs() { $oNode = $this->oNode; if (AnwXml::xmlIsTextNode($oNode) || AnwXml::xmlIsPhpNode($oNode) || AnwXml::xmlIsCommentNode($oNode)) { return; } $oChilds = $oNode->childNodes; if ($oChilds) { $this->aoSubDeletedDiffs = array(); for ($i = 0; $i < $oChilds->length; $i++) { $oChild = $oChilds->item($i); $oSubDiff = new AnwDiffDeleted($oChild, $this); $this->aoSubDeletedDiffs[] = $oSubDiff; } } }
static function runCallbacksOnTranslatableValue($oInstance, $oRootNode, $sFieldInput, $fOnTextValue, $fBeforeChilds = null, $fAfterChilds = null, $fOnUntranslatableNode = null, $bFirstCall = true) { static $j = 0; if ($bFirstCall) { $j = 0; } //reset if (AnwXml::xmlIsTranslatableParent($oRootNode)) { if (AnwXml::xmlIsTextNode($oRootNode)) { if (!AnwXml::xmlIsEmptyNode($oRootNode)) { if ($fOnTextValue) { $oInstance->{$fOnTextValue}($oRootNode, $sFieldInput); } } } else { if (AnwXml::xmlIsCommentNode($oRootNode)) { } else { if (AnwXml::xmlIsPhpNode($oRootNode)) { //do nothing } else { if ($fBeforeChilds && !AnwXml::xmlIsRootNode($oRootNode)) { $oInstance->{$fBeforeChilds}($oRootNode); } $oChildNodes = $oRootNode->childNodes; if ($oChildNodes) { //WARNING - don't use foreach here ! bug on some servers, as childs are getting modified... for ($i = 0; $i < $oChildNodes->length; $i++) { $oChild = $oChildNodes->item($i); $sFieldInputNew = self::runCallbacks_getInputName($sFieldInput, $j, '-'); self::runCallbacksOnTranslatableValue($oInstance, $oChild, $sFieldInputNew, $fOnTextValue, $fBeforeChilds, $fAfterChilds, $fOnUntranslatableNode, false); //recursive $j++; } } if ($fAfterChilds && !AnwXml::xmlIsRootNode($oRootNode)) { $oInstance->{$fAfterChilds}($oRootNode); } } } } } else { if ($fOnUntranslatableNode) { $oInstance->{$fOnUntranslatableNode}($oRootNode); } } }