forked from ITwrxOrg/Forget-Me-Not
fix nim compiler warnings and clearAllReminders() after updating sendDate
This commit is contained in:
parent
55def9973a
commit
7d2583b6f0
|
@ -3,7 +3,7 @@ This file is part of Simple Site Manager.
|
||||||
Simple Site Manager is released under the GNU Affero General Public License 3.0.
|
Simple Site Manager is released under the GNU Affero General Public License 3.0.
|
||||||
See COPYING or <https://www.gnu.org/licenses/> for details.]#
|
See COPYING or <https://www.gnu.org/licenses/> for details.]#
|
||||||
|
|
||||||
import std/[strutils, cgi, strtabs, cookies, sysrand, base64]
|
import std/[cgi, strtabs, cookies, sysrand, base64]
|
||||||
import guildenstern/[httpserver], sqliteral
|
import guildenstern/[httpserver], sqliteral
|
||||||
import "../models/session", "db", "global"
|
import "../models/session", "db", "global"
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import std/[times, osproc, strutils], smtp
|
import std/[times, osproc], smtp
|
||||||
import ../models/reminder, ../models/user, datetime
|
import ../models/reminder, ../models/user, datetime
|
||||||
|
|
||||||
proc setFutureSendDate(reminderId: int) =
|
proc setFutureSendDate(reminderId: int) =
|
||||||
|
@ -10,24 +10,33 @@ proc setFutureSendDate(reminderId: int) =
|
||||||
newSendDate = now() + 1.days
|
newSendDate = now() + 1.days
|
||||||
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
||||||
updateReminderSendDate(reminder)
|
updateReminderSendDate(reminder)
|
||||||
|
clearAllReminders()
|
||||||
of "week":
|
of "week":
|
||||||
newSendDate = nextWeekday(reminder.weeklyOn)
|
newSendDate = nextWeekday(reminder.weeklyOn)
|
||||||
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
||||||
updateReminderSendDate(reminder)
|
updateReminderSendDate(reminder)
|
||||||
|
clearAllReminders()
|
||||||
of "month":
|
of "month":
|
||||||
if reminder.monthlyOnDay > 0:
|
if reminder.monthlyOnDay > 0:
|
||||||
#create DateTime with current month and year and reminder.monthlyOnDay
|
#create DateTime with current month and year and reminder.monthlyOnDay
|
||||||
newSendDate = dateTime(year(now()), month(now()), reminder.monthlyOnDay)
|
newSendDate = dateTime(year(now()), month(now()), reminder.monthlyOnDay)
|
||||||
|
echo newSendDate
|
||||||
#add 1 month only if monthlyOnDay hasn't occured in current month yet.
|
#add 1 month only if monthlyOnDay hasn't occured in current month yet.
|
||||||
|
echo reminder.monthlyOnDay
|
||||||
|
echo monthDay(now())
|
||||||
if reminder.monthlyOnDay < monthDay(now()):
|
if reminder.monthlyOnDay < monthDay(now()):
|
||||||
newSendDate = newSendDate + 1.months
|
newSendDate = newSendDate + 1.months
|
||||||
|
echo newSendDate
|
||||||
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
||||||
|
echo reminder.sendDate
|
||||||
updateReminderSendDate(reminder)
|
updateReminderSendDate(reminder)
|
||||||
|
clearAllReminders()
|
||||||
else:
|
else:
|
||||||
#monthly on week number and weekday. e.g. "third thursday of every month".
|
#monthly on week number and weekday. e.g. "third thursday of every month".
|
||||||
newSendDate = nextMonthlyOnWeekdayOfWeek($reminder.monthlyOnWeekday, $reminder.monthlyOnWeek)
|
newSendDate = nextMonthlyOnWeekdayOfWeek($reminder.monthlyOnWeekday, $reminder.monthlyOnWeek)
|
||||||
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
||||||
updateReminderSendDate(reminder)
|
updateReminderSendDate(reminder)
|
||||||
|
clearAllReminders()
|
||||||
of "year":
|
of "year":
|
||||||
#yearly on month and day.
|
#yearly on month and day.
|
||||||
#string zeros (db artifacts) have a length of 1...
|
#string zeros (db artifacts) have a length of 1...
|
||||||
|
@ -35,14 +44,15 @@ proc setFutureSendDate(reminderId: int) =
|
||||||
newSendDate = nextYearlyDate(reminder.yearlyOnMonth, reminder.yearlyOnDay)
|
newSendDate = nextYearlyDate(reminder.yearlyOnMonth, reminder.yearlyOnDay)
|
||||||
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
||||||
updateReminderSendDate(reminder)
|
updateReminderSendDate(reminder)
|
||||||
|
clearAllReminders()
|
||||||
#yearly on weekday of week of month. e.g. third thursday of november of each year.
|
#yearly on weekday of week of month. e.g. third thursday of november of each year.
|
||||||
else:
|
else:
|
||||||
newSendDate = nextYearlyOnWeekdayOfWeekOfMonth($reminder.yearlyOnWeekday, $reminder.yearlyOnWeek, $reminder.yearlyOnMonth2)
|
newSendDate = nextYearlyOnWeekdayOfWeekOfMonth($reminder.yearlyOnWeekday, $reminder.yearlyOnWeek, $reminder.yearlyOnMonth2)
|
||||||
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
reminder.sendDate = $format(newSendDate, "yyyy-MM-dd")
|
||||||
updateReminderSendDate(reminder)
|
updateReminderSendDate(reminder)
|
||||||
|
clearAllReminders()
|
||||||
else:
|
else:
|
||||||
echo "Invalid value for reminder.repeatFreq in setFutureSendDate()"
|
echo "Invalid value for reminder.repeatFreq in setFutureSendDate()"
|
||||||
clearAllReminders()
|
|
||||||
|
|
||||||
proc sendEmail(reminderMsg: string) =
|
proc sendEmail(reminderMsg: string) =
|
||||||
let userEmailAddress = getEmailByUserId("1")
|
let userEmailAddress = getEmailByUserId("1")
|
||||||
|
|
|
@ -3,7 +3,8 @@ This file is part of Simple Site Manager.
|
||||||
Simple Site Manager is released under the GNU Affero General Public License 3.0.
|
Simple Site Manager is released under the GNU Affero General Public License 3.0.
|
||||||
See COPYING or <https://www.gnu.org/licenses/> for details.]#
|
See COPYING or <https://www.gnu.org/licenses/> for details.]#
|
||||||
|
|
||||||
import sqliteral, "../helpers/db", "../helpers/global.nim", sequtils
|
#import sqliteral, "../helpers/db", "../helpers/global.nim", sequtils, algorithm, times
|
||||||
|
import sqliteral, "../helpers/db", algorithm, times
|
||||||
|
|
||||||
type
|
type
|
||||||
Reminder* = object
|
Reminder* = object
|
||||||
|
@ -12,11 +13,24 @@ type
|
||||||
|
|
||||||
var allReminders: seq[Reminder]
|
var allReminders: seq[Reminder]
|
||||||
|
|
||||||
|
#proc myCmp(x, y: Reminder): int =
|
||||||
|
# cmp(x.sendDate, y.sendDate)
|
||||||
|
|
||||||
|
proc getReminderSendDatetime*(reminder: Reminder): DateTime =
|
||||||
|
let sendDateDTString = $reminder.sendDate & " " & $reminder.sendTimeHr & ":" & $reminder.sendTimeMin & ":" & $reminder.sendTimeAmPm
|
||||||
|
#single digits for minutes, as db send_time_min is integer and won't use "00", which results in runtime parse error.
|
||||||
|
let sendDateDT = parse(sendDateDTString, "yyyy-M-d h:m:tt")
|
||||||
|
return sendDateDT
|
||||||
|
|
||||||
|
proc myCmp(x, y: Reminder): int =
|
||||||
|
cmp(getReminderSendDatetime(x), getReminderSendDatetime(y))
|
||||||
|
|
||||||
proc getAllReminders*(): seq[Reminder] =
|
proc getAllReminders*(): seq[Reminder] =
|
||||||
{.gcsafe.}:
|
{.gcsafe.}:
|
||||||
if allReminders.len == 0:
|
if allReminders.len == 0:
|
||||||
for row in db1.rows(SelectAllReminders):
|
for row in db1.rows(SelectAllReminders):
|
||||||
allReminders.add(Reminder(id: row.getInt(0), title: row.getString(1), message: row.getString(2), notifyVia: row.getString(3), repeats: row.getInt(4), repeatFreq: row.getString(5), weeklyOn: row.getString(6), monthlyOnDay: row.getInt(7), monthlyOnWeekday: row.getString(8), monthlyOnWeek: row.getString(9), yearlyOnMonth: row.getString(10), yearlyOnDay: row.getInt(11), yearlyOnWeek: row.getString(12), yearlyOnWeekday: row.getString(13), yearlyOnMonth2: row.getString(14), sendDate: row.getString(15), sendTimeHr: row.getInt(16), sendTimeMin: row.getInt(17), sendTimeAmPm: row.getString(18)))
|
allReminders.add(Reminder(id: row.getInt(0), title: row.getString(1), message: row.getString(2), notifyVia: row.getString(3), repeats: row.getInt(4), repeatFreq: row.getString(5), weeklyOn: row.getString(6), monthlyOnDay: row.getInt(7), monthlyOnWeekday: row.getString(8), monthlyOnWeek: row.getString(9), yearlyOnMonth: row.getString(10), yearlyOnDay: row.getInt(11), yearlyOnWeek: row.getString(12), yearlyOnWeekday: row.getString(13), yearlyOnMonth2: row.getString(14), sendDate: row.getString(15), sendTimeHr: row.getInt(16), sendTimeMin: row.getInt(17), sendTimeAmPm: row.getString(18)))
|
||||||
|
allReminders.sort(myCmp)
|
||||||
return allReminders
|
return allReminders
|
||||||
|
|
||||||
proc clearAllReminders*() =
|
proc clearAllReminders*() =
|
||||||
|
|
|
@ -3,8 +3,8 @@ This file is part of Simple Site Manager.
|
||||||
Simple Site Manager is released under the GNU Affero General Public License 3.0.
|
Simple Site Manager is released under the GNU Affero General Public License 3.0.
|
||||||
See COPYING or <https://www.gnu.org/licenses/> for details.]#
|
See COPYING or <https://www.gnu.org/licenses/> for details.]#
|
||||||
|
|
||||||
import guildenstern/httpserver, jsony
|
import guildenstern/httpserver
|
||||||
import "../helpers/form", "../helpers/global", "../helpers/validation", "../helpers/auth"
|
import "../helpers/form", "../helpers/global", "../helpers/validation"
|
||||||
import "../models/reminder"
|
import "../models/reminder"
|
||||||
|
|
||||||
proc reminderCreatePostHandler*() =
|
proc reminderCreatePostHandler*() =
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#? stdtmpl(subsChar = '$', metaChar = '#')
|
#? stdtmpl(subsChar = '$', metaChar = '#')
|
||||||
#import "../helpers/global", "../models/reminder", "../helpers/auth"
|
#import "../helpers/global", "../models/reminder"
|
||||||
#proc mainTemplateTop*(title, csrfToken: string): string =
|
#proc mainTemplateTop*(title, csrfToken: string): string =
|
||||||
#let sections = getAllReminders()
|
#let sections = getAllReminders()
|
||||||
# result = ""
|
# result = ""
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#? stdtmpl(subsChar = '$', metaChar = '#')
|
#? stdtmpl(subsChar = '$', metaChar = '#')
|
||||||
#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder"
|
#import "../helpers/global", "../helpers/form"
|
||||||
#import "main_template_top.nimf", "main_template_bottom.nimf"
|
#import "main_template_top.nimf", "main_template_bottom.nimf"
|
||||||
#proc reminderCreateTemplate*(csrfToken: string, fr: FormResult): string =
|
#proc reminderCreateTemplate*(csrfToken: string, fr: FormResult): string =
|
||||||
#let pageTitle = "Create a Reminder"
|
#let pageTitle = "Create a Reminder"
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<form id="reminder-create" method="POST" action="${APP_URL}/reminder/create" accept-charset="utf-8">
|
<form id="reminder-create" method="POST" action="${APP_URL}/reminder/create" accept-charset="utf-8">
|
||||||
<input type="hidden" name="csrf_token" value="${csrfToken}" form="reminder-create"/>
|
<input type="hidden" name="csrf_token" value="${csrfToken}" form="reminder-create"/>
|
||||||
<label>${fErrorMsg(fr, "title")}
|
<label>${fErrorMsg(fr, "title")}
|
||||||
<span class="text-2xl text-red-500">*</span><span class="help-text" title="This will be used to generate your reminder's url and meta-title and is very important for SEO, so it should ideally start with your main search target phrase for this reminder, and not have more than one search target phrase, nor be any longer than necessary.">Title</span>:
|
<span class="text-2xl text-red-500">*</span><span class="help-text" title="This is just used as a short way to reference the Reminder in the Upcoming Reminders page.">Title</span>:
|
||||||
<input type="text" id="title" name="title" value="${fOldInput(fr, "title")}" form="reminder-create" class="w-2/5" required>
|
<input type="text" id="title" name="title" value="${fOldInput(fr, "title")}" form="reminder-create" class="w-2/5" required>
|
||||||
</label>
|
</label>
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#? stdtmpl(subsChar = '$', metaChar = '#')
|
#? stdtmpl(subsChar = '$', metaChar = '#')
|
||||||
#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder"
|
#import "../helpers/global", "../helpers/form", "../models/reminder"
|
||||||
#import "main_template_top.nimf", "main_template_bottom.nimf"
|
#import "main_template_top.nimf", "main_template_bottom.nimf"
|
||||||
#proc reminderUpdateTemplate*(reminderId:int, csrfToken: string, fr: FormResult): string =
|
#proc reminderUpdateTemplate*(reminderId:int, csrfToken: string, fr: FormResult): string =
|
||||||
#let reminder = getReminderById(reminderId)
|
#let reminder = getReminderById(reminderId)
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
<input type="hidden" name="csrf_token" value="${csrfToken}" form="reminder-update"/>
|
<input type="hidden" name="csrf_token" value="${csrfToken}" form="reminder-update"/>
|
||||||
<input type="hidden" name="reminder_id" value="${reminder.id}">
|
<input type="hidden" name="reminder_id" value="${reminder.id}">
|
||||||
<label>${fErrorMsg(fr, "title")}
|
<label>${fErrorMsg(fr, "title")}
|
||||||
<span class="text-2xl text-red-500">*</span><span class="help-text" title="This will be used to generate your section's url and meta-title and is very important for SEO, so it should ideally start with your main search target phrase for this section, and not have more than one search target phrase, nor be any longer than necessary.">Title</span>:
|
<span class="text-2xl text-red-500">*</span><span class="help-text" title="This is just used as a short way to reference the Reminder in the Upcoming Reminders page.">Title</span>:
|
||||||
<input type="text" name="title" value="${fOldInput(fr, "title", reminder.title)}" form="reminder-update" class="w-2/5" required>
|
<input type="text" name="title" value="${fOldInput(fr, "title", reminder.title)}" form="reminder-update" class="w-2/5" required>
|
||||||
</label>
|
</label>
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#? stdtmpl(subsChar = '$', metaChar = '#')
|
#? stdtmpl(subsChar = '$', metaChar = '#')
|
||||||
#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder"
|
#import "../helpers/form", "../models/reminder", std/times
|
||||||
#import "main_template_top.nimf", "main_template_bottom.nimf"
|
#import "main_template_top.nimf", "main_template_bottom.nimf"
|
||||||
#proc remindersTemplate*(allReminders: seq[Reminder], csrfToken: string, fr: FormResult): string =
|
#proc remindersTemplate*(allReminders: seq[Reminder], csrfToken: string, fr: FormResult): string =
|
||||||
# result = ""
|
# result = ""
|
||||||
|
@ -8,11 +8,11 @@
|
||||||
<span class="text-2xl">Upcoming Reminders</span><a href="/create-reminder" class="a-btn-grn ml-8">+ New Reminder</a>
|
<span class="text-2xl">Upcoming Reminders</span><a href="/create-reminder" class="a-btn-grn ml-8">+ New Reminder</a>
|
||||||
</div>
|
</div>
|
||||||
#if allReminders.len > 0:
|
#if allReminders.len > 0:
|
||||||
<div class="mt-8 flex flex-row p-2 border-b border-indigo-400">
|
<div class="mt-8 flex flex-row p-2 border-b border-indigo-400 text-lg">
|
||||||
<div class="basis-2/4"><span class="text-xl">Title</span></div>
|
<div class="basis-2/4"><span>Title</span></div>
|
||||||
<div class="basis-1/12"><span class="text-xl">Repeats?</span></div>
|
<div class="basis-1/12"><span>Repeats?</span></div>
|
||||||
<div class="basis-1/4"><span class="text-xl">Next Send Date</span></div>
|
<div class="basis-1/4"><span>Next Send Date & Time</span></div>
|
||||||
<div class="basis-1/4"><span class="text-xl">Actions</span></div>
|
<div class="basis-1/4"><span>Actions</span></div>
|
||||||
</div>
|
</div>
|
||||||
#else:
|
#else:
|
||||||
<br><br><h2 class="text-lg text-orange-400">You don't have any Reminders yet.</h2>
|
<br><br><h2 class="text-lg text-orange-400">You don't have any Reminders yet.</h2>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
Yes
|
Yes
|
||||||
#end if
|
#end if
|
||||||
</span></div>
|
</span></div>
|
||||||
<div class="basis-1/4"><span class="text-lg">${reminder.sendDate}</span></div>
|
<div class="basis-1/4"><span class="text-lg">${$format(getReminderSendDatetime(reminder), "MM-dd-yyyy h:mm:tt")}</span></div>
|
||||||
<div class="basis-1/4">
|
<div class="basis-1/4">
|
||||||
<span><a href="/reminder/${reminder.id}/update" class="a-btn-grn">View/Edit</a></span>
|
<span><a href="/reminder/${reminder.id}/update" class="a-btn-grn">View/Edit</a></span>
|
||||||
<form method="POST" action="/reminder/delete" accept-charset="utf-8" class="inline">
|
<form method="POST" action="/reminder/delete" accept-charset="utf-8" class="inline">
|
||||||
|
|
Loading…
Reference in New Issue