Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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;
         }
     }
 }
Ejemplo n.º 3
0
 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);
         }
     }
 }