diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 273c37c201f929bfc816bdecc014e0b205da7be9..64817da6af7c48e8ec34472a5cfe0666b75cf4bb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,4 +9,16 @@ pages-devel: - testing only: - testing - - test_logoutbutton \ No newline at end of file + - test_logoutbutton + +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 diff --git a/app.js b/app.js index f3ed756b08f43e2b00d9a2ba38528dca12308b2f..68d3e9442d8290a20f6bded553c389810031c0ac 100644 --- a/app.js +++ b/app.js @@ -8,6 +8,8 @@ const bodyParser = require('body-parser'); const session = require('express-session'); const errorhandler = require('errorhandler'); const flash = require('express-flash'); +const fileUpload = require('express-fileupload'); + const i18n = require('i18n'); // internationalization i18n.configure({ locales:['de', 'en'], @@ -22,12 +24,20 @@ var app = express(); app.set('port', config.app.port); app.set('views', __dirname + '/views'); 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(cookieParser()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); app.use(express.static(path.join(__dirname, 'public'))); - app.use(i18n.init); app.use((req, res, next) => { res.setLocale('de'); diff --git a/config/config.js b/config/config.js index 5c0c2cfc56bd3d8e619413a1928de3eac06e9c9f..1d20eccc7b3402b66bfb31fca3c6f78798604be0 100644 --- a/config/config.js +++ b/config/config.js @@ -8,11 +8,11 @@ module.exports = { strategy: 'saml', saml: { 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-testing.m4lab.hft-stuttgart.de', //testing metadata - //issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata - logoutUrl: 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' + //issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', //testing metadata + issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata + logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, database: { @@ -21,7 +21,8 @@ module.exports = { password: 'Stuttgart2019', // DB password port: 3306, // MySQL port 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 }, mailer: { diff --git a/package-lock.json b/package-lock.json index 23c18b893acaa6380eacf6dafc631388f394e344..8def620529bb811a0d3e89dcac0b8c7aa8a42574 100644 --- a/package-lock.json +++ b/package-lock.json @@ -196,6 +196,14 @@ "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": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -432,6 +440,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "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": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -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": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/express-flash/-/express-flash-0.0.2.tgz", @@ -1759,6 +1783,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", diff --git a/package.json b/package.json index 2c3a256225dfdd55c4ad54c364b6e4d650af6004..2df854950e08a3f9e37eb6ff7ff44b94f786b621 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "crypto": "^1.0.1", "errorhandler": "1.4.3", "express": "^4.17.1", + "express-fileupload": "^1.1.6", "express-flash": "0.0.2", "express-session": "^1.17.0", "fs": "0.0.1-security", diff --git a/public/js/registration.js b/public/js/registration.js index 3e6184f9f79ee61c290e2bfb44a7b5046c276e46..8f2c1b545b0233b55082491a416359b98920c2ef 100644 --- a/public/js/registration.js +++ b/public/js/registration.js @@ -8,7 +8,7 @@ $('#inputEmail').change(function(){ $('#emailWarning').empty() isEmailValid = data 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() }) diff --git a/routes/routes-account.js b/routes/routes-account.js index 5c84648e4a9e20bcd3fb050b93b13e913efacb46..43394cac613791892e2b9bb950a3b827ec394e3a 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -58,7 +58,7 @@ module.exports = function (app, config, passport, i18n) { app.post(config.passport.saml.path, passport.authenticate(config.passport.strategy, { - failureRedirect: '/', + failureRedirect: '/account/', failureFlash: true }), function (req, res) { @@ -67,7 +67,7 @@ module.exports = function (app, config, passport, i18n) { ); // to generate Service Provider's XML metadata - app.get('/saml/metadata', + app.get('/saml/metadata', function(req, res) { res.type('application/xml'); var spMetadata = samlStrategy.generateServiceProviderMetadata(fs.readFileSync(__dirname + '/cert/cert.pem', 'utf8')); @@ -104,8 +104,8 @@ module.exports = function (app, config, passport, i18n) { } }) } else { - res.redirect('/account/login'); // localhost - } + res.redirect('/login'); // localhost + } }); app.get('/login', @@ -118,14 +118,14 @@ module.exports = function (app, config, passport, i18n) { app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/account/'); + return res.redirect('/'); } req.user.nameID = req.user.id; req.user.nameIDFormat = req.user.idFormat; return samlStrategy.logout(req, function(err, uri) { req.logout(); - + if ( req.session ) { req.session.destroy((err) => { if(err) { @@ -133,7 +133,7 @@ module.exports = function (app, config, passport, i18n) { } }); } - + return res.redirect(uri); }); }); @@ -149,7 +149,7 @@ module.exports = function (app, config, passport, i18n) { } }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -183,7 +183,7 @@ module.exports = function (app, config, passport, i18n) { // create JSON object of projects and user status for front-end function(userProjects, projectsOverview, done) { var allProjects = [] // JSON object - + var userProjectId = [] // array of user's project_id for (var i = 0; i < userProjects.length; i++) { userProjectId.push(userProjects[i].project_id) @@ -213,7 +213,7 @@ module.exports = function (app, config, passport, i18n) { } ]) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -223,7 +223,7 @@ module.exports = function (app, config, passport, i18n) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -238,7 +238,7 @@ module.exports = function (app, config, passport, i18n) { industry: req.body.inputIndustry, speciality: req.body.inputSpeciality, } - + if (req.isAuthenticated()) { if (userData.email) { 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) { }) } } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); - + app.post('/changePwd', function (req, res) { if (req.isAuthenticated()) { var currPwd = req.body.inputCurrPwd @@ -269,16 +269,20 @@ module.exports = function (app, config, passport, i18n) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/500') - throw err + console.error(err) + res.status(500).render(lang+'/500', { + error: err + }) } var userPwd = rows[0].password // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/500') - throw err + console.error(err) + res.status(500).render(lang+'/500', { + error: err + }) } else if (!isMatch) { //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") @@ -288,7 +292,8 @@ module.exports = function (app, config, passport, i18n) { } else { 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') } else { @@ -324,13 +329,13 @@ module.exports = function (app, config, passport, i18n) { }); } } - }) + }) }) } - }) + }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -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"+ "Thanks,\nM4_LAB Team"; var emailSubject = "Account Access Attempted"; */ - + async.waterfall([ function(done) { crypto.randomBytes(20, function(err, buf) { @@ -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', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); //res.redirect('/forgotPwd'); // deployment - res.redirect('/account/forgotPwd'); // localhost + res.redirect('/account/forgotPwd'); // deployment } else { res.render(lang+'/account/reset'); @@ -455,7 +460,7 @@ module.exports = function (app, config, passport, i18n) { } }); // redirect to login page - res.redirect('/account/login') + res.redirect('/login') } }) }); @@ -463,10 +468,10 @@ module.exports = function (app, config, passport, i18n) { } else { req.flash('error', "User not found.") - res.redirect('/account/login') + res.redirect('/login') } }); - + }); // todo: user registration with captcha @@ -507,7 +512,7 @@ module.exports = function (app, config, passport, i18n) { } else { //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'); }) diff --git a/routes/routes-project.js b/routes/routes-project.js index a85058ff18155ccb4347ce0d512e491da30d5d0a..d34bab483d73e2db2a259a6290b000caadbe2755 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -2,6 +2,8 @@ const methods = require('./methods') const async = require('async') const helpers = require('./helpers') +const pictSizeLimit = 1000000 // 1 MB + module.exports = function (app) { // ======== APP ROUTES - PROJECT ==================== @@ -26,7 +28,8 @@ module.exports = function (app) { name: mailinglistOverview[i].name, src: mailinglistOverview[i].src, 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) { res.render(lang+'/project/addProjectOverview') } else { - res.redirect('/account/login') + res.redirect('/login') } }) @@ -144,7 +147,7 @@ module.exports = function (app) { if (err) { //req.flash('error', "Failed") req.flash('error', "Fehlgeschlagen") - res.redirect('/account/addProjectOverview'); + res.redirect('/addProjectOverview'); } else { req.flash('success', 'Your project has been created.') @@ -160,13 +163,45 @@ module.exports = function (app) { 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: req.body.logo, + logo: projectLogoPath, gitlab: req.body.gitlabURL, wiki: wiki, overview: req.body.overview, @@ -178,7 +213,7 @@ module.exports = function (app) { term: projectTerm, further_details: req.body.furtherDetails, website: req.body.website, - src: req.body.src, + src: projectPicturePath, caption: req.body.caption, contact_lastname: req.body.contactName, contact_email: req.body.contactEmail, @@ -186,6 +221,28 @@ module.exports = function (app) { 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. */ @@ -224,7 +281,7 @@ module.exports = function (app) { if (err) { //req.flash('error', "Failed") req.flash('error', "Fehlgeschlagen") - res.redirect('/account/addProjectOverview'); + res.redirect('/addProjectOverview'); } else { req.flash('success', 'Your project has been created.') diff --git a/views/DE/account/contact.pug b/views/DE/account/contact.pug new file mode 100644 index 0000000000000000000000000000000000000000..25e4dc9c402ef556088b707e1bbe2ce99b41c2a5 --- /dev/null +++ b/views/DE/account/contact.pug @@ -0,0 +1,80 @@ +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") × + 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") × + 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;") Hochschule für Technik Stuttgart
Institut für Angewandte Forschung
Innovative Hochschule - Projekt M4_LAB
Schellingstr. 24
70174 Stuttgart
Deutschland

