Skip to content

Commit e9f8630

Browse files
authored
chore: update presentation content to use single presenter object (#102)
* feat: add Presenter type to presentation content type * chore: add migrated content to presenters field * chore: remove old presenter properties from presentation * chore: remove old presenter data from presentations * fix: update frontend to use new presenters selector
1 parent 29ec924 commit e9f8630

75 files changed

Lines changed: 2778 additions & 476 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#nullable enable
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using Umbraco.Cms.Web.Common.PublishedModels;
5+
using Umbraco.Extensions;
6+
7+
namespace SgfDevs.Dev;
8+
9+
public class PresentationPresenterDisplayService
10+
{
11+
private const string FallbackImage = "/images/pipey.jpg";
12+
13+
private readonly MemberConverter _memberConverter;
14+
private readonly MemberTagDisplayService _memberTagDisplayService;
15+
16+
public PresentationPresenterDisplayService(
17+
MemberConverter memberConverter,
18+
MemberTagDisplayService memberTagDisplayService)
19+
{
20+
_memberConverter = memberConverter;
21+
_memberTagDisplayService = memberTagDisplayService;
22+
}
23+
24+
public IReadOnlyList<PresentationPresenterDisplay> GetPresenters(Presentation presentation, int imageWidth)
25+
{
26+
var presenters = new List<PresentationPresenterDisplay>();
27+
28+
if (presentation.Presenters == null)
29+
{
30+
return presenters;
31+
}
32+
33+
foreach (var block in presentation.Presenters)
34+
{
35+
switch (block.Content)
36+
{
37+
case PresenterPicker presenterPicker when presenterPicker.Member != null:
38+
{
39+
var member = _memberConverter.FromContent(presenterPicker.Member);
40+
var memberUsername = member.Username?.ToLowerInvariant() ?? string.Empty;
41+
presenters.Add(new PresentationPresenterDisplay(
42+
member.Name,
43+
member.ProfileImage?.GetCropUrl(width: imageWidth) ?? FallbackImage,
44+
$"/member/{memberUsername}",
45+
_memberTagDisplayService.GetDisplayMemberTags(member).ToList()));
46+
break;
47+
}
48+
case NonMemberPresenter nonMemberPresenter:
49+
presenters.Add(new PresentationPresenterDisplay(
50+
nonMemberPresenter.PresenterName ?? "Presenter",
51+
nonMemberPresenter.ProfileImage?.GetCropUrl(width: imageWidth) ?? FallbackImage,
52+
null,
53+
[]));
54+
break;
55+
}
56+
}
57+
58+
return presenters;
59+
}
60+
}
61+
62+
public record PresentationPresenterDisplay(
63+
string Name,
64+
string ImageUrl,
65+
string? ProfileUrl,
66+
IReadOnlyList<string> Tags);

SgfDevs/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
builder.Services.AddHttpClient();
4545
builder.Services.AddScoped<MemberConverter>();
4646
builder.Services.AddScoped<MemberTagDisplayService>();
47+
builder.Services.AddScoped<PresentationPresenterDisplayService>();
4748
builder.Services.AddScoped<DirectoryHelper>();
4849
builder.Services.AddScoped<NewsletterHelper>();
4950

SgfDevs/Views/Group.cshtml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
@using ContentModels = Umbraco.Cms.Web.Common.PublishedModels;
55
@inject MemberConverter _memberConverter;
66
@inject MemberTagDisplayService _memberTagDisplayService;
7+
@inject PresentationPresenterDisplayService _presentationPresenterDisplayService;
78
@{
89
var upcomingPresentations = Umbraco.ContentAtRoot().First().Descendants<Presentation>().Where(p => p.Group.Id == Model.Id);
910
var leaders = (Model.Leaders ?? []).ToArray();
@@ -179,21 +180,19 @@
179180
@foreach (Presentation presentation in upcomingPresentations)
180181
{
181182
var parentEvent = presentation.Parent<Event>();
182-
var presenterContent = presentation.Presenter;
183+
var presenters = _presentationPresenterDisplayService.GetPresenters(presentation, 960);
184+
var primaryPresenter = presenters.FirstOrDefault();
183185

184-
if (presenterContent == null)
186+
if (primaryPresenter == null)
185187
{
186188
continue;
187189
}
188190

189-
var presenter = _memberConverter.FromContent(presenterContent);
190-
var presenterMemberTags = _memberTagDisplayService.GetDisplayMemberTags(presenter);
191-
var presenterImage = presenter.ProfileImage?.GetCropUrl(width: 960) ?? "/images/pipey.jpg";
192191
<div class="card company_card">
193192
<figure>
194-
<img src="@presenterImage" alt="@presenter.Name">
193+
<img src="@primaryPresenter.ImageUrl" alt="@primaryPresenter.Name">
195194
<figcaption>
196-
@foreach (var tagName in presenterMemberTags)
195+
@foreach (var tagName in primaryPresenter.Tags)
197196
{
198197
<div>@tagName</div>
199198
}
@@ -202,7 +201,10 @@
202201
<div class="content">
203202
<dl>
204203
<dt>@presentation.Name</dt>
205-
<dd>@presenter.Name</dd>
204+
@foreach (var presenter in presenters)
205+
{
206+
<dd>@presenter.Name</dd>
207+
}
206208
<dd>@parentEvent.Name</dd>
207209
</dl>
208210
<footer>

SgfDevs/Views/Home.cshtml

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
@inject UmbracoHelper _helper;
1010
@inject MemberConverter _memberConverter;
1111
@inject MemberTagDisplayService _memberTagDisplayService;
12+
@inject PresentationPresenterDisplayService _presentationPresenterDisplayService;
1213

1314
@{
1415
Layout = "_Layout";
@@ -54,29 +55,27 @@
5455
</div>
5556

5657
<ul class="presentations_@presentations.Count()">
57-
@foreach (var presentation in presentations)
58-
{
59-
var group = presentation.Group;
60-
61-
var presenter = _memberConverter.FromContent(presentation.Presenter);
62-
63-
<li>
64-
<div class="members">
65-
<a href="/member/@presenter.Username.ToLower()">
66-
<img src="@presenter.ProfileImage.GetCropUrl(width: 500)" alt="@presenter.Name">
67-
</a>
68-
@if (presentation.OtherPresenters != null)
69-
{
70-
foreach (var publishedContent in presentation.OtherPresenters)
71-
{
72-
var otherPresenter = _memberConverter.FromContent(publishedContent);
73-
var image = otherPresenter.ProfileImage == null ? "/images/pipey.jpg" : otherPresenter.ProfileImage.GetCropUrl(width: 500);
74-
<a href="/member/@otherPresenter.Username">
75-
<img src="@image" alt="@presenter.Name">
76-
</a>
77-
}
78-
}
79-
</div>
58+
@foreach (var presentation in presentations)
59+
{
60+
var group = presentation.Group;
61+
var presenters = _presentationPresenterDisplayService.GetPresenters(presentation, 500);
62+
63+
<li>
64+
<div class="members">
65+
@foreach (var presenter in presenters)
66+
{
67+
if (!string.IsNullOrWhiteSpace(presenter.ProfileUrl))
68+
{
69+
<a href="@presenter.ProfileUrl">
70+
<img src="@presenter.ImageUrl" alt="@presenter.Name">
71+
</a>
72+
}
73+
else
74+
{
75+
<img src="@presenter.ImageUrl" alt="@presenter.Name">
76+
}
77+
}
78+
</div>
8079

8180
@if (presentation.HasValue("MeetupUrl"))
8281
{
@@ -87,20 +86,21 @@
8786
<h3>@presentation.Name</h3>
8887
}
8988

90-
<dl>
91-
<dt>Presented By</dt>
92-
<dd><a href="/member/@presenter.Username.ToLower()">@presenter.Name</a></dd>
93-
94-
@if (presentation.OtherPresenters != null)
95-
{
96-
@foreach (var publishedContent in presentation.OtherPresenters)
97-
{
98-
var otherPresenter = _memberConverter.FromContent(publishedContent);
99-
<dd><a href="/member/@otherPresenter.Username.ToLower()">@otherPresenter.Name</a></dd>
100-
}
101-
}
102-
103-
</dl>
89+
<dl>
90+
<dt>Presented By</dt>
91+
@foreach (var presenter in presenters)
92+
{
93+
if (!string.IsNullOrWhiteSpace(presenter.ProfileUrl))
94+
{
95+
<dd><a href="@presenter.ProfileUrl">@presenter.Name</a></dd>
96+
}
97+
else
98+
{
99+
<dd>@presenter.Name</dd>
100+
}
101+
}
102+
103+
</dl>
104104

105105
@if (group.Name.ToLower() != "springfield devs")
106106
{

SgfDevs/uSync/v17/Content/.net-and-why-you-should-care.config

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,43 @@
2525
<meetupURL>
2626
<Value><![CDATA[https://www.meetup.com/sgfdevs/events/291496220]]></Value>
2727
</meetupURL>
28-
<otherPresenters>
29-
<Value><![CDATA[]]></Value>
30-
</otherPresenters>
31-
<presenter>
32-
<Value><![CDATA[umb://member/a3c010868b05458c8d9100f665561805]]></Value>
33-
</presenter>
28+
<presenters>
29+
<Value><![CDATA[{
30+
"contentData": [
31+
{
32+
"contentTypeKey": "1bdea08d-8393-4e70-85a9-2ca27bef54f1",
33+
"key": "10353ee3-7083-4150-9486-c2cad000b66d",
34+
"values": [
35+
{
36+
"alias": "member",
37+
"culture": null,
38+
"editorAlias": null,
39+
"segment": null,
40+
"value": "umb://member/a3c010868b05458c8d9100f665561805"
41+
}
42+
]
43+
}
44+
],
45+
"settingsData": [],
46+
"expose": [
47+
{
48+
"contentKey": "10353ee3-7083-4150-9486-c2cad000b66d",
49+
"culture": null,
50+
"segment": null
51+
}
52+
],
53+
"Layout": {
54+
"Umbraco.BlockList": [
55+
{
56+
"contentKey": "10353ee3-7083-4150-9486-c2cad000b66d",
57+
"contentUdi": null,
58+
"settingsKey": null,
59+
"settingsUdi": null
60+
}
61+
]
62+
}
63+
}]]></Value>
64+
</presenters>
3465
<skillTags>
3566
<Value><![CDATA[]]></Value>
3667
</skillTags>

SgfDevs/uSync/v17/Content/.net-maui-all-kinds-of-questions-some-of-the-answers.config

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,43 @@ View the stream on Twitch at https://www.twitch.tv/sgfdevs]]></Value>
3737
<meetupURL>
3838
<Value><![CDATA[https://www.meetup.com/sgfdevs/events/287392458/]]></Value>
3939
</meetupURL>
40-
<otherPresenters>
41-
<Value><![CDATA[]]></Value>
42-
</otherPresenters>
43-
<presenter>
44-
<Value><![CDATA[umb://member/45d788961d364435830319a72630eded]]></Value>
45-
</presenter>
40+
<presenters>
41+
<Value><![CDATA[{
42+
"contentData": [
43+
{
44+
"contentTypeKey": "1bdea08d-8393-4e70-85a9-2ca27bef54f1",
45+
"key": "1a98b289-2f49-44fc-b7f2-081e59ad5cc3",
46+
"values": [
47+
{
48+
"alias": "member",
49+
"culture": null,
50+
"editorAlias": null,
51+
"segment": null,
52+
"value": "umb://member/45d788961d364435830319a72630eded"
53+
}
54+
]
55+
}
56+
],
57+
"settingsData": [],
58+
"expose": [
59+
{
60+
"contentKey": "1a98b289-2f49-44fc-b7f2-081e59ad5cc3",
61+
"culture": null,
62+
"segment": null
63+
}
64+
],
65+
"Layout": {
66+
"Umbraco.BlockList": [
67+
{
68+
"contentKey": "1a98b289-2f49-44fc-b7f2-081e59ad5cc3",
69+
"contentUdi": null,
70+
"settingsKey": null,
71+
"settingsUdi": null
72+
}
73+
]
74+
}
75+
}]]></Value>
76+
</presenters>
4677
<skillTags>
4778
<Value><![CDATA[]]></Value>
4879
</skillTags>

SgfDevs/uSync/v17/Content/a-beginners-guide-to-monitoring-prometheus-and-grafana.config

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,43 @@ These topics are important to me as I have seen their power first hand as a soft
2929
<meetupURL>
3030
<Value><![CDATA[https://www.meetup.com/sgfdevs/events/289015797]]></Value>
3131
</meetupURL>
32-
<otherPresenters>
33-
<Value><![CDATA[]]></Value>
34-
</otherPresenters>
35-
<presenter>
36-
<Value><![CDATA[umb://member/238333d3bcf8430c885351dd08506abf]]></Value>
37-
</presenter>
32+
<presenters>
33+
<Value><![CDATA[{
34+
"contentData": [
35+
{
36+
"contentTypeKey": "1bdea08d-8393-4e70-85a9-2ca27bef54f1",
37+
"key": "02550b6d-6cf3-488c-8b2b-177cbad67399",
38+
"values": [
39+
{
40+
"alias": "member",
41+
"culture": null,
42+
"editorAlias": null,
43+
"segment": null,
44+
"value": "umb://member/238333d3bcf8430c885351dd08506abf"
45+
}
46+
]
47+
}
48+
],
49+
"settingsData": [],
50+
"expose": [
51+
{
52+
"contentKey": "02550b6d-6cf3-488c-8b2b-177cbad67399",
53+
"culture": null,
54+
"segment": null
55+
}
56+
],
57+
"Layout": {
58+
"Umbraco.BlockList": [
59+
{
60+
"contentKey": "02550b6d-6cf3-488c-8b2b-177cbad67399",
61+
"contentUdi": null,
62+
"settingsKey": null,
63+
"settingsUdi": null
64+
}
65+
]
66+
}
67+
}]]></Value>
68+
</presenters>
3869
<skillTags>
3970
<Value><![CDATA[]]></Value>
4071
</skillTags>

0 commit comments

Comments
 (0)