/** * Compares to revisions of the page * * @param int $a_left Nr of first revision * @param int $a_right Nr of second revision */ function compareVersion($a_left, $a_right) { global $ilDB; // get page objects $l_page = new ilPageObject($this->getParentType(), $this->getId(), $a_left); $r_page = new ilPageObject($this->getParentType(), $this->getId(), $a_right); $l_hashes = $l_page->getPageContentsHashes(); $r_hashes = $r_page->getPageContentsHashes(); // determine all deleted and changed page elements foreach ($l_hashes as $pc_id => $h) { if (!isset($r_hashes[$pc_id])) { $l_hashes[$pc_id]["change"] = "Deleted"; } else { if ($l_hashes[$pc_id]["hash"] != $r_hashes[$pc_id]["hash"]) { $l_hashes[$pc_id]["change"] = "Modified"; $r_hashes[$pc_id]["change"] = "Modified"; include_once "./Services/COPage/mediawikidiff/class.WordLevelDiff.php"; // if modified element is a paragraph, highlight changes if ($l_hashes[$pc_id]["content"] != "" && $r_hashes[$pc_id]["content"] != "") { $new_left = str_replace("\n", "<br />", $l_hashes[$pc_id]["content"]); $new_right = str_replace("\n", "<br />", $r_hashes[$pc_id]["content"]); $wldiff = new WordLevelDiff(array($new_left), array($new_right)); $new_left = $wldiff->orig(); $new_right = $wldiff->closing(); $l_page->setParagraphContent($l_hashes[$pc_id]["hier_id"], $new_left[0]); $r_page->setParagraphContent($l_hashes[$pc_id]["hier_id"], $new_right[0]); } } } } // determine all new paragraphs foreach ($r_hashes as $pc_id => $h) { if (!isset($l_hashes[$pc_id])) { $r_hashes[$pc_id]["change"] = "New"; } } $l_page->addChangeDivClasses($l_hashes); $r_page->addChangeDivClasses($r_hashes); return array("l_page" => $l_page, "r_page" => $r_page, "l_changes" => $l_hashes, "r_changes" => $r_hashes); }