Skip to content

Commit 0d609f8

Browse files
committed
Newsletter updates
1 parent 2b95fbf commit 0d609f8

File tree

6 files changed

+142
-18
lines changed

6 files changed

+142
-18
lines changed
Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,75 @@
11
@model Core.Data.ThemeWidget
2+
@inject Core.Services.IDataService _db
3+
@{
4+
var keyHeader = $"{Model.Theme}-{Model.Widget.Title}-header";
5+
var keyThankyou = $"{Model.Theme}-{Model.Widget.Title}-thankyou";
26

7+
var txtHeader = _db.CustomFields.GetCustomValue(keyHeader);
8+
var txtThankyou = _db.CustomFields.GetCustomValue(keyThankyou);
9+
10+
if (string.IsNullOrEmpty(txtHeader)) { txtHeader = "<p>Like, really social. With 12 thousands followers and counting, the topics we cover and the ways readers can access our content are constantly growing.</p>"; }
11+
if (string.IsNullOrEmpty(txtThankyou)) { txtThankyou = "Thank you!"; }
12+
13+
var items = _db.Newsletters.All();
14+
}
315
<form method="post" action="~/widgets/api/newsletter/edit" asp-antiforgery="true">
416
<div class="form-group">
5-
<label class="form-group-label">Max records</label>
6-
<input type="text" id="txtMaxRecords" name="txtMaxRecords" class="form-control" value="" />
17+
<label class="form-group-label">Newsletter Header</label>
18+
<textarea id="txtHeader" name="txtHeader" cols="5" class="form-control">@txtHeader</textarea>
19+
</div>
20+
<div class="form-group">
21+
<label class="form-group-label">Thank you message</label>
22+
<textarea id="txtThankYou" name="txtThankYou" cols="5" class="form-control">@txtThankyou</textarea>
723
</div>
824
<div class="form-group">
925
<button type="submit" class="btn btn-primary btn-main">Save</button>
1026
</div>
1127
<input type="hidden" id="hdnWidget" name="hdnWidget" value="@Model.Widget.Title" />
1228
<input type="hidden" id="hdnTheme" name="hdnTheme" value="@Model.Theme" />
13-
</form>
29+
</form>
30+
31+
@if (items != null && items.Any())
32+
{
33+
<ul class="list-group">
34+
@foreach (var item in items)
35+
{
36+
<li class="list-group-item d-flex justify-content-between align-items-center">
37+
@item.Email
38+
<a class="btn btn-sm btn-light btn-danger" href="" onclick="removeEmail('@item.Email')">Remove</a>
39+
</li>
40+
}
41+
</ul>
42+
<nav aria-label="...">
43+
<ul class="pagination">
44+
<li class="page-item disabled">
45+
<span class="page-link">Previous</span>
46+
</li>
47+
<li class="page-item active">
48+
<span class="page-link">
49+
2
50+
<span class="sr-only">(current)</span>
51+
</span>
52+
</li>
53+
<li class="page-item">
54+
<a class="page-link" href="#">Next</a>
55+
</li>
56+
</ul>
57+
</nav>
58+
}
59+
60+
<script type="text/javascript">
61+
//<![CDATA[
62+
var removeEmail = function(email) {
63+
$.ajax({
64+
url: '/widgets/newsletter/unsubscribe',
65+
type: 'PUT',
66+
contentType: 'application/json',
67+
data: JSON.stringify(email),
68+
success: function (data) {
69+
//alert('done ' + data);
70+
//return false;
71+
}
72+
});
73+
}
74+
//]]>
75+
</script>

plugins/Common/Views/Widgets/Newsletter/Index.cshtml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,34 @@
1-
<form class="form-group">
1+
@Html.Raw(Model.Header)
2+
<form class="form-group">
23
<div id="newsletter-form">
34
<input id="txtSubscriberEmail" type="email" placeholder="someone@example.com">
45
<button type="button" onclick="return newsletter.subscribe()">Subscribe</button>
56
</div>
67
<div id="newsletter-msg" style="display: none">
7-
Thank you!
8-
</div>
8+
@Html.Raw(Model.ThankYou)
9+
</div>
910
</form>
1011

