public function diffVersionsAction()
{
$versionFrom = Version::getById($this->getParam("from"));
$docFrom = $versionFrom->loadData();
$request = $this->getRequest();
$sessionName = Tool\Session::getOption("name");
$prefix = $request->getScheme() . "://" . $request->getHttpHost() . $docFrom->getRealFullPath() . "?pimcore_version=";
$fromUrl = $prefix . $this->getParam("from") . "&" . $sessionName . "=" . $_COOKIE[$sessionName];
$toUrl = $prefix . $this->getParam("to") . "&" . $sessionName . "=" . $_COOKIE[$sessionName];
$fromFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/version-diff-tmp-" . uniqid() . ".png";
$toFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/version-diff-tmp-" . uniqid() . ".png";
$diffFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/version-diff-tmp-" . uniqid() . ".png";
if (\Pimcore\Image\HtmlToImage::isSupported() && class_exists("Imagick")) {
\Pimcore\Image\HtmlToImage::convert($fromUrl, $fromFile);
\Pimcore\Image\HtmlToImage::convert($toUrl, $toFile);
$image1 = new Imagick($fromFile);
$image2 = new Imagick($toFile);
if ($image1->getImageWidth() == $image2->getImageWidth() && $image1->getImageHeight() == $image2->getImageHeight()) {
$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
$result[0]->setImageFormat("png");
$result[0]->writeImage($diffFile);
$result[0]->clear();
$result[0]->destroy();
$this->view->image = base64_encode(file_get_contents($diffFile));
unlink($diffFile);
} else {
$this->view->image1 = base64_encode(file_get_contents($fromFile));
$this->view->image2 = base64_encode(file_get_contents($toFile));
}
// cleanup
$image1->clear();
$image1->destroy();
$image2->clear();
$image2->destroy();
unlink($fromFile);
unlink($toFile);
} else {
$this->renderScript("document/diff-versions-unsupported.php");
}
}