mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
+70
-54
@@ -1,89 +1,105 @@
|
||||
const CLOSING = `Regards,\nPhilproperties IT Team\n\nThis is an automated message from STARR System. Please do not reply.`;
|
||||
const FONT = 'font-family: Arial, sans-serif; font-size: 14px; color: #000;';
|
||||
|
||||
const build = (body) => `${body.trim()}\n\n${CLOSING}`;
|
||||
const wrap = (body) => `
|
||||
<html>
|
||||
<body style="${FONT} line-height: 1.6;">
|
||||
${body.trim()}
|
||||
<br><br>
|
||||
<p style="margin: 0;">Regards,<br>Philproperties IT Team</p>
|
||||
<p style="margin: 0; font-size: 12px; color: #555;">This is an automated message from STARR System. Please do not reply.</p>
|
||||
</body>
|
||||
</html>`.trim();
|
||||
|
||||
export const emailTemplates = {
|
||||
OTP: ({ otp, expiryMinutes = 10 }) => ({
|
||||
subject: "Email OTP Verification - STARR System",
|
||||
text: build(`
|
||||
Dear User,
|
||||
|
||||
Please use the One-Time Password (OTP) below to verify your email address. This code is valid for ${expiryMinutes} minutes.
|
||||
|
||||
${otp}
|
||||
|
||||
For security reasons, please do not share this code with anyone. If you did not request this, please contact the administrator.
|
||||
html: wrap(`
|
||||
<p>Dear User,</p>
|
||||
<p>Please use the One-Time Password (OTP) below to verify your email address. This code is valid for <strong>${expiryMinutes} minutes</strong>.</p>
|
||||
<p style="font-size: 28px; font-weight: bold; letter-spacing: 6px;">${otp}</p>
|
||||
<p>For security reasons, please do not share this code with anyone. If you did not request this, please contact the administrator.</p>
|
||||
`),
|
||||
}),
|
||||
|
||||
WELCOME: ({ name }) => ({
|
||||
subject: "Welcome to STARR System",
|
||||
text: build(`
|
||||
Dear ${name},
|
||||
|
||||
We are pleased to welcome you to the STARR System. Your account has been successfully created and is now ready for use.
|
||||
|
||||
You may now access your dashboard and begin using the available services.
|
||||
|
||||
We look forward to supporting you.
|
||||
html: wrap(`
|
||||
<p>Dear ${name},</p>
|
||||
<p>We are pleased to welcome you to the STARR System. Your account has been successfully created and is now ready for use.</p>
|
||||
<p>You may now access your dashboard and begin using the available services.</p>
|
||||
<p>We look forward to supporting you.</p>
|
||||
`),
|
||||
}),
|
||||
|
||||
PASSWORD_CHANGED: () => ({
|
||||
subject: "Password Update Confirmation - STARR System",
|
||||
text: build(`
|
||||
Dear User,
|
||||
|
||||
This is to confirm that your account password has been successfully changed.
|
||||
|
||||
If you did not perform this action, please reset your password immediately or contact support.
|
||||
|
||||
For your security, we recommend using a strong and unique password.
|
||||
html: wrap(`
|
||||
<p>Dear User,</p>
|
||||
<p>This is to confirm that your account password has been successfully changed.</p>
|
||||
<p>If you did not perform this action, please reset your password immediately or contact support.</p>
|
||||
<p>For your security, we recommend using a strong and unique password.</p>
|
||||
`),
|
||||
}),
|
||||
|
||||
ADDED_TO_GROUP: ({ groupName }) => ({
|
||||
subject: "Group Assignment Notification - STARR System",
|
||||
text: build(`
|
||||
Dear User,
|
||||
|
||||
You have been assigned to the group "${groupName}" in the STARR System.
|
||||
|
||||
This assignment grants you access to shared resources and collaboration tools within the group.
|
||||
|
||||
Please log in to your account to view group details.
|
||||
html: wrap(`
|
||||
<p>Dear User,</p>
|
||||
<p>You have been assigned to the group <strong>${groupName}</strong> in the STARR System.</p>
|
||||
<p>This assignment grants you access to shared resources and collaboration tools within the group.</p>
|
||||
<p>Please log in to your account to view group details.</p>
|
||||
`),
|
||||
}),
|
||||
|
||||
TASK_ASSIGNED: ({ taskTitle, dueDate }) => ({
|
||||
subject: "New Task Assignment - STARR System",
|
||||
text: build(`
|
||||
Dear User,
|
||||
html: wrap(`
|
||||
<p>Dear User,</p>
|
||||
<p>You have been assigned a new task in the STARR System.</p>
|
||||
<table style="${FONT}">
|
||||
<tr><td><strong>Task</strong></td><td>${taskTitle}</td></tr>
|
||||
<tr><td><strong>Due Date</strong></td><td>${dueDate}</td></tr>
|
||||
</table>
|
||||
<p>Kindly ensure completion within the specified timeframe.</p>
|
||||
`),
|
||||
}),
|
||||
|
||||
You have been assigned a new task in the STARR System.
|
||||
BAN_LIFTED: ({ name, email, date }) => ({
|
||||
subject: "Account Suspension Lifted - STARR System",
|
||||
html: wrap(`
|
||||
<p>Dear ${name},</p>
|
||||
<p>We are writing to inform you that the suspension on your account (<strong>${email}</strong>) has been lifted effective <strong>${date}</strong>.</p>
|
||||
<p>You may now log in and resume access to all services within the STARR System.</p>
|
||||
<p>If you have any concerns, please do not hesitate to contact your administrator.</p>
|
||||
`),
|
||||
}),
|
||||
|
||||
Task: ${taskTitle}
|
||||
Due Date: ${dueDate}
|
||||
|
||||
Kindly ensure completion within the specified timeframe.
|
||||
BANNED: ({ name, email, date, reason, ban_type }) => ({
|
||||
subject: "Account Suspension Notice - STARR System",
|
||||
html: wrap(`
|
||||
<p>Dear ${name},</p>
|
||||
<p>Your account (<strong>${email}</strong>) has been ${ban_type === 'permanent' ? 'permanently' : 'temporarily'} suspended from the STARR System effective <strong>${date}</strong>.</p>
|
||||
<table style="${FONT}">
|
||||
<tr><td><strong>Reason</strong></td><td>${reason}</td></tr>
|
||||
<tr><td><strong>Duration</strong></td><td>${ban_type === 'permanent' ? 'Permanent' : 'Temporary'}</td></tr>
|
||||
</table>
|
||||
<p>During this period, access to all system services has been revoked.${ban_type === 'permanent' ? '' : ' This suspension may be lifted upon review by the administrator.'}</p>
|
||||
<p>If you believe this was made in error, please contact your administrator.</p>
|
||||
`),
|
||||
}),
|
||||
|
||||
ADD_STAFF: ({ name, email, password, expiryHours = 24 }) => ({
|
||||
subject: "Your Staff Account Has Been Created - STARR System",
|
||||
text: build(`
|
||||
Dear ${name},
|
||||
|
||||
Your staff account has been successfully created in the STARR System. Below are your login credentials:
|
||||
|
||||
Email: ${email}
|
||||
Password: ${password}
|
||||
|
||||
This temporary password is valid for ${expiryHours} hours. You will be required to change it upon first login.
|
||||
|
||||
If you did not request this account or believe this was created in error, please contact your administrator immediately to have it deactivated.
|
||||
|
||||
For security, please do not share your credentials with anyone. If you need a new password, contact your administrator.
|
||||
html: wrap(`
|
||||
<p>Dear ${name},</p>
|
||||
<p>Your staff account has been successfully created in the STARR System. Below are your login credentials:</p>
|
||||
<table style="${FONT}">
|
||||
<tr><td><strong>Email</strong></td><td>${email}</td></tr>
|
||||
<tr><td><strong>Password</strong></td><td>${password}</td></tr>
|
||||
</table>
|
||||
<p>This temporary password is valid for <strong>${expiryHours} hours</strong>. You will be required to change it upon first login.</p>
|
||||
<p>If you did not request this account or believe this was created in error, please contact your administrator immediately to have it deactivated.</p>
|
||||
<p>For security, please do not share your credentials with anyone. If you need a new password, contact your administrator.</p>
|
||||
`),
|
||||
}),
|
||||
};
|
||||
|
||||
@@ -19,15 +19,18 @@
|
||||
* No other changes needed.
|
||||
*
|
||||
* Current types:
|
||||
* Admin : task_overdue
|
||||
* Admin : task_overdue, user_registration, nogrp_user_registered
|
||||
* User : user_task_overdue, achievement, course_unlocked,
|
||||
* course_completed, certificate_issued, task_reminder, announcement
|
||||
* course_completed, certificate_issued, task_reminder, announcement,
|
||||
* nogrp_welcome
|
||||
*
|
||||
* Author: Kenneth Obsequio (@lash0000)
|
||||
* Date Created: Jun. 19, 2026
|
||||
***********************************************************************************************************************************************************************/
|
||||
'use strict';
|
||||
|
||||
const { fmtDate } = require('../utils/datetime.util');
|
||||
|
||||
const NOTIFICATION_REGISTRY = {
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
@@ -64,6 +67,21 @@ const NOTIFICATION_REGISTRY = {
|
||||
},
|
||||
},
|
||||
|
||||
// ── Unaffiliated User Registration ───────────────────────────────────────
|
||||
nogrp_user_registered: {
|
||||
type: 'nogrp_user_registered',
|
||||
scope: 'admin',
|
||||
trigger: 'event',
|
||||
build({ userEmail, regType }) {
|
||||
return {
|
||||
type: 'nogrp_user_registered',
|
||||
title: 'New Unaffiliated User',
|
||||
message: `A new user (${userEmail}) registered via ${regType} without a group code and was placed in the default group.`,
|
||||
data: { userEmail, regType },
|
||||
};
|
||||
},
|
||||
},
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
// USER notifications (scope: 'user')
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
@@ -92,7 +110,7 @@ const NOTIFICATION_REGISTRY = {
|
||||
return {
|
||||
type: 'task',
|
||||
title: 'Task Deadline Approaching',
|
||||
message: `"${taskName}" is due on ${new Date(deadline).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })}.`,
|
||||
message: `"${taskName}" is due on ${fmtDate(deadline)}.`,
|
||||
data: { taskName, deadline },
|
||||
};
|
||||
},
|
||||
@@ -136,7 +154,7 @@ const NOTIFICATION_REGISTRY = {
|
||||
return {
|
||||
type: 'course',
|
||||
title: 'Course Completed',
|
||||
message: `Great job! You've completed "${courseTitle}". Your certificate is being prepared and will be ready in about 5 minutes.`,
|
||||
message: `Great job! You've completed "${courseTitle}". Your certificate will be issued within the next hour.`,
|
||||
data: { courseTitle },
|
||||
};
|
||||
},
|
||||
@@ -176,6 +194,21 @@ const NOTIFICATION_REGISTRY = {
|
||||
},
|
||||
},
|
||||
|
||||
// ── No-Group Welcome ──────────────────────────────────────────────────────
|
||||
nogrp_welcome: {
|
||||
type: 'announcement',
|
||||
scope: 'user',
|
||||
trigger: 'event',
|
||||
build() {
|
||||
return {
|
||||
type: 'announcement',
|
||||
title: "You're Not in a Group Yet",
|
||||
message: 'You are currently in the default group. Contact an administrator to be assigned to your team.',
|
||||
data: { groupCode: 'NOGRP' },
|
||||
};
|
||||
},
|
||||
},
|
||||
|
||||
// ── Assessment ────────────────────────────────────────────────────────────
|
||||
assessment_updated: {
|
||||
type: 'assessment',
|
||||
|
||||
Reference in New Issue
Block a user