diff --git a/build/NuSpecs/UmbracoCms.Core.nuspec b/build/NuSpecs/UmbracoCms.Core.nuspec index 5db466c054..b8a08f4ff9 100644 --- a/build/NuSpecs/UmbracoCms.Core.nuspec +++ b/build/NuSpecs/UmbracoCms.Core.nuspec @@ -33,7 +33,7 @@ - + diff --git a/build/UmbracoVersion.txt b/build/UmbracoVersion.txt index eed0a56028..0aa17f17e8 100644 --- a/build/UmbracoVersion.txt +++ b/build/UmbracoVersion.txt @@ -1,3 +1,3 @@ # Usage: on line 2 put the release version, on line 3 put the version comment (example: beta) 7.6.0 -beta05 +beta06 diff --git a/src/SolutionInfo.cs b/src/SolutionInfo.cs index 9deb68e877..8a42e8bb19 100644 --- a/src/SolutionInfo.cs +++ b/src/SolutionInfo.cs @@ -12,4 +12,4 @@ using System.Resources; [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("7.6.0")] -[assembly: AssemblyInformationalVersion("7.6.0-beta05")] \ No newline at end of file +[assembly: AssemblyInformationalVersion("7.6.0-beta06")] \ No newline at end of file diff --git a/src/Umbraco.Core/BindingRedirects.cs b/src/Umbraco.Core/BindingRedirects.cs index 2ee54a369b..71d3721681 100644 --- a/src/Umbraco.Core/BindingRedirects.cs +++ b/src/Umbraco.Core/BindingRedirects.cs @@ -17,9 +17,12 @@ namespace Umbraco.Core AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; } - private static readonly Regex Log4NetAssemblyPattern = new Regex("log4net, Version=([\\d\\.]+?), Culture=neutral, PublicKeyToken=null", RegexOptions.Compiled); + private static readonly Regex Log4NetAssemblyPattern = new Regex("log4net, Version=([\\d\\.]+?), Culture=neutral, PublicKeyToken=null"); private const string Log4NetReplacement = "log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a"; - + + private static readonly Regex HtmlAgilityAssemblyPattern = new Regex("HtmlAgilityPack, Version=([\\d\\.]+?), Culture=neutral, PublicKeyToken=bd319b19eaf3b43a"); + private const string HtmlAgilityReplacement = "HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a"; + /// /// This is used to do an assembly binding redirect via code - normally required due to signature changes in assemblies /// @@ -28,13 +31,18 @@ namespace Umbraco.Core /// private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { - //log4net: - // Use regex to match and replace + //log4net: if (Log4NetAssemblyPattern.IsMatch(args.Name) && args.Name != Log4NetReplacement) { return Assembly.Load(Log4NetAssemblyPattern.Replace(args.Name, Log4NetReplacement)); } + //HtmlAgility: + if (HtmlAgilityAssemblyPattern.IsMatch(args.Name) && args.Name != HtmlAgilityReplacement) + { + return Assembly.Load(HtmlAgilityAssemblyPattern.Replace(args.Name, HtmlAgilityReplacement)); + } + //AutoMapper: // ensure the assembly is indeed AutoMapper and that the PublicKeyToken is null before trying to Load again // do NOT just replace this with 'return Assembly', as it will cause an infinite loop -> stackoverflow diff --git a/src/Umbraco.Core/Configuration/UmbracoVersion.cs b/src/Umbraco.Core/Configuration/UmbracoVersion.cs index 635dae31c9..ee7f53e5bb 100644 --- a/src/Umbraco.Core/Configuration/UmbracoVersion.cs +++ b/src/Umbraco.Core/Configuration/UmbracoVersion.cs @@ -24,7 +24,7 @@ namespace Umbraco.Core.Configuration /// Gets the version comment (like beta or RC). /// /// The version comment. - public static string CurrentComment { get { return "beta05"; } } + public static string CurrentComment { get { return "beta06"; } } // Get the version of the umbraco.dll by looking at a class in that dll // Had to do it like this due to medium trust issues, see: http://haacked.com/archive/2010/11/04/assembly-location-and-medium-trust.aspx diff --git a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs index f65e467079..1ebfb4bc47 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs @@ -287,7 +287,7 @@ AND umbracoNode.id <> @id", /// PreValue as a string public string GetPreValueAsString(int preValueId) { - var collections = GlobalCache.RuntimeCache.GetCacheItemsByKeySearch(CacheKeys.DataTypePreValuesCacheKey + "_"); + var collections = IsolatedCache.GetCacheItemsByKeySearch(CacheKeys.DataTypePreValuesCacheKey + "_"); var preValue = collections.SelectMany(x => x.FormatAsDictionary().Values).FirstOrDefault(x => x.Id == preValueId); if (preValue != null) @@ -437,7 +437,7 @@ AND umbracoNode.id <> @id", private PreValueCollection GetCachedPreValueCollection(int datetypeId) { var key = GetPrefixedCacheKey(datetypeId); - return GlobalCache.RuntimeCache.GetCacheItem(key, () => + return IsolatedCache.GetCacheItem(key, () => { var dtos = Database.Fetch("WHERE datatypeNodeId = @Id", new { Id = datetypeId }); var list = dtos.Select(x => new Tuple(new PreValue(x.Id, x.Value, x.SortOrder), x.Alias, x.SortOrder)).ToList(); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 31317aae51..3c153c7aee 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -58,8 +58,8 @@ ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll - - ..\packages\Examine.0.1.81\lib\net45\Examine.dll + + ..\packages\Examine.0.1.82\lib\net45\Examine.dll ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll diff --git a/src/Umbraco.Tests/packages.config b/src/Umbraco.Tests/packages.config index 58d8871b7e..9a8570bc2a 100644 --- a/src/Umbraco.Tests/packages.config +++ b/src/Umbraco.Tests/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js index 18080dbc38..c95e1a7b7f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js @@ -17,6 +17,7 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat hideheader: '@', cachekey: '@', isdialog: '@', + onlyinitialized: '@', //Custom query string arguments to pass in to the tree as a string, example: "startnodeid=123&something=value" customtreeparams: '@', eventhandler: '=', @@ -252,7 +253,7 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat deleteAnimations = false; //default args - var args = { section: scope.section, tree: scope.treealias, cacheKey: scope.cachekey, isDialog: scope.isdialog ? scope.isdialog : false }; + var args = { section: scope.section, tree: scope.treealias, cacheKey: scope.cachekey, isDialog: scope.isdialog ? scope.isdialog : false, onlyinitialized: scope.onlyinitialized }; //add the extra query string params if specified if (scope.customtreeparams) { diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js index 73b6394b0a..dd25018191 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js @@ -51,10 +51,15 @@ function treeResource($q, $http, umbRequestHelper) { if (!options.isDialog) { options.isDialog = false; } - + //create the query string for the tree request, these are the mandatory options: var query = "application=" + options.section + "&tree=" + options.tree + "&isDialog=" + options.isDialog; + //if you need to load a not initialized tree set this value to false - default is true + if (options.onlyinitialized) { + query += "&onlyInitialized=" + options.onlyinitialized; + } + //the options can contain extra query string parameters if (options.queryString) { query += "&" + options.queryString; diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/insert/insert.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/insert/insert.controller.js index b99dd289b1..2d9b006bf0 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/insert/insert.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/insert/insert.controller.js @@ -104,13 +104,18 @@ function openPartialOverlay() { vm.partialItemOverlay = { view: "treepicker", - section: "settings", + section: "settings", treeAlias: "partialViews", entityType: "partialView", multiPicker: false, - show: true, + filter: function(i) { + if(i.name.indexOf(".cshtml") === -1 && i.name.indexOf(".vbhtml") === -1) { + return true; + } + }, + filterCssClass: "not-allowed", title: localizationService.localize("template_insertPartialView"), - + show: true, select: function(node){ $scope.model.insert = { diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js index b0da5f562d..df768db9cd 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js @@ -10,6 +10,8 @@ angular.module("umbraco").controller("Umbraco.Overlays.TreePickerController", $scope.treeAlias = dialogOptions.treeAlias; $scope.multiPicker = dialogOptions.multiPicker; $scope.hideHeader = true; + // if you need to load a not initialized tree set this value to false - default is true + $scope.onlyInitialized = dialogOptions.onlyInitialized; $scope.searchInfo = { searchFromId: dialogOptions.startNodeId, searchFromName: null, diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html index b88a859cb9..108dbdaa78 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html @@ -27,6 +27,7 @@ hideheader="{{hideHeader}}" hideoptions="true" isdialog="true" + onlyinitialized="{{onlyInitialized}}" customtreeparams="{{customTreeParams}}" eventhandler="dialogTreeEventHandler" enablelistviewsearch="true" diff --git a/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js index 5f2dfddbfa..e516f2d742 100644 --- a/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js @@ -419,6 +419,12 @@ multiPicker: false, show: true, title: localizationService.localize("template_insertPartialView"), + filter: function(i) { + if(i.name.indexOf(".cshtml") === -1 && i.name.indexOf(".vbhtml") === -1) { + return true; + } + }, + filterCssClass: "not-allowed", select: function(node){ var code = templateHelper.getInsertPartialSnippet(node.parentId, node.name); diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index e863af618d..aa7c86e95c 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -127,8 +127,8 @@ False ..\packages\dotless.1.4.1.0\lib\dotless.Core.dll - - ..\packages\Examine.0.1.81\lib\net45\Examine.dll + + ..\packages\Examine.0.1.82\lib\net45\Examine.dll False diff --git a/src/Umbraco.Web.UI/packages.config b/src/Umbraco.Web.UI/packages.config index 19a7739420..bc8166c49d 100644 --- a/src/Umbraco.Web.UI/packages.config +++ b/src/Umbraco.Web.UI/packages.config @@ -4,7 +4,7 @@ - + diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index ea979dcfbc..296bcc9590 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -254,7 +254,7 @@ namespace Umbraco.Web.Editors }, { "treeApplicationApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl( - controller => controller.GetApplicationTrees(null, null, null)) + controller => controller.GetApplicationTrees(null, null, null, true)) }, { "contentTypeApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl( diff --git a/src/Umbraco.Web/Mvc/RenderModelBinder.cs b/src/Umbraco.Web/Mvc/RenderModelBinder.cs index 735f015afc..18d9879cac 100644 --- a/src/Umbraco.Web/Mvc/RenderModelBinder.cs +++ b/src/Umbraco.Web/Mvc/RenderModelBinder.cs @@ -175,6 +175,7 @@ namespace Umbraco.Web.Mvc public IModelBinder GetBinder(Type modelType) { // can bind to RenderModel (exact type match) + // You might be tempted to change this to IRenderModel but do not change this: http://issues.umbraco.org/issue/U4-8216 if (modelType == typeof(RenderModel)) return this; // can bind to RenderModel (exact generic type match) diff --git a/src/Umbraco.Web/Trees/ApplicationTreeController.cs b/src/Umbraco.Web/Trees/ApplicationTreeController.cs index 1b90ae0dd8..f6b5e82fc3 100644 --- a/src/Umbraco.Web/Trees/ApplicationTreeController.cs +++ b/src/Umbraco.Web/Trees/ApplicationTreeController.cs @@ -30,16 +30,17 @@ namespace Umbraco.Web.Trees /// The application to load tree for /// An optional single tree alias, if specified will only load the single tree for the request app /// + /// An optional bool (defaults to true), if set to false it will also load uninitialized trees /// [HttpQueryStringFilter("queryStrings")] - public async Task GetApplicationTrees(string application, string tree, FormDataCollection queryStrings) + public async Task GetApplicationTrees(string application, string tree, FormDataCollection queryStrings, bool onlyInitialized = true) { if (string.IsNullOrEmpty(application)) throw new HttpResponseException(HttpStatusCode.NotFound); var rootId = Constants.System.Root.ToString(CultureInfo.InvariantCulture); //find all tree definitions that have the current application alias - var appTrees = ApplicationContext.Current.Services.ApplicationTreeService.GetApplicationTrees(application, true).ToArray(); + var appTrees = ApplicationContext.Current.Services.ApplicationTreeService.GetApplicationTrees(application, onlyInitialized).ToArray(); if (appTrees.Count() == 1 || string.IsNullOrEmpty(tree) == false ) { diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 1154b89651..823d38b14a 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -117,8 +117,8 @@ ..\packages\dotless.1.4.1.0\lib\dotless.Core.dll True - - ..\packages\Examine.0.1.81\lib\net45\Examine.dll + + ..\packages\Examine.0.1.82\lib\net45\Examine.dll True diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index 4e08769f50..3f970b06ab 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -579,6 +579,15 @@ namespace Umbraco.Web // is complete and cancel this current event so the rebuild process doesn't start right now. args.Cancel = true; IndexesToRebuild.Add((BaseIndexProvider)args.Indexer); + + //check if the index is rebuilding due to an error and log it + if (args.IsHealthy == false) + { + var baseIndex = args.Indexer as BaseIndexProvider; + var name = baseIndex != null ? baseIndex.Name : "[UKNOWN]"; + + ProfilingLogger.Logger.Error(string.Format("The index {0} is rebuilding due to being unreadable/corrupt", name), args.UnhealthyException); + } } } } diff --git a/src/Umbraco.Web/packages.config b/src/Umbraco.Web/packages.config index cdaf4fcbf6..7f017d808f 100644 --- a/src/Umbraco.Web/packages.config +++ b/src/Umbraco.Web/packages.config @@ -3,7 +3,7 @@ - + diff --git a/src/UmbracoExamine/UmbracoExamine.csproj b/src/UmbracoExamine/UmbracoExamine.csproj index 8fe749a9eb..19abcf9313 100644 --- a/src/UmbracoExamine/UmbracoExamine.csproj +++ b/src/UmbracoExamine/UmbracoExamine.csproj @@ -82,8 +82,8 @@ ..\Solution Items\TheFARM-Public.snk - - ..\packages\Examine.0.1.81\lib\net45\Examine.dll + + ..\packages\Examine.0.1.82\lib\net45\Examine.dll True diff --git a/src/UmbracoExamine/packages.config b/src/UmbracoExamine/packages.config index 81a5d495c4..17c77f7284 100644 --- a/src/UmbracoExamine/packages.config +++ b/src/UmbracoExamine/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/src/umbraco.MacroEngines/packages.config b/src/umbraco.MacroEngines/packages.config index eec4453512..7bf40b9075 100644 --- a/src/umbraco.MacroEngines/packages.config +++ b/src/umbraco.MacroEngines/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj index 18ca792910..cec5b99086 100644 --- a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj +++ b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj @@ -45,8 +45,8 @@ false - - ..\packages\Examine.0.1.81\lib\net45\Examine.dll + + ..\packages\Examine.0.1.82\lib\net45\Examine.dll True