Skip to content

Commit 6c906b1

Browse files
authored
Merge pull request #28 from jcdcdev/dev/v13
13.1.0
2 parents 75f1c4c + e01edf9 commit 6c906b1

25 files changed

+301
-169
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

β€Ž.github/workflows/build.ymlβ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ jobs:
1616
with:
1717
project-name: ${{ needs.metadata.outputs.project-name}}
1818
project-path: ${{ needs.metadata.outputs.project-path }}
19+
npm-working-dir: ${{ needs.metadata.outputs.npm-working-dir }}
20+
npm-enabled: true
1921
umbraco-version: 13

β€Ž.github/workflows/release.ymlβ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ jobs:
1919
with:
2020
project-name: ${{ needs.metadata.outputs.project-name}}
2121
project-path: ${{ needs.metadata.outputs.project-path }}
22+
npm-working-dir: ${{ needs.metadata.outputs.npm-working-dir }}
23+
npm-enabled: true
2224
umbraco-version: 13
2325
- name: Release
2426
uses: jcdcdev/jcdcdev.Umbraco.GitHub.Release@main
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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+
DataTypeOrganiser dataTypeOrganiser,
14+
ContentTypeOrganiser contentTypeOrganiser,
15+
MediaTypeOrganiser mediaTypeOrganiser,
16+
MemberTypeOrganiser memberTypeOrganiser,
17+
IOptions<BackOfficeOrganiserOptions> options)
18+
:
19+
INotificationHandler<DataTypeSavedNotification>,
20+
INotificationHandler<ContentTypeSavedNotification>,
21+
INotificationHandler<MemberTypeSavedNotification>,
22+
INotificationHandler<MediaTypeSavedNotification>
23+
{
24+
private readonly BackOfficeOrganiserOptions _options = options.Value;
25+
26+
public void Handle(ContentTypeSavedNotification notification)
27+
{
28+
if (!_options.ContentTypes.OrganiseOnSave)
29+
{
30+
return;
31+
}
32+
33+
foreach (var item in notification.SavedEntities)
34+
{
35+
contentTypeOrganiser.Organise(item);
36+
}
37+
}
38+
39+
public void Handle(DataTypeSavedNotification notification)
40+
{
41+
if (!_options.DataTypes.OrganiseOnSave)
42+
{
43+
return;
44+
}
45+
46+
foreach (var dataType in notification.SavedEntities)
47+
{
48+
dataTypeOrganiser.Organise(dataType);
49+
}
50+
}
51+
52+
public void Handle(MediaTypeSavedNotification notification)
53+
{
54+
if (!_options.MediaTypes.OrganiseOnSave)
55+
{
56+
return;
57+
}
58+
59+
foreach (var item in notification.SavedEntities)
60+
{
61+
mediaTypeOrganiser.Organise(item);
62+
}
63+
}
64+
65+
public void Handle(MemberTypeSavedNotification notification)
66+
{
67+
if (!_options.MemberTypes.OrganiseOnSave)
68+
{
69+
return;
70+
}
71+
72+
foreach (var item in notification.SavedEntities)
73+
{
74+
memberTypeOrganiser.Organise(item);
75+
}
76+
}
77+
}

β€Ž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/Controllers/BackOfficeOrganiserController.csβ€Ž

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,15 @@ namespace Umbraco.Community.BackOfficeOrganiser.Controllers;
1515
[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]
1616
[DisableBrowserCache]
1717
[UmbracoRequireHttps]
18-
public class BackOfficeOrganiserController : UmbracoApiController
18+
public class BackOfficeOrganiserController(IBackOfficeOrganiserService service) : UmbracoApiController
1919
{
20-
private readonly IBackOfficeOrganiserService _service;
21-
22-
public BackOfficeOrganiserController(IBackOfficeOrganiserService service)
23-
{
24-
_service = service;
25-
}
26-
2720
[HttpPost]
2821
public IActionResult Organise(OrganiseRequest model)
2922
{
3023
var success = true;
3124
foreach (var type in model.Types.Select(DetermineOrganiseType).Distinct())
3225
{
33-
var attempt = _service.Organise(type);
26+
var attempt = service.Organise(type);
3427
if (!attempt.Success)
3528
{
3629
success = false;

β€Ž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+
}

0 commit comments

Comments
Β (0)