diff --git a/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js index 009a8d410f..c2df32c8e0 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js @@ -219,7 +219,7 @@ function ContentEditController($scope, $rootScope, $routeParams, $q, $timeout, $ $scope.loaded = true; $scope.content = data; - if (data.isChildOfListView) { + if (data.isChildOfListView && data.trashed === false) { $scope.listViewPath = ($routeParams.page) ? "/content/content/edit/" + data.parentId + "?page=" + $routeParams.page : "/content/content/edit/" + data.parentId; diff --git a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js index f7b3ae72bb..3af72e320d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js @@ -8,14 +8,31 @@ * */ -function RecycleBinController($scope, $routeParams) { - if ($routeParams.section) { +function RecycleBinController($scope, $routeParams, dataTypeResource) { + + //ensures the list view doesn't actually load until we query for the list view config + // for the section + $scope.listViewPath = null; + + if ($routeParams.section) { if ($routeParams.section === "content") { - $routeParams.id = "-20"; + $routeParams.id = "-20"; + dataTypeResource.getById(-95).then(function(result) { + _.each(result.preValues, function(i) { + $scope.model.config[i.key] = i.value; + }); + $scope.listViewPath = 'views/propertyeditors/listview/listview.html'; + }); } else if ($routeParams.section === "media") { - $routeParams.id = "-21"; + $routeParams.id = "-21"; + dataTypeResource.getById(-96).then(function (result) { + _.each(result.preValues, function (i) { + $scope.model.config[i.key] = i.value; + }); + $scope.listViewPath = 'views/propertyeditors/listview/listview.html'; + }); } $scope.model = { config: { entityType: $routeParams.section } }; diff --git a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html index 8f3d618850..6e73c19dab 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html @@ -7,7 +7,7 @@ -
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js index 7e1c612bbe..7a27fd8ba2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js @@ -51,7 +51,7 @@ function mediaEditController($scope, $routeParams, appState, mediaResource, enti $scope.loaded = true; $scope.content = data; - if (data.isChildOfListView) { + if (data.isChildOfListView && data.trashed === false) { $scope.listViewPath = ($routeParams.page) ? "/media/media/edit/" + data.parentId + "?page=" + $routeParams.page : "/media/media/edit/" + data.parentId; diff --git a/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html b/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html index dc247a1e5e..88487e77e4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html +++ b/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html @@ -7,7 +7,7 @@ -
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js index 62a62763f4..16e9357864 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js @@ -143,9 +143,11 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific $scope.listViewResultSet = data; //update all values for display - _.each($scope.listViewResultSet.items, function(e, index) { - setPropertyValues(e); - }); + if ($scope.listViewResultSet.items) { + _.each($scope.listViewResultSet.items, function (e, index) { + setPropertyValues(e); + }); + } if ($scope.options.pageNumber > $scope.listViewResultSet.totalPages) { $scope.options.pageNumber = $scope.listViewResultSet.totalPages; diff --git a/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs b/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs index 428bb4ba3d..520ff677b0 100644 --- a/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs +++ b/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs @@ -28,6 +28,9 @@ namespace Umbraco.Web.Models.ContentEditing [DataMember(Name = "icon")] public string Icon { get; set; } + [DataMember(Name = "trashed")] + public bool Trashed { get; set; } + /// /// This is the unique Id stored in the database - but could also be the unique id for a custom membership provider /// diff --git a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs index 76b4861258..a29ffdbe44 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs @@ -32,47 +32,52 @@ namespace Umbraco.Web.Models.Mapping //FROM IContent TO ContentItemDisplay config.CreateMap() - .ForMember( - dto => dto.Owner, - expression => expression.ResolveUsing>()) - .ForMember( - dto => dto.Updater, - 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( - dto => dto.IsContainer, - expression => expression.MapFrom(content => content.ContentType.IsContainer)) - .ForMember( - dto => dto.IsChildOfListView, - expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer)) - .ForMember( - dto => dto.PublishDate, - expression => expression.MapFrom(content => GetPublishedDate(content, applicationContext))) - .ForMember( - dto => dto.TemplateAlias, expression => expression.MapFrom(content => content.Template.Alias)) - .ForMember( - dto => dto.Urls, - expression => expression.MapFrom(content => - UmbracoContext.Current == null - ? new[] {"Cannot generate urls without a current Umbraco Context"} - : content.GetContentUrls())) - .ForMember(display => display.Properties, expression => expression.Ignore()) - .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore()) - .ForMember(display => display.Notifications, expression => expression.Ignore()) - .ForMember(display => display.Errors, expression => expression.Ignore()) - .ForMember(display => display.Alias, expression => expression.Ignore()) - .ForMember(display => display.Tabs, expression => expression.ResolveUsing()) - .ForMember(display => display.AllowedActions, expression => expression.ResolveUsing( - new ActionButtonsResolver(new Lazy(() => applicationContext.Services.UserService)))) - .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService)); + .ForMember( + dto => dto.Owner, + expression => expression.ResolveUsing>()) + .ForMember( + dto => dto.Updater, + 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( + dto => dto.IsContainer, + expression => expression.MapFrom(content => content.ContentType.IsContainer)) + .ForMember( + dto => dto.IsChildOfListView, + //TODO: Fix this shorthand .Parent() lookup, at least have an overload to use the current + // application context so it's testable! + expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer)) + .ForMember( + dto => dto.Trashed, + expression => expression.MapFrom(content => content.Trashed)) + .ForMember( + dto => dto.PublishDate, + expression => expression.MapFrom(content => GetPublishedDate(content, applicationContext))) + .ForMember( + dto => dto.TemplateAlias, expression => expression.MapFrom(content => content.Template.Alias)) + .ForMember( + dto => dto.Urls, + expression => expression.MapFrom(content => + UmbracoContext.Current == null + ? new[] {"Cannot generate urls without a current Umbraco Context"} + : content.GetContentUrls())) + .ForMember(display => display.Properties, expression => expression.Ignore()) + .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore()) + .ForMember(display => display.Notifications, expression => expression.Ignore()) + .ForMember(display => display.Errors, expression => expression.Ignore()) + .ForMember(display => display.Alias, expression => expression.Ignore()) + .ForMember(display => display.Tabs, expression => expression.ResolveUsing()) + .ForMember(display => display.AllowedActions, expression => expression.ResolveUsing( + new ActionButtonsResolver(new Lazy(() => applicationContext.Services.UserService)))) + .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService)); //FROM IContent TO ContentItemBasic config.CreateMap>() @@ -85,6 +90,9 @@ namespace Umbraco.Web.Models.Mapping .ForMember( dto => dto.Icon, expression => expression.MapFrom(content => content.ContentType.Icon)) + .ForMember( + dto => dto.Trashed, + expression => expression.MapFrom(content => content.Trashed)) .ForMember( dto => dto.ContentTypeAlias, expression => expression.MapFrom(content => content.ContentType.Alias)) @@ -115,7 +123,7 @@ namespace Umbraco.Web.Models.Mapping { var urlHelper = new UrlHelper(new RequestContext(new HttpContextWrapper(HttpContext.Current), new RouteData())); var url = urlHelper.GetUmbracoApiService(controller => controller.GetTreeNode(display.Id.ToString(), null)); - display.TreeNodeUrl = url; + display.TreeNodeUrl = url; } //fill in the template config to be passed to the template drop down. diff --git a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs index f8ad3a3a6d..241d5b3c97 100644 --- a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs @@ -26,31 +26,36 @@ namespace Umbraco.Web.Models.Mapping { //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.IsChildOfListView, - expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer)) - .ForMember( - dto => dto.ContentTypeName, - expression => expression.MapFrom(content => content.ContentType.Name)) - .ForMember(display => display.Properties, expression => expression.Ignore()) - .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore()) - .ForMember(display => display.Notifications, expression => expression.Ignore()) - .ForMember(display => display.Errors, expression => expression.Ignore()) - .ForMember(display => display.Published, expression => expression.Ignore()) - .ForMember(display => display.Updater, expression => expression.Ignore()) - .ForMember(display => display.Alias, expression => expression.Ignore()) - .ForMember(display => display.IsContainer, expression => expression.Ignore()) - .ForMember(display => display.Tabs, expression => expression.ResolveUsing()) - .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService)); + .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.IsChildOfListView, + //TODO: Fix this shorthand .Parent() lookup, at least have an overload to use the current + // application context so it's testable! + expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer)) + .ForMember( + dto => dto.Trashed, + expression => expression.MapFrom(content => content.Trashed)) + .ForMember( + dto => dto.ContentTypeName, + expression => expression.MapFrom(content => content.ContentType.Name)) + .ForMember(display => display.Properties, expression => expression.Ignore()) + .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore()) + .ForMember(display => display.Notifications, expression => expression.Ignore()) + .ForMember(display => display.Errors, expression => expression.Ignore()) + .ForMember(display => display.Published, expression => expression.Ignore()) + .ForMember(display => display.Updater, expression => expression.Ignore()) + .ForMember(display => display.Alias, expression => expression.Ignore()) + .ForMember(display => display.IsContainer, expression => expression.Ignore()) + .ForMember(display => display.Tabs, expression => expression.ResolveUsing()) + .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService)); //FROM IMedia TO ContentItemBasic config.CreateMap>() @@ -60,6 +65,9 @@ namespace Umbraco.Web.Models.Mapping .ForMember( dto => dto.Icon, expression => expression.MapFrom(content => content.ContentType.Icon)) + .ForMember( + dto => dto.Trashed, + expression => expression.MapFrom(content => content.Trashed)) .ForMember( dto => dto.ContentTypeAlias, expression => expression.MapFrom(content => content.ContentType.Alias)) diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs index 62f726fc28..2cfd9073a8 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs @@ -86,6 +86,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(display => display.Updater, expression => expression.Ignore()) .ForMember(display => display.Alias, expression => expression.Ignore()) .ForMember(display => display.IsChildOfListView, expression => expression.Ignore()) + .ForMember(display => display.Trashed, expression => expression.Ignore()) .ForMember(display => display.IsContainer, expression => expression.Ignore()) .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore()) .AfterMap((member, display) => MapGenericCustomProperties(applicationContext.Services.MemberService, member, display)); @@ -107,6 +108,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember( dto => dto.Username, expression => expression.MapFrom(content => content.Username)) + .ForMember(display => display.Trashed, expression => expression.Ignore()) .ForMember(x => x.Published, expression => expression.Ignore()) .ForMember(x => x.Updater, expression => expression.Ignore()) .ForMember(x => x.Alias, expression => expression.Ignore());