openrat-cms

# OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

commit 369d7dcc4210be52a72c6fed10b519cfdb9180eb
parent 4e09759ad09ce3bbb553a5c795e40e6e1f1d3144
Author: Jan Dankert <develop@jandankert.de>
Date:   Thu, 14 Nov 2019 00:18:20 +0100

Refactoring: Filter in separate classes; filter setup is read out of the settings.

Diffstat:
modules/cms-core/model/File.class.php | 64++++++++++++++++++++++++++++------------------------------------
modules/cms-publish/filter/AbstractFilter.class.php | 11+++++++++++
modules/cms-publish/filter/Base64DecodeFilter.class.php | 14++++++++++++++
modules/cms-publish/filter/Base64EncodeFilter.class.php | 14++++++++++++++
modules/cms-publish/filter/JavascriptMinifierFilter.class.php | 21+++++++++++++++++++++
modules/cms-publish/filter/LessFilter.class.php | 32++++++++++++++++++++++++++++++++
modules/cms-publish/require.php | 6++++++
7 files changed, 126 insertions(+), 36 deletions(-)

diff --git a/modules/cms-core/model/File.class.php b/modules/cms-core/model/File.class.php @@ -499,7 +499,7 @@ EOF */ function getRealExtension() { - if ( !empty($this->extension)) + if ( $this->extension ) { return $this->extension; } @@ -515,52 +515,44 @@ EOF private function filterValue() { - $filterType = ''; - if ( $this->publisher instanceof PublishEdit ) $filterType = 'edit'; - if ( $this->publisher instanceof PublishPublic ) $filterType = 'public'; - if ( $this->publisher instanceof PublishPreview ) $filterType = 'preview'; - if ( $this->publisher instanceof PublishShow ) $filterType = 'show'; + $publishType = strtolower(substr(\ClassUtils::getSimpleClassName($this->publisher),7)); - foreach(\ArrayUtils::getSubArray($this->getTotalSettings(), array( 'publish', $filterType, 'filter')) as $filterName ) + foreach(\ArrayUtils::getSubArray($this->getTotalSettings(), array( 'filter')) as $filterEntry ) { - switch( $filterName) - { - case 'less': + $filterName = @$filterEntry['name']; + $extension = @$filterEntry['extension']; - $parser = new Less_Parser(array( - 'sourceMap' => false, - 'indentation' => ' ', - 'outputSourceFiles' => false, - //'sourceMapBasepath' => $this->filename() - //'sourceMapBasepath' => './' - )); + if ( $extension && strtolower($extension) != strtolower($this->getRealExtension()) ) + continue; // File extension does not match - $parser->parse( $this->value ); - $this->value = $parser->getCss(); + $onPublish = (array) @$filterEntry['on']; + if ( ! $onPublish || in_array('all',$onPublish ) ) + $onPublish = ['edit','public','preview','show']; - break; + if ( $onPublish && ! in_array($publishType,$onPublish)) + continue; // Publish type does not match - case 'less-minifier': + $parameter = (array) @$filterEntry['parameter']; - $parser = new Less_Parser(array( - 'compress' => true, - 'sourceMap' => false, - 'indentation' => '' - )); + $filterClassNameWithNS = 'cms\\publish\\filter\\' . $filterName.'Filter'; - $parser->parse( $this->value ); - $this->value = $parser->getCss(); + if ( !class_exists( $filterClassNameWithNS ) ) { + Logger::warn("Filter '$filterName' does not exist."); + continue; + } - break; + $filter = new $filterClassNameWithNS(); - case "js-minifier": - $jz = new JSqueeze(); - $this->value = $jz->squeeze( $this->value); - break; + // Copy filter configuration to filter instance. + foreach( $parameter as $name=>$value) { + if ( property_exists($filter,$name)) + $filter->$name = $value; + } - default: - throw new \LogicException("Filter not found: ".$filterName); - } + + // Execute the filter. + Logger::debug("Filtering '$this->filename' with filter '$filterName'."); + $this->value = $filter->filter( $this->value ); } // Store in cache. diff --git a/modules/cms-publish/filter/AbstractFilter.class.php b/modules/cms-publish/filter/AbstractFilter.class.php @@ -0,0 +1,10 @@ +<?php + + +namespace cms\publish\filter; + + +abstract class AbstractFilter +{ + public abstract function filter( $value ); +}+ \ No newline at end of file diff --git a/modules/cms-publish/filter/Base64DecodeFilter.class.php b/modules/cms-publish/filter/Base64DecodeFilter.class.php @@ -0,0 +1,13 @@ +<?php + + +namespace cms\publish\filter; + + +class Base64DecodeFilter extends AbstractFilter +{ + public function filter( $value ) + { + return base64_decode( $value ); + } +}+ \ No newline at end of file diff --git a/modules/cms-publish/filter/Base64EncodeFilter.class.php b/modules/cms-publish/filter/Base64EncodeFilter.class.php @@ -0,0 +1,13 @@ +<?php + + +namespace cms\publish\filter; + + +class Base64EncodeFilter extends AbstractFilter +{ + public function filter( $value ) + { + return base64_encode( $value ); + } +}+ \ No newline at end of file diff --git a/modules/cms-publish/filter/JavascriptMinifierFilter.class.php b/modules/cms-publish/filter/JavascriptMinifierFilter.class.php @@ -0,0 +1,20 @@ +<?php + + +namespace cms\publish\filter; + + +use JSqueeze; + +class JavascriptMinifierFilter extends AbstractFilter +{ + public $singleLine = true; + public $keepImportantComments = true; + public $specialVarRx = false; + + public function filter( $value ) + { + $jz = new JSqueeze(); + return $jz->squeeze( $value, (bool)$this->singleLine, (bool)$this->keepImportantComments, (bool)$this->specialVarRx ); + } +}+ \ No newline at end of file diff --git a/modules/cms-publish/filter/LessFilter.class.php b/modules/cms-publish/filter/LessFilter.class.php @@ -0,0 +1,31 @@ +<?php + + +namespace cms\publish\filter; + + +use Less_Parser; + +class LessFilter extends AbstractFilter +{ + public $sourceMap = false; + public $indentation = ' '; + public $compress = false; + public $variables = array(); + + public function filter($value) + { + $parser = new Less_Parser(array( + 'sourceMap' => $this->sourceMap, + 'indentation' => $this->indentation, + 'outputSourceFiles' => false, + 'compress' => (bool) $this->compress, + )); + + $parser->parse($value); + + $parser->modifyVars( (array) $this->variables ); + + return $parser->getCss(); + } +}+ \ No newline at end of file diff --git a/modules/cms-publish/require.php b/modules/cms-publish/require.php @@ -6,3 +6,9 @@ require_once(__DIR__ . '/'.'PublishEdit.class.php'); require_once(__DIR__ . '/'.'PublishShow.class.php'); require_once(__DIR__ . '/'.'PublishPublic.class.php'); require_once( __DIR__.'/'.'Ftp.class.php' ); + +require_once( __DIR__.'/'.'filter/AbstractFilter.class.php' ); +require_once( __DIR__.'/'.'filter/JavascriptMinifierFilter.class.php' ); +require_once( __DIR__.'/'.'filter/LessFilter.class.php' ); +require_once( __DIR__.'/'.'filter/Base64DecodeFilter.class.php' ); +require_once( __DIR__.'/'.'filter/Base64EncodeFilter.class.php' );