summaryrefslogtreecommitdiff
path: root/src/helpers.ts
blob: 55909122264f02f5d3c458cd511b146d7c25dea8 (plain)
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);
    }
  };
}