public function saveTextRevision($moduleId, $moduleContentTypeId, $moduleContentId, $oldText, $newText, $textfieldIndex = 0, $revision = 0) { global $dbi, $login, $settings; if (!$settings->enableRevisioning) { return; } // Get latest revision number and increment $maxRevision = 0; if (empty($revision)) { $result = $dbi->query("SELECT MAX(revision) FROM " . revisionTableName . " WHERE moduleId=" . $dbi->quote($moduleId) . " AND moduleContentTypeId=" . $dbi->quote($moduleContentTypeId) . " AND moduleContentId=" . $dbi->quote($moduleContentId)); if ($result->rows()) { list($maxRevision) = $result->fetchrow_array(); $maxRevision++; } } else { $maxRevision = $revision; } // Parse text strings $newText = parseString($newText); $oldText = parseString($oldText); // Calculate diff $diff = new Diff(); $result = $diff->stringDiff($newText, $oldText, " "); $changes = $diff->sequentialChanges($result); if (sizeof($changes) > 0) { $serializedChanges = serialize($changes); // Insert diff $dbi->query("INSERT INTO " . revisionTableName . "(moduleId,moduleContentTypeId,moduleContentId,textfieldIndex,diff,revision,userId,timestamp) VALUES(" . $dbi->quote($moduleId) . "," . $dbi->quote($moduleContentTypeId) . "," . $dbi->quote($moduleContentId) . "," . $dbi->quote($textfieldIndex) . "," . $dbi->quote($serializedChanges) . "," . $dbi->quote($maxRevision) . "," . $dbi->quote($login->id) . ",NOW())"); } return $maxRevision; }