From f7d322a004c435c4283ff15e0e9d9d734899d3cf Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Fri, 7 Oct 2011 12:07:46 +0200 Subject: [PATCH] BUGFIX Marking fields as readonly in CMSMain->compareversions() before loading data, to avoid loading invalid values (HTML diffs) into the fields (AIR-39) --- code/controllers/CMSPageHistoryController.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/code/controllers/CMSPageHistoryController.php b/code/controllers/CMSPageHistoryController.php index 1c7b47f5..db8d60ff 100644 --- a/code/controllers/CMSPageHistoryController.php +++ b/code/controllers/CMSPageHistoryController.php @@ -409,14 +409,23 @@ class CMSPageHistoryController extends CMSMain { if($record) { $form = $this->getEditForm($id, null, null, true); $form->setActions(new FieldSet()); - $form->loadDataFrom($record); + $form->addExtraClass('compare'); + // Comparison views shouldn't be editable. + // Its important to convert fields *before* loading data, + // as the comparison output is HTML and not valid values for the various field types + $readonlyFields = $form->Fields()->makeReadonly(); + $form->setFields($readonlyFields); + + $form->loadDataFrom($record); $form->loadDataFrom(array( "ID" => $id, "Version" => $fromVersion, )); - $form->addExtraClass('compare'); + foreach($form->Fields()->dataFields() as $field) { + $field->dontEscape = true; + } return $form; }