support-transfer@hft-stuttgart.de

www.hft-stuttgart.de / www.hft-stuttgart.de/M4LAB
+ 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;") Transferportal + p(class="text-center") Das Transferportal entsteht in einem Teilprojekt der Innovativen Hochschule für Technik Stuttgart. Im Innovationslabor M4_LAB 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.

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.

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") diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index dc4e1c83fb6e851c47dd4e86cc07792f1f05c2f9..fa11d3f7d186ba91c1f1bccae8307e5602df3e24 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -6,40 +6,36 @@ html(lang="de") 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", 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-fluid") - div(class="row") - div(class="col-3") - h5 - span #{user.firstname} #{user.lastname} - div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste - a(class="nav-link" href="/logout" aria-selected="false") Logout - div(class="col-sm-9") - p content goes here + div(class="row min-vh-100 flex-column flex-md-row") + aside(class="col-12 col-md-2 p-0 flex-shrink-1") + nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") + div(class="collapse navbar-collapse") + ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") + li(class="nav-item") + a(class="nav-link pl-0 text-nowrap" href="#") + span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} + li(class="nav-item") + 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") + 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.
Dazu finden Sie auf der linken Seite verschiedene Menüs. + p Bei Rückfragen kontaktieren Sie uns bitte unter: support-transfer@hft-stuttgart.de // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") @@ -47,4 +43,4 @@ html(lang="de") // 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/headfootLogout.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index eba579b384e8e1667f795e742fe7366b29fd0c3b..12f789894c9c8b1348e41bf12e12cd5c81d9433c 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -6,39 +6,33 @@ html(lang="de") 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", 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-fluid") - div(class="row") - div(class="col-3") - h5 - span #{user.firstname} #{user.lastname} - div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste - a(class="nav-link" href="/logout" aria-selected="false") Logout - div(class="col-sm-9") + div(class="row min-vh-100 flex-column flex-md-row") + aside(class="col-12 col-md-2 p-0 flex-shrink-1") + nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") + div(class="collapse navbar-collapse") + ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") + li(class="nav-item") + a(class="nav-link pl-0 text-nowrap" href="#") + span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} + li(class="nav-item") + 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 for success in successes div.alert.alert-success.alert-dismissible #{ success } @@ -47,7 +41,7 @@ html(lang="de") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#profileForm(method="POST", action="/account/updateProfile") + form#profileForm(method="POST", action="/updateProfile") div(class="form-row") div(class='form-group col-md-2') label(for="title") Anrede @@ -77,26 +71,26 @@ html(lang="de") } div(class='form-group col-md-2') 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') 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-group col-md-8') 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-group col-md-8') 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-group col-md-8') 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-group col-md-8') 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") // jQuery @@ -105,4 +99,4 @@ html(lang="de") // 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/headfootLogout.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 7d81edee3e47dcb85db9c70cfa392b1e7591e61e..15c438871580fd7d9edc0ffdfef78a0bbc531827 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -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", 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; - } .warning { font-size: 11px; } body div(class="container-fluid") - div(class="row") - div(class="col-3") - h5 - span #{user.firstName} #{user.lastName} - div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste - a(class="nav-link" href="/logout" aria-selected="false") Logout - div(class="col-sm-9") + div(class="row min-vh-100 flex-column flex-md-row") + aside(class="col-12 col-md-2 p-0 flex-shrink-1") + nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") + div(class="collapse navbar-collapse") + ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") + li(class="nav-item") + a(class="nav-link pl-0 text-nowrap" href="#") + span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} + li(class="nav-item") + 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 for success in successes div.alert.alert-success.alert-dismissible #{ success } @@ -51,20 +46,23 @@ html(lang="de") div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × form(class="needs-validation", method="post", action="/account/changePwd" novalidate) - div(class="form-group row") - label(for="currPwd") Aktuelles Passwort - input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) - div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. - div(class="form-group row") - label(for="newPwd") Neues Passwort - input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) - span#recommendation - div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. - div(class="form-group row") - 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. + div(class="form-row") + div(class='form-group col-md-8') + label(for="currPwd") Aktuelles Passwort + input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) + div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. + div(class="form-row") + div(class='form-group col-md-8') + label(for="newPwd") Neues Passwort + input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) + span#recommendation + div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. + div(class="form-row") + div(class='form-group col-md-8') + 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) // jQuery @@ -75,7 +73,7 @@ html(lang="de") // M4_LAB script(src="/js/security.js") script(src="/js/generalFunction.js") - script(src="/js/headfootLogout.js") + script(src="/js/headfoot.js") script. // check input fields 'use strict'; diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 525041ef0bc99e2b461d545eef822466dae4bb3f..8b99f630e68a19498f6f833937b1296b580c962e 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -6,73 +6,39 @@ html(lang="de") 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", 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-fluid") - div(class="row") - div(class="col-3") - h5 - span #{user.firstName} #{user.lastName} - div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste - a(class="nav-link" href="/logout" aria-selected="false") Logout - div(class="col-sm-9") - if successes - for success in successes - div.alert.alert-success.alert-dismissible #{ success } - a(class="close", href="#", data-dismiss="alert", aria-label="close") × - 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") × - table - for item in project - tr - td #{item.title} - if item.userStatus - td - button(type="button", class="btn btn-secondary", onclick="unsubscribe()") Projektbeteiligung beenden - else - td - button(type="button", class="btn btn-success", onclick="subscribe()") Am Projekt beteiligen - tr - td(colspan="2") #{item.summary} - tr - td(colspan="2") Ansprechpartner: #{item.cp} - + div(class="row min-vh-100 flex-column flex-md-row") + aside(class="col-12 col-md-2 p-0 flex-shrink-1") + nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") + div(class="collapse navbar-collapse") + ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") + li(class="nav-item") + a(class="nav-link pl-0 text-nowrap" href="#") + span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} + li(class="nav-item") + 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") + 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" style="color:black;") + span(class="d-none d-md-inline" style="color:black;") 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 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. + // 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/headfootLogout.js") - script. - 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 + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug index 08a391713c561222dec2b9336e60137c3c12dcde..f6517d29faccb116a9e7345b04084ca0a86e53d5 100644 --- a/views/DE/project/addProjectOverview.pug +++ b/views/DE/project/addProjectOverview.pug @@ -43,12 +43,12 @@ html(lang="de") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(method="POST") + form(method="POST" encType="multipart/form-data") div(class='form-row') 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") - 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") input#inputSummary(name="summary" class="form-control" type="text" placeholder="Kurzbeschreibung") div(class='form-group col-md-12') @@ -59,7 +59,10 @@ html(lang="de") option(value="Lehr Projekt") Lehr Projekt option(value="Transfer-projekt") Transfer-projekt 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="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") @@ -85,12 +88,11 @@ html(lang="de") div(class='form-group col-md-12') input#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") div(class="form-group col-md-12") - div(class='form-row') - div(class="form-group col-md-2") -

