const methods = require('./methods') const async = require('async') const helpers = require('./helpers') const pictSizeLimit = 1000000 // 1 MB module.exports = function (app) { // ======== APP ROUTES - PROJECT ==================== var lang = 'DE' app.get('/mailinglists', function (req, res) { async.waterfall([ function(done) { methods.getAllMailinglists(function(mailinglistOverview, err) { if (!err) { done(err, mailinglistOverview) } }) }, // create JSON object of mailinglists for front-end function(mailinglistOverview, done) { var allMailingLists = [] // JSON object for (let i = 0; i < mailinglistOverview.length; i++) { // add data to JSON object allMailingLists.push({ id: mailinglistOverview[i].id, name: mailinglistOverview[i].name, src: mailinglistOverview[i].src, projectstatus: mailinglistOverview[i].projectstatus, project_title: mailinglistOverview[i].project_title, keywords: mailinglistOverview[i].keywords }); } res.render(lang+'/project/mailinglists', { isUserAuthenticated: req.isAuthenticated(), user: req.user, mailinglists: allMailingLists }); } ]) }); app.get('/project_', function (req, res) { async.waterfall([ // get all projects from projectdb function(done) { methods.getAllProjects(function(projectsOverview, err) { if (!err) { done(err, projectsOverview) } }) }, // create JSON object for front-end function(projectsOverview, done) { var activeProjects = [] var nonActiveProjects = [] for (var i = 0; i < projectsOverview.length; i++) { var project = { id: projectsOverview[i].id, logo: projectsOverview[i].logo, akronym: projectsOverview[i].pname, title: projectsOverview[i].title, summary: projectsOverview[i].onelinesummary, category: projectsOverview[i].category, cp: projectsOverview[i].contact_email, gitlab: projectsOverview[i].gitlab } if (projectsOverview[i].projectstatus == 0) { nonActiveProjects.push(project) } else if (projectsOverview[i].projectstatus == 1) { activeProjects.push(project) } } // render the page if (req.isAuthenticated()) { res.render(lang+'/project/projects', { isUserAuthenticated: true, nonActive: nonActiveProjects, active: activeProjects }); } else { res.render(lang+'/project/projects', { isUserAuthenticated: false, nonActive: nonActiveProjects, active: activeProjects }); } } ]) }) app.get('/project', function (req, res) { res.render(lang+'/project/project-simplified', { isUserAuthenticated: req.isAuthenticated(), user: req.user }); }) app.get('/addprojectoverview', function (req, res) { if (req.isAuthenticated()) { res.render(lang+'/project/addProjectOverview') } else { res.redirect('/login') } }) app.post('/addprojectoverview__', function (req, res) { if (req.isAuthenticated()) { var wiki = 0 if (req.body.wiki) wiki = 1 var projectTerm = req.body.termForm + " - " + req.body.termTo var projectOverviewData = { pname: req.body.pname, title: req.body.title, onelinesummary: req.body.summary, category: req.body.category, logo: req.body.logo, gitlab: req.body.gitlabURL, wiki: wiki, overview: req.body.overview, question: req.body.question, approach: req.body.approach, result: req.body.result, keywords: req.body.keywords, announcement: req.body.announcement, term: projectTerm, further_details: req.body.furtherDetails, website: req.body.website, src: req.body.src, caption: req.body.caption, contact_lastname: req.body.contactName, contact_email: req.body.contactEmail, leader_lastname: req.body.leaderName, leader_email: req.body.leaderEmail } methods.addProjectOverview(projectOverviewData, function(err){ if (err) { //req.flash('error', "Failed") req.flash('error', "Fehlgeschlagen") res.redirect('/addProjectOverview'); } else { req.flash('success', 'Your project has been created.') res.redirect('/project'); } }) } }) app.post('/addprojectoverview', function (req, res) { if (req.isAuthenticated()) { var wiki = 0 if (req.body.wiki) wiki = 1 var projectLogo = req.files.logo var projectPicture = req.files.src var projectLogoPath, projectPicturePath if (projectLogo) { // raise error if size limit is exceeded if (projectLogo.size === pictSizeLimit) { req.flash('error', 'Projektlogo exceeds 1 MB'); res.redirect('/addprojectoverview'); } else { // TEST PATH FOR DEVELOPMENT (LOCALHOST) projectLogoPath = './folder-in-server-to-save-projektlogo/'+req.body.pname+'/'+projectLogo.name // PATH FOR TEST/LIVE SERVER // var projectLogoPath = to-be-defined } } if (projectPicture) { // raise error if size limit is exceeded if (projectPicture.size === pictSizeLimit) { req.flash('error', 'Projektbild exceeds 1 MB'); res.redirect('/addprojectoverview'); } else { // TEST PATH FOR DEVELOPMENT (LOCALHOST) projectPicturePath = './folder-in-server-to-save-projektbild/'+req.body.pname+'/'+projectPicture.name // PATH FOR TEST/LIVE SERVER // var projectPicturePath = to-be-defined } } var projectTerm = req.body.termForm + " - " + req.body.termTo var projectOverviewData = { pname: req.body.pname, title: req.body.title, onelinesummary: req.body.summary, category: req.body.category, logo: projectLogoPath, gitlab: req.body.gitlabURL, wiki: wiki, overview: req.body.overview, question: req.body.question, approach: req.body.approach, result: req.body.result, keywords: req.body.keywords, announcement: req.body.announcement, term: projectTerm, further_details: req.body.furtherDetails, website: req.body.website, src: projectPicturePath, caption: req.body.caption, contact_lastname: req.body.contactName, contact_email: req.body.contactEmail, leader_lastname: req.body.leaderName, leader_email: req.body.leaderEmail } // save pictures if (projectLogo) { projectLogo.mv(projectLogoPath, function(err) { if (err) { console.error(err) res.status(500).render(lang+'/500', { error: err }) } }); } if (projectPicture) { projectPicture.mv(projectPicturePath, function(err) { if (err) { console.error(err) res.status(500).render(lang+'/500', { error: err }) } }); } /* RS: Temporary solution while Project DB is still in early phase. When User DB and Project DB are integrated and quite stabil, this operation should be done in 1 transaction. */ var userId // todo: make this global variable? async.waterfall([ // get userId by email from userdb function(done) { methods.getUserIdByEmail(req.user.email, function(id, err) { if (!err) { userId = id done(err) } }) }, // add project overview function(done) { methods.addProjectOverview(projectOverviewData, function(data, err){ if (err) { res.status(500).render(lang+'/500', { error: err }) } else { done(err, data.insertId) } }) }, // assign the created overview to logged-in user function(projectOverviewId, done) { var userProjectRoleData = { project_id: projectOverviewId, user_id: userId, role_id: 3 // OVERVIEW_CREATOR } methods.addUserProjectRole(userProjectRoleData, function(userProjects, err) { if (err) { //req.flash('error', "Failed") req.flash('error', "Fehlgeschlagen") res.redirect('/addProjectOverview'); } else { req.flash('success', 'Your project has been created.') res.redirect('/project'); } }) } ]) } }) app.get('/updateprojectoverview', function (req, res) { // only their own project }) app.post('/updateprojectoverview', function (req, res) { // only their own project }) app.get('/projectoverview', function(req, res){ async.waterfall([ function(done) { methods.getProjectOverviewById(req.query.projectID, function(projectOverview, err) { if (!err) { done(err, projectOverview) } }) }, function(projectOverview,done){ methods.getProjectImagesById(req.query.projectID, function(projectImages, err) { if (!err) { done(err, projectImages, projectOverview) } }) }, // render projectOverview page function(projectImages, projectOverview, done) { console.log(projectImages); partnerWebsites = helpers.stringToArray(projectOverview[0].partner_website); partnerNames = helpers.stringToArray(projectOverview[0].partner_name); awardSites = helpers.stringToArray(projectOverview[0].award_website); awardNames = helpers.stringToArray(projectOverview[0].award_name); sponsorWebsites = helpers.stringToArray(projectOverview[0].sponsor_website); sponsorImgs = helpers.stringToArray(projectOverview[0].sponsor_img); sponsorNames = helpers.stringToArray(projectOverview[0].sponsor_name); res.render(lang+'/project/projectOverview', { isUserAuthenticated: req.isAuthenticated(), user: req.user, projectOV: projectOverview, projectImgs: projectImages, partnerWS: partnerWebsites, partnerN: partnerNames, awardWS: awardSites, awardN: awardNames, sponsorWS: sponsorWebsites, sponsorIMG: sponsorImgs, sponsorN: sponsorNames }); } ]) }) app.get('/videoconferences', function(req, res){ res.render(lang+'/project/videoconferences', { isUserAuthenticated: req.isAuthenticated(), user: req.user, }); }) app.get('/landingpage', function(req, res){ res.render(lang+'/project/landingpage', { isUserAuthenticated: req.isAuthenticated(), user: req.user, }); }) };