diff --git a/src/server/backend/plugins/others/newsletter/css/mailCompose.css b/src/server/backend/plugins/others/newsletter/css/mailCompose.css index e69de29..f516c5f 100644 --- a/src/server/backend/plugins/others/newsletter/css/mailCompose.css +++ b/src/server/backend/plugins/others/newsletter/css/mailCompose.css @@ -0,0 +1,74 @@ +body { + font-family: sans-serif; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + background-color: rgb(180, 191, 255); +} + +.material-symbols-outlined { + font-variation-settings: + 'FILL' 0, + 'wght' 400, + 'GRAD' 0, + 'opsz' 48 +} + +.mail-app { + width: 80%; + margin-left: 5%; + margin-top: 1%; + background-color: rgb(144, 160, 255); + border-radius: 50px; + padding: 5%; +} + +#toolbar, #editor { + background-color: white; +} + +#top-bar { + color: white; + background-color: rgb(0, 8, 53); + margin-bottom: 0; + grid-area: header; + height: 10vh; + display: flex; + width: 100%; + justify-content: center; + align-items: center; + flex-direction: row; +} + +#title { + font-size: 120%; +} + +#spacer { + width: 10%; +} + +.top-toolbar { + display: inline-flex; + flex-direction: row; + justify-content: center; + align-items: center; + margin-right: 10%; + gap: 10%; +} + +.top-buttons { + background-color: rgba(0, 0, 0, 0); + color: white; + border-radius: 5px; + border-color: white; + border-style: solid; + padding: 0.5%; + cursor: pointer; +} + +.top-buttons:hover { + color: blue; + border-color: blue; +} \ No newline at end of file diff --git a/src/server/backend/plugins/others/newsletter/html/compose.html b/src/server/backend/plugins/others/newsletter/html/compose.html index ad875e0..cccd620 100644 --- a/src/server/backend/plugins/others/newsletter/html/compose.html +++ b/src/server/backend/plugins/others/newsletter/html/compose.html @@ -4,7 +4,7 @@ New Mail :: Webmail | Language School Hossegor - Admin - + @@ -12,36 +12,14 @@
- arrow_back - arrow_back_ios_new + arrow_back
-

Webmail - Language School Hossegor

+

Newsletter plugin - libreevent

-

New message

-

All mails written here can get one of four different styles. Please choose your style in the dropdown below. You can preview them by clicking here

-

If you select "Newsletter", the mail will automatically be sent to everybody that subscribed to the newsletter with the correct styling. Note that you need to create a newsletter in German and English and send them separately

- - -
+

New newsletter

- - - -
- - -
-
@@ -104,77 +82,38 @@ \ No newline at end of file diff --git a/src/server/backend/plugins/others/newsletter/newsletterRoutes.js b/src/server/backend/plugins/others/newsletter/newsletterRoutes.js index 3740d63..8f4b7b3 100644 --- a/src/server/backend/plugins/others/newsletter/newsletterRoutes.js +++ b/src/server/backend/plugins/others/newsletter/newsletterRoutes.js @@ -8,11 +8,12 @@ */ const path = require( 'path' ); -const mm = require( '../../../mail/mailSender.js' ); -const sendMail = new mm(); +const mm = require( './sender.js' ); +const bodyParser = require( 'body-parser' ); -module.exports = ( app ) => { - app.get( '/admin/mail/compose', ( request, response ) => { +module.exports = ( app, settings ) => { + const sendMail = new mm( settings ); + app.get( '/admin/plugins/newsletter', ( request, response ) => { if ( request.session.loggedInAdmin ) { response.sendFile( path.join( __dirname + '/html/compose.html' ) ); } else { @@ -20,10 +21,14 @@ module.exports = ( app ) => { } } ); - app.post( '/admin/mail/send', ( request, response ) => { + app.get( '/admin/plugins/newsletter/css/:file', ( req, res ) => { + res.sendFile( path.join( __dirname + '/css/' + req.params.file ) ); + } ); + + app.post( '/admin/plugins/newsletter/send', bodyParser.json(), ( request, response ) => { if ( request.session.loggedInAdmin ) { response.send( 'ok' ); - sendMail.send( request.body.message, request.body.subject, request.body.mode, request.body.replyTo, request.body.receiver, request.body.lang ); + sendMail.send( request.body.message, request.body.subject ); } else { response.status( 403 ).send( 'unauthenticated' ); } @@ -34,7 +39,7 @@ module.exports = ( app ) => { } ); app.post( '/mail/unsubscribe/go', ( request, response ) => { - if ( request.body.mail == '' ) { + if ( !request.body.mail ) { response.sendFile( path.join( __dirname + '/html/unsubscribeError.html' ) ); } else { sendMail.unsubscribe( request.body.mail ); diff --git a/src/server/backend/plugins/others/newsletter/sender.js b/src/server/backend/plugins/others/newsletter/sender.js index e69de29..81c430a 100644 --- a/src/server/backend/plugins/others/newsletter/sender.js +++ b/src/server/backend/plugins/others/newsletter/sender.js @@ -0,0 +1,33 @@ +/* +* libreevent - sender.js +* +* Created by Janis Hutz 09/16/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +const mm = require( '../../../mail/mailSender.js' ); +const mailManager = new mm(); +const db = require( '../../../db/db.js' ); + + +class sendMail { + constructor( settings ) { + this.settings = settings; + } + + send ( message, subject ) { + db.getDataSimple( 'users', 'marketing', 'true' ).then( users => { + for ( let user in users ) { + mailManager.sendMail( users[ user ].email, message, subject, this.settings.mailSender ); + } + } ); + } + + unsubscribe ( mail ) { + db.writeDataSimple( 'users', 'email', mail, { 'marketing': false } ); + } +} + +module.exports = sendMail; \ No newline at end of file