Laufzeit

- div(class="form-group col-md-5") + div(class='form-group row') + label(for="projectLogo" class="col-sm-2 col-form-label") Laufzeit + div(class="col-md-5") 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)") 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)") @@ -99,7 +101,10 @@ html(lang="de") h5(class="mb-3 font-weight-bold") Bilder div(class='form-row') 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") input#inputCaption(name="caption" class="form-control" type="text" placeholder="Bildunterschrift/Bildquelle") h5(class="mb-3 font-weight-bold") Kontakt @@ -129,7 +134,7 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // Header - script(src="/js/headfootLogout.js") + script(src="/js/headfoot.js") script. $( function() { $.datepicker.setDefaults( $.datepicker.regional["de"] ); diff --git a/views/DE/project/mailinglists.pug b/views/DE/project/mailinglists.pug index 1bc8f5c2c30b1c97c2a1f4bbe859532afd28295f..c38c8042e3dead88fbbf9febf47439d6258e1eab 100644 --- a/views/DE/project/mailinglists.pug +++ b/views/DE/project/mailinglists.pug @@ -2,9 +2,11 @@ html(lang="de") head title= "Mailinglisten" 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", 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. .collapse { display: none; @@ -27,35 +29,71 @@ html(lang="de") transition-property: height,visibility; } body -
- div() - h5(align="left") Aktive Mailinglisten - div(class="flex-container" style="align-items:flex-start") - div(class="table") - table(border="0" id="listtable" class="table table-striped") - thead - tr - th Name - th Link - th zugeh. Projekt - tbody - for item in mailinglists - if item.projectstatus == '1' - tr - td #{item.name} - td #{item.src} - td #{item.project_title} -
- div() - h5(align="left") Eintragung in Mailingliste - p() Wenn Sie sich in eine Mailingliste eintragen wollen, folgen Sie folgender Anleitung: + div(class="container") + div(class="row") + div(class="col-md-12" style="margin-bottom: 40px;") + img(class="mx-auto" src="/img/Mailinglisten.jpg" width="100%") + div(class="container") + div(class="row") + div(class="col-md-12" style="margin-bottom: 30px;") + h4(class="text-center") Durch Mailinglisten können Sie interessierten Personen
regelmäßig Informationen zu Ihrem Projekt oder Thema zukommen lassen.
Ebenso können Sie über ein Abonnement in einer Mailingliste Mitglied des Verteilers
werden und so im Austausch bleiben.
+ div(class="col-md-12" style="margin-bottom: 30px;") + h2(class="text-center" style="color: #708090;") Aktive Mailinglisten + div(class="table-responsive table-borderless") + table(class="table table-striped table-bordered table-hover") + thead() + tr() + th Name + th Zum Abonnement der Mailingliste + th Zum zugehörigen Projekt + th Keywords + tbody() + for item in mailinglists + if item.projectstatus == '1' + tr + td #{item.name} + td #{item.src} + td #{item.project_title} + 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;") Mailingliste abonnieren + 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") Erste Schritte (Anleitung als PDF) + 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") Weitergehende Dokumentation bei DFN (externer Link) + + 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;") Neue Mailingliste erstellen + 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") Erste Schritte (Anleitung als PDF) + 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") Gesamtes Tutorial bei DFN (externer Link) + + 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;") Neue Mailingliste eintragen + div(class="col-xl" style="background-color: #ffffff;") + p() Um Ihre beim DFN angelegte Mailingliste hier aufzunehmen, schicken Sie uns bitte eine Email an support-transfer@hft-stuttgart.de // 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") // Header - if isUserAuthenticated - script(src="/js/headfootLogout.js") - else - script(src="/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/project-simplified.pug b/views/DE/project/project-simplified.pug index 6dead87fc997ba03a27b908f3246c1fd91d9522d..cb868f9ab04683fb3d9c4d4cd5c514c91083f284 100644 --- a/views/DE/project/project-simplified.pug +++ b/views/DE/project/project-simplified.pug @@ -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", 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; - } - .warning { - color: red; - font-size: 11px; - } + .help .card-title > a:before { + float: right !important; + content: "-"; + padding-right: 5px; + } + .help .card-title > a.collapsed:before { + float: right !important; + content: "+"; + } + .help h3 > a { + color: #708090; + text-decoration: none; + display: block; + } + .help a { + display: inline; + } + .help .card > .card-header { + color: #fff; + } + .card-title { + margin-bottom: 0.5rem; + margin-top: 0.5rem; + } + #infoicon { + color: #708090; + } + .heading { + color: #708090; + } body include project.html // 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") // Header - if isUserAuthenticated - script(src="/js/headfootLogout.js") - else - script(src="/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") diff --git a/views/DE/project/project.html b/views/DE/project/project.html index df461962e13ae4c15eb13caa79d5e4a948d96260..73cd0ee53cc11528b2806c7f66a7fa886b0bbdea 100644 --- a/views/DE/project/project.html +++ b/views/DE/project/project.html @@ -1,70 +1,220 @@ -
-
- - Diese Seite bietet den Einstieg zu den unterschiedlichen Projekten, die in unserem Portal für die Öffentlichkeit bereitgestellt werden. - Für diesen Zweck steht zur Zeit ein Dienst bereit: eine von der HFT selbst verwaltete Gitlab-Instanz. - Alle der in diesem Gitlab erfassten Projektinhalte unterliegen einer Open Source bzw. Open Data Lizenz. -

