7713 - changing CSS directory breaks RTE (#7726)

This commit is contained in:
Nathan Woulfe
2020-03-25 03:04:38 +10:00
committed by GitHub
parent 7c841eb6ac
commit ffef6ed2a1
3 changed files with 25 additions and 12 deletions

View File

@@ -25,8 +25,17 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
path = path.EnsureEndsWith(".css");
if (FileSystem.FileExists(path) == false)
// if the css directory is changed, references to the old path can still exist (ie in RTE config)
// these old references will throw an error, which breaks the RTE
// try-catch here makes the request fail silently, and allows RTE to load correctly
try
{
if (FileSystem.FileExists(path) == false)
return null;
} catch
{
return null;
}
// content will be lazy-loaded when required
var created = FileSystem.GetCreated(path).UtcDateTime;

View File

@@ -294,15 +294,13 @@ namespace Umbraco.Tests.Persistence.Repositories
stylesheet = repository.Get("missing.css");
Assert.IsNull(stylesheet);
// fixed in 7.3 - 7.2.8 used to...
Assert.Throws<UnauthorizedAccessException>(() =>
{
stylesheet = repository.Get("\\test-path-4.css"); // outside the filesystem, does not exist
});
Assert.Throws<UnauthorizedAccessException>(() =>
{
stylesheet = repository.Get("../packages.config"); // outside the filesystem, exists
});
// #7713 changes behaviour to return null when outside the filesystem
// to accomodate changing the CSS path and not flooding the backoffice with errors
stylesheet = repository.Get("\\test-path-4.css"); // outside the filesystem, does not exist
Assert.IsNull(stylesheet);
stylesheet = repository.Get("../packages.config"); // outside the filesystem, exists
Assert.IsNull(stylesheet);
}
}

View File

@@ -39,8 +39,14 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.RteController",
stylesheetResource.getAll().then(function(stylesheets){
$scope.stylesheets = stylesheets;
_.each($scope.stylesheets, function (stylesheet) {
// if the CSS directory changes, previously assigned stylesheets are retained, but will not be visible
// and will throw a 404 when loading the RTE. Remove them here. Still needs to be saved...
let cssPath = Umbraco.Sys.ServerVariables.umbracoSettings.cssPath;
$scope.model.value.stylesheets = $scope.model.value.stylesheets
.filter(sheet => sheet.startsWith(cssPath));
$scope.stylesheets.forEach(stylesheet => {
// support both current format (full stylesheet path) and legacy format (stylesheet name only)
stylesheet.selected = $scope.model.value.stylesheets.indexOf(stylesheet.path) >= 0 ||$scope.model.value.stylesheets.indexOf(stylesheet.name) >= 0;
});