diff --git a/app/controllers/admin/newsletter.js b/app/controllers/admin/newsletter.js index 63bff38..f84d0bf 100644 --- a/app/controllers/admin/newsletter.js +++ b/app/controllers/admin/newsletter.js @@ -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); diff --git a/app/services/newsletter.js b/app/services/newsletter.js index bafb8c7..cd66f97 100644 --- a/app/services/newsletter.js +++ b/app/services/newsletter.js @@ -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; diff --git a/app/views/admin/newsletter/index.pug b/app/views/admin/newsletter/index.pug index b1e93a8..4d9071e 100644 --- a/app/views/admin/newsletter/index.pug +++ b/app/views/admin/newsletter/index.pug @@ -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. \ No newline at end of file