newsletter management

master
rob 3 years ago
parent a799781972
commit e398e47339

@ -25,8 +25,10 @@ class NewsletterController extends SiteController {
router.param('newsletterId', this.populateNewsletterId.bind(this));
router.get('/compose', this.getComposer.bind(this));
router.post('/:newsletterId', this.postUpdateNewsletter.bind(this));
router.post('/', this.postCreateNewsletter.bind(this));
router.get('/compose', this.getComposer.bind(this));
router.get('/:newsletterId', this.getComposer.bind(this));
router.get('/', this.getIndex.bind(this));
@ -45,6 +47,28 @@ class NewsletterController extends SiteController {
}
}
async postUpdateNewsletter (req, res, next) {
const { newsletter: newsletterService } = this.dtp.services;
try {
await newsletterService.update(res.locals.newsletter, req.body);
res.redirect('/admin/newsletter');
} catch (error) {
this.log.error('failed to update newsletter', { newletterId: res.locals.newsletter._id, error });
return next(error);
}
}
async postCreateNewsletter (req, res, next) {
const { newsletter: newsletterService } = this.dtp.services;
try {
const newsletter = await newsletterService.create(req.user, req.body);
res.redirect(`/admin/newsletter/${newsletter._id}`);
} catch (error) {
this.log.error('failed to update newsletter', { error });
return next(error);
}
}
async getComposer (req, res) {
res.render('admin/newsletter/editor');
}
@ -53,7 +77,7 @@ class NewsletterController extends SiteController {
const { newsletter: newsletterService } = this.dtp.services;
try {
res.locals.pagination = this.getPaginationParameters(req, 20);
res.locals.newsletters = await newsletterService.getNewsletters(res.locals.pagination);
res.locals.newsletters = await newsletterService.getNewsletters(res.locals.pagination, ['draft', 'published']);
res.render('admin/newsletter/index');
} catch (error) {
return next(error);

@ -34,8 +34,9 @@ class NewsletterService extends SiteService {
newsletter.author = author._id;
newsletter.title = striptags(newsletterDefinition.title.trim());
newsletter.summary = striptags(newsletterDefinition.summary.trim());
newsletter.content = newsletterDefinition.content.trim();
newsletter.status = striptags(newsletterDefinition.status.trim().toLowerCase());
newsletter.content.html = newsletterDefinition['content.html'].trim();
newsletter.content.text = striptags(newsletterDefinition['content.text'].trim());
newsletter.status = 'draft';
await newsletter.save();
@ -51,8 +52,11 @@ class NewsletterService extends SiteService {
if (newsletterDefinition.summary) {
updateOp.$set.summary = striptags(newsletterDefinition.summary.trim());
}
if (newsletterDefinition.content) {
updateOp.$set.content = newsletterDefinition.title.trim();
if (newsletterDefinition['content.html']) {
updateOp.$set['content.html'] = newsletterDefinition['content.html'].trim();
}
if (newsletterDefinition['content.text']) {
updateOp.$set['content.text'] = striptags(newsletterDefinition['content.text'].trim());
}
if (newsletterDefinition.status) {
updateOp.$set.status = striptags(newsletterDefinition.status.trim());
@ -85,7 +89,7 @@ class NewsletterService extends SiteService {
async getById (newsletterId) {
const newsletter = await Newsletter
.findById(newsletterId)
.select('+content')
.select('+content.html +content.text')
.populate(this.populateNewsletter)
.lean();
return newsletter;

@ -4,18 +4,29 @@ block content
.uk-margin
div(uk-grid)
.uk-width-expand
h1 Newsletters
h1.uk-text-truncate Newsletters
.uk-width-auto
a(href="/admin/newsletter/compose").uk-button.dtp-button-primary
span
i.fas.fa-plus
span.uk-margin-small-left New Newsletter
span(class="uk-visible@m").uk-margin-small-left New Newsletter
.uk-margin
if (Array.isArray(newsletters) && (newsletters.length > 0))
ul.uk-list
each newsletter in newsletters
li
a(href=`/admin/newsletter/${newsletter._id}`)= newsletter.title
div(uk-grid).uk-grid-small.uk-flex-middle
.uk-width-expand
a(href=`/admin/newsletter/${newsletter._id}`).uk-display-block.uk-text-large.uk-text-truncate= newsletter.title
.uk-width-auto
button(type="button").uk-button.dtp-button-default
span
i.fas.fa-trash
span(class="uk-visible@m").uk-margin-small-left Delete
button(type="button").uk-button.dtp-button-default
span
i.fas.fa-paper-plane
span(class="uk-visible@m").uk-margin-small-left Send
else
div There are no newsletters at this time.
Loading…
Cancel
Save