Hinweis: Die Nutzeroberfläche von GitLab ist in Englisch.

+
+
+
+
+
+
+
+
+
+
+
+

Diese Seite bietet den Einstieg zu den Inhalten der unterschiedlichen Projekte, + die über das Portal zur Verfügung gestellt werden.

+
+
+
+
+
+
+
+
+
+ +
+

Open-Source-/ Open-Data-Projekte

+

Für die Veröffentlichung von Open-Source-Projekten steht Ihnen eine von der HFT + Stuttgart selbstverwaltete Gitlab-Instanz bereit. +

+ Eine Übersicht der aktuellen Open-Source-/Open-Data-Projekte erreichen Sie über diesen + Link zu den Gitlab-Projekten.
+

+
+
+
+ +
+

Andere Projekte

+

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. +

+ 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. +

+ Wir entwickeln das Portal kontinuierlich weiter und prüfen dabei auch andere Plattformen zur + Nutzung. +

+
+
+
+
+ +
+

Falls Sie mehr über die + Weiterentwicklung des Portals + erfahren wollen oder sich mit Anregungen auch aktiv einbringen + wollen, regen wir an, unsere Mailingliste + transferportalhft zu abonnieren. Sie können uns aber auch + jederzeit + direkt unter Kontakt anschreiben. +

