openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 431eef1551bc55158bd78294a570fd218eee268b
parent ece160eb542a1e50fb854e23000b82fc0e06f14c
Author: dankert <openrat@jandankert.de>
Date:   Tue,  7 Dec 2021 00:26:56 +0100

New: TemplateDiffAction for comparing template values.

Diffstat:
Amodules/cms/action/template/TemplateDiffAction.class.php | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+), 0 deletions(-)

diff --git a/modules/cms/action/template/TemplateDiffAction.class.php b/modules/cms/action/template/TemplateDiffAction.class.php @@ -0,0 +1,62 @@ +<?php +namespace cms\action\template; +use cms\action\Method; +use cms\action\TemplateAction; +use cms\generator\PublishEdit; +use cms\generator\PublishPreview; +use cms\model\Value; +use util\exception\ValidationException; +use util\Text; + +class TemplateDiffAction extends TemplateAction implements Method { + + public function view() { + $value1id = $this->request->getNumber('compareid'); + $value2id = $this->request->getNumber('withid' ); + + // Wenn Value1-Id = Value2-Id + if ( $value1id == $value2id ) + throw new ValidationException('withid' ); + + // Value 2 must be greater than value 1. + if ( $value1id > $value2id ) + list($value1id,$value2id) = array( $value2id,$value1id ); + + $value1 = new Value(); + $value2 = new Value(); + + $value1->loadWithId( $value1id ); + $value2->loadWithId( $value2id ); + + // both values must be part of the same content. + if ( $value1->contentid != $value2->contentid ) + throw new ValidationException('compareid'); + + // Security-Check: + // Content must be a part of a template + $this->ensureValueIdIsInAnyTemplate( $value1->valueid ); + + $this->setTemplateVar('date_left' ,$value1->lastchangeTimeStamp); + $this->setTemplateVar('date_right',$value2->lastchangeTimeStamp); + + // Split whole text into lines. + $text1 = explode("\n",$value1->text); + $text2 = explode("\n",$value2->text); + + // Make the diff + $diffResult = Text::diff($text1,$text2); + + $outputResult = array_map( function( $left,$right) { + return [ + 'left' => $left, + 'right'=> $right + ]; + },$diffResult[0],$diffResult[1] ); + + $this->setTemplateVar('diff',$outputResult ); + } + + + public function post() { + } +}