Install Docker and Docker Compose.
Run the following to build the development image:
./docker-compose-prod.sh build
And run it with:
./docker-compose-prod.sh up
This container has the singularIT directory mounted as a volume, so you don't have
to rebuild the container on every change. It will also automatically reload
when files have changed using nodemon.
Build the image with:
docker-compose build
And run it (detached) with
docker-compose up -d
This framework was started by Arian van Putten, extended and improved upon by Dennis Collaris. It however does not show up as a fork due to the need temporarily have the repository private.
Configuration files are not included in this repository. You will need to add a file named config.json to the root folder with the following structure:
{ "mongodb": { // When using the provided docker-compose file, this is fine. Otherwise change address. Port is optional // You can optionally set username and pass using URI: mongodb://user:password@localhost/SNiC "url": "mongodb://mongodb/SNiC" }, "mailchimp": { "id": "id of the list can be found on the page of defaults of the list. Lists > DisruptIT > Settings > List name and campaign defaults > ListID on page (don't take form URL", "key": "Generate this yourself at your account page" }, "mailgun":{ "domain": "Domain you provided or the sandbox url", "api_key": "Mention on the information page of the domain" }, "email": { // Not unified because this allows for easier use when implementing mailchimp "auth": { "user": "default SMTP login on the domain page", "pass": "default password on the domain page" } }, "session": { // Session secret. Should be better when running in production. "secret": "abc123" }, // Used to create the very first ticket. "starthelper": { "active": false, "url": "url" }, // List of associations that take part. // List used to create the dropdown options when registering, therefore partner // bus indicates whether or not that association gets a bus "associations": [ { "name": "Cover", "bus": true }, { "name": "A-eskwadraat", "bus": true }, { "name": "CognAC", "bus": true }, { "name": "De Leidsche Flesch", "bus": true }, { "name": "GEWIS", "bus": true }, { "name": "Inter-Actief", "bus": true }, { "name": "Sticky", "bus": true }, { "name": "Thalia", "bus": true }, { "name": "via", "bus": true }, { "name": "Partner", "bus": false } ], "studyProgrammes": [ "BSc Computer Science", "BSc Artificial Intelligence", "BSc Information Sciences", "BSc Mathematics" ], "ticketSaleStarts": "2015-08-01T00:00:00.001Z", // From when to register "providePreferences": false, // If people can signup for sessions. "hideMenu": false, // Not used in disruptIT // Used for matching // Choices are automatically generated based on order of this list. // Works although the order is not guaranteed by JSON standard. "matchingterms": [ "Programmer", "Code witcher" ] }
The speaker.json is used to generate the speaker page and for the enrollment tool. It is is structered in the following way
{ // list of ids of speakers per session. Used to generate the speakers page "speakerids": { "session1": ["ses1.1", "ses1.2"], // for parallel sessions "closing": "closing" // for single sessions }, // List of all data needed to display a session "speakers": [ { "name" : "Name of speaker", "id": "closing", // ID listed in speakerids "limit": 9001 // Limit of a session, used for enroll tool. Can be set to null (or left out) to ignore "company" : "", // if you want to mention the company in the session piece "image": "/link/to/speaker.jpg", // preferably the speakre "subject": "Subject of the talk", "talk" : [ "list of various paragraphs", "that can be used to describe the session" ], "bio": [ "list of various paragraphs", "to give some background on the speakers" ], "hidden": false // whether or not you want to display this speaker } ... ], "presenters": [ // list of the same type of object as speakers ] }
The timetable.json is used to create the timetable and is used in both the website and the app.
{ "date":"2019-11-26T", "startTime": "10:00:00.000Z", "endTime": "17:15:00.000Z", "timeInterval": 15, "tracks": [ { "name": "track 1", "location": "first location", "talks": [ { "startTime": "12:00:00.001Z", "endTime": "14:00:00.001Z", "capacity": 5, "enabled": true, "title": "Talk 1", "subTitle": "First talk" }, { "startTime": "15:00:00.001Z", "endTime": "16:00:00.001Z", "capacity": 20, "enabled": true, "location": "Override location 1", "title": "Talk 2", "subTitle": "Second talk" } ] }, { "name": "track 2", "location": "second location", "talks": [ { "startTime": "11:00:00.001Z", "endTime": "14:00:00.001Z", "capacity": 35, "enabled": true, "title": "Talk 1.1", "subTitle": "First talk of second track" }, { "startTime": "14:00:00.001Z", "endTime": "16:00:00.001Z", "capacity": 25, "enabled": true, "title": "Talk 2.1", "subTitle": "Second talk of second track" } ] }, { "name": "track 3", "location": "third location", "talks": [ { "startTime": "11:00:00.001Z", "endTime": "12:00:00.001Z", "capacity": 9, "enabled": true, "location": "Room 3", "title": "Talk 1.2", "subTitle": "First talk of third track" }, { "startTime": "12:00:00.001Z", "endTime": "13:00:00.001Z", "capacity": 45, "enabled": true, "location": "Override location 3", "title": "Talk 2.2", "subTitle": "Second talk of third track" } ] } ] }
After editing or replacing the .json files, run /reload to reload all of them. If you only changed 1 of the files, use /reload/filename, E.G /reload/timetable or /reload/speakers.
The easiest way is to log in to mongo-express and change the boolean of a user to true
To generate tickets run node generate-tickets.js <number-of-tickets>'. To produce tickets non-default types, run `node generate-tickets.js partner', where partner is the type of the ticket.