+
+
+
- -

Direkteinstieg

- Gitlab Projects - - -
-

Hilfestellung zu GitLab

-

Möchten Sie die Projektinhalte ansehen oder herunterladen?

-

- Dann klicken Sie auf diesen Link zu den Gitlab-Projekten 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. -

- -

Möchten Sie zu einem Projekt beitragen?

-

- 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. -

-

- Wenn Sie darüberhinaus beitragen wollen, befolgen Sie bitte folgende Schritte: -

-
    -
  1. - Melden Sie sich bitte im Portal an.
    - Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    - Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. -
  2. -
  3. - Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. -
  4. -
  5. - Fragen Sie beim Projekteigentümer um Zugang, indem Sie im Gitlab bei der entsprechende Projektseite auf den Link Request Access klicken. Solbald dieser ihre Anfrage bestätigt hat, können Sie loslegen. -
  6. -
-

Möchten Sie selbst ein Projekt anlegen, um es der Öffentlichkeit bereitzustellen?

- -

- Vorraussetzung dazu ist, dass Sie aktives oder ehemaliges Mitglied der Hochschule für Technik sind, d.h. eine (noch) gültige HFT-Emailadresse haben. - Dann befolgen Sie bitte folgende Schritte: -

- -
    -
  1. - Melden Sie sich bitte im Portal an.
    - Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    - Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. -
  2. -
  3. - Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. -
  4. -
  5. - 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.
    - Weitere Hilfestellung zum Anlegen von Projekten in Gitlab finden Sie in der Gitlab-Dokumentation. -
  6. -
