diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 53cda40df086df5336172217e55c91d8bfde3886..0eda644290051724c604635f13331ffe88491380 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -13,7 +13,8 @@ - Die Funktion `smile()` wurde entfernt. Sie kann ersatzlos entfernt werden. ([Issue #3158](https://gitlab.studip.de/studip/studip/-/issues/3158)) - Die Funktion `transformBeforeSave()` wurde entfernt. Sie kann ersatzlos entfernt werden. ([Issue #3159](https://gitlab.studip.de/studip/studip/-/issues/3159)) - Die schon lange nicht mehr genutzten Methoden zum Setzen, Auslesen und Enfernen von Schmuckgrafiken von Bildern für die Sidebar wurde entfernt. Die Methoden `Sidebar::setImage()`, `Sidebar::getImage()` sowie `Sidebar::removeImage()` müssen ersatzlos entfernt werden. ([Issue #3157](https://gitlab.studip.de/studip/studip/-/issues/3157)) -- Der zweite Parameter für die Methode `Navigation::setImage()` wurde entfernt. Der Parameter schien sich auf das Bild zu beziehen, hat aber Attribute an dem Link gesetzt. Stattdessen muss die Methode `Navigation::setLinkAttributes()` verwendet werden. ([Issue #3578](https://gitlab.studip.de/studip/studip/-/issues/3578)) +- Der zweite Parameter für die Methode `Navigation::setImage()` wurde entfernt. Der Parameter schien sich auf das Bild zu beziehen, hat aber Attribute an dem Link gesetzt. Stattdessen muss die Methode `Navigation::setLinkAttributes()` verwendet werden. ([Issue #3578](https://gitlab.studip.de/studip/studip/-/issues/3578)) +- Die Unterstützung für LESS-Stylsheets in Plugins wurde entfernt. Als Alternative wird SCSS unterstützt. ([Issue #2720](https://gitlab.studip.de/studip/studip/-/issues/2720)) ## Security related issues diff --git a/composer.json b/composer.json index b98b402c77463798b9ec41961be61584b97a9911..031bd0f0a3a012c1ec6526bba50961e02266a491 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,6 @@ "tecnickcom/tcpdf": "^6.3", "scssphp/scssphp": "^1.4", "symfony/yaml": "^5.0", - "mishal/iless": "^2.2", "ezyang/htmlpurifier": "^4.13", "davefx/phplot": "^6.2", "jasig/phpcas": "1.5", diff --git a/composer.lock b/composer.lock index dc1399eff555a63f57b9dbaef9c1ba542ef925eb..cd649f945f2ad14a7306c414fb742e5172a86c22 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0cd6741cbad14a70b1d619d5c98f7378", + "content-hash": "76e4dce9372399bca6af1762cd407649", "packages": [ { "name": "algo26-matthias/idna-convert", @@ -1356,63 +1356,6 @@ }, "time": "2022-12-02T22:17:43+00:00" }, - { - "name": "mishal/iless", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/mishal/iless.git", - "reference": "d75af501ab0ca411efd041faa53e6652f1602553" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mishal/iless/zipball/d75af501ab0ca411efd041faa53e6652f1602553", - "reference": "d75af501ab0ca411efd041faa53e6652f1602553", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "bin": [ - "bin/iless" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "psr-4": { - "ILess\\": "lib/ILess" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "ILess contributors", - "homepage": "https://github.com/mishal/iless/wiki/Contributors" - } - ], - "description": "Less.js port to PHP", - "homepage": "http://github.com/mishal/iless", - "keywords": [ - "compiler", - "css", - "less", - "less.js", - "lesscss", - "parser" - ], - "support": { - "issues": "https://github.com/mishal/iless/issues", - "source": "https://github.com/mishal/iless/tree/master" - }, - "time": "2016-04-25T07:03:37+00:00" - }, { "name": "monolog/monolog", "version": "2.9.1", diff --git a/lib/classes/assets/LESSCompiler.php b/lib/classes/assets/LESSCompiler.php deleted file mode 100644 index ccb8371cc94bb320f623fa9d21901a1477f0b503..0000000000000000000000000000000000000000 --- a/lib/classes/assets/LESSCompiler.php +++ /dev/null @@ -1,131 +0,0 @@ -<?php -namespace Assets; - -use Assets; -use StudipCacheFactory; - -use ILess\Autoloader; -use ILess\Importer\FileSystemImporter; -use ILess\Parser; - -/** - * LESS Compiler for assets. - * - * Uses ILess by mishal <https://github.com/mishal/iless>. - * - * @author Jan-Hendrik Willms <tleilax+studip@gmail.com> - * @license GPL2 or any later version - * @since Stud.IP 4.4 - * @deprecated since Stud.IP 5.4 and will be removed in Stud.IP 6.0 - */ -class LESSCompiler implements Compiler -{ - const CACHE_KEY = '/assets/less-prefix'; - - private static $instance = null; - - /** - * Returns an instance of the compiler - * @return Assets\LESSCompiler instance - */ - public static function getInstance() - { - if (self::$instance === null) { - self::$instance = new self(); - } - return self::$instance; - } - - /** - * Private constructor to enforce singleton. - */ - private function __construct() - { - Autoloader::register(); - } - - /** - * Compiles a less string. This method will add all neccessary imports - * and variables for Stud.IP so almost all mixins and variables of the - * core system can be used. This includes colors and icons. - * - * @param string $input LESS content to compile - * @param array $variables Additional variables for the LESS compilation - * @return string containing the generated CSS - */ - public function compile($input, array $variables = []): string - { - // Show deprecation notice - if (\Studip\ENV === 'development') { - \PageLayout::postMessage( - \MessageBox::info( - _('Das Verwenden von LESS-Stylesheets in Plugins ist deprecated und wird zu Stud.IP 6.0 entfernt.'), - [ - _('Als Alternative steht die Verwendung von SCSS bereit.'), - _('Bitte stellen Sie Ihre Plugins entsprechend um bzw. geben den Plugin-AutorInnen Bescheid.'), - ] - ), - 'less-deprecation-notice' - ); - } - - $less = $this->getPrefix() . $input; - - $variables['image-path'] = '"' . Assets::url('images') . '"'; - - // Disable warnings since we currently have no other means to get rid - // of them - // TODO: Look again into this (2022-06-23) - $error_reporting = error_reporting(); - error_reporting($error_reporting & ~E_WARNING); - - $parser = new Parser(['strictMath' => true], null, [ - new FileSystemImporter(["{$GLOBALS['STUDIP_BASE_PATH']}/resources/"]) - ]); - $parser->setVariables($variables); - $parser->parseString($less); - $css = $parser->getCSS(); - - // Restore error reporting - error_reporting($error_reporting); - - return $css; - } - - /** - * Generates the less prefix containing the variables and mixins of the - * Stud.IP core system. - * This prefix will be cached in Stud.IP's cache in order to minimize - * disk accesses. - * - * @return String containing the neccessary prefix - */ - private function getPrefix() - { - $cache = StudipCacheFactory::getCache(); - - $prefix = $cache->read(self::CACHE_KEY); - - if ($prefix === false) { - $prefix = ''; - - // Load mixins and change relative to absolute filenames - $mixin_file = $GLOBALS['STUDIP_BASE_PATH'] . '/resources/assets/stylesheets/mixins.less'; - foreach (file($mixin_file) as $mixin) { - if (!preg_match('/@import(.*?) "(.*)";/', $mixin, $match)) { - continue; - } - - $core_file = "{$GLOBALS['STUDIP_BASE_PATH']}/resources/assets/stylesheets/{$match[2]}"; - $prefix .= sprintf('@import%s "%s";' . "\n", $match[1], $core_file); - } - - // Add adjusted image paths - $prefix .= sprintf('@image-path: "%s";', Assets::url('images')) . "\n"; - $prefix .= '@icon-path: "@{image-path}/icons/16";' . "\n"; - - $cache->write(self::CACHE_KEY, $prefix); - } - return $prefix; - } -} diff --git a/lib/classes/assets/PluginAssetFactory.php b/lib/classes/assets/PluginAssetFactory.php index c4b394d5ab4715410da8162ae9e22d77a03b1997..82789dd0bbb0cdb0a2e99e707c0af668fa6b1701 100644 --- a/lib/classes/assets/PluginAssetFactory.php +++ b/lib/classes/assets/PluginAssetFactory.php @@ -14,8 +14,8 @@ class PluginAssetFactory implements AssetFactory * Restores or create a css file based on the given information. * * @param String $filename Filename of the original file - * @param Array $metadata Potential metadata - * @return Assets\PluginAsset + * @param array $metadata Potential metadata + * @return PluginAsset */ public function createCSSFile($filename, array $metadata = []) { @@ -44,9 +44,9 @@ class PluginAssetFactory implements AssetFactory /** * Restores or create a js file based on the given information. * - * @param String $filename Filename of the original file - * @param Array $metadata Potential metadata - * @return Assets\PluginAsset + * @param string $filename Filename of the original file + * @param array $metadata Potential metadata + * @return PluginAsset */ public function createJSFile($filename, array $metadata = []) { diff --git a/lib/classes/assets/SASSCompiler.php b/lib/classes/assets/SASSCompiler.php index bb519d1e4bb1ce57ccc83f22fe69138ad2e929ef..2dcda2dc50bb541d72de5630a7a27de22771fc5e 100644 --- a/lib/classes/assets/SASSCompiler.php +++ b/lib/classes/assets/SASSCompiler.php @@ -48,7 +48,7 @@ class SASSCompiler implements Compiler * core system can be used. This includes colors and icons. * * @param String $input Scss content to compile - * @param array $variables Additional variables for the LESS compilation + * @param array $variables Additional variables for the SCSS compilation * @return String containing the generated CSS */ public function compile($input, array $variables = []) @@ -73,7 +73,7 @@ class SASSCompiler implements Compiler } /** - * Generates the less prefix containing the variables and mixins of the + * Generates the scss prefix containing the variables and mixins of the * Stud.IP core system. * This prefix will be cached in Stud.IP's cache in order to minimize * disk accesses. diff --git a/lib/plugins/core/PluginAssetsTrait.php b/lib/plugins/core/PluginAssetsTrait.php index 7313661a2603994d871e52a5c84d9b2142f5dcc9..ed1974e6ce01b7ac9ff8ca666c019f28cab7a089 100644 --- a/lib/plugins/core/PluginAssetsTrait.php +++ b/lib/plugins/core/PluginAssetsTrait.php @@ -12,7 +12,7 @@ trait PluginAssetsTrait * Adds an asset while detecting the type automatically. * * @param string $asset Asset to add - * @param array $variables Variables for the LESS/SCSS compiler, unused for JS + * @param array $variables Variables for the SCSS compiler, unused for JS * @since Stud.IP 5.4 */ public function addAsset(string $asset, array $variables = []): void @@ -29,7 +29,7 @@ trait PluginAssetsTrait * Adds many assets while detecting the type automatically. * * @param string[] $assets Assets to add - * @param array $variables Variables for the LESS/SCSS compiler, unused + * @param array $variables Variables for the SCSS compiler, unused * for JS * @param bool $combine If true, the assets will be combined into one * single file for each type @@ -61,7 +61,7 @@ trait PluginAssetsTrait * Adds many stylesheeets at once. * @param array $filenames List of relative filenames * @param array $variables Optional array of variables to pass to the - * LESS compiler + * SCSS compiler * @param array $link_attr Attributes to pass to the link elements * @param string $path Common path prefix for all filenames */ @@ -96,18 +96,18 @@ trait PluginAssetsTrait } /** - * Includes given stylesheet in page, compiles less if neccessary + * Includes given stylesheet in page, compiles scss if neccessary * - * @param string $filename Name of the stylesheet (css or less) to include + * @param string $filename Name of the stylesheet (css or scss) to include * (relative to plugin directory) * @param array $variables Optional array of variables to pass to the - * LESS compiler + * SCSS compiler * @param array $link_attr Attributes to pass to the link element */ protected function addStylesheet($filename, array $variables = [], array $link_attr = []) { $extension = pathinfo($filename, PATHINFO_EXTENSION); - if (!in_array($extension, ['less', 'scss'])) { + if ($extension != 'scss') { PageLayout::addStylesheet( "{$this->getPluginURL()}/{$filename}?v={$this->getPluginVersion()}", $link_attr @@ -250,11 +250,7 @@ trait PluginAssetsTrait $contents = file_get_contents($filename); $extension = pathinfo($filename, PATHINFO_EXTENSION); - if ($extension === 'less') { - $contents = Assets\LESSCompiler::getInstance()->compile($contents, $variables + [ - 'plugin-path' => $this->getPluginURL(), - ]); - } elseif ($extension === 'scss') { + if ($extension === 'scss') { $contents = Assets\SASSCompiler::getInstance()->compile($contents, $variables + [ 'plugin-path' => '"' . $this->getPluginURL() . '"', ]); @@ -277,7 +273,7 @@ trait PluginAssetsTrait return 'js'; } - if (in_array($extension, ['css', 'less', 'scss'])) { + if (in_array($extension, ['css', 'scss'])) { return 'css'; }