From ccf3442992a175a5a221c0456034fe3b59395619 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 17:31:41 +1000 Subject: [PATCH] Getting the macro picker dialog working slowly. --- .../Repositories/MacroRepository.cs | 3 +- .../views/templates/insertmacro.controller.js | 30 +++-- .../src/views/templates/insertmacro.html | 33 ++--- .../Cache/ContentTypeCacheRefresher.cs | 13 +- src/Umbraco.Web/Editors/EntityController.cs | 5 +- .../Models/Mapping/MacroModelMapper.cs | 25 ++++ ...ediaModelMapper.cs => MediaModelMapper.cs} | 120 +++++++++--------- src/Umbraco.Web/Umbraco.Web.csproj | 3 +- 8 files changed, 133 insertions(+), 99 deletions(-) create mode 100644 src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs rename src/Umbraco.Web/Models/Mapping/{NewMediaModelMapper.cs => MediaModelMapper.cs} (95%) diff --git a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs index e604ea2cc5..55a712f029 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs @@ -51,7 +51,8 @@ namespace Umbraco.Core.Persistence.Repositories var sql = GetBaseQuery(false); - return ConvertFromDtos(Database.Fetch(new MacroPropertyRelator().Map, sql)); + return ConvertFromDtos(Database.Fetch(new MacroPropertyRelator().Map, sql)) + .ToArray();// we don't want to re-iterate again! } private IEnumerable PerformGetAllOnIds(params int[] ids) diff --git a/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.controller.js b/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.controller.js index f2ca45977c..3c34e160c8 100644 --- a/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.controller.js @@ -7,21 +7,23 @@ * The controller for the custom insert macro dialog. Until we upgrade the template editor to be angular this * is actually loaded into an iframe with full html. */ -function InsertMacroController($scope, userService) { - - //fetch the authorized status - userService.isAuthenticated() - .then(function (data) { - - $scope.authenticated = data.authenticated; - $scope.user = data.user; +function InsertMacroController($scope, entityResource) { - }, function (reason) { - alert("An error occurred checking authentication."); - //TODO: We'd need to proxy this call to the main window - //notificationsService.error("An error occurred checking authentication."); - $scope.authenticated = false; - $scope.user = null; + $scope.macros = []; + $scope.selectedMacro = null; + $scope.submitForm = function () { + //ensure the drop down is dirty so the styles validate + $scope.insertMacroForm.$setDirty(true); + if ($scope.insertMacroForm.$invalid) { + return; + } + //go to next page! + }; + + //fetch the authorized status + entityResource.getAll("Macro") + .then(function (data) { + $scope.macros = data; }); } diff --git a/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.html b/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.html index 858a0c0ea5..3a1dbfe7be 100644 --- a/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.html +++ b/src/Umbraco.Web.UI.Client/src/views/templates/insertmacro.html @@ -1,24 +1,27 @@
-
-
-
- + +
+ +
+
+
+ +
-
-
-
-
- - +
+
+
+ - + - - + +
-
+ +
diff --git a/src/Umbraco.Web/Cache/ContentTypeCacheRefresher.cs b/src/Umbraco.Web/Cache/ContentTypeCacheRefresher.cs index f1a97dc767..74cb47e9a7 100644 --- a/src/Umbraco.Web/Cache/ContentTypeCacheRefresher.cs +++ b/src/Umbraco.Web/Cache/ContentTypeCacheRefresher.cs @@ -122,11 +122,11 @@ namespace Umbraco.Web.Cache public override void RefreshAll() { //all property type cache - ApplicationContext.Current.ApplicationCache.ClearCacheByKeySearch(CacheKeys.PropertyTypeCacheKey); + ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.PropertyTypeCacheKey); //all content type property cache - ApplicationContext.Current.ApplicationCache.ClearCacheByKeySearch(CacheKeys.ContentTypePropertiesCacheKey); + ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.ContentTypePropertiesCacheKey); //all content type cache - ApplicationContext.Current.ApplicationCache.ClearCacheByKeySearch(CacheKeys.ContentTypeCacheKey); + ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.ContentTypeCacheKey); //clear static object cache global::umbraco.cms.businesslogic.ContentType.RemoveAllDataTypeCache(); PublishedContentHelper.ClearPropertyTypeCache(); @@ -241,12 +241,13 @@ namespace Umbraco.Web.Cache //clears the cache for each property type associated with the content type foreach (var pid in payload.PropertyTypeIds) { - ApplicationContext.Current.ApplicationCache.ClearCacheItem(CacheKeys.PropertyTypeCacheKey + pid); + ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheItem(CacheKeys.PropertyTypeCacheKey + pid); } + //clears the cache associated with the Content type itself - ApplicationContext.Current.ApplicationCache.ClearCacheItem(string.Format("{0}{1}", CacheKeys.ContentTypeCacheKey, payload.Id)); + ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheItem(string.Format("{0}{1}", CacheKeys.ContentTypeCacheKey, payload.Id)); //clears the cache associated with the content type properties collection - ApplicationContext.Current.ApplicationCache.ClearCacheItem(CacheKeys.ContentTypePropertiesCacheKey + payload.Id); + ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheItem(CacheKeys.ContentTypePropertiesCacheKey + payload.Id); //clears the dictionary object cache of the legacy ContentType global::umbraco.cms.businesslogic.ContentType.RemoveFromDataTypeCache(payload.Alias); diff --git a/src/Umbraco.Web/Editors/EntityController.cs b/src/Umbraco.Web/Editors/EntityController.cs index 68cc1f9262..4f5a6c9e55 100644 --- a/src/Umbraco.Web/Editors/EntityController.cs +++ b/src/Umbraco.Web/Editors/EntityController.cs @@ -167,14 +167,15 @@ namespace Umbraco.Web.Editors //now we need to convert the unknown ones switch (entityType) { + case UmbracoEntityTypes.Macro: + //Get all macros from the macro service + return Services.MacroService.GetAll().OrderBy(x => x.Name).Select(Mapper.Map); case UmbracoEntityTypes.Domain: case UmbracoEntityTypes.Language: case UmbracoEntityTypes.User: - case UmbracoEntityTypes.Macro: - default: throw new NotSupportedException("The " + typeof(EntityController) + " does not currently support data for the type " + entityType); } diff --git a/src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs new file mode 100644 index 0000000000..a732ad89f7 --- /dev/null +++ b/src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs @@ -0,0 +1,25 @@ +using AutoMapper; +using Umbraco.Core; +using Umbraco.Core.Models; +using Umbraco.Core.Models.Mapping; +using Umbraco.Web.Models.ContentEditing; + +namespace Umbraco.Web.Models.Mapping +{ + /// + /// Declares model mappings for macros. + /// + internal class MacroModelMapper : MapperConfiguration + { + public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + { + //FROM IMacro TO EntityBasic + config.CreateMap() + .ForMember(entityBasic => entityBasic.Icon, expression => expression.UseValue("icon-settings-alt")) + .ForMember(dto => dto.ParentId, expression => expression.UseValue(-1)) + .ForMember(dto => dto.Path, expression => expression.ResolveUsing(macro => "-1," + macro.Id)); + + } + + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Models/Mapping/NewMediaModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs similarity index 95% rename from src/Umbraco.Web/Models/Mapping/NewMediaModelMapper.cs rename to src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs index fe3643da87..73ec858233 100644 --- a/src/Umbraco.Web/Models/Mapping/NewMediaModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs @@ -1,60 +1,60 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using AutoMapper; -using Umbraco.Core; -using Umbraco.Core.Models; -using Umbraco.Core.Models.Mapping; -using Umbraco.Core.PropertyEditors; -using Umbraco.Web.Models.ContentEditing; - -namespace Umbraco.Web.Models.Mapping -{ - /// - /// Declares model mappings for media. - /// - internal class NewMediaModelMapper : MapperConfiguration - { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) - { - //FROM IMedia TO MediaItemDisplay - config.CreateMap() - .ForMember( - dto => dto.Owner, - expression => expression.ResolveUsing>()) - .ForMember( - dto => dto.Icon, - expression => expression.MapFrom(content => content.ContentType.Icon)) - .ForMember( - dto => dto.ContentTypeAlias, - expression => expression.MapFrom(content => content.ContentType.Alias)) - .ForMember( - dto => dto.ContentTypeName, - expression => expression.MapFrom(content => content.ContentType.Name)) - .ForMember(display => display.Properties, expression => expression.Ignore()) - .ForMember(display => display.Tabs, expression => expression.ResolveUsing()) - .AfterMap((media, display) => TabsAndPropertiesResolver.MapGenericProperties(media, display)); - - //FROM IMedia TO ContentItemBasic - config.CreateMap>() - .ForMember( - dto => dto.Owner, - expression => expression.ResolveUsing>()) - .ForMember( - dto => dto.Icon, - expression => expression.MapFrom(content => content.ContentType.Icon)) - .ForMember( - dto => dto.ContentTypeAlias, - expression => expression.MapFrom(content => content.ContentType.Alias)); - - //FROM IMedia TO ContentItemDto - config.CreateMap>() - .ForMember( - dto => dto.Owner, - expression => expression.ResolveUsing>()); - } - - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AutoMapper; +using Umbraco.Core; +using Umbraco.Core.Models; +using Umbraco.Core.Models.Mapping; +using Umbraco.Core.PropertyEditors; +using Umbraco.Web.Models.ContentEditing; + +namespace Umbraco.Web.Models.Mapping +{ + /// + /// Declares model mappings for media. + /// + internal class MediaModelMapper : MapperConfiguration + { + public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + { + //FROM IMedia TO MediaItemDisplay + config.CreateMap() + .ForMember( + dto => dto.Owner, + expression => expression.ResolveUsing>()) + .ForMember( + dto => dto.Icon, + expression => expression.MapFrom(content => content.ContentType.Icon)) + .ForMember( + dto => dto.ContentTypeAlias, + expression => expression.MapFrom(content => content.ContentType.Alias)) + .ForMember( + dto => dto.ContentTypeName, + expression => expression.MapFrom(content => content.ContentType.Name)) + .ForMember(display => display.Properties, expression => expression.Ignore()) + .ForMember(display => display.Tabs, expression => expression.ResolveUsing()) + .AfterMap((media, display) => TabsAndPropertiesResolver.MapGenericProperties(media, display)); + + //FROM IMedia TO ContentItemBasic + config.CreateMap>() + .ForMember( + dto => dto.Owner, + expression => expression.ResolveUsing>()) + .ForMember( + dto => dto.Icon, + expression => expression.MapFrom(content => content.ContentType.Icon)) + .ForMember( + dto => dto.ContentTypeAlias, + expression => expression.MapFrom(content => content.ContentType.Alias)); + + //FROM IMedia TO ContentItemDto + config.CreateMap>() + .ForMember( + dto => dto.Owner, + expression => expression.ResolveUsing>()); + } + + } +} diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 1136e982ef..962278dcec 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -304,6 +304,7 @@ + @@ -389,7 +390,7 @@ - +