- - -
\ No newline at end of file + + + +
+ +
+ +

Hilfestellung zu GitLab

+ +
+ +
+
+ +
+

+ Dann klicken Sie auf diesen + Link zu den Gitlab-Projekten + 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. +

+
+
+ +
+ +
+ +
+

+ 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. +

+

+ Wenn Sie noch kein Benutzerkonto haben, klicken Sie bitte oben auf den Link Benutzerkonto und folgen + Sie dem System durch die Registrierungsprozedur. +

+

+ Haben Sie ein Benutzerkonto, befolgen Sie bitte folgende Schritte: +

+
    +
  1. + Folgen Sie dem + Link zu den Gitlab-Projekten, um zum Gitlab zu + gelangen. +
  2. +
  3. + Melden Sie sich bei Gitlab an, indem Sie im Gitlab auf den Link Sign-In klicken. +
  4. +
  5. + Sie werden dann auf eine Anmeldeseite von unserem Portal geführt. Geben Sie dort bitte ihre + Benutzerdaten vom Portal ein. +
  6. +
  7. + Nach erfolgreichem Anmelden werden Sie zum Gitlab zurückgeführt. +
  8. +
  9. + Navigieren Sie dann zum Projekt Ihrer Wahl. +
  10. +
  11. + 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. +
  12. +
