1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
import mongoose from 'mongoose';
import moment from 'moment-timezone';
import icalGenerator from 'ical-generator';
import i18next from 'i18next';
import handlebars from 'handlebars';
import Log from "./models/Log.js";
import { getConfig } from "./lib/config.js";
import { IEvent } from "./models/Event.js";
const config = getConfig();
const domain = config.general.domain;
const siteName = config.general.site_name;
// LOGGING
export function addToLog(process: string, status: string, message: string) {
const logEntry = {
status,
process,
message,
timestamp: new Date(),
};
new Log(logEntry).save().catch(() => {
console.log("Error saving log entry!");
});
}
export function exportIcal(events: IEvent | IEvent[], calendarName?: string) { // Ical -> ICal
// Create a new icalGenerator... generator
const cal = icalGenerator({
name: calendarName || siteName,
timezone: 'UTC'
});
const eventArray = Array.isArray(events) ? events : [events];
eventArray.forEach(event => {
cal.createEvent({
start: moment.tz(event.start, event.timezone),
end: moment.tz(event.end, event.timezone),
timezone: event.timezone,
summary: event.name,
description: event.description,
organizer: {
name: event.hostName || "Anonymous",
email: event.creatorEmail || 'anonymous@anonymous.com',
},
location: event.location,
url: 'https://' + domain + '/' + event.id
});
});
return cal.toString();
}
interface I18nHelpers {
t: (key: string, options?: object) => string;
tn: (key: string, options?: object) => string;
count?: number;
}
export function getI18nHelpers(): I18nHelpers {
return {
t: function(key: string, options?: object) {
const translation = i18next.t(key, { ...this, ...options });
const template = handlebars.compile(translation);
return template(this);
},
tn: function(key: string, options?: object) {
const translation = i18next.t(key, { count: this.count, ...options });
const template = handlebars.compile(translation);
return template(this);
}
};
}
|