1112
<script type="text/javascript">
1213
//<![CDATA[
1314
var newsletter = function () {
1415
function subscribe() {
1516
var email = document.getElementById("txtSubscriberEmail");
17+
if (email.value.length === 0) {
18+
return false;
19+
}
1620
$.ajax({
17-
url: '/widgets/api/newsletter/subscribe',
21+
url: '/widgets/newsletter/subscribe',
1822
type: 'PUT',
1923
contentType: 'application/json',
2024
data: JSON.stringify(email.value),
2125
success: function (data) {
2226
var frm = document.getElementById("newsletter-form");
2327
var msg = document.getElementById("newsletter-msg");
2428
frm.style.display = "none";
25-
msg.innerHTML = data;
29+
if (data.length > 0) {
30+
msg.innerHTML = data;
31+
}
2632
msg.style.display = "";
2733
return false;
2834
}
@@ -37,8 +43,8 @@
3743
var keyCode = e.keyCode || e.which;
3844
if (keyCode == '13') {
3945
newsletter.subscribe();
46+
return false;
4047
}
41-
return false;
4248
}
4349
//]]>
4450
</script>

plugins/Common/Widgets/Newsletter.cs

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Core.Services;
22
using Microsoft.AspNetCore.Mvc;
3+
using System.Collections.Generic;
34

45
namespace Common.Widgets
56
{
@@ -15,11 +16,22 @@ public Newsletter(IDataService db)
1516

1617
public IViewComponentResult Invoke(string theme, string widget)
1718
{
18-
return View("~/Views/Widgets/Newsletter/Index.cshtml");
19+
var keyHeader = $"{theme}-{widget}-header";
20+
var keyThankyou = $"{theme}-{widget}-thankyou";
21+
22+
var header = _db.CustomFields.GetCustomValue(keyHeader);
23+
var thankyou = _db.CustomFields.GetCustomValue(keyThankyou);
24+
25+
if (string.IsNullOrEmpty(header)) { header = "<p>Like, really social. With 12 thousands followers and counting, the topics we cover and the ways readers can access our content are constantly growing.</p>"; }
26+
if (string.IsNullOrEmpty(thankyou)) { thankyou = "Thank you!"; }
27+
28+
var model = new NewsletterModel { Header = header, ThankYou = thankyou };
29+
30+
return View("~/Views/Widgets/Newsletter/Index.cshtml", model);
1931
}
2032
}
2133

22-
[Route("widgets/api/newsletter")]
34+
[Route("widgets/newsletter")]
2335
public class NewsletterController : Controller
2436
{
2537
IDataService _db;
@@ -33,14 +45,56 @@ public NewsletterController(IDataService db)
3345
[Route("subscribe")]
3446
public IActionResult Subscribe([FromBody]string email)
3547
{
36-
var existing = _db.Newsletters.Single(n => n.Email == email);
48+
if (!string.IsNullOrEmpty(email))
49+
{
50+
try
51+
{
52+
var existing = _db.Newsletters.Single(n => n.Email == email);
53+
if (existing == null)
54+
{
55+
_db.Newsletters.Add(new Core.Data.Newsletter { Email = email });
56+
_db.Complete();
57+
}
58+
}
59+
catch (System.Exception ex)
60+
{
61+
return Ok(ex.Message);
62+
}
63+
}
64+
return Ok();
65+
}
3766

38-
if(existing == null)
67+
[HttpPut]
68+
[Route("unsubscribe")]
69+
public IActionResult Unsubscribe([FromBody]string email)
70+
{
71+
var existing = _db.Newsletters.Single(n => n.Email == email);
72+
if (existing != null)
3973
{
40-
_db.Newsletters.Add(new Core.Data.Newsletter { Email = email });
74+
_db.Newsletters.Remove(existing);
4175
_db.Complete();
4276
}
43-
return Ok("Thank you!");
77+
return Ok();
4478
}
79+
80+
[HttpPost]
81+
[Route("edit")]
82+
public IActionResult Edit(string txtHeader, string txtThankYou, string hdnWidget, string hdnTheme)
83+
{
84+
var keyHeader = $"{hdnTheme}-{hdnWidget}-header";
85+
var keyThankyou = $"{hdnTheme}-{hdnWidget}-thankyou";
86+
87+
_db.CustomFields.SaveCustomValue(keyHeader, txtHeader);
88+
_db.CustomFields.SaveCustomValue(keyThankyou, txtThankYou);
89+
90+
return Redirect("~/admin/settings/themes");
91+
}
92+
}
93+
94+
public class NewsletterModel
95+
{
96+
public string Header { get; set; }
97+
public string ThankYou { get; set; }
98+
public List<Core.Data.Newsletter> Emails { get; set; }
4599
}
46100
}

src/App/Views/Themes/moments/List.cshtml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,7 @@
220220
<div class="widget-newsletter">
221221
<div class="container">
222222
<h3>Newsletter!</h3>
223-
<p>Like, really social. With 12 thousands followers and counting, the topics we cover and the
224-
ways readers can access our content are constantly growing.</p>
225-
@await Component.InvokeAsync("Newsletter", new { theme = "Moments", widget = "Newsletter" })
223+
@await Component.InvokeAsync("Newsletter", new { theme = "moments", widget = "Newsletter" })
226224
</div>
227225
</div>
228226
<partial name="~/Views/Themes/moments/_Shared/_Footer.cshtml" />

src/App/Views/Themes/moments/Moments.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,9 @@
66
{
77
"Widget": "PostList",
88
"Title": "Post List"
9+
},
10+
{
11+
"Widget": "Newsletter",
12+
"Title": "Newsletter"
913
}
1014
]

src/App/app.db

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)