+
+
+ +
+ +
+ +
+

+ 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. +

+

+ Wenn Sie noch kein Benutzerkonto haben, klicken Sie bitte oben auf den Link Benutzerkonto und folgen + Sie dem System durch die Registrierungsprozedur. +

+

+ Haben Sie ein Benutzerkonto, befolgen Sie bitte folgende Schritte: +

+
    +
  1. + Folgen Sie dem + Link zu den Gitlab-Projekten, um zum Gitlab zu + gelangen. +
  2. +
  3. + Melden Sie sich bei Gitlab an, indem Sie im Gitlab auf den Link Sign-In klicken. +
  4. +
  5. + Sie werden dann auf eine Anmeldeseite von unserem Portal geführt. Geben Sie dort bitte ihre + Benutzerdaten vom Portal ein. +
  6. +
  7. + Nach erfolgreichem Anmelden werden Sie zum Gitlab zurückgeführt. +
  8. +
  9. + 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. +
  10. +
+

+ Weitere Hilfestellung zum Anlegen von Projekten in Gitlab finden Sie in der Gitlab-Dokumentation. +

+

+ 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 + Gitlab-Dokumentation zu SSH Keys. +

+
+
+
+ +
+ +
\ No newline at end of file diff --git a/views/DE/project/projectOverview.pug b/views/DE/project/projectOverview.pug index 7cf545fb6210357de971c9550079ac7210ca1314..3b0b68f1fe5f285d6377aae28b6c0fcacfa7f95b 100644 --- a/views/DE/project/projectOverview.pug +++ b/views/DE/project/projectOverview.pug @@ -141,20 +141,21 @@ html(lang="de") br span !{project.further_details} - div(class="Downloads" style="height:200px;") - h5 Downloads - p - i(class="fas fa-file-download") - a(href="./images/M4_LAB_Projekt/transferstrategie.pdf" download target="_blank") Transferstrategie der HfT Stuttgart + if project.pname == 'M4LAB' + div(class="Downloads" style="height:200px;") + h5 Downloads + p + i(class="fas fa-file-download") + a(href="./images/M4_LAB_Projekt/transferstrategie.pdf" download target="_blank") Transferstrategie der HfT Stuttgart - div(class="Projektlogos") - 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/GWK_Logo.jpg" width="32%") - br - br - img(src="./images/M4_LAB_Projekt/bbf_logo.png" width="32%") - img(src="./images/M4_LAB_Projekt/ihs_logo.jpg" width="32%") + div(class="Projektlogos") + 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/GWK_Logo.jpg" width="32%") + br + br + img(src="./images/M4_LAB_Projekt/bbf_logo.png" width="32%") + img(src="./images/M4_LAB_Projekt/ihs_logo.jpg" width="32%") //jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") @@ -162,7 +163,4 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // Header - if isUserAuthenticated - script(src="/js/headfootLogout.js") - else - script(src="/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 78a12ecfa73a2435d13067a944440feae19ecaaa..c2730b807aa30e4e7446275dc791777989f1c30b 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -111,7 +111,4 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // Header - if isUserAuthenticated - script(src="/js/headfootLogout.js") - else - script(src="/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/videoconferences.pug b/views/DE/project/videoconferences.pug index 12fc17a9e3cc681096f35dcc1790bf36f1db7450..e6ee7b6907023ec96a97b4e4345c72d94587491e 100644 --- a/views/DE/project/videoconferences.pug +++ b/views/DE/project/videoconferences.pug @@ -64,7 +64,4 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // Header - if isUserAuthenticated - script(src="/js/headfootLogout.js") - else - script(src="/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file