Commit e0199f9d authored by Wolfgang Knopki's avatar Wolfgang Knopki
Browse files

Merge branch 'prepare_prdoucton' into 'master'

Prepare prdoucton

See merge request !31
parents 62880f10 fc41f1cd
Pipeline #688 passed with stage
in 11 seconds
...@@ -9,4 +9,16 @@ pages-devel: ...@@ -9,4 +9,16 @@ pages-devel:
- testing - testing
only: only:
- testing - testing
- test_logoutbutton - test_logoutbutton
\ No newline at end of file
pages-devel:
stage: deploy
script:
- npm install
- "pm2 delete --silent account || :"
- pm2 start ./app.js --name=account
- pm2 save
tags:
- production
only:
- master
\ No newline at end of file
...@@ -8,6 +8,8 @@ const bodyParser = require('body-parser'); ...@@ -8,6 +8,8 @@ const bodyParser = require('body-parser');
const session = require('express-session'); const session = require('express-session');
const errorhandler = require('errorhandler'); const errorhandler = require('errorhandler');
const flash = require('express-flash'); const flash = require('express-flash');
const fileUpload = require('express-fileupload');
const i18n = require('i18n'); // internationalization const i18n = require('i18n'); // internationalization
i18n.configure({ i18n.configure({
locales:['de', 'en'], locales:['de', 'en'],
...@@ -22,12 +24,20 @@ var app = express(); ...@@ -22,12 +24,20 @@ var app = express();
app.set('port', config.app.port); app.set('port', config.app.port);
app.set('views', __dirname + '/views'); app.set('views', __dirname + '/views');
app.set('view engine', 'pug'); app.set('view engine', 'pug');
// enable files upload
app.use(fileUpload({
createParentPath: true,
limits: {
fileSize: 1000000 // 1 MB max. file size
}
}));
app.use(morgan('combined')); app.use(morgan('combined'));
app.use(cookieParser()); app.use(cookieParser());
app.use(bodyParser.json()); app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false})); app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public')));
app.use(i18n.init); app.use(i18n.init);
app.use((req, res, next) => { app.use((req, res, next) => {
res.setLocale('de'); res.setLocale('de');
......
...@@ -8,11 +8,11 @@ module.exports = { ...@@ -8,11 +8,11 @@ module.exports = {
strategy: 'saml', strategy: 'saml',
saml: { saml: {
path: process.env.SAML_PATH || '/saml/SSO', path: process.env.SAML_PATH || '/saml/SSO',
entryPoint: process.env.SAML_ENTRY_POINT || 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SSOService.php', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php',
//issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata //issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata
issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', //testing metadata //issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', //testing metadata
//issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata
logoutUrl: 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php'
} }
}, },
database: { database: {
...@@ -21,7 +21,8 @@ module.exports = { ...@@ -21,7 +21,8 @@ module.exports = {
password: 'Stuttgart2019', // DB password password: 'Stuttgart2019', // DB password
port: 3306, // MySQL port port: 3306, // MySQL port
dbUser: 'userdb', // User DB dbUser: 'userdb', // User DB
host_project: 'm4lab.hft-stuttgart.de', // DB host project db host_project: 'transfer.hft-stuttgart.de', // DB host project db
//host_project: 'localhost', // local
dbProject: 'projectDB' // Project DB dbProject: 'projectDB' // Project DB
}, },
mailer: { mailer: {
......
...@@ -196,6 +196,14 @@ ...@@ -196,6 +196,14 @@
"fill-range": "^7.0.1" "fill-range": "^7.0.1"
} }
}, },
"busboy": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz",
"integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==",
"requires": {
"dicer": "0.3.0"
}
},
"bytes": { "bytes": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
...@@ -432,6 +440,14 @@ ...@@ -432,6 +440,14 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
}, },
"dicer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz",
"integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==",
"requires": {
"streamsearch": "0.1.2"
}
},
"doctypes": { "doctypes": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
...@@ -579,6 +595,14 @@ ...@@ -579,6 +595,14 @@
} }
} }
}, },
"express-fileupload": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.1.6.tgz",
"integrity": "sha512-w24zPWT8DkoIxSVkbxYPo9hkTiLpCQQzNsLRTCnecBhfbYv+IkIC5uLw2MIUAxBZ+7UMmXPjGxlhzUXo4RcbZw==",
"requires": {
"busboy": "^0.3.1"
}
},
"express-flash": { "express-flash": {
"version": "0.0.2", "version": "0.0.2",
"resolved": "https://registry.npmjs.org/express-flash/-/express-flash-0.0.2.tgz", "resolved": "https://registry.npmjs.org/express-flash/-/express-flash-0.0.2.tgz",
...@@ -1759,6 +1783,11 @@ ...@@ -1759,6 +1783,11 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}, },
"streamsearch": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
},
"string-width": { "string-width": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
......
...@@ -8,7 +8,7 @@ $('#inputEmail').change(function(){ ...@@ -8,7 +8,7 @@ $('#inputEmail').change(function(){
$('#emailWarning').empty() $('#emailWarning').empty()
isEmailValid = data isEmailValid = data
if(!isEmailValid) { if(!isEmailValid) {
$('#emailWarning').html('M4_LAB account with this email address is already exist.') $('#emailWarning').html('Mit dieser E-Mail-Adresse existiert bereits ein Benutzerkonto in unserem Transferportal.')
} }
switchSubmitButton() switchSubmitButton()
}) })
......
...@@ -58,7 +58,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -58,7 +58,7 @@ module.exports = function (app, config, passport, i18n) {
app.post(config.passport.saml.path, app.post(config.passport.saml.path,
passport.authenticate(config.passport.strategy, passport.authenticate(config.passport.strategy,
{ {
failureRedirect: '/', failureRedirect: '/account/',
failureFlash: true failureFlash: true
}), }),
function (req, res) { function (req, res) {
...@@ -67,7 +67,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -67,7 +67,7 @@ module.exports = function (app, config, passport, i18n) {
); );
// to generate Service Provider's XML metadata // to generate Service Provider's XML metadata
app.get('/saml/metadata', app.get('/saml/metadata',
function(req, res) { function(req, res) {
res.type('application/xml'); res.type('application/xml');
var spMetadata = samlStrategy.generateServiceProviderMetadata(fs.readFileSync(__dirname + '/cert/cert.pem', 'utf8')); var spMetadata = samlStrategy.generateServiceProviderMetadata(fs.readFileSync(__dirname + '/cert/cert.pem', 'utf8'));
...@@ -104,8 +104,8 @@ module.exports = function (app, config, passport, i18n) { ...@@ -104,8 +104,8 @@ module.exports = function (app, config, passport, i18n) {
} }
}) })
} else { } else {
res.redirect('/account/login'); // localhost res.redirect('/login'); // localhost
} }
}); });
app.get('/login', app.get('/login',
...@@ -118,14 +118,14 @@ module.exports = function (app, config, passport, i18n) { ...@@ -118,14 +118,14 @@ module.exports = function (app, config, passport, i18n) {
app.get('/logout', function (req, res) { app.get('/logout', function (req, res) {
if (req.user == null) { if (req.user == null) {
return res.redirect('/account/'); return res.redirect('/');
} }
req.user.nameID = req.user.id; req.user.nameID = req.user.id;
req.user.nameIDFormat = req.user.idFormat; req.user.nameIDFormat = req.user.idFormat;
return samlStrategy.logout(req, function(err, uri) { return samlStrategy.logout(req, function(err, uri) {
req.logout(); req.logout();
if ( req.session ) { if ( req.session ) {
req.session.destroy((err) => { req.session.destroy((err) => {
if(err) { if(err) {
...@@ -133,7 +133,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -133,7 +133,7 @@ module.exports = function (app, config, passport, i18n) {
} }
}); });
} }
return res.redirect(uri); return res.redirect(uri);
}); });
}); });
...@@ -149,7 +149,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -149,7 +149,7 @@ module.exports = function (app, config, passport, i18n) {
} }
}) })
} else { } else {
res.redirect('/account/login'); res.redirect('/login');
} }
}); });
...@@ -183,7 +183,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -183,7 +183,7 @@ module.exports = function (app, config, passport, i18n) {
// create JSON object of projects and user status for front-end // create JSON object of projects and user status for front-end
function(userProjects, projectsOverview, done) { function(userProjects, projectsOverview, done) {
var allProjects = [] // JSON object var allProjects = [] // JSON object
var userProjectId = [] // array of user's project_id var userProjectId = [] // array of user's project_id
for (var i = 0; i < userProjects.length; i++) { for (var i = 0; i < userProjects.length; i++) {
userProjectId.push(userProjects[i].project_id) userProjectId.push(userProjects[i].project_id)
...@@ -213,7 +213,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -213,7 +213,7 @@ module.exports = function (app, config, passport, i18n) {
} }
]) ])
} else { } else {
res.redirect('/account/login'); res.redirect('/login');
} }
}); });
...@@ -223,7 +223,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -223,7 +223,7 @@ module.exports = function (app, config, passport, i18n) {
user: req.user // useful for view engine, useless for HTML user: req.user // useful for view engine, useless for HTML
}); });
} else { } else {
res.redirect('/account/login'); res.redirect('/login');
} }
}); });
...@@ -238,7 +238,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -238,7 +238,7 @@ module.exports = function (app, config, passport, i18n) {
industry: req.body.inputIndustry, industry: req.body.inputIndustry,
speciality: req.body.inputSpeciality, speciality: req.body.inputSpeciality,
} }
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
if (userData.email) { if (userData.email) {
dbconn.user.query('UPDATE user SET ? WHERE email = "' +userData.email+'"', userData, function (err, rows, fields) { dbconn.user.query('UPDATE user SET ? WHERE email = "' +userData.email+'"', userData, function (err, rows, fields) {
...@@ -254,10 +254,10 @@ module.exports = function (app, config, passport, i18n) { ...@@ -254,10 +254,10 @@ module.exports = function (app, config, passport, i18n) {
}) })
} }
} else { } else {
res.redirect('/account/login'); res.redirect('/login');
} }
}); });
app.post('/changePwd', function (req, res) { app.post('/changePwd', function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var currPwd = req.body.inputCurrPwd var currPwd = req.body.inputCurrPwd
...@@ -269,16 +269,20 @@ module.exports = function (app, config, passport, i18n) { ...@@ -269,16 +269,20 @@ module.exports = function (app, config, passport, i18n) {
// Load hashed passwd from DB // Load hashed passwd from DB
dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) {
if (err) { if (err) {
res.redirect('/500') console.error(err)
throw err res.status(500).render(lang+'/500', {
error: err
})
} }
var userPwd = rows[0].password var userPwd = rows[0].password
// check if the password is correct // check if the password is correct
bcrypt.compare(currPwd, userPwd, function(err, isMatch) { bcrypt.compare(currPwd, userPwd, function(err, isMatch) {
if (err) { if (err) {
res.redirect('/500') console.error(err)
throw err res.status(500).render(lang+'/500', {
error: err
})
} }
else if (!isMatch) { else if (!isMatch) {
//req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.")
...@@ -288,7 +292,8 @@ module.exports = function (app, config, passport, i18n) { ...@@ -288,7 +292,8 @@ module.exports = function (app, config, passport, i18n) {
} }
else { else {
if ( newPwd != retypePwd ) { if ( newPwd != retypePwd ) {
req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") //req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.")
req.flash('error', 'Passwörter stimmen nicht überein. Bitte stellen Sie sicher, dass Sie das Passwort beide Male genau gleich eingeben.')
res.redirect('/account/security') res.redirect('/account/security')
} }
else { else {
...@@ -324,13 +329,13 @@ module.exports = function (app, config, passport, i18n) { ...@@ -324,13 +329,13 @@ module.exports = function (app, config, passport, i18n) {
}); });
} }
} }
}) })
}) })
} }
}) })
} }
else { else {
res.redirect('/account/login'); res.redirect('/login');
} }
}); });
...@@ -348,7 +353,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -348,7 +353,7 @@ module.exports = function (app, config, passport, i18n) {
"we've received a request to reset your password. However, this email address is not on our database of registered users.\n\n"+ "we've received a request to reset your password. However, this email address is not on our database of registered users.\n\n"+
"Thanks,\nM4_LAB Team"; "Thanks,\nM4_LAB Team";
var emailSubject = "Account Access Attempted"; */ var emailSubject = "Account Access Attempted"; */
async.waterfall([ async.waterfall([
function(done) { function(done) {
crypto.randomBytes(20, function(err, buf) { crypto.randomBytes(20, function(err, buf) {
...@@ -416,7 +421,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -416,7 +421,7 @@ module.exports = function (app, config, passport, i18n) {
//req.flash('error', 'Password reset token is invalid or has expired.'); //req.flash('error', 'Password reset token is invalid or has expired.');
req.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); req.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.');
//res.redirect('/forgotPwd'); // deployment //res.redirect('/forgotPwd'); // deployment
res.redirect('/account/forgotPwd'); // localhost res.redirect('/account/forgotPwd'); // deployment
} }
else { else {
res.render(lang+'/account/reset'); res.render(lang+'/account/reset');
...@@ -455,7 +460,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -455,7 +460,7 @@ module.exports = function (app, config, passport, i18n) {
} }
}); });
// redirect to login page // redirect to login page
res.redirect('/account/login') res.redirect('/login')
} }
}) })
}); });
...@@ -463,10 +468,10 @@ module.exports = function (app, config, passport, i18n) { ...@@ -463,10 +468,10 @@ module.exports = function (app, config, passport, i18n) {
} }
else { else {
req.flash('error', "User not found.") req.flash('error', "User not found.")
res.redirect('/account/login') res.redirect('/login')
} }
}); });
}); });
// todo: user registration with captcha // todo: user registration with captcha
...@@ -507,7 +512,7 @@ module.exports = function (app, config, passport, i18n) { ...@@ -507,7 +512,7 @@ module.exports = function (app, config, passport, i18n) {
} }
else { else {
//req.flash('success', 'Your account has been created. Please log in.') //req.flash('success', 'Your account has been created. Please log in.')
req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.') req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.')
} }
res.redirect('/account/registration'); res.redirect('/account/registration');
}) })
......
...@@ -2,6 +2,8 @@ const methods = require('./methods') ...@@ -2,6 +2,8 @@ const methods = require('./methods')
const async = require('async') const async = require('async')
const helpers = require('./helpers') const helpers = require('./helpers')
const pictSizeLimit = 1000000 // 1 MB
module.exports = function (app) { module.exports = function (app) {
// ======== APP ROUTES - PROJECT ==================== // ======== APP ROUTES - PROJECT ====================
...@@ -26,7 +28,8 @@ module.exports = function (app) { ...@@ -26,7 +28,8 @@ module.exports = function (app) {
name: mailinglistOverview[i].name, name: mailinglistOverview[i].name,
src: mailinglistOverview[i].src, src: mailinglistOverview[i].src,
projectstatus: mailinglistOverview[i].projectstatus, projectstatus: mailinglistOverview[i].projectstatus,
project_title: mailinglistOverview[i].project_title project_title: mailinglistOverview[i].project_title,
keywords: mailinglistOverview[i].keywords
}); });
} }
...@@ -104,7 +107,7 @@ module.exports = function (app) { ...@@ -104,7 +107,7 @@ module.exports = function (app) {
res.render(lang+'/project/addProjectOverview') res.render(lang+'/project/addProjectOverview')
} }
else { else {
res.redirect('/account/login') res.redirect('/login')
} }
}) })
...@@ -144,7 +147,7 @@ module.exports = function (app) { ...@@ -144,7 +147,7 @@ module.exports = function (app) {
if (err) { if (err) {
//req.flash('error', "Failed") //req.flash('error', "Failed")
req.flash('error', "Fehlgeschlagen") req.flash('error', "Fehlgeschlagen")
res.redirect('/account/addProjectOverview'); res.redirect('/addProjectOverview');
} }
else { else {
req.flash('success', 'Your project has been created.') req.flash('success', 'Your project has been created.')
...@@ -160,13 +163,45 @@ module.exports = function (app) { ...@@ -160,13 +163,45 @@ module.exports = function (app) {
if (req.body.wiki) if (req.body.wiki)
wiki = 1 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 projectTerm = req.body.termForm + " - " + req.body.termTo
var projectOverviewData = { var projectOverviewData = {
pname: req.body.pname, pname: req.body.pname,
title: req.body.title, title: req.body.title,
onelinesummary: req.body.summary, onelinesummary: req.body.summary,
category: req.body.category, category: req.body.category,
logo: req.body.logo, logo: projectLogoPath,
gitlab: req.body.gitlabURL, gitlab: req.body.gitlabURL,
wiki: wiki, wiki: wiki,
overview: req.body.overview, overview: req.body.overview,
...@@ -178,7 +213,7 @@ module.exports = function (app) { ...@@ -178,7 +213,7 @@ module.exports = function (app) {
term: projectTerm, term: projectTerm,
further_details: req.body.furtherDetails, further_details: req.body.furtherDetails,
website: req.body.website, website: req.body.website,
src: req.body.src, src: projectPicturePath,
caption: req.body.caption, caption: req.body.caption,
contact_lastname: req.body.contactName, contact_lastname: req.body.contactName,
contact_email: req.body.contactEmail, contact_email: req.body.contactEmail,
...@@ -186,6 +221,28 @@ module.exports = function (app) { ...@@ -186,6 +221,28 @@ module.exports = function (app) {
leader_email: req.body.leaderEmail 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. /* 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. When User DB and Project DB are integrated and quite stabil, this operation should be done in 1 transaction.
*/ */
...@@ -224,7 +281,7 @@ module.exports = function (app) { ...@@ -224,7 +281,7 @@ module.exports = function (app) {
if (err) { if (err) {
//req.flash('error', "Failed") //req.flash('error', "Failed")
req.flash('error', "Fehlgeschlagen") req.flash('error', "Fehlgeschlagen")
res.redirect('/account/addProjectOverview'); res.redirect('/addProjectOverview');
} }
else { else {
req.flash('success', 'Your project has been created.') req.flash('success', 'Your project has been created.')
......
doctype html
html(lang="de")
head
title= "Kontakt"
meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css")
link(rel="stylesheet", type="text/css", href="/css/bootstrap.min.css")
link(rel="stylesheet", type="text/css", href="/fonts/ionicons.min.css")
link(rel="stylesheet", type="text/css", href="/css/Contact-Form-Clean.css")
link(rel="stylesheet", type="text/css", href="/css/Testimonials.css")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style.
.collapse {
display: none;
}
.collapse.in {
display: block;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-timing-function: ease;
-o-transition-timing-function: ease;
transition-timing-function: ease;
-webkit-transition-duration: .35s;
-o-transition-duration: .35s;
transition-duration: .35s;
-webkit-transition-property: height,visibility;
-o-transition-property: height,visibility;
transition-property: height,visibility;
}
body
div(class="container")
div(class="row")
div(class="col-md-12" style="margin-bottom: 40px;")
img(class="mx-auto" src="/img/Kontakt.jpg" width="100%")
div(class="contact-clean" style="background-color: rgb(234,234,234);")
if successes
for success in successes
div.alert.alert-success.alert-dismissible #{ success }
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times;
if errors
for error, i in errors
div.alert.alert-danger.alert-dismissible.fade.show #{ error }
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times;
form(method="POST")
h2(class="text_center") Kontaktieren Sie uns
div(class="form-group")
input#name(class="form-control" type="text" name="name" placeholder="Name")
div(class="form-group")
input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*", maxlength="45" required)
div(class="form-group")
textarea#message(class="form-control" name="message" placeholder="Nachricht" rows="14")
div(class="form-group")
input#submitBtn(class="btn btn-primary" type="submit" style="background-color: #8a348b;" value="SENDEN")
div(class="contact-clean" style="background-color: rgb(234,234,234);padding: 80px;padding-top: 0px;")
form(method="POST")
p(style="margin-top: 25px;") <strong>Hochschule für Technik Stuttgart</strong><br/>Institut für Angewandte Forschung<br/>Innovative Hochschule - Projekt M4_LAB<br/>Schellingstr. 24<br/>70174 Stuttgart<br/>Deutschland<br/><br/><a href="mailto:support-transfer@hft-stuttgart.de">support-transfer@hft-stuttgart.de</a><br/><br/><a href="https://www.hft-stuttgart.de/">www.hft-stuttgart.de</a> / <a href="https://www.hft-stuttgart.de/M4LAB">www.hft-stuttgart.de/M4LAB</a><br/>
div(style="background-color: rgba(138,52,139,0.45);")
div(class="container")
div(class="row")
div(class="col-md-4 col-lg-2")
div(class="col-md-4 col-lg-8")
div(style="background-color: #feffff;margin: 0px;padding: 60px;padding-top: 20px;padding-bottom: 20px;")
img(class="d-flex d-lg-flex justify-content-center justify-content-lg-center align-items-lg-start mx-auto" src="/img/Logo_TV1.png" width="100px" style="padding-bottom: 35px;")
h2(class="text-center" style="color: #8a348b;") <strong>Transferportal</strong>
p(class="text-center") Das Transferportal entsteht in einem Teilprojekt der Innovativen <a href="https://www.hft-stuttgart.de">Hochschule für Technik Stuttgart</a>. Im <a href="https://www.hft-stuttgart.de/forschung/innovative-hochschule-m4-lab">Innovationslabor M4_LAB</a> wird das Transferportal als eine Webpräsenz entwickelt, welches Wissen, Lösungen und Dienste für HFT-Mitglieder, externe Partner und die allgemeine Öffentlichkeit bereitstellt.<br/><br/>Es ergänzt die Informationen der allgemeinen HFT-Webseite durch konkrete Ergebnisse aus Forschung und Entwicklung, verfügbar in verschiedenster Form wie beispielsweise Daten, Dokumentationen und Software-Code.<br/><br/>Zudem stellt es Kollaborationsmittel für Projektpartner und später auch Partizipationsmöglichkeiten für die breite Öffentlichkeit bereit.
div(class="col-md-4 col-lg-2")
// jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous")
// Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// M4_LAB
script(src="/js/headfoot.js")
...@@ -6,40 +6,36 @@ html(lang="de") ...@@ -6,40 +6,36 @@ html(lang="de")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style.
.collapse {
display: none;
}
.collapse.in {
display: block;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-timing-function: ease;
-o-transition-timing-function: ease;
transition-timing-function: ease;
-webkit-transition-duration: .35s;
-o-transition-duration: .35s;
transition-duration: .35s;
-webkit-transition-property: height,visibility;
-o-transition-property: height,visibility;
transition-property: height,visibility;
}
body body
div(class="container-fluid") div(class="container-fluid")
div(class="row") div(class="row min-vh-100 flex-column flex-md-row")
div(class="col-3") aside(class="col-12 col-md-2 p-0 flex-shrink-1")
h5 nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2")
span #{user.firstname} #{user.lastname} div(class="collapse navbar-collapse")
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil li(class="nav-item")
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link pl-0 text-nowrap" href="#")
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname}
a(class="nav-link" href="/logout" aria-selected="false") Logout li(class="nav-item")
div(class="col-sm-9") a(class="nav-link pl-0" href="/account/profile")
p content goes here i(class="fa fa-user fa-fw")
span(class="d-none d-md-inline") Benutzerprofil
li(class="nav-item")
a(class="nav-link pl-0" href="/account/security")
i(class="fa fa-lock fa-fw")
span(class="d-none d-md-inline") Sicherheitseinstellungen
li(class="nav-item")
a(class="nav-link pl-0" href="/account/services")
i(class="fa fa-tasks fa-fw")
span(class="d-none d-md-inline") Projekte und Dienste
li(class="nav-item")
a(class="nav-link pl-0" href="/logout")
i(class="fa fa-sign-out-alt fa-fw")
span(class="d-none d-md-inline") Logout
main(class="col bg-faded py-3 flex-grow-1")
p Willkommen im Benutzerkonto-Bereich des HFT Transferportals
p In diesem Bereich können Sie Ihr Benutzerkonto pflegen.<br/> Dazu finden Sie auf der linken Seite verschiedene Menüs.
p Bei Rückfragen kontaktieren Sie uns bitte unter: <a href="mailto:support-transfer@hft-stuttgart.de">support-transfer@hft-stuttgart.de</a>
// jQuery // jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://code.jquery.com/jquery-3.3.1.min.js")
...@@ -47,4 +43,4 @@ html(lang="de") ...@@ -47,4 +43,4 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// M4_LAB // M4_LAB
script(src="/js/headfootLogout.js") script(src="/js/headfoot.js")
\ No newline at end of file \ No newline at end of file
...@@ -6,39 +6,33 @@ html(lang="de") ...@@ -6,39 +6,33 @@ html(lang="de")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style.
.collapse {
display: none;
}
.collapse.in {
display: block;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-timing-function: ease;
-o-transition-timing-function: ease;
transition-timing-function: ease;
-webkit-transition-duration: .35s;
-o-transition-duration: .35s;
transition-duration: .35s;
-webkit-transition-property: height,visibility;
-o-transition-property: height,visibility;
transition-property: height,visibility;
}
body body
div(class="container-fluid") div(class="container-fluid")
div(class="row") div(class="row min-vh-100 flex-column flex-md-row")
div(class="col-3") aside(class="col-12 col-md-2 p-0 flex-shrink-1")
h5 nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2")
span #{user.firstname} #{user.lastname} div(class="collapse navbar-collapse")
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between")
a(class="nav-link" href="#" aria-selected="true") Benutzerprofil li(class="nav-item")
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link pl-0 text-nowrap" href="#")
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname}
a(class="nav-link" href="/logout" aria-selected="false") Logout li(class="nav-item")
div(class="col-sm-9") a(class="nav-link pl-0" href="/account/profile")
i(class="fa fa-user fa-fw" style="color:black;")
span(class="d-none d-md-inline" style="color:black;") Benutzerprofil
li(class="nav-item")
a(class="nav-link pl-0" href="/account/security")
i(class="fa fa-lock fa-fw")
span(class="d-none d-md-inline") Sicherheitseinstellungen
li(class="nav-item")
a(class="nav-link pl-0" href="/account/services")
i(class="fa fa-tasks fa-fw")
span(class="d-none d-md-inline") Projekte und Dienste
li(class="nav-item")
a(class="nav-link pl-0" href="/logout")
i(class="fa fa-sign-out-alt fa-fw")
span(class="d-none d-md-inline") Logout
main(class="col bg-faded py-3 flex-grow-1")
if successes if successes
for success in successes for success in successes
div.alert.alert-success.alert-dismissible #{ success } div.alert.alert-success.alert-dismissible #{ success }
...@@ -47,7 +41,7 @@ html(lang="de") ...@@ -47,7 +41,7 @@ html(lang="de")
for error, i in errors for error, i in errors
div.alert.alert-danger.alert-dismissible.fade.show #{ error } div.alert.alert-danger.alert-dismissible.fade.show #{ error }
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times; a(class="close", href="#", data-dismiss="alert", aria-label="close") &times;
form#profileForm(method="POST", action="/account/updateProfile") form#profileForm(method="POST", action="/updateProfile")
div(class="form-row") div(class="form-row")
div(class='form-group col-md-2') div(class='form-group col-md-2')
label(for="title") Anrede label(for="title") Anrede
...@@ -77,26 +71,26 @@ html(lang="de") ...@@ -77,26 +71,26 @@ html(lang="de")
} }
div(class='form-group col-md-2') div(class='form-group col-md-2')
label(for="firstname") Vorname label(for="firstname") Vorname
input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname", value=user.firstname required) input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname", value=user.firstname, maxlength="45" required)
div(class='form-group col-md-2') div(class='form-group col-md-2')
label(for="lastname") Nachname label(for="lastname") Nachname
input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname", value=user.lastname required) input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname", value=user.lastname, maxlength="45" required)
div(class="form-row") div(class="form-row")
div(class='form-group col-md-8') div(class='form-group col-md-8')
label(for="email") E-mail Adresse label(for="email") E-mail Adresse
input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email", value=email required) input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email", value=email, maxlength="45" required)
div(class="form-row") div(class="form-row")
div(class='form-group col-md-8') div(class='form-group col-md-8')
label(for="organisation") Unternehmen label(for="organisation") Unternehmen
input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen", value=user.organisation) input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen", value=user.organisation, maxlength="45")
div(class="form-row") div(class="form-row")
div(class='form-group col-md-8') div(class='form-group col-md-8')
label(for="industry") Branche label(for="industry") Branche
input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche", value=user.industry) input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche", value=user.industry, maxlength="45")
div(class="form-row") div(class="form-row")
div(class='form-group col-md-8') div(class='form-group col-md-8')
label(for="speciality") Fachgebiete label(for="speciality") Fachgebiete
input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", value=user.speciality) input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", value=user.speciality, maxlength="100")
input(type="submit", class="btn btn-primary", value="Speichern") input(type="submit", class="btn btn-primary", value="Speichern")
// jQuery // jQuery
...@@ -105,4 +99,4 @@ html(lang="de") ...@@ -105,4 +99,4 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// M4_LAB // M4_LAB
script(src="/js/headfootLogout.js") script(src="/js/headfoot.js")
\ No newline at end of file \ No newline at end of file
...@@ -7,41 +7,36 @@ html(lang="de") ...@@ -7,41 +7,36 @@ html(lang="de")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style. style.
.collapse {
display: none;
}
.collapse.in {
display: block;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-timing-function: ease;
-o-transition-timing-function: ease;
transition-timing-function: ease;
-webkit-transition-duration: .35s;
-o-transition-duration: .35s;
transition-duration: .35s;
-webkit-transition-property: height,visibility;
-o-transition-property: height,visibility;
transition-property: height,visibility;
}
.warning { .warning {
font-size: 11px; font-size: 11px;
} }
body body
div(class="container-fluid") div(class="container-fluid")
div(class="row") div(class="row min-vh-100 flex-column flex-md-row")
div(class="col-3") aside(class="col-12 col-md-2 p-0 flex-shrink-1")
h5 nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2")
span #{user.firstName} #{user.lastName} div(class="collapse navbar-collapse")
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil li(class="nav-item")
a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen a(class="nav-link pl-0 text-nowrap" href="#")
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname}
a(class="nav-link" href="/logout" aria-selected="false") Logout li(class="nav-item")
div(class="col-sm-9") a(class="nav-link pl-0" href="/account/profile")
i(class="fa fa-user fa-fw")
span(class="d-none d-md-inline") Benutzerprofil
li(class="nav-item")
a(class="nav-link pl-0" href="/account/security")
i(class="fa fa-lock fa-fw" style="color:black;")
span(class="d-none d-md-inline" style="color:black;") Sicherheitseinstellungen
li(class="nav-item")
a(class="nav-link pl-0" href="/account/services")
i(class="fa fa-tasks fa-fw")
span(class="d-none d-md-inline") Projekte und Dienste
li(class="nav-item")
a(class="nav-link pl-0" href="/logout")
i(class="fa fa-sign-out-alt fa-fw")
span(class="d-none d-md-inline") Logout
main(class="col bg-faded py-3 flex-grow-1")
if successes if successes
for success in successes for success in successes
div.alert.alert-success.alert-dismissible #{ success } div.alert.alert-success.alert-dismissible #{ success }
...@@ -51,20 +46,23 @@ html(lang="de") ...@@ -51,20 +46,23 @@ html(lang="de")
div.alert.alert-danger.alert-dismissible.fade.show #{ error } div.alert.alert-danger.alert-dismissible.fade.show #{ error }
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times; a(class="close", href="#", data-dismiss="alert", aria-label="close") &times;
form(class="needs-validation", method="post", action="/account/changePwd" novalidate) form(class="needs-validation", method="post", action="/account/changePwd" novalidate)
div(class="form-group row") div(class="form-row")
label(for="currPwd") Aktuelles Passwort div(class='form-group col-md-8')
input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) label(for="currPwd") Aktuelles Passwort
div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required)
div(class="form-group row") div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus.
label(for="newPwd") Neues Passwort div(class="form-row")
input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) div(class='form-group col-md-8')
span#recommendation label(for="newPwd") Neues Passwort
div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required)
div(class="form-group row") span#recommendation
label(for="confirm") Bestätigen Sie das neue Passwort div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus.
input#inputConfirm(name="inputConfirm", type="password", class="form-control" required) div(class="form-row")
span#message div(class='form-group col-md-8')
div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. label(for="confirm") Bestätigen Sie das neue Passwort
input#inputConfirm(name="inputConfirm", type="password", class="form-control" required)
span#message
div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus.
input#updateBtn(type="submit", class="btn btn-primary", value="Passwort ändern" disabled) input#updateBtn(type="submit", class="btn btn-primary", value="Passwort ändern" disabled)
// jQuery // jQuery
...@@ -75,7 +73,7 @@ html(lang="de") ...@@ -75,7 +73,7 @@ html(lang="de")
// M4_LAB // M4_LAB
script(src="/js/security.js") script(src="/js/security.js")
script(src="/js/generalFunction.js") script(src="/js/generalFunction.js")
script(src="/js/headfootLogout.js") script(src="/js/headfoot.js")
script. script.
// check input fields // check input fields
'use strict'; 'use strict';
......
...@@ -6,73 +6,39 @@ html(lang="de") ...@@ -6,73 +6,39 @@ html(lang="de")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style.
.collapse {
display: none;
}
.collapse.in {
display: block;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-timing-function: ease;
-o-transition-timing-function: ease;
transition-timing-function: ease;
-webkit-transition-duration: .35s;
-o-transition-duration: .35s;
transition-duration: .35s;
-webkit-transition-property: height,visibility;
-o-transition-property: height,visibility;
transition-property: height,visibility;
}
body body
div(class="container-fluid") div(class="container-fluid")
div(class="row") div(class="row min-vh-100 flex-column flex-md-row")
div(class="col-3") aside(class="col-12 col-md-2 p-0 flex-shrink-1")
h5 nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2")
span #{user.firstName} #{user.lastName} div(class="collapse navbar-collapse")
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil li(class="nav-item")
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link pl-0 text-nowrap" href="#")
a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname}
a(class="nav-link" href="/logout" aria-selected="false") Logout li(class="nav-item")
div(class="col-sm-9") a(class="nav-link pl-0" href="/account/profile")
if successes i(class="fa fa-user fa-fw")
for success in successes span(class="d-none d-md-inline") Benutzerprofil
div.alert.alert-success.alert-dismissible #{ success } li(class="nav-item")
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times; a(class="nav-link pl-0" href="/account/security")
if errors i(class="fa fa-lock fa-fw")
for error, i in errors span(class="d-none d-md-inline") Sicherheitseinstellungen
div.alert.alert-danger.alert-dismissible.fade.show #{ error } li(class="nav-item")
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times; a(class="nav-link pl-0" href="/account/services")
table i(class="fa fa-tasks fa-fw" style="color:black;")
for item in project span(class="d-none d-md-inline" style="color:black;") Projekte und Dienste
tr li(class="nav-item")
td <strong>#{item.title}</strong> a(class="nav-link pl-0" href="/logout")
if item.userStatus i(class="fa fa-sign-out-alt fa-fw")
td span(class="d-none d-md-inline") Logout
button(type="button", class="btn btn-secondary", onclick="unsubscribe()") Projektbeteiligung beenden main(class="col bg-faded py-3 flex-grow-1")
else p Auf dieser Seite werden in Zukunft Funktionen bereitgestellt, um Ihre Beteiligung an Projekten und Aktivierung von Diensten zu organisieren. Diese Funktionen stehen zurzeit aber noch nicht zur Verfügung.
td
button(type="button", class="btn btn-success", onclick="subscribe()") Am Projekt beteiligen
tr
td(colspan="2") #{item.summary}
tr
td(colspan="2") <i>Ansprechpartner: #{item.cp}</i>
// jQuery // jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://code.jquery.com/jquery-3.3.1.min.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// M4_LAB // M4_LAB
script(src="/js/headfootLogout.js") script(src="/js/headfoot.js")
script. \ No newline at end of file
function subscribe() {
alert("To be implemented: Ihre Anfrage wird an den zuständigen Projektleiter gesendet.")
}
function unsubscribe() {
alert("To be implemented: Ihre Projektbeteiligung wurde beendet und der zuständige Projektleiter in Kenntnis gesetzt.")
}
\ No newline at end of file
...@@ -43,12 +43,12 @@ html(lang="de") ...@@ -43,12 +43,12 @@ html(lang="de")
for error, i in errors for error, i in errors
div.alert.alert-danger.alert-dismissible.fade.show #{ error } div.alert.alert-danger.alert-dismissible.fade.show #{ error }
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times; a(class="close", href="#", data-dismiss="alert", aria-label="close") &times;
form(method="POST") form(method="POST" encType="multipart/form-data")
div(class='form-row') div(class='form-row')
div(class='form-group col-md-12') div(class='form-group col-md-12')
input#inputPname(name="pname" class="form-control" type="text" placeholder="Projekttitel*" required) input#inputPname(name="title" class="form-control" type="text" placeholder="Projekttitel*" required)
div(class="form-group col-md-12") div(class="form-group col-md-12")
input#inputTitle(name="title" class="form-control" type="text" placeholder="Akronym*" required) input#inputTitle(name="pname" class="form-control" type="text" placeholder="Akronym*" required)
div(class="form-group col-md-12") div(class="form-group col-md-12")
input#inputSummary(name="summary" class="form-control" type="text" placeholder="Kurzbeschreibung") input#inputSummary(name="summary" class="form-control" type="text" placeholder="Kurzbeschreibung")
div(class='form-group col-md-12') div(class='form-group col-md-12')
...@@ -59,7 +59,10 @@ html(lang="de") ...@@ -59,7 +59,10 @@ html(lang="de")
option(value="Lehr Projekt") Lehr Projekt option(value="Lehr Projekt") Lehr Projekt
option(value="Transfer-projekt") Transfer-projekt option(value="Transfer-projekt") Transfer-projekt
div(class="form-group col-md-12") div(class="form-group col-md-12")
input#inputLogo(name="logo" class="form-control" type="text" placeholder="Projektlogo, to be implemented: upload picture") div(class='form-group row')
label(for="projectLogo" class="col-sm-3 col-form-label") Projektlogo (max. 1 MB)
div(class="col-md-9")
input#inputLogo(name="logo" class="form-control" type="file")
div(class="form-group col-md-12") div(class="form-group col-md-12")
div(class="input-group mb-3") div(class="input-group mb-3")
input#inputGitlabURL(name="gitlabURL" type="text" class="form-control" placeholder="M4_LAB GitLab Project URL, z.B. https://transfer.hft-stuttgart.de/gitlab/username/projectname") input#inputGitlabURL(name="gitlabURL" type="text" class="form-control" placeholder="M4_LAB GitLab Project URL, z.B. https://transfer.hft-stuttgart.de/gitlab/username/projectname")
...@@ -85,12 +88,11 @@ html(lang="de") ...@@ -85,12 +88,11 @@ html(lang="de")
div(class='form-group col-md-12') div(class='form-group col-md-12')
input#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") input#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung")
div(class="form-group col-md-12") div(class="form-group col-md-12")
div(class='form-row') div(class='form-group row')
div(class="form-group col-md-2") label(for="projectLogo" class="col-sm-2 col-form-label") Laufzeit
<p class="font-weight-normal">Laufzeit</p> div(class="col-md-5")
div(class="form-group col-md-5")
input#inputTermFrom(name="termForm" class="form-control" type="text" placeholder="von (dd.mm.yyyy)") input#inputTermFrom(name="termForm" class="form-control" type="text" placeholder="von (dd.mm.yyyy)")
div(class="form-group col-md-5") div(class="col-md-5")
input#inputTermTo(name="termTo" class="form-control" type="text" placeholder="bis (dd.mm.yyyy)") input#inputTermTo(name="termTo" class="form-control" type="text" placeholder="bis (dd.mm.yyyy)")
div(class='form-group col-md-12') div(class='form-group col-md-12')
textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Weitere Informationen (bspw. Links zu Berichten)") textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Weitere Informationen (bspw. Links zu Berichten)")
...@@ -99,7 +101,10 @@ html(lang="de") ...@@ -99,7 +101,10 @@ html(lang="de")
h5(class="mb-3 font-weight-bold") Bilder h5(class="mb-3 font-weight-bold") Bilder
div(class='form-row') div(class='form-row')
div(class="form-group col-md-12") div(class="form-group col-md-12")
input#inputSrc(name="src" class="form-control" type="text" placeholder="To be implemented: upload picture") div(class='form-group row')
label(for="projectPicture" class="col-sm-3 col-form-label") Projektbild (max. 1 MB)
div(class="col-md-9")
input#inputSrc(name="src" class="form-control" type="file")
div(class="form-group col-md-12") div(class="form-group col-md-12")
input#inputCaption(name="caption" class="form-control" type="text" placeholder="Bildunterschrift/Bildquelle") input#inputCaption(name="caption" class="form-control" type="text" placeholder="Bildunterschrift/Bildquelle")
h5(class="mb-3 font-weight-bold") Kontakt h5(class="mb-3 font-weight-bold") Kontakt
...@@ -129,7 +134,7 @@ html(lang="de") ...@@ -129,7 +134,7 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
script(src="/js/headfootLogout.js") script(src="/js/headfoot.js")
script. script.
$( function() { $( function() {
$.datepicker.setDefaults( $.datepicker.regional["de"] ); $.datepicker.setDefaults( $.datepicker.regional["de"] );
......
...@@ -2,9 +2,11 @@ html(lang="de") ...@@ -2,9 +2,11 @@ html(lang="de")
head head
title= "Mailinglisten" title= "Mailinglisten"
meta(charset="UTF-8") meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") meta(name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
link(rel="stylesheet" href="/fonts/ionicons.min.css")
link(rel="stylesheet" href="assets/css/Testimonials.css")
style. style.
.collapse { .collapse {
display: none; display: none;
...@@ -27,35 +29,71 @@ html(lang="de") ...@@ -27,35 +29,71 @@ html(lang="de")
transition-property: height,visibility; transition-property: height,visibility;
} }
body body
<hr /> div(class="container")
div() div(class="row")
h5(align="left") Aktive Mailinglisten div(class="col-md-12" style="margin-bottom: 40px;")
div(class="flex-container" style="align-items:flex-start") img(class="mx-auto" src="/img/Mailinglisten.jpg" width="100%")
div(class="table") div(class="container")
table(border="0" id="listtable" class="table table-striped") div(class="row")
thead div(class="col-md-12" style="margin-bottom: 30px;")
tr h4(class="text-center") Durch Mailinglisten können Sie interessierten Personen<br/> <strong>regelmäßig Informationen</strong> zu Ihrem Projekt oder Thema zukommen lassen.<br/> Ebenso können Sie über ein Abonnement in einer Mailingliste Mitglied des Verteilers<br/>werden und so <strong>im Austausch</strong> bleiben. <br/>
th Name div(class="col-md-12" style="margin-bottom: 30px;")
th Link h2(class="text-center" style="color: #708090;") <strong>Aktive Mailinglisten</strong>
th zugeh. Projekt div(class="table-responsive table-borderless")
tbody table(class="table table-striped table-bordered table-hover")
for item in mailinglists thead()
if item.projectstatus == '1' tr()
tr th Name
td #{item.name} th Zum Abonnement der Mailingliste
td <a href="#{item.src}">#{item.src}</a> th Zum zugehörigen Projekt
td <a href='projectoverview?projectID=#{item.id}'>#{item.project_title}</a> th Keywords
<hr /> tbody()
div() for item in mailinglists
h5(align="left") Eintragung in Mailingliste if item.projectstatus == '1'
p() Wenn Sie sich in eine Mailingliste eintragen wollen, folgen Sie folgender Anleitung: tr
td #{item.name}
td <a href="#{item.src}">#{item.src}</a>
td <a href='projectoverview?projectID=#{item.id}'>#{item.project_title}</a>
td #{item.keywords}
div(id="aboText" style="background-color: #dadada;margin-top: 40px;")
div(class="container")
div(class="row" style="margin-bottom: 0;padding-top: 20px;padding-bottom: 20px;")
div(class="col-lg-12" style="background-color: #ffffff;")
h2(class="text-center" style="color: #708090;margin-top: 15px;") <strong> Mailingliste abonnieren </strong>
div(class="col-md-4 col-lg-6" style="background-color: #ffffff;")
p() Das Deutsche Forschungsnetz (DFN) bietet Mailinglisten für Wissenschaft und Forschung an. Mailinglisten sind E-Mail-Verteilerlisten, d.h. Personen, die sich für Ihr Forschungsthema interessieren, können sich über das DFN registrieren und erhalten im Anschluss daran regelmäßig die über die Mailinglisten geteilten Informationen.
p() Sie als Verteiler senden die zu versendende Mail folglich nur noch an die festgelegte Mailinglistenadresse und das Programm leitet die Nachricht an alle registrierten Personen weiter.
div(class="col-md-4 col-lg-6 justify-content-between flex-wrap" style="background-color: #ffffff;")
div(class="justify-content-between order-2" style="background-color: rgba(255,255,255,0);")
p(class="text-left d-flex d-md-flex flex-row flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-start align-content-start align-self-start flex-wrap order-1 justify-content-md-center align-items-md-start justify-content-lg-start") Oben finden Sie eine Übersicht über die aktiven Mailinglisten. Wenn Sie sich in eine Mailingliste eintragen wollen, dann klicken Sie auf den entsprechend hinterlegten Link.
p() Es öffnet sich daraufhin die Hauptseite der Liste. Nach der Auswahl des Buttons "Abonnieren", können Sie Ihre Mailadresse hinterlegen und sich in die Liste eintragen.
a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap order-3 justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto" role="button" style="background-color: #E0001B; margin-top:10px; margin-bottom:10px;" href="/downloads/Handout_Mailinglisten_Abonnieren.pdf") <strong>Erste Schritte (Anleitung als PDF)</strong>
a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap mb-auto justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto" role="button" style="background-color: #E0001B;" href="https://www.listserv.dfn.de/sympa/help") <strong>Weitergehende Dokumentation bei DFN (externer Link)</strong>
div(id="newListText" style="background-color: #dadada;margin-top: 0px;")
div(class="container")
div(class="row" style="margin-bottom: 0;padding-top: 20px;padding-bottom: 20px;")
div(class="col-lg-12" style="background-color: #ffffff;")
h2(class="text-center" style="color: #708090;margin-top: 15px;") <strong>Neue Mailingliste erstellen</strong>
div(class="col-md-4 col-lg-6" style="background-color: #ffffff;")
p() Über das Transferportal können Sie selbst eine Liste zu Ihrem Projekt anlegen, um mit Ihren Partnern in Verbindung zu bleiben.
p() Folgen Sie hierzu der Anleitung des DFN.
div(class="col-md-4 col-lg-6" style="background-color: #ffffff;")
a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto" role="button" style="background-color: #E0001B; margin-top:10px; margin-top:10px;" href="/downloads/Handout_Mailinglisten_Erstellen.pdf") <strong>Erste Schritte (Anleitung als PDF)</strong>
a(class="btn btn-primary text-center d-lg-flex justify-content-center align-items-center align-content-center align-self-center align-items-lg-end mx-auto" role="button" style="background-color: #E0001B;" href="https://www.listserv.dfn.de/sympa/help/admin") <strong>Gesamtes Tutorial bei DFN (externer Link)</strong>
div(id="addListText" style="background-color: #dadada;margin-top: 0px;")
div(class="container")
div(class="row" style="margin-bottom: 0;padding-top: 20px;padding-bottom: 20px;")
div(class="col-lg-12" style="background-color: #ffffff;")
h2(class="text-center" style="color: #708090;margin-top: 15px;") <strong>Neue Mailingliste eintragen</strong>
div(class="col-xl" style="background-color: #ffffff;")
p() Um Ihre beim DFN angelegte Mailingliste hier aufzunehmen, schicken Sie uns bitte eine Email an <a href="mailto:support-transfer@hft-stuttgart.de">support-transfer@hft-stuttgart.de</a>
// jQuery // jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://code.jquery.com/jquery-3.3.1.min.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
if isUserAuthenticated script(src="/js/headfoot.js")
script(src="/js/headfootLogout.js") \ No newline at end of file
else
script(src="/js/headfoot.js")
\ No newline at end of file
...@@ -7,41 +7,45 @@ html(lang="de") ...@@ -7,41 +7,45 @@ html(lang="de")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style. style.
.collapse { .help .card-title > a:before {
display: none; float: right !important;
} content: "-";
.collapse.in { padding-right: 5px;
display: block; }
} .help .card-title > a.collapsed:before {
.collapsing { float: right !important;
position: relative; content: "+";
height: 0; }
overflow: hidden; .help h3 > a {
-webkit-transition-timing-function: ease; color: #708090;
-o-transition-timing-function: ease; text-decoration: none;
transition-timing-function: ease; display: block;
-webkit-transition-duration: .35s; }
-o-transition-duration: .35s; .help a {
transition-duration: .35s; display: inline;
-webkit-transition-property: height,visibility; }
-o-transition-property: height,visibility; .help .card > .card-header {
transition-property: height,visibility; color: #fff;
} }
.warning { .card-title {
color: red; margin-bottom: 0.5rem;
font-size: 11px; margin-top: 0.5rem;
} }
#infoicon {
color: #708090;
}
.heading {
color: #708090;
}
body body
include project.html include project.html
// jQuery // jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://code.jquery.com/jquery-3.3.1.min.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
if isUserAuthenticated script(src="/js/headfoot.js")
script(src="/js/headfootLogout.js")
else
script(src="/js/headfoot.js")
\ No newline at end of file
<div class="container"> <div>
<hr /> <div class="container">
<!-- text: Zweck dieser Seite / purpose of this page --> <div class="row">
<i class="fas fa-info-circle"></i> Diese Seite bietet den Einstieg zu den unterschiedlichen Projekten, die in unserem Portal für die Öffentlichkeit bereitgestellt werden. <div class="col-md-12" style="margin-bottom: 40px;"><img class="mx-auto" src="/img/Projekte.png"
Für diesen Zweck steht zur Zeit ein Dienst bereit: eine von der HFT selbst verwaltete Gitlab-Instanz. width="100%"></div>
Alle der in diesem Gitlab erfassten Projektinhalte unterliegen einer Open Source bzw. Open Data Lizenz. </div>
<p>Hinweis: Die Nutzeroberfläche von GitLab ist in Englisch.</p> </div>
</div>
<div>
<div class="container">
<div class="row">
<div class="col-md-12" style="margin-bottom: 30px;">
<h4 class="text-center">Diese Seite bietet den Einstieg zu den Inhalten der unterschiedlichen Projekte,
die über das Portal zur Verfügung gestellt werden.</h4>
</div>
</div>
</div>
</div>
<div>
<div class="container">
<div class="row">
<div class="col-lg-1"></div>
<div class="col-md-6 col-lg-4" style="padding-right: 5px;padding-left: 5px;">
<img class="d-flex d-lg-flex justify-content-center align-items-center align-content-center align-self-center mx-auto"
src="/img/Icon_Haken.png" height="150" />
<br />
<h2 class="text-center heading"><small><strong>Open-Source-/ Open-Data-Projekte</strong></small><br></h2>
<p class="text-left">Für die Veröffentlichung von Open-Source-Projekten steht Ihnen eine von der HFT
Stuttgart selbstverwaltete Gitlab-Instanz bereit.
<br /> <br />
Eine Übersicht der aktuellen Open-Source-/Open-Data-Projekte erreichen Sie über diesen <a
href="https://transfer.hft-stuttgart.de/gitlab/explore/projects">
<i class="fas fa-chevron-right">Link zu den Gitlab-Projekten</i></a>.<br />
</p>
</div>
<div class="col-lg-2"></div>
<div class="col-md-6 col-lg-4" style="padding-right: 5px;padding-left: 5px;">
<img src="/img/Icon_Sandclock.png"
class="d-flex d-lg-flex justify-content-center align-items-center align-content-center align-self-center mx-auto"
height="150px" />
<br />
<h2 class="text-center heading"><small><strong>Andere Projekte</strong></small><br></h2>
<p class="text-left">Aktuell unterstützt das Transferportal Projekte, die einer Open-Source bzw.
Open-Data-Lizenz
unterliegen. Die Gründe hierfür liegen in den Lizenzbedingungen unserer Gitlab-Instanz als
Plattform.
<br /> <br />
Künftig möchten wir auch andere Projekttypen unterstützen. Es soll dann beispielsweise möglich sein,
Projektergebnisse zu veröffentlichen ohne die dazugehörigen Quellcodes oder Rohdaten offenzulegen.
<br /> <br />
Wir entwickeln das Portal kontinuierlich weiter und prüfen dabei auch andere Plattformen zur
Nutzung.
</p>
</div>
<div class="col-lg-1"></div>
</div>
<hr />
<!-- text: Zweck dieser Seite / purpose of this page -->
<div>
<p class="text-justify"><i id="infoicon" class="fas fa-info-circle fa-lg"></i> Falls Sie mehr über die
Weiterentwicklung des Portals
erfahren wollen oder sich mit Anregungen auch aktiv einbringen
wollen, regen wir an, unsere Mailingliste <a href="https://www.listserv.dfn.de/sympa/info/transferportalhft">
<i class="fas fa-chevron-right">transferportalhft</i></a> zu abonnieren. Sie können uns aber auch
jederzeit
direkt unter <a href="/account/contact"><i class="fas fa-chevron-right">Kontakt</i></a> anschreiben.
</p>
</div>
</div>
</div>
<!-- link: Gitlab Projekte / Gitlab project list -->
<h2> Direkteinstieg </h2>
<a href="https://transfer.hft-stuttgart.de/gitlab/explore/projects"> <i class="fas fa-chevron-right">Gitlab Projects</i></a>
<!-- text: Hilfestellung zu Gitlab / short help about Gitlab -->
<hr />
<h2> Hilfestellung zu GitLab </h2>
<h3> <i class="fas fa-question-circle"></i> Möchten Sie die Projektinhalte ansehen oder herunterladen? </h3>
<p>
Dann klicken Sie auf diesen <a href="https://transfer.hft-stuttgart.de/gitlab/explore/projects"> <i class="fas fa-chevron-right">Link zu den Gitlab-Projekten</i></a> um die Liste aller im Gitlab erfassten Projekte zu sehen.
Vor dort können Sie dann auf die einzelnen Projekte zugreifen.
Ein Anmelden am Portal ist dazu nicht nötig.
</p>
<h3> <i class="fas fa-question-circle"></i> Möchten Sie zu einem Projekt beitragen? </h3>
<p>
Wenn Sie dem Projekteigentümer eine Rückmeldung bzw. einen Fehler melden wollen, navigieren Sie im Gitlab zunächst zum entsprechenden Projekt.
Anschließend können Sie dann dort die Möglichkeit nutzen, ein neues "Issues" einzureichen.
Ein Anmelden am Portal ist dazu nicht nötig.
</p>
<p>
Wenn Sie darüberhinaus beitragen wollen, befolgen Sie bitte folgende Schritte:
</p>
<ol>
<li>
Melden Sie sich bitte im Portal an. <br>
Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten. <br>
Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen <a href="https://m4lab.hft-stuttgart.de/account/"> <i class="fas fa-chevron-right">Link zum Benutzerkonto</i></a>.
</li>
<li>
Folgen Sie dem <a href="https://transfer.hft-stuttgart.de/gitlab/explore/projects"> <i class="fas fa-chevron-right">Link zu den Gitlab-Projekten</i></a>, um zum Gitlab zu gelangen.
</li>
<li>
Fragen Sie beim Projekteigentümer um Zugang, indem Sie im Gitlab bei der entsprechende Projektseite auf den Link <em>Request Access</em> klicken. Solbald dieser ihre Anfrage bestätigt hat, können Sie loslegen.
</li>
</ol>
<h3> <i class="fas fa-question-circle"></i> Möchten Sie selbst ein Projekt anlegen, um es der Öffentlichkeit bereitzustellen? </h3>
</p>
Vorraussetzung dazu ist, dass Sie aktives oder ehemaliges Mitglied der Hochschule für Technik sind, d.h. eine (noch) gültige HFT-Emailadresse haben. <div class="container">
Dann befolgen Sie bitte folgende Schritte: <!-- text: Hilfestellung zu Gitlab / short help about Gitlab -->
</p> <hr />
<ol> <h2 class="text-center heading"><small><strong>Hilfestellung zu GitLab</strong></small></h2>
<li>
Melden Sie sich bitte im Portal an. <br> <br />
Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten. <br>
Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen <a href="https://m4lab.hft-stuttgart.de/account/"> <i class="fas fa-chevron-right">Link zum Benutzerkonto</i></a>. <div class="help">
</li> <div class="card">
<li> <div class="card-header">
Folgen Sie dem <a href="https://transfer.hft-stuttgart.de/gitlab/explore/projects"> <i class="fas fa-chevron-right">Link zu den Gitlab-Projekten</i></a>, um zum Gitlab zu gelangen. <h3 class="card-title">
</li> <a class="collapsed" data-toggle="collapse" href="#collapse1" aria-expanded="false"
<li> aria-controls="collapse1">
Erstellen Sie dann in Gitlab ein neues Projekt durch Klicken auf den grünen <em>New Project</em>-Knopf und anschließendem Befolgen der Eingabemaske von Gitlab. <br> <small>Möchten Sie die Projektinhalte ansehen oder herunterladen?</small></a>
Weitere Hilfestellung zum Anlegen von Projekten in Gitlab finden Sie in der <a href="https://docs.gitlab.com/ee/gitlab-basics/create-project.html"> <i class="fas fa-chevron-right">Gitlab-Dokumentation</i></a>. </h3>
</li> </div>
</ol> <div id="collapse1" class="card-body collapse">
<p>
<!-- / content body --> Dann klicken Sie auf diesen
</div> <a href="https://transfer.hft-stuttgart.de/gitlab/explore/projects"><i
\ No newline at end of file class="fas fa-chevron-right">Link zu den Gitlab-Projekten</i></a>
um die Liste aller im Gitlab erfassten Projekte zu sehen. Vor dort können Sie dann auf die einzelnen
Projekte zugreifen.
Ein Anmelden am Portal ist dazu nicht nötig.
</p>
</div>
</div>
<br />
<div class="card">
<div class="card-header">
<h3 class="card-title">
<a class="collapsed" data-toggle="collapse" href="#collapse2" aria-expanded="false"
aria-controls="collapse2">
<small>Möchten Sie zu einem Projekt beitragen?</small></a>
</h3>
</div>
<div id="collapse2" class="card-body collapse">
<p>
Sie können mittels Issues dem Projekteigentümer eine Rückmeldung geben bzw. einen Fehler melden.
Darüberhinaus können Sie sich auch aktiv beteiligen. Dazu müssen Sie im Portal als Nutzer
registriert sein.
</p>
<p>
Wenn Sie noch kein Benutzerkonto haben, klicken Sie bitte oben auf den Link Benutzerkonto und folgen
Sie dem System durch die Registrierungsprozedur.
</p>
<p>
Haben Sie ein Benutzerkonto, befolgen Sie bitte folgende Schritte:
</p>
<ol>
<li>
Folgen Sie dem <a href="https://transfer.hft-stuttgart.de/gitlab/explore/projects">
<i class="fas fa-chevron-right">Link zu den Gitlab-Projekten</i></a>, um zum Gitlab zu
gelangen.
</li>
<li>
Melden Sie sich bei Gitlab an, indem Sie im Gitlab auf den Link Sign-In klicken.
</li>
<li>
Sie werden dann auf eine Anmeldeseite von unserem Portal geführt. Geben Sie dort bitte ihre
Benutzerdaten vom Portal ein.
</li>
<li>
Nach erfolgreichem Anmelden werden Sie zum Gitlab zurückgeführt.
</li>
<li>
Navigieren Sie dann zum Projekt Ihrer Wahl.
</li>
<li>
Abhängig davon wie der Projekteigentümer das Projekt konfiguriert hat, können Sie entweder
direkt loslegen, oder Sie müssen zunächst noch beim Projekteigentümer Zugang zum Projekt
anfragen, indem Sie im Gitlab bei der entsprechende Projektseite auf den Link Request Access
klicken.
</li>
</ol>
</div>
</div>
<br />
<div class="card">
<div class="card-header">
<h3 class="card-title">
<a class="collapsed" data-toggle="collapse" href="#collapse3" aria-expanded="false"
aria-controls="collapse3">
<small>Möchten Sie selbst ein Projekt anlegen, um es der Öffentlichkeit
bereitzustellen?</small></a>
</h3>
</div>
<div id="collapse3" class="card-body collapse">
<p>
Vorraussetzung dazu ist, dass Sie aktives oder ehemaliges Mitglied der Hochschule für Technik sind,
d.h. eine (noch) gültige HFT-Emailadresse haben, und zudem im Portal als Nutzer registriert sein.
</p>
<p>
Wenn Sie noch kein Benutzerkonto haben, klicken Sie bitte oben auf den Link Benutzerkonto und folgen
Sie dem System durch die Registrierungsprozedur.
</p>
<p>
Haben Sie ein Benutzerkonto, befolgen Sie bitte folgende Schritte:
</p>
<ol>
<li>
Folgen Sie dem <a href="https://transfer.hft-stuttgart.de/gitlab/explore/projects">
<i class="fas fa-chevron-right">Link zu den Gitlab-Projekten</i></a>, um zum Gitlab zu
gelangen.
</li>
<li>
Melden Sie sich bei Gitlab an, indem Sie im Gitlab auf den Link Sign-In klicken.
</li>
<li>
Sie werden dann auf eine Anmeldeseite von unserem Portal geführt. Geben Sie dort bitte ihre
Benutzerdaten vom Portal ein.
</li>
<li>
Nach erfolgreichem Anmelden werden Sie zum Gitlab zurückgeführt.
</li>
<li>
Erstellen Sie dann in Gitlab ein neues Projekt durch Klicken auf den grünen New Project-Knopf
und anschließendem Befolgen der Eingabemaske von Gitlab.
</li>
</ol>
<p>
Weitere Hilfestellung zum Anlegen von Projekten in Gitlab finden Sie in der <a
href="https://docs.gitlab.com/ee/gitlab-basics/create-project.html"
target="_blank">Gitlab-Dokumentation</a>.
</p>
<p>
Hinweis: Um Inhalte zum Gitlab "pushen" zu können, verwendet die Gitlab-Instanz unseres Portals die
s.g. "SSH Keys".
Weitere Informationen dazu finden Sie in der <a
href="https://transfer.hft-stuttgart.de/gitlab/help/ssh/README" target="_blank">
<i class="fas fa-chevron-right">Gitlab-Dokumentation zu SSH Keys</i></a>.
</p>
</div>
</div>
</div>
<hr />
<!-- / content body -->
</div>
\ No newline at end of file
...@@ -141,20 +141,21 @@ html(lang="de") ...@@ -141,20 +141,21 @@ html(lang="de")
br br
span !{project.further_details} span !{project.further_details}
div(class="Downloads" style="height:200px;") if project.pname == 'M4LAB'
h5 Downloads div(class="Downloads" style="height:200px;")
p h5 Downloads
i(class="fas fa-file-download") p
a(href="./images/M4_LAB_Projekt/transferstrategie.pdf" download target="_blank") Transferstrategie der HfT Stuttgart i(class="fas fa-file-download")
a(href="./images/M4_LAB_Projekt/transferstrategie.pdf" download target="_blank") Transferstrategie der HfT Stuttgart
div(class="Projektlogos") div(class="Projektlogos")
img(src="./images/M4_LAB_Projekt/WRS_Logo.jpg" width="32%") img(src="./images/M4_LAB_Projekt/WRS_Logo.jpg" width="32%")
img(src="./images/M4_LAB_Projekt/IBA2027_Logo.jpg" width="32%") img(src="./images/M4_LAB_Projekt/IBA2027_Logo.jpg" width="32%")
img(src="./images/M4_LAB_Projekt/GWK_Logo.jpg" width="32%") img(src="./images/M4_LAB_Projekt/GWK_Logo.jpg" width="32%")
br br
br br
img(src="./images/M4_LAB_Projekt/bbf_logo.png" width="32%") img(src="./images/M4_LAB_Projekt/bbf_logo.png" width="32%")
img(src="./images/M4_LAB_Projekt/ihs_logo.jpg" width="32%") img(src="./images/M4_LAB_Projekt/ihs_logo.jpg" width="32%")
//jQuery //jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://code.jquery.com/jquery-3.3.1.min.js")
...@@ -162,7 +163,4 @@ html(lang="de") ...@@ -162,7 +163,4 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
if isUserAuthenticated script(src="/js/headfoot.js")
script(src="/js/headfootLogout.js") \ No newline at end of file
else
script(src="/js/headfoot.js")
\ No newline at end of file
...@@ -111,7 +111,4 @@ html(lang="de") ...@@ -111,7 +111,4 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
if isUserAuthenticated script(src="/js/headfoot.js")
script(src="/js/headfootLogout.js") \ No newline at end of file
else
script(src="/js/headfoot.js")
\ No newline at end of file
...@@ -64,7 +64,4 @@ html(lang="de") ...@@ -64,7 +64,4 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
if isUserAuthenticated script(src="/js/headfoot.js")
script(src="/js/headfootLogout.js") \ No newline at end of file
else
script(src="/js/headfoot.js")
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment