Skip to content

Commit 3a34e56

Browse files
authored
Merge pull request #31 from jcdcdev/dev/v10
10.1.0
2 parents d5caa5a + c50c299 commit 3a34e56

File tree

16 files changed

+284
-50
lines changed

16 files changed

+284
-50
lines changed

.github/README.md

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
[![Umbraco Marketplace](https://img.shields.io/badge/Umbraco-Marketplace-%233544B1?style=flat&logo=umbraco)](https://marketplace.umbraco.com/package/umbraco.community.backofficeorganiser)
44
[![GitHub License](https://img.shields.io/github/license/jcdcdev/Umbraco.Community.BackOfficeOrganiser?color=8AB803&label=License&logo=github)](https://github.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser/blob/main/LICENSE)
55
[![NuGet Downloads](https://img.shields.io/nuget/dt/Umbraco.Community.BackOfficeOrganiser?color=cc9900&label=Downloads&logo=nuget)](https://www.nuget.org/packages/Umbraco.Community.BackOfficeOrganiser/)
6+
[![Project Website](https://img.shields.io/badge/Project%20Website-jcdc.dev-jcdcdev?style=flat&color=3c4834&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiIGNsYXNzPSJiaSBiaS1wYy1kaXNwbGF5IiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGQ9Ik04IDFhMSAxIDAgMCAxIDEtMWg2YTEgMSAwIDAgMSAxIDF2MTRhMSAxIDAgMCAxLTEgMUg5YTEgMSAwIDAgMS0xLTF6bTEgMTMuNWEuNS41IDAgMSAwIDEgMCAuNS41IDAgMCAwLTEgMG0yIDBhLjUuNSAwIDEgMCAxIDAgLjUuNSAwIDAgMC0xIDBNOS41IDFhLjUuNSAwIDAgMCAwIDFoNWEuNS41IDAgMCAwIDAtMXpNOSAzLjVhLjUuNSAwIDAgMCAuNS41aDVhLjUuNSAwIDAgMCAwLTFoLTVhLjUuNSAwIDAgMC0uNS41TTEuNSAyQTEuNSAxLjUgMCAwIDAgMCAzLjV2N0ExLjUgMS41IDAgMCAwIDEuNSAxMkg2djJoLS41YS41LjUgMCAwIDAgMCAxSDd2LTRIMS41YS41LjUgMCAwIDEtLjUtLjV2LTdhLjUuNSAwIDAgMSAuNS0uNUg3VjJ6Ii8+Cjwvc3ZnPg==)](https://jcdc.dev/umbraco-packages/back-office-organiser)
67

78
Is your backoffice a bit untidy?
89

910
- Single-click (and opinionated) organiser for
10-
- Document Types
11-
- Media Types
12-
- Member Types
13-
- Data Types
11+
- Document Types
12+
- Media Types
13+
- Member Types
14+
- Data Types
15+
- Automatically sorts on save (configurable)
1416

1517
![A screenshot of the Back Office Organiser in action](https://raw.githubusercontent.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser/main/docs/screenshots/backoffice.png)
1618

@@ -27,13 +29,25 @@ Is your backoffice a bit untidy?
2729
Add the following to your `appsettings.json` file
2830

2931
```JSON
30-
"BackOfficeOrganiser": {
31-
"DataTypes": {
32-
"InternalFolderName": "Internal",
33-
"ThirdPartyFolderName": "Third Party",
34-
"CustomFolderName": "Custom"
35-
}
36-
}
32+
{
33+
"BackOfficeOrganiser": {
34+
"DataTypes": {
35+
"InternalFolderName": "Internal",
36+
"ThirdPartyFolderName": "Third Party",
37+
"CustomFolderName": "Custom",
38+
"OrganiseOnSave": true
39+
},
40+
"ContentTypes": {
41+
"OrganiseOnSave": true
42+
},
43+
"MediaTypes": {
44+
"OrganiseOnSave": true
45+
},
46+
"MemberTypes": {
47+
"OrganiseOnSave": true
48+
}
49+
}
50+
}
3751
```
3852

3953
## Extending
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
using Microsoft.Extensions.Options;
2+
using Umbraco.Cms.Core.Events;
3+
using Umbraco.Cms.Core.Notifications;
4+
using Umbraco.Community.BackOfficeOrganiser.Models;
5+
using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
6+
using Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
7+
using Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
8+
using Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
9+
10+
namespace Umbraco.Community.BackOfficeOrganiser.Composing;
11+
12+
public class BackofficeOrganiserNotificationHandler :
13+
INotificationHandler<DataTypeSavedNotification>,
14+
INotificationHandler<ContentTypeSavedNotification>,
15+
INotificationHandler<MemberTypeSavedNotification>,
16+
INotificationHandler<MediaTypeSavedNotification>
17+
{
18+
private readonly ContentTypeOrganiser _contentTypeOrganiser;
19+
private readonly DataTypeOrganiser _dataTypeOrganiser;
20+
private readonly MediaTypeOrganiser _mediaTypeOrganiser;
21+
private readonly MemberTypeOrganiser _memberTypeOrganiser;
22+
private readonly BackOfficeOrganiserOptions _options;
23+
24+
public BackofficeOrganiserNotificationHandler(
25+
DataTypeOrganiser dataTypeOrganiser,
26+
ContentTypeOrganiser contentTypeOrganiser,
27+
MediaTypeOrganiser mediaTypeOrganiser,
28+
MemberTypeOrganiser memberTypeOrganiser,
29+
IOptions<BackOfficeOrganiserOptions> options)
30+
{
31+
_dataTypeOrganiser = dataTypeOrganiser;
32+
_contentTypeOrganiser = contentTypeOrganiser;
33+
_mediaTypeOrganiser = mediaTypeOrganiser;
34+
_memberTypeOrganiser = memberTypeOrganiser;
35+
_options = options.Value;
36+
}
37+
38+
public void Handle(ContentTypeSavedNotification notification)
39+
{
40+
if (!_options.ContentTypes.OrganiseOnSave)
41+
{
42+
return;
43+
}
44+
45+
foreach (var item in notification.SavedEntities)
46+
{
47+
_contentTypeOrganiser.Organise(item);
48+
}
49+
}
50+
51+
public void Handle(DataTypeSavedNotification notification)
52+
{
53+
if (!_options.DataTypes.OrganiseOnSave)
54+
{
55+
return;
56+
}
57+
58+
foreach (var dataType in notification.SavedEntities)
59+
{
60+
_dataTypeOrganiser.Organise(dataType);
61+
}
62+
}
63+
64+
public void Handle(MediaTypeSavedNotification notification)
65+
{
66+
if (!_options.MediaTypes.OrganiseOnSave)
67+
{
68+
return;
69+
}
70+
71+
foreach (var item in notification.SavedEntities)
72+
{
73+
_mediaTypeOrganiser.Organise(item);
74+
}
75+
}
76+
77+
public void Handle(MemberTypeSavedNotification notification)
78+
{
79+
if (!_options.MemberTypes.OrganiseOnSave)
80+
{
81+
return;
82+
}
83+
84+
foreach (var item in notification.SavedEntities)
85+
{
86+
_memberTypeOrganiser.Organise(item);
87+
}
88+
}
89+
}

src/Umbraco.Community.BackOfficeOrganiser/Composing/Composer.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.Extensions.DependencyInjection;
22
using Umbraco.Cms.Core.Composing;
33
using Umbraco.Cms.Core.DependencyInjection;
4+
using Umbraco.Cms.Core.Notifications;
45
using Umbraco.Community.BackOfficeOrganiser.Models;
56
using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
67
using Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
@@ -27,8 +28,14 @@ public void Compose(IUmbracoBuilder builder)
2728
builder.ManifestFilters().Append<ManifestFilter>();
2829

2930
builder.DataTypeOrganiseActions().Append<DefaultDataTypeOrganiseAction>();
31+
builder.ContentTypeOrganiseActions().Append<ElementTypeOrganiser>();
3032
builder.ContentTypeOrganiseActions().Append<DefaultContentTypeOrganiseAction>();
3133
builder.MediaTypeOrganiseActions().Append<DefaultMediaTypeOrganiseAction>();
3234
builder.MemberTypeOrganiseActions().Append<DefaultMemberTypeOrganiseAction>();
35+
36+
builder.AddNotificationHandler<DataTypeSavedNotification, BackofficeOrganiserNotificationHandler>();
37+
builder.AddNotificationHandler<ContentTypeSavedNotification, BackofficeOrganiserNotificationHandler>();
38+
builder.AddNotificationHandler<MemberTypeSavedNotification, BackofficeOrganiserNotificationHandler>();
39+
builder.AddNotificationHandler<MediaTypeSavedNotification, BackofficeOrganiserNotificationHandler>();
3340
}
3441
}

src/Umbraco.Community.BackOfficeOrganiser/Models/BackOfficeOrganiserOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ namespace Umbraco.Community.BackOfficeOrganiser.Models;
33
public class BackOfficeOrganiserOptions
44
{
55
public DataTypeOptions DataTypes { get; set; } = new();
6+
public ContentTypeOptions ContentTypes { get; set; } = new();
7+
public MemberTypeOptions MemberTypes { get; set; } = new();
8+
public MediaTypeOptions MediaTypes { get; set; } = new();
69
public static string SectionName => "BackOfficeOrganiser";
710
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Umbraco.Community.BackOfficeOrganiser.Models;
2+
3+
public class ContentTypeOptions
4+
{
5+
public bool OrganiseOnSave { get; set; } = true;
6+
}

src/Umbraco.Community.BackOfficeOrganiser/Models/DataTypeOptions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ public class DataTypeOptions
55
public string InternalFolderName { get; set; } = "🔒 Internal";
66
public string ThirdPartyFolderName { get; set; } = "🦄 Third Party";
77
public string CustomFolderName { get; set; } = "🔧 Custom";
8+
public bool OrganiseOnSave { get; set; } = true;
89
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Umbraco.Community.BackOfficeOrganiser.Models;
2+
3+
public class MediaTypeOptions
4+
{
5+
public bool OrganiseOnSave { get; set; } = true;
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Umbraco.Community.BackOfficeOrganiser.Models;
2+
3+
public class MemberTypeOptions
4+
{
5+
public bool OrganiseOnSave { get; set; } = true;
6+
}

src/Umbraco.Community.BackOfficeOrganiser/Organisers/BackOfficeOrganiserBase.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,22 @@ protected BackOfficeOrganiserBase(ILogger logger)
1111
Logger = logger;
1212
}
1313

14-
public void OrganiseType()
14+
protected virtual void PostOrganiseAll()
15+
{
16+
}
17+
18+
public void OrganiseAll()
1519
{
1620
Logger.LogInformation("BackOfficeOrganiser: Cleanup for {Type} Started", typeof(T).Name);
1721

1822
try
1923
{
20-
Organise();
24+
var items = GetAll();
25+
foreach (var item in items)
26+
{
27+
Organise(item);
28+
}
29+
PostOrganiseAll();
2130
}
2231
catch (Exception ex)
2332
{
@@ -28,5 +37,7 @@ public void OrganiseType()
2837
Logger.LogInformation("BackOfficeOrganiser: Cleanup for {Type} Complete", typeof(T).Name);
2938
}
3039

31-
public abstract void Organise();
40+
public abstract void Organise(T item);
41+
42+
protected abstract List<T> GetAll();
3243
}

src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiser.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ public ContentTypeOrganiser(
1919
_organiseActions = organiseActions;
2020
}
2121

22-
public override void Organise()
23-
{
24-
var contentTypes = _contentTypeService.GetAll().ToList();
22+
protected override List<IContentType> GetAll() => _contentTypeService.GetAll().ToList();
2523

26-
foreach (var contentType in contentTypes)
27-
{
28-
var organiser = _organiseActions.FirstOrDefault(x => x.CanMove(contentType, _contentTypeService));
29-
organiser?.Move(contentType, _contentTypeService);
30-
}
24+
public override void Organise(IContentType contentType)
25+
{
26+
var organiser = _organiseActions.FirstOrDefault(x => x.CanMove(contentType, _contentTypeService));
27+
organiser?.Move(contentType, _contentTypeService);
28+
}
3129

30+
protected override void PostOrganiseAll()
31+
{
3232
_contentTypeService.DeleteAllEmptyContainers();
3333
}
3434
}

0 commit comments

Comments
 (0)