forked from Jetski5822/NGM.Forum
/
Shapes.cs
43 lines (35 loc) · 1.74 KB
/
Shapes.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Linq;
using NGM.Forum.Models;
using Orchard.ContentManagement;
using Orchard.DisplayManagement.Descriptors;
using Orchard.Localization;
namespace NGM.Forum {
public class Shapes : IShapeTableProvider {
public Shapes() {
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public void Discover(ShapeTableBuilder builder) {
builder.Describe("Post_Body_Editor")
.OnDisplaying(displaying => {
string flavor = displaying.Shape.EditorFlavor;
displaying.ShapeMetadata.Alternates.Add("Post_Body_Editor__" + flavor);
});
// We support multiple forum types, but need to be able to skin forum admin shapes, so add alternates for any content type that has a ForumPart.
builder.Describe("Content").OnDisplaying(displaying => {
var content = (ContentItem) displaying.Shape.ContentItem;
if (content.Parts.All(x => x.PartDefinition.Name != typeof (ForumPart).Name))
return;
var displayType = !String.IsNullOrWhiteSpace(displaying.ShapeMetadata.DisplayType) ? displaying.ShapeMetadata.DisplayType : "Detail";
var alternates = new[] {
string.Format("Content__{0}", content.ContentType),
string.Format("Content__{0}_{1}", content.ContentType, displayType),
};
foreach (var alternate in alternates.Where(alternate => !displaying.ShapeMetadata.Alternates.Contains(alternate))) {
displaying.ShapeMetadata.Alternates.Add(alternate);
}
});
}
}
}