diff --git a/.gitignore b/.gitignore
index 287d7f2735eaad5f58778131a4b1be47fac703f0..14e71094f35ce86e78e4414421a7607bea923540 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
+/built
+/routes/cert
/node_modules
-sp-account-metadata.xml
-.idea
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 273c37c201f929bfc816bdecc014e0b205da7be9..d11d9bcd8890c2e0f975366101dbb4416ed56419 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,12 +1,39 @@
-pages-devel:
+deploy-testing:
stage: deploy
script:
- npm install
+ - npm run clean
+ - npm run build
+ - rm -rf ./built/public/default
+ - rm -rf ./built/routes/cert
+ - rm -rf ./built/views
+ - cp -R ./public/default ./built/public
+ - cp -R ./routes/cert ./built/routes
+ - cp -R ./views ./built
+ - cat $configfiledev > ./built/config/config.js
+ - cat $cert > ./built/routes/cert/cert.pem
+ - cat $certidp > ./built/routes/cert/cert_idp.pem
+ - cat $key > ./built/routes/cert/key.pem
- "pm2 delete --silent account || :"
- - pm2 start ./app.js --name=account
+ - pm2 start ./built/app.js --name=account
- pm2 save
tags:
- testing
only:
- testing
- - test_logoutbutton
\ No newline at end of file
+
+deploy-master:
+ stage: deploy
+ script:
+ - cat $configfileprod > ./config/config.js
+ - cat $cert > ./routes/cert/cert.pem
+ - cat $certidp > ./routes/cert/cert_idp.pem
+ - cat $key > ./routes/cert/key.pem
+ - 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/README.md b/README.md
index 0de3d9460f1eaa4c504408716c08d3b039b63e04..1ca41b18c0974529f197555999bceb6f79d86794 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
User Account Management
-Re-implementation of https://transfer.hft-stuttgart.de/gitlab/sihombing/portal/tree/master/app-useracc using NodeJS and ExpressJS
\ No newline at end of file
+This is the repository of the User Account of the TransferPortal.
\ No newline at end of file
diff --git a/__tests__/gitlab.unit.test.ts b/__tests__/gitlab.unit.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c1e5ad91d5c7352f48a02c56d26092030bdf4f50
--- /dev/null
+++ b/__tests__/gitlab.unit.test.ts
@@ -0,0 +1,32 @@
+import gitlab from '../functions/gitlab'
+//const axios = require('axios')
+//jest.mock('axios')
+
+describe('GitLab API', () => {
+ test('returns an existing gitlab user by an email address', async () => {
+ let user = await gitlab.getUserByEmail('litehon958@whipjoy.com')
+ expect(user).not.toBeNull()
+ })
+ test('returns an undefined user', async () => {
+ let user = await gitlab.getUserByEmail('johndoe@nowhere.com')
+ expect(user).toBeUndefined()
+ })
+
+ test('returns users project', async () => {
+ let userProjects = await gitlab.getUserProjects(136)
+ expect(userProjects).toBeDefined()
+ })
+ test('returns undefined projects, due to non-existing gitlab user ID', async () => {
+ let userProjects = await gitlab.getUserProjects(0)
+ expect(userProjects).toBeUndefined()
+ })
+
+ test('returns a project by ID', async () => {
+ let project = await gitlab.getProjectById(13) // m4lab_landing_page
+ expect(project).toBeDefined()
+ })
+ test('returns undefined, due to invalid project ID', async () => {
+ let project = await gitlab.getProjectById(0)
+ expect(project).toBeUndefined()
+ })
+})
\ No newline at end of file
diff --git a/__tests__/method.unit.test.ts b/__tests__/method.unit.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2a11d1329a00806a4aeb0aab14e1cc40fe6e6ec7
--- /dev/null
+++ b/__tests__/method.unit.test.ts
@@ -0,0 +1,52 @@
+import methods from '../functions/methods'
+
+describe("DB methohds test", () => {
+
+ it("returns a user from DB by email", async() => {
+ const user = await methods.getUserByEmail('litehon958@whipjoy.com')
+ expect(user).not.toBeNull()
+ })
+ it("returns a null user", async() => {
+ const user = await methods.getUserByEmail('jondoe@nowhere.com') // a non-exist user
+ expect(user).toBeNull()
+ })
+
+ it("returns a user's email", async() => {
+ const email = await methods.getUserEmailById(1)
+ expect(email).not.toBeNull()
+ })
+ it("returns null instead of a user's email", async() => {
+ const email = await methods.getUserEmailById(1005) // no user has this ID
+ expect(email).toBeNull()
+ })
+
+ it("returns null from DB by token", async() => {
+ const user = await methods.getUserByToken('12345678') // unvalid token
+ expect(user).toBeNull() // for valid token = expect(user).not.toBeNull()
+ })
+
+ it("returns a user's verification token, if any", async() => {
+ const token = await methods.getVerificationTokenByUserId(1)
+ expect(token).toBeNull()
+ })
+
+ it("returns a user's ID, if any", async() => {
+ const token = await methods.getUserIdByVerificationToken('12345678') // unvalid token
+ expect(token).toBeNull() // for valid token = expect(user).not.toBeNull()
+ })
+
+ it("returns a user's GitLab_ID, if any", async() => {
+ const id = await methods.getGitlabId(1)
+ expect(id).not.toBeNull()
+ })
+
+ it("checks user email", async() => {
+ const user = await methods.checkUserEmail('litehon958@whipjoy.com')
+ expect(user).not.toBeNull()
+ })
+ it("checks user email and return null", async() => {
+ const user = await methods.checkUserEmail('jondoe@nowhere.com') // a non-exist user
+ expect(user).toBeNull()
+ })
+
+})
\ No newline at end of file
diff --git a/app.js b/app.js
deleted file mode 100644
index 68d3e9442d8290a20f6bded553c389810031c0ac..0000000000000000000000000000000000000000
--- a/app.js
+++ /dev/null
@@ -1,91 +0,0 @@
-const express = require('express');
-const http = require('http');
-const path = require('path');
-const passport = require('passport');
-const morgan = require('morgan');
-const cookieParser = require('cookie-parser');
-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'],
- directory: './locales'
-});
-
-var env = process.env.NODE_ENV || 'development';
-const config = require('./config/config')[env];
-
-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');
- next();
-});
-
-app.use(session(
- {
- resave: true,
- saveUninitialized: true,
- secret: 'thisisasecret'
- }
-));
-app.use(flash());
-app.use((req, res, next) => {
- res.locals.errors = req.flash("error");
- res.locals.successes = req.flash("success");
- next();
-});
-
-app.use(passport.initialize());
-app.use(passport.session());
-
-// caching disabled for every route
-// NOTE: Works in Firefox and Opera. Does not work in Edge
-app.use(function(req, res, next) {
- res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
- next();
-});
-
-require('./routes/routes-account')(app, config, passport, i18n);
-require('./routes/routes-project')(app, config, passport);
-require('./routes/api')(app, config, passport);
-
-// Handle 404
-app.use(function (req, res, next) {
- //res.status(404).send('404: Page not Found', 404)
- res.status(404).render('./DE/404')
-})
-
-// Handle 500 - any server error
-app.use(function (err, req, res, next) {
- console.error(err.stack)
- res.status(500).render('./DE/500', {
- error: err
- })
-})
-
-app.listen(app.get('port'), function () {
- console.log('Express server listening on port ' + app.get('port'));
-});
\ No newline at end of file
diff --git a/app.ts b/app.ts
new file mode 100644
index 0000000000000000000000000000000000000000..89a8a359589fd6220aeab4f5ec4e14e0c742df46
--- /dev/null
+++ b/app.ts
@@ -0,0 +1,93 @@
+import express from 'express';
+import path from 'path';
+import passport from 'passport';
+import morgan from 'morgan';
+import cookieParser from 'cookie-parser';
+import bodyParser from 'body-parser';
+import session from 'express-session';
+import flash from 'express-flash-2';
+import fileUpload from 'express-fileupload';
+import helmet from 'helmet';
+import compression from 'compression';
+import methodOverride from 'method-override';
+import dotenv from 'dotenv'
+
+dotenv.config();
+
+var env = process.env.NODE_ENV || 'testing';
+const config = require('./config/config')[env];
+const lang = 'DE';
+
+var app = express();
+app.set('port', config.app.port);
+app.set('views', path.join( __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(methodOverride('_method'));
+app.use(
+ helmet.contentSecurityPolicy({
+ useDefaults: true,
+ directives: {
+ "font-src": ["'self'", "https://use.fontawesome.com"],
+ "img-src": ["'self'", "https://transfer.hft-stuttgart.de"],
+ "script-src": ["'self'", "https://code.jquery.com/jquery-3.3.1.min.js", "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js",
+ "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js", "https://unpkg.com/bootstrap-show-password@1.2.1/dist/bootstrap-show-password.min.js"],
+ "style-src": ["'self'", "https://use.fontawesome.com/releases/v5.8.2/css/all.css"],
+ "frame-src": ["'self'"]
+ },
+ reportOnly: true,
+ })
+);
+
+app.use(compression());
+app.use(morgan('combined'));
+app.use(cookieParser(config.app.sessionSecret));
+app.use(bodyParser.json());
+app.use(bodyParser.urlencoded({extended: false}));
+app.use(express.static(path.join(__dirname, 'public')));
+app.use((req, res, next) => {
+ next();
+});
+
+app.use(session({
+ resave: true,
+ saveUninitialized: true,
+ secret: config.app.sessionSecret
+}));
+app.use(flash());
+app.use(passport.initialize());
+app.use(passport.session());
+
+// caching disabled for every route
+// NOTE: Works in Firefox and Opera. Does not work in Edge
+app.use(function(req, res, next) {
+ res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
+ next();
+});
+
+require('./routes/public')(app, config, lang);
+require('./routes/account')(app, config, passport, lang);
+
+// Handle 404
+app.use(function (req:any, res:any) {
+ res.status(404).render(lang+'/404')
+})
+
+// Handle 500 - any server error
+app.use(function (err:any, req:any, res:any, next:any) {
+ console.error(err.stack)
+ res.status(500).render(lang+'/500', {
+ error: err
+ })
+})
+
+app.listen(app.get('port'), function () {
+ console.log('Express server listening on port ' + app.get('port'));
+});
\ No newline at end of file
diff --git a/classes/project.ts b/classes/project.ts
new file mode 100644
index 0000000000000000000000000000000000000000..045e86a73cad5333ba58bf85f9be8aa19fa619ea
--- /dev/null
+++ b/classes/project.ts
@@ -0,0 +1,58 @@
+class Project {
+ ownerGitlabId:number
+ name:string
+ desc:string
+ id?:number
+ logo?:string
+ path?:string
+
+ constructor(ownerGitlabId:number, name:string, desc:string, id?:number, logo?:string, path?:string) {
+ this.ownerGitlabId = ownerGitlabId
+ this.name = name
+ this.desc = desc
+ this.id = id
+ this.logo = logo
+ this.path = path
+ }
+
+ // getter
+ getOwnerGitlabId() {
+ return this.ownerGitlabId
+ }
+ getId() {
+ return this.id
+ }
+ getName() {
+ return this.name
+ }
+ getDesc() {
+ return this.desc
+ }
+ getLogo() {
+ return this.logo
+ }
+ getPath() {
+ return this.path
+ }
+ // setter
+ setOwnerGitlabId(newOwnerGitlabId:number){
+ this.ownerGitlabId = newOwnerGitlabId
+ }
+ setId(newId:number) {
+ this.id = newId
+ }
+ setName(newName:string) {
+ this.name = newName
+ }
+ setDesc(newDesc:string) {
+ this.desc = newDesc
+ }
+ setLogo(newLogoUrl:string) {
+ this.logo = newLogoUrl
+ }
+ setPath(newPath:string) {
+ this.path = newPath
+ }
+}
+
+export = Project
\ No newline at end of file
diff --git a/classes/repo.ts b/classes/repo.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b41a8fe9ad343c385383d8ede7f1f82a57f6162f
--- /dev/null
+++ b/classes/repo.ts
@@ -0,0 +1,9 @@
+import Project from "./project"
+
+class Repo extends Project {
+ constructor(ownerGitlabId:number, name:string, desc:string, id?:number, logo?:string, path?:string) {
+ super(ownerGitlabId, name, desc, id, logo, path)
+ }
+}
+
+export = Repo
\ No newline at end of file
diff --git a/classes/user.ts b/classes/user.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3b26a694b4a95dd98109f976189561ff8a08a31d
--- /dev/null
+++ b/classes/user.ts
@@ -0,0 +1,97 @@
+class User {
+ id:number
+ email:string
+ salutation:string // should be enum
+ title:string // should be enum
+ firstName:string
+ lastName:string
+ industry:string
+ organisation:string
+ speciality:string
+ is_m4lab_idp:number // 1 or 0
+ verificationStatus:number // 1 or 0 - // should be boolean
+ gitlabUserId?:number
+
+ constructor(id:number, email:string, salutation:string, title:string, firstName:string, lastName:string, industry:string, organisation:string,
+ speciality:string, is_m4lab_idp:number, verificationStatus:number, gitlabUserId?:number) {
+ this.id = id
+ this.email = email
+ this.salutation = salutation
+ this.title = title
+ this.firstName = firstName
+ this.lastName = lastName
+ this.industry = industry
+ this.organisation = organisation
+ this.speciality = speciality
+ this.is_m4lab_idp = is_m4lab_idp
+ this.verificationStatus = verificationStatus
+ this.gitlabUserId = gitlabUserId
+ }
+
+ // getter
+ getId() {
+ return this.id
+ }
+ getEmail() {
+ return this.email
+ }
+ getFullName() {
+ return this.firstName+' '+this.lastName
+ }
+ getIdpStatus() {
+ return this.is_m4lab_idp
+ }
+ getVerificationStatus() {
+ return this.verificationStatus
+ }
+ getGitlabUserId() {
+ return this.gitlabUserId
+ }
+ // setter
+ setEmail(email:string) {
+ this.email = email
+ }
+ setSalutation(salutation:string) {
+ this.salutation = salutation
+ }
+ setTitle(title:string) {
+ this.title = title
+ }
+ setFirstName(firstName:string) {
+ this.firstName = firstName
+ }
+ setLastName(lastName:string) {
+ this.lastName = lastName
+ }
+ setIndustry(industry:string) {
+ this.industry = industry
+ }
+ setOrganisation(organisation:string) {
+ this.organisation = organisation
+ }
+ setSpeciality(speciality:string) {
+ this.speciality = speciality
+ }
+ setM4lab_idp(m4lab_idp:number) {
+ this.is_m4lab_idp = m4lab_idp
+ }
+ setVerificationStatus(verificationStatus:number) {
+ this.verificationStatus = verificationStatus
+ }
+ setGitlabUserId(newGitlabUserId:number) {
+ this.gitlabUserId = newGitlabUserId
+ }
+
+ updateProfile(newSalutation:string, newTitle:string, newFirstname:string, newLastname:string, newEmail:string, newOrganisation:string, newIndustry:string, newSpeciality:string) {
+ this.salutation = newSalutation
+ this.title = newTitle
+ this.firstName = newFirstname
+ this.lastName = newLastname
+ this.email = newEmail
+ this.organisation = newOrganisation
+ this.industry = newIndustry
+ this.speciality = newSpeciality
+ }
+}
+
+export = User
\ No newline at end of file
diff --git a/classes/website.ts b/classes/website.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bd64140dde3774db0aeaba750bd07691ac348059
--- /dev/null
+++ b/classes/website.ts
@@ -0,0 +1,9 @@
+import Project from "./project"
+
+class Website extends Project {
+ constructor(ownerGitlabId:number, name:string, desc:string, id?:number, logo?:string, path?:string) {
+ super(ownerGitlabId, name, desc, id, logo, path)
+ }
+}
+
+export = Website
\ No newline at end of file
diff --git a/config/config.js b/config/config.js
deleted file mode 100644
index b4c47761de28b53ca6532d256f34e203e9ea8e06..0000000000000000000000000000000000000000
--- a/config/config.js
+++ /dev/null
@@ -1,38 +0,0 @@
-module.exports = {
- development: {
- app: {
- name: 'User Account Management',
- port: process.env.PORT || 9989
- },
- passport: {
- 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',
- //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'
- }
- },
- database: {
- host: 'transfer.hft-stuttgart.de', // DB host
- user: 'DBManager', // DB username
- password: 'Stuttgart2019', // DB password
- port: 3306, // MySQL port
- dbUser: 'userdb', // User DB
- host_project: 'm4lab.hft-stuttgart.de', // DB host project db
- //host_project: 'localhost', // local
- dbProject: 'projectDB' // Project DB
- },
- mailer: {
- host: 'mail.hft-stuttgart.de', // hostname
- secureConnection: false, // TLS requires secureConnection to be false
- port: 587, // port for secure SMTP
- authUser: 'ad\\support-transfer',
- authPass: '6laumri2',
- tlsCiphers: 'SSLv3',
- from: 'support-transfer@hft-stuttgart.de',
- }
- }
-}
diff --git a/config/config.ts b/config/config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..47558a5d53d2a00b17098074510779b5bb44cb05
--- /dev/null
+++ b/config/config.ts
@@ -0,0 +1,80 @@
+export = {
+ development: {
+ app: {
+ name: 'User Account Management',
+ port: process.env.PORT || 9989,
+ host: 'http://localhost:9989',
+ sessionSecret: 'thisisasecret'
+ },
+ passport: {
+ strategy: 'saml',
+ saml: {
+ path: process.env.SAML_PATH || '/saml/SSO',
+ entryPoint: process.env.SAML_ENTRY_POINT || 'Saml Entry Point',
+ issuer: 'SAML issuer', //local metadata
+ logoutUrl: 'SAML logout URL'
+ }
+ },
+ database: {
+ host: 'localhost', // DB host
+ user: 'usernamedb', // DB username
+ password: 'passworddb', // DB password
+ port: 3306, // MySQL port
+ dbUser: 'userdb', // User DB
+ host_project: 'localhost', // DB host project db
+ dbProject: 'projectdb' // Project DB
+ },
+ mailer: {
+ host: 'mailhost', // hostname
+ secureConnection: false, // TLS requires secureConnection to be false
+ port: 587, // port for secure SMTP
+ TLS: true,
+ authUser: 'mailuser',
+ authPass: 'mailpass',
+ tlsCiphers: 'SSLv3',
+ from: 'mailfrom',
+ },
+ gitlab: {
+ token_readWriteProjects: 'token-goes-here'
+ }
+ },
+ testing: {
+ app: {
+ name: 'User Account Management',
+ port: process.env.PORT || 9989,
+ host: 'https://m4lab.hft-stuttgart.de/account',
+ sessionSecret: 'thisisasecret'
+ },
+ passport: {
+ strategy: 'saml',
+ saml: {
+ path: process.env.SAML_PATH || '/saml/SSO',
+ entryPoint: process.env.SAML_ENTRY_POINT || 'saml entry point',
+ issuer: 'SAML issuer', //testing metadata
+ logoutUrl: 'SAML logout URL'
+ }
+ },
+ database: {
+ host: 'dbhost', // DB host
+ user: 'dbuser', // DB username
+ password: 'dbpass', // DB password
+ port: 3306, // MySQL port
+ dbUser: 'userdb', // User DB
+ host_project: 'dbhost', // DB host project db
+ dbProject: 'projectdb' // Project DB
+ },
+ mailer: {
+ host: 'mailhost', // hostname
+ secureConnection: false, // TLS requires secureConnection to be false
+ port: 587, // port for secure SMTP
+ TLS: true,
+ authUser: 'mailuser',
+ authPass: 'mailpass',
+ tlsCiphers: 'SSLv3',
+ from: 'mailfrom',
+ },
+ gitlab: {
+ token_readWriteProjects: 'token-goes-here'
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/const.ts b/config/const.ts
new file mode 100644
index 0000000000000000000000000000000000000000..302d017701af834d7cf3f73f3b66c2e0a0d2f584
--- /dev/null
+++ b/config/const.ts
@@ -0,0 +1,19 @@
+export = {
+
+ mailSignature: 'Mit den besten Grüßen,
das Transferportal-Team der HFT Stuttgart
' +
+ 'Transferportal der Hochschule für Technik Stuttgart
' +
+ 'Schellingstr. 24 70174 Stuttgart
' +
+ 'm4lab@hft-stuttgart.de
' +
+ 'https://transfer.hft-stuttgart.de
' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '' +
+ '' +
+ '
',
+ updatePasswordMailSubject: "Ihr Passwort für das Transferportal wurde gespeichert.",
+ updatePasswordMailContent: '
Lieber Nutzer,
' +
+ '
herzlich willkommen beim Transferportal der HFT Stuttgart!
' +
+ 'Sie können nun alle Dienste des Portals nutzen.
' + constants.mailSignature;
+ mailer.options.to = userEmail;
+ mailer.options.subject = emailSubject;
+ mailer.options.html = emailContent;
+ mailer.transporter.sendMail(mailer.options, function(err:any) {
+ if (err) {
+ console.log('cannot send email');
+ throw err;
+ }
+ })
+
+ res.render(lang+'/account/verification', {
+ status: true
+ })
+ }
+ }
+ })
+ }
+ })
+
+ // ==================== FORGOT PASSWORD ===========================
+
+ app.get('/forgotPwd', function (req:any, res:any) {
+ res.render(lang+'/account/forgotPwd', {
+ user: req.user
+ })
+ })
+ app.post('/forgotPwd', function(req:any, res:any) {
+ let emailAddress = req.body.inputEmail
+ async.waterfall([
+ async function(done:any) {
+ let user = await methods.checkUserEmail(emailAddress)
+ if (!user) {
+ console.log('No user found: '+emailAddress)
+ } else {
+ // generate token
+ let token:string = '';
+ let randomChars:string = 'abcdefghijklmnopqrstuvwxyz0123456789';
+ for ( let i = 0; i<40; i++ ) {
+ token += randomChars.charAt(Math.floor(Math.random() * randomChars.length));
+ }
+
+ let emailSubject = "Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart";
+ let emailContent = '
Lieber Nutzer,
' +
+ '
wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.
' +
+ 'Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: '+config.app.host+'/reset/' + token + '
' +
+ 'Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.
' + constants.mailSignature + '
'
+
+ let credentialData = {
+ user_id: user.id,
+ resetPasswordToken: token,
+ resetPasswordExpires: Date.now() + 3600000 // 1 hour
+ }
+ let result = await methods.updateCredential(credentialData)
+ if (!result) {
+ console.log('failed to update credential')
+ } else {
+ // send email
+ mailer.options.to = emailAddress
+ mailer.options.subject = emailSubject
+ mailer.options.html = emailContent
+ mailer.transporter.sendMail(mailer.options, function(err:any) {
+ if (err) { console.error(err) }
+ })
+ }
+ }
+ done(null)
+ }
+ ], function(err:any) {
+ if (err) {
+ res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.')
+ }
+ else {
+ res.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.')
+ }
+ res.redirect('/account/forgotPwd')
+ })
+ })
+
+ // reset
+ app.get('/reset/:token', async function(req:any, res:any) {
+ let user = await methods.getUserByToken(req.params.token)
+ if (!user) {
+ res.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.')
+ res.redirect('/account/forgotPwd')
+ } else {
+ res.render(lang+'/account/reset')
+ }
+ })
+ app.post('/reset/:token', async function(req:any, res:any) {
+ let newPwd = req.body.inputNewPwd
+
+ let user = await methods.getUserByToken(req.params.token)
+ if (!user) {
+ res.flash('error', "User not found.")
+ res.redirect('/login')
+ } else {
+ // encrypt password
+ bcrypt.genSalt(saltRounds, function(err, salt) {
+ bcrypt.hash(newPwd, salt, async function(err:any, hash) {
+ let credentialData = {
+ password: hash,
+ user_id: user.user_id,
+ resetPasswordToken: null,
+ resetPasswordExpires: null
+ }
+ // update password
+ let result = await methods.updateCredential(credentialData)
+ if (!result) {
+ console.log('Failed to reset password')
+ res.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.")
+ } else {
+ res.flash('success', "Passwort aktualisiert!")
+ // send notification email
+ mailer.options.to = user.email
+ mailer.options.subject = constants.updatePasswordMailSubject
+ mailer.options.html = constants.updatePasswordMailContent+'
'+constants.mailSignature+'
'
+ mailer.transporter.sendMail(mailer.options, function(err:any) {
+ if (err) { console.log(err) }
+ })
+ }
+ res.redirect('/login')
+ });
+ });
+ }
+
+ })
+
+ // ======================= CONTACT FORM ===========================
+ app.get('/contact', function (req:any, res:any) {
+ res.render(lang+'/account/contact', {
+ user: req.user
+ })
+ })
+ app.post('/contact', function(req:any, res:any, next:any) {
+ //methods.currentDate();
+ let emailAddress = req.body.inputEmail;
+ let supportAddress = "support-transfer@hft-stuttgart.de";
+ let inputName = req.body.name;
+ let inputContent = req.body.message;
+ let emailSubject = "Ihre Anfrage an das Transferportal";
+ let emailContent = "
Es wurde eine Anfrage an das Transferportal gestellt:
NAME: " + inputName + "
NACHRICHT: "+ inputContent+"
";
+ async.waterfall([
+ function(done:any) {
+ // send email
+ mailer.options.to = supportAddress;
+ mailer.options.cc = emailAddress;
+ mailer.options.subject = emailSubject;
+ mailer.options.html = emailContent;
+ mailer.transporter.sendMail(mailer.options, function(err:any) {
+ done(err, 'done');
+ });
+ }
+ ], function(err:any) {
+ if (err) {
+ console.error(err)
+ res.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.');
+ }
+ else {
+ res.flash('success', 'Vielen Dank für Ihre Anfrage. Wir melden uns baldmöglichst bei Ihnen. Eine Kopie Ihrer Anfrage wurde an ' + emailAddress + ' versandt.');
+ }
+ res.redirect('/account/contact')
+ })
+ })
+
+}
\ No newline at end of file
diff --git a/routes/routes-account.js b/routes/routes-account.js
deleted file mode 100644
index 43394cac613791892e2b9bb950a3b827ec394e3a..0000000000000000000000000000000000000000
--- a/routes/routes-account.js
+++ /dev/null
@@ -1,572 +0,0 @@
-const fs = require('fs')
-const SamlStrategy = require('passport-saml').Strategy
-const dbconn = require('./dbconn')
-const methods = require('./methods')
-// pwd encryption
-const bcrypt = require('bcryptjs');
-const saltRounds = 10;
-const salt = 64; // salt length
-// forgot pwd
-const async = require('async')
-const crypto = require('crypto')
-const mailer = require('./mailer')
-
-module.exports = function (app, config, passport, i18n) {
-
- // =========== PASSPORT =======
- passport.serializeUser(function (user, done) {
- done(null, user);
- });
-
- passport.deserializeUser(function (user, done) {
- done(null, user);
- });
-
- var samlStrategy = new SamlStrategy({
- // URL that goes from the Identity Provider -> Service Provider
- callbackUrl: config.passport.saml.path,
- // Base address to call logout requests
- logoutUrl: config.passport.saml.logoutUrl,
-
- entryPoint: config.passport.saml.entryPoint,
- issuer: config.passport.saml.issuer,
- identifierFormat: null,
-
- // Service Provider private key
- decryptionPvk: fs.readFileSync(__dirname + '/cert/key.pem', 'utf8'),
- // Service Provider Certificate
- privateCert: fs.readFileSync(__dirname + '/cert/key.pem', 'utf8'),
- // Identity Provider's public key
- cert: fs.readFileSync(__dirname + '/cert/cert_idp.pem', 'utf8'),
-
- validateInResponseTo: false,
- disableRequestedAuthnContext: true
- },
- function (profile, done) {
- return done(null, {
- id: profile.nameID,
- idFormat: profile.nameIDFormat,
- email: profile.email,
- firstName: profile.givenName,
- lastName: profile.sn
- });
- });
-
- passport.use(samlStrategy);
-
- // ============= SAML ==============
- app.post(config.passport.saml.path,
- passport.authenticate(config.passport.strategy,
- {
- failureRedirect: '/account/',
- failureFlash: true
- }),
- function (req, res) {
- res.redirect('/account/');
- }
- );
-
- // to generate Service Provider's XML metadata
- app.get('/saml/metadata',
- function(req, res) {
- res.type('application/xml');
- var spMetadata = samlStrategy.generateServiceProviderMetadata(fs.readFileSync(__dirname + '/cert/cert.pem', 'utf8'));
- res.status(200).send(spMetadata);
- }
- );
-
- // ================ test i18n ==================
- i18n.setLocale('de');
- app.get('/de', function(req, res) {
- var greeting = i18n.__('Hello World')
- res.send(greeting)
- });
-
- var lang = 'DE'
-
- // ======== APP ROUTES - ACCOUNT ====================
- var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert."
- var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+
- "Transferportal der Hochschule für Technik Stuttgart\n"+
- "Schellingstr. 24\n"+
- "70174 Stuttgart\n"+
- "m4lab@hft-stuttgart.de\n"+
- "https://transfer.hft-stuttgart.de"
- var updatePasswordMailContent = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature
-
- app.get('/', function (req, res) {
- if (req.isAuthenticated()) {
- methods.getUserByEmail(req.user.email, function(data, err){
- if (!err) {
- res.render(lang+'/account/home', {
- user: data
- });
- }
- })
- } else {
- res.redirect('/login'); // localhost
- }
- });
-
- app.get('/login',
- passport.authenticate(config.passport.strategy,
- {
- successRedirect: '/',
- failureRedirect: '/login'
- })
- );
-
- app.get('/logout', function (req, res) {
- if (req.user == null) {
- 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) {
- return console.log(err);
- }
- });
- }
-
- return res.redirect(uri);
- });
- });
-
- app.get('/profile', function (req, res) {
- if (req.isAuthenticated()) {
- methods.getUserByEmail(req.user.email, function(data, err){
- if (!err) {
- res.render(lang+'/account/profile', {
- user: data,
- email: req.user.email
- });
- }
- })
- } else {
- res.redirect('/login');
- }
- });
-
- app.get('/services', function (req, res) {
- if (req.isAuthenticated()) {
- async.waterfall([
- // get userId by email from userdb
- function(done) {
- methods.getUserIdByEmail(req.user.email, function(userId, err) {
- if (!err) {
- done(err, userId)
- }
- })
- },
- // get user-project-role from userdb
- function(userId, done) {
- methods.getUserProjectRole(userId, function(userProjects, err) {
- if (!err) {
- done(err, userProjects)
- }
- })
- },
- // get all projects from projectdb
- function(userProjects, done) {
- methods.getAllProjects(function(projectsOverview, err) {
- if (!err) {
- done(err, userProjects, projectsOverview)
- }
- })
- },
- // 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)
- }
-
- for (var i = 0; i < projectsOverview.length; i++) {
- // check if projectId is exist in userProjectId[]
- var status = false
- if (userProjectId.indexOf(projectsOverview[i].id) > -1) {
- status = true
- }
- // add data to JSON object
- allProjects.push({
- id: projectsOverview[i].id,
- title: projectsOverview[i].title,
- summary: projectsOverview[i].onelinesummary,
- cp: projectsOverview[i].contact_email,
- userStatus: status
- });
- }
-
- // render the page
- res.render(lang+'/account/services', {
- user: req.user,
- project: allProjects
- });
- }
- ])
- } else {
- res.redirect('/login');
- }
- });
-
- app.get('/security', function (req, res) {
- if (req.isAuthenticated()) {
- res.render(lang+'/account/security', {
- user: req.user // useful for view engine, useless for HTML
- });
- } else {
- res.redirect('/login');
- }
- });
-
- app.post('/updateProfile', function (req, res) {
- var userData = {
- salutation: req.body.inputSalutation,
- title: req.body.inputTitle,
- firstname: req.body.inputFirstname,
- lastname: req.body.inputLastname,
- email: req.body.inputEmail,
- organisation: req.body.inputOrganisation,
- 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) {
- //if (err) throw err;
- if (err) {
- req.flash('error', "Failed");
- }
- else {
- //req.flash('success', 'Profile updated!');
- req.flash('success', 'Ihr Benutzerprofil wurde aktualisiert!');
- }
- res.redirect('/account/profile');
- })
- }
- } else {
- res.redirect('/login');
- }
- });
-
- app.post('/changePwd', function (req, res) {
- if (req.isAuthenticated()) {
- var currPwd = req.body.inputCurrPwd
- var newPwd = req.body.inputNewPwd
- var retypePwd = req.body.inputConfirm
-
- methods.getUserIdByEmail(req.user.email, function(userId, err) {
- if (!err) {
- // Load hashed passwd from DB
- dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) {
- if (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) {
- 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.")
- req.flash('error', "Das Passwort ist leider falsch. Bitte überprüfen Sie Ihre Eingabe.")
- //res.redirect('/security')
- res.redirect('/account/security')
- }
- else {
- if ( newPwd != retypePwd ) {
- //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 {
- // update password
- bcrypt.genSalt(saltRounds, function(err, salt) {
- bcrypt.hash(newPwd, salt, function(err, hash) {
- var credentialData = {
- password: hash,
- user_id: userId
- }
- methods.updateCredential(credentialData, function(err){
- if (err) {
- //req.flash('error', "Database error: Password cannot be modified.")
- req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.")
- throw err
- }
- else {
- //req.flash('success', "Pasword updated!")
- req.flash('success', "Passwort aktualisiert!")
- mailer.options.to = req.user.email
- //mailOptions.subject = "Your M4_LAB Password has been updated."
- mailer.options.subject = updatePasswordMailSubject
- mailer.options.text = updatePasswordMailContent
- mailer.transport.sendMail(mailer.options, function(err) {
- if (err) {
- console.log(err)
- }
- });
- }
- res.redirect('/account/security')
- })
- });
- });
- }
- }
- })
- })
- }
- })
- }
- else {
- res.redirect('/login');
- }
- });
-
- app.get('/forgotPwd', function (req, res) {
- res.render(lang+'/account/forgotPwd', {
- user: req.user
- });
- });
-
- app.post('/forgotPwd', function(req, res, next) {
- //methods.currentDate();
-
- var emailAddress = req.body.inputEmail;
- /* var emailContent = "Hi there,\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";
- var emailSubject = "Account Access Attempted"; */
-
- async.waterfall([
- function(done) {
- crypto.randomBytes(20, function(err, buf) {
- var token = buf.toString('hex');
- done(err, token);
- });
- },
- function(token, done) {
- methods.checkUserEmail(emailAddress, function(err, user){
- if (user) {
- console.log("email: user found");
- //var emailSubject = "M4_LAB Password Reset";
- var emailSubject = "Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart";
- /* var emailContent = "Hi User,\n\n"+
- "we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+
- "Otherwise, you can reset your password using this link: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" +
- "This password reset is only valid for 1 hour.\n\n"+
- "Thanks,\nM4_LAB Team" */
- var emailContent = "Lieber Nutzer,\n\n"+
- "wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.\n\n"+
- "Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" + // test server
- //"Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://localhost:9989/reset/" + token + "\n" + // localhost
- "Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.\n\n"+mailSignature
-
- var credentialData = {
- user_id: user.id,
- resetPasswordToken: token,
- resetPasswordExpires: Date.now() + 3600000 // 1 hour
- }
- methods.updateCredential(credentialData, function(err) {
- done(err, token, user);
- });
-
- // send email
- mailer.options.to = emailAddress;
- mailer.options.subject = emailSubject;
- mailer.options.text = emailContent;
- mailer.transport.sendMail(mailer.options, function(err) {
- done(err, 'done');
- });
- }
- else {
- //done(err, null, null);
- done(err, 'no user found');
- }
- });
- }
- ], function(err) {
- if (err) {
- //req.flash('error', 'An error occured. Please try again.');
- req.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.');
- }
- else {
- //req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.');
- req.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.');
- }
- //res.redirect('/forgotPwd'); // deployment
- res.redirect('/account/forgotPwd'); // localhost
- });
- });
-
- app.get('/reset/:token', function(req, res) {
- methods.getUserByToken(req.params.token, function(err, user){
- if (!user) {
- //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'); // deployment
- }
- else {
- res.render(lang+'/account/reset');
- }
- });
- });
-
- app.post('/reset/:token', function(req, res) {
- var newPwd = req.body.inputNewPwd
- methods.getUserByToken(req.params.token, function(err, user){
- if (user) {
- // encrypt password
- bcrypt.genSalt(saltRounds, function(err, salt) {
- bcrypt.hash(newPwd, salt, function(err, hash) {
- var credentialData = {
- password: hash,
- user_id: user.user_id
- }
- // update password
- methods.updateCredential(credentialData, function(err){
- if (err) {
- //req.flash('error', "Database error: Password cannot be modified.")
- req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.")
- throw err
- }
- else {
- //req.flash('success', "Your pasword has been updated.")
- req.flash('success', "Passwort aktualisiert!")
- // send notifiaction email
- mailer.options.to = user.email
- mailer.options.subject = updatePasswordMailSubject
- mailer.options.text = updatePasswordMailContent
- mailer.transport.sendMail(mailer.options, function(err) {
- if (err) {
- console.log(err)
- }
- });
- // redirect to login page
- res.redirect('/login')
- }
- })
- });
- });
- }
- else {
- req.flash('error', "User not found.")
- res.redirect('/login')
- }
- });
-
- });
-
- // todo: user registration with captcha
- app.get('/registration', function(req, res) {
- res.render(lang+'/account/registration')
- })
-
- app.post('/registration', function(req, res) {
- // TODO:
- // create gitlab account?
- // send email to activate profile?
-
- // user data
- var curDate = new Date()
- var userData = {
- salutation: req.body.inputSalutation,
- title: req.body.inputTitle,
- firstname: req.body.inputFirstname,
- lastname: req.body.inputLastname,
- email: req.body.inputEmail,
- organisation: req.body.inputOrganisation,
- industry: req.body.inputIndustry,
- speciality: req.body.inputSpeciality,
- createdDate: curDate.toISOString().slice(0,10)
- }
- // encrypt password
- bcrypt.genSalt(saltRounds, function(err, salt) {
- bcrypt.hash(req.body.inputPassword, salt, function(err, hash) {
- // create account
- var newAccount = {
- profile: userData,
- password: hash
- }
- methods.registerNewUser(newAccount, function(err){
- if (err) {
- //req.flash('error', "Failed")
- req.flash('error', "Fehlgeschlagen")
- }
- else {
- //req.flash('success', 'Your account has been created. Please log in.')
- req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.')
- }
- res.redirect('/account/registration');
- })
- });
- });
- })
-
- app.get('/email/:email', function(req, res) {
- methods.checkUserEmail(req.params.email, function(err, user){
- if (!err) {
- if (user) {
- res.send(false)
- }
- else {
- res.send(true)
- }
- }
- })
- })
-
- app.get('/contact', function (req, res) {
- res.render(lang+'/account/contact', {
- user: req.user
- });
- });
-
- app.post('/contact', function(req, res, next) {
- //methods.currentDate();
- let emailAddress = req.body.inputEmail;
- let supportAddress = "support-transfer@hft-stuttgart.de";
- let inputName = req.body.name;
- let inputContent = req.body.message;
- let emailContent = "Es wurde eine Anfrage an das Transferportal gestellt: \n\n NAME: " + inputName + "\n NACHRICHT:\n "+ inputContent;
- let emailSubject = "Ihre Anfrage an das Transferportal";
- async.waterfall([
- function(done) {
- // send email
- mailer.options.to = supportAddress;
- mailer.options.cc = emailAddress;
- mailer.options.subject = emailSubject;
- mailer.options.text = emailContent;
- mailer.transport.sendMail(mailer.options, function(err) {
- done(err, 'done');
- });
- }
- ], function(err) {
- if (err) {
- req.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.');
- }
- else {
- req.flash('success', 'Vielen Dank für Ihre Anfrage. Wir melden uns baldmöglichst bei Ihnen. Eine Kopie Ihrer Anfrage wurde an ' + emailAddress + ' versandt.');
- }
- //res.redirect('/forgotPwd'); // deployment
- res.redirect('/account/contact'); // localhost
- });
- });
-};
\ No newline at end of file
diff --git a/routes/routes-project.js b/routes/routes-project.js
deleted file mode 100644
index d34bab483d73e2db2a259a6290b000caadbe2755..0000000000000000000000000000000000000000
--- a/routes/routes-project.js
+++ /dev/null
@@ -1,362 +0,0 @@
-const methods = require('./methods')
-const async = require('async')
-const helpers = require('./helpers')
-
-const pictSizeLimit = 1000000 // 1 MB
-
-module.exports = function (app) {
-
- // ======== APP ROUTES - PROJECT ====================
- var lang = 'DE'
-
- app.get('/mailinglists', function (req, res) {
- async.waterfall([
- function(done) {
- methods.getAllMailinglists(function(mailinglistOverview, err) {
- if (!err) {
- done(err, mailinglistOverview)
- }
- })
- },
- // create JSON object of mailinglists for front-end
- function(mailinglistOverview, done) {
- var allMailingLists = [] // JSON object
- for (let i = 0; i < mailinglistOverview.length; i++) {
- // add data to JSON object
- allMailingLists.push({
- id: mailinglistOverview[i].id,
- name: mailinglistOverview[i].name,
- src: mailinglistOverview[i].src,
- projectstatus: mailinglistOverview[i].projectstatus,
- project_title: mailinglistOverview[i].project_title,
- keywords: mailinglistOverview[i].keywords
- });
- }
-
- res.render(lang+'/project/mailinglists', {
- isUserAuthenticated: req.isAuthenticated(),
- user: req.user,
- mailinglists: allMailingLists
- });
- }
- ])
- });
-
- app.get('/project_', function (req, res) {
- async.waterfall([
- // get all projects from projectdb
- function(done) {
- methods.getAllProjects(function(projectsOverview, err) {
- if (!err) {
- done(err, projectsOverview)
- }
- })
- },
- // create JSON object for front-end
- function(projectsOverview, done) {
- var activeProjects = []
- var nonActiveProjects = []
-
- for (var i = 0; i < projectsOverview.length; i++) {
- var project = {
- id: projectsOverview[i].id,
- logo: projectsOverview[i].logo,
- akronym: projectsOverview[i].pname,
- title: projectsOverview[i].title,
- summary: projectsOverview[i].onelinesummary,
- category: projectsOverview[i].category,
- cp: projectsOverview[i].contact_email,
- gitlab: projectsOverview[i].gitlab
- }
- if (projectsOverview[i].projectstatus == 0) {
- nonActiveProjects.push(project)
- }
- else if (projectsOverview[i].projectstatus == 1) {
- activeProjects.push(project)
- }
- }
-
- // render the page
- if (req.isAuthenticated()) {
- res.render(lang+'/project/projects', {
- isUserAuthenticated: true,
- nonActive: nonActiveProjects,
- active: activeProjects
- });
- }
- else {
- res.render(lang+'/project/projects', {
- isUserAuthenticated: false,
- nonActive: nonActiveProjects,
- active: activeProjects
- });
- }
- }
- ])
- })
-
- app.get('/project', function (req, res) {
- res.render(lang+'/project/project-simplified', {
- isUserAuthenticated: req.isAuthenticated(),
- user: req.user
- });
- })
-
- app.get('/addprojectoverview', function (req, res) {
- if (req.isAuthenticated()) {
- res.render(lang+'/project/addProjectOverview')
- }
- else {
- res.redirect('/login')
- }
- })
-
- app.post('/addprojectoverview__', function (req, res) {
- if (req.isAuthenticated()) {
- var wiki = 0
- if (req.body.wiki)
- wiki = 1
-
- var projectTerm = req.body.termForm + " - " + req.body.termTo
- var projectOverviewData = {
- pname: req.body.pname,
- title: req.body.title,
- onelinesummary: req.body.summary,
- category: req.body.category,
- logo: req.body.logo,
- gitlab: req.body.gitlabURL,
- wiki: wiki,
- overview: req.body.overview,
- question: req.body.question,
- approach: req.body.approach,
- result: req.body.result,
- keywords: req.body.keywords,
- announcement: req.body.announcement,
- term: projectTerm,
- further_details: req.body.furtherDetails,
- website: req.body.website,
- src: req.body.src,
- caption: req.body.caption,
- contact_lastname: req.body.contactName,
- contact_email: req.body.contactEmail,
- leader_lastname: req.body.leaderName,
- leader_email: req.body.leaderEmail
- }
-
- methods.addProjectOverview(projectOverviewData, function(err){
- if (err) {
- //req.flash('error', "Failed")
- req.flash('error', "Fehlgeschlagen")
- res.redirect('/addProjectOverview');
- }
- else {
- req.flash('success', 'Your project has been created.')
- res.redirect('/project');
- }
- })
- }
- })
-
- app.post('/addprojectoverview', function (req, res) {
- if (req.isAuthenticated()) {
- var wiki = 0
- if (req.body.wiki)
- wiki = 1
-
- var projectLogo = req.files.logo
- var projectPicture = req.files.src
- var projectLogoPath, projectPicturePath
-
- if (projectLogo) {
- // raise error if size limit is exceeded
- if (projectLogo.size === pictSizeLimit) {
- req.flash('error', 'Projektlogo exceeds 1 MB');
- res.redirect('/addprojectoverview');
- }
- else {
- // TEST PATH FOR DEVELOPMENT (LOCALHOST)
- projectLogoPath = './folder-in-server-to-save-projektlogo/'+req.body.pname+'/'+projectLogo.name
- // PATH FOR TEST/LIVE SERVER
- // var projectLogoPath = to-be-defined
- }
- }
- if (projectPicture) {
- // raise error if size limit is exceeded
- if (projectPicture.size === pictSizeLimit) {
- req.flash('error', 'Projektbild exceeds 1 MB');
- res.redirect('/addprojectoverview');
- }
- else {
- // TEST PATH FOR DEVELOPMENT (LOCALHOST)
- projectPicturePath = './folder-in-server-to-save-projektbild/'+req.body.pname+'/'+projectPicture.name
- // PATH FOR TEST/LIVE SERVER
- // var projectPicturePath = to-be-defined
- }
-
- }
-
- var projectTerm = req.body.termForm + " - " + req.body.termTo
- var projectOverviewData = {
- pname: req.body.pname,
- title: req.body.title,
- onelinesummary: req.body.summary,
- category: req.body.category,
- logo: projectLogoPath,
- gitlab: req.body.gitlabURL,
- wiki: wiki,
- overview: req.body.overview,
- question: req.body.question,
- approach: req.body.approach,
- result: req.body.result,
- keywords: req.body.keywords,
- announcement: req.body.announcement,
- term: projectTerm,
- further_details: req.body.furtherDetails,
- website: req.body.website,
- src: projectPicturePath,
- caption: req.body.caption,
- contact_lastname: req.body.contactName,
- contact_email: req.body.contactEmail,
- leader_lastname: req.body.leaderName,
- leader_email: req.body.leaderEmail
- }
-
- // save pictures
- if (projectLogo) {
- projectLogo.mv(projectLogoPath, function(err) {
- if (err) {
- console.error(err)
- res.status(500).render(lang+'/500', {
- error: err
- })
- }
- });
- }
- if (projectPicture) {
- projectPicture.mv(projectPicturePath, function(err) {
- if (err) {
- console.error(err)
- res.status(500).render(lang+'/500', {
- error: err
- })
- }
- });
- }
-
- /* RS: Temporary solution while Project DB is still in early phase.
- When User DB and Project DB are integrated and quite stabil, this operation should be done in 1 transaction.
- */
- var userId // todo: make this global variable?
- async.waterfall([
- // get userId by email from userdb
- function(done) {
- methods.getUserIdByEmail(req.user.email, function(id, err) {
- if (!err) {
- userId = id
- done(err)
- }
- })
- },
- // add project overview
- function(done) {
- methods.addProjectOverview(projectOverviewData, function(data, err){
- if (err) {
- res.status(500).render(lang+'/500', {
- error: err
- })
- }
- else {
- done(err, data.insertId)
- }
- })
- },
- // assign the created overview to logged-in user
- function(projectOverviewId, done) {
- var userProjectRoleData = {
- project_id: projectOverviewId,
- user_id: userId,
- role_id: 3 // OVERVIEW_CREATOR
- }
- methods.addUserProjectRole(userProjectRoleData, function(userProjects, err) {
- if (err) {
- //req.flash('error', "Failed")
- req.flash('error', "Fehlgeschlagen")
- res.redirect('/addProjectOverview');
- }
- else {
- req.flash('success', 'Your project has been created.')
- res.redirect('/project');
- }
- })
- }
- ])
- }
- })
-
- app.get('/updateprojectoverview', function (req, res) {
- // only their own project
- })
-
- app.post('/updateprojectoverview', function (req, res) {
- // only their own project
- })
-
- app.get('/projectoverview', function(req, res){
- async.waterfall([
- function(done) {
- methods.getProjectOverviewById(req.query.projectID, function(projectOverview, err) {
- if (!err) {
- done(err, projectOverview)
- }
- })
- },
- function(projectOverview,done){
- methods.getProjectImagesById(req.query.projectID, function(projectImages, err) {
- if (!err) {
- done(err, projectImages, projectOverview)
- }
- })
- },
- // render projectOverview page
- function(projectImages, projectOverview, done) {
-
- console.log(projectImages);
- partnerWebsites = helpers.stringToArray(projectOverview[0].partner_website);
- partnerNames = helpers.stringToArray(projectOverview[0].partner_name);
- awardSites = helpers.stringToArray(projectOverview[0].award_website);
- awardNames = helpers.stringToArray(projectOverview[0].award_name);
- sponsorWebsites = helpers.stringToArray(projectOverview[0].sponsor_website);
- sponsorImgs = helpers.stringToArray(projectOverview[0].sponsor_img);
- sponsorNames = helpers.stringToArray(projectOverview[0].sponsor_name);
-
- res.render(lang+'/project/projectOverview', {
- isUserAuthenticated: req.isAuthenticated(),
- user: req.user,
- projectOV: projectOverview,
- projectImgs: projectImages,
- partnerWS: partnerWebsites,
- partnerN: partnerNames,
- awardWS: awardSites,
- awardN: awardNames,
- sponsorWS: sponsorWebsites,
- sponsorIMG: sponsorImgs,
- sponsorN: sponsorNames
- });
- }
- ])
- })
-
- app.get('/videoconferences', function(req, res){
- res.render(lang+'/project/videoconferences', {
- isUserAuthenticated: req.isAuthenticated(),
- user: req.user,
- });
- })
-
- app.get('/landingpage', function(req, res){
- res.render(lang+'/project/landingpage', {
- isUserAuthenticated: req.isAuthenticated(),
- user: req.user,
- });
- })
-};
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..1519fee76e91ea94764d0ac22eec6f766f63686e
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "target": "es6",
+ "module": "commonjs",
+ "rootDir": "./",
+ "outDir": "./built",
+ "esModuleInterop": true,
+ "strict": true,
+ "allowJs": true
+ }
+}
\ No newline at end of file
diff --git a/views/DE/404.pug b/views/DE/404.pug
index c4178253b9cec40907906ccd33fc39ac6e85c990..29a3cd86e08627a0059a1bc7abc132fe3fe3221f 100644
--- a/views/DE/404.pug
+++ b/views/DE/404.pug
@@ -4,7 +4,7 @@ html(lang="de")
title= "404 - Page not found"
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")
style.
.container {
height: 400px;
@@ -21,8 +21,8 @@ html(lang="de")
body
div(class="container")
div(class="center", align="center")
- a(href="https://m4lab.hft-stuttgart.de")
- img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192")
+ a(href="/")
+ img(src="/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192")
br
br
p(class="h5") 404. The requested URL was not found.
diff --git a/views/DE/500.pug b/views/DE/500.pug
index 704573397c7252fc0a8034428da47602afa9b994..20dbfa9d1098bf6ba18d64c37253b3a94f83788b 100644
--- a/views/DE/500.pug
+++ b/views/DE/500.pug
@@ -4,7 +4,7 @@ html(lang="de")
title= "500 - Internal Server Error"
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")
style.
.container {
height: 400px;
@@ -21,8 +21,8 @@ html(lang="de")
body
div(class="container")
div(class="center", align="center")
- a(href="https://m4lab.hft-stuttgart.de")
- img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192")
+ a(href="/")
+ img(src="/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192")
br
br
p(class="h5") 500. Unexpected Error :(
diff --git a/views/DE/account/contact.pug b/views/DE/account/contact.pug
index 25e4dc9c402ef556088b707e1bbe2ce99b41c2a5..d25a801dd2ea2a088d55e64e595347c47db040e1 100644
--- a/views/DE/account/contact.pug
+++ b/views/DE/account/contact.pug
@@ -4,48 +4,23 @@ html(lang="de")
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/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.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;")
+ div(class="col-md-12 margin_bottom_40")
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") ×
+ div(class="contact-clean background_eaeaea")
+ if flash.success
+ div.alert.alert-success.alert-dismissible #{flash.success}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ if flash.error
+ div.alert.alert-danger.alert-dismissible.fade.show #{flash.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")
@@ -55,18 +30,18 @@ html(lang="de")
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 StuttgartInstitut für Angewandte Forschung
Innovative Hochschule - Projekt M4_LAB
Schellingstr. 24
70174 Stuttgart
Deutschland
support-transfer@hft-stuttgart.dewww.hft-stuttgart.de /
www.hft-stuttgart.de/M4LAB
- div(style="background-color: rgba(138,52,139,0.45);")
+ input#submitBtn(class="btn btn-primary" type="submit" value="SENDEN")
+ div(class="contact-clean contact_footer")
+ form
+ p(class="m_top_25")
Hochschule für Technik StuttgartInstitut für Angewandte Forschung
Innovative Hochschule - Projekt M4_LAB
Schellingstr. 24
70174 Stuttgart
Deutschland
support-transfer@hft-stuttgart.dewww.hft-stuttgart.de /
www.hft-stuttgart.de/M4LAB
+ div(class="background_8a348b")
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
+ div(class="contact_foot_message")
+ img(class="d-flex d-lg-flex justify-content-center justify-content-lg-center align-items-lg-start mx-auto p_bottom_35" src="/img/Logo_TV1.png" width="100px")
+ h2(class="text-center 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")
@@ -78,3 +53,4 @@ html(lang="de")
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")
+ script(src="/js/mobile.js")
diff --git a/views/DE/account/forgotPwd.pug b/views/DE/account/forgotPwd.pug
index 46210a02d8c8cbbafed3ed8e9b65b3c086ad8246..4827e727297e467370dab7360fd6119c4a116fac 100644
--- a/views/DE/account/forgotPwd.pug
+++ b/views/DE/account/forgotPwd.pug
@@ -4,44 +4,23 @@ html(lang="de")
title= "Forgot Password"
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="https://transfer.hft-stuttgart.de/css/custom/login.css")
+ link(rel="stylesheet", type="text/css", href="/css/bootstrap.min.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.css")
+ link(rel="stylesheet", type="text/css", href="/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-fluid")
div(class="row")
div(class="col-md-6 offset-md-3")
- 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") ×
+ if flash.success
+ div.alert.alert-success.alert-dismissible #{flash.success}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ if flash.error
+ div.alert.alert-danger.alert-dismissible.fade.show #{flash.error}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
form#forgotForm(class="form-signin", method="POST")
- img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192")
+ img(src="https://transfer.hft-stuttgart.de/img/M4_LAB_LOGO.png", class="img-responsive center-block", width="185", height="192")
div(class="form-row")
input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse" required)
br
@@ -54,3 +33,4 @@ html(lang="de")
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")
+ script(src="/js/mobile.js")
diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug
index fa11d3f7d186ba91c1f1bccae8307e5602df3e24..ff4409e9d07e9e18b177c58e341418ae6dd759e2 100644
--- a/views/DE/account/home.pug
+++ b/views/DE/account/home.pug
@@ -4,38 +4,50 @@ html(lang="de")
title= "User Account"
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="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
body
- div(class="container-fluid")
- 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
+ div(class="container")
+ if user.verificationStatus == 0
+ div.alert.alert-warning.alert-dismissible
+ | Willkommen im Benutzerkonto-Bereich des HFT Transferportals
+ |
+ | Wir haben Ihnen eine E-Mail an Ihre verwendete Adresse gesendet. Diese enthält einen Link zur Bestätigung Ihres Accounts.
+ | Wenn Sie die Mail nicht in ihrem Postfach vorfinden, prüfen Sie bitte auch Ihren Spam-Ordner.
+ |
Falls Sie keine E-Mail von uns erhalten haben, können Sie
diese hier erneut anfordern.
+ div(class="spinner-border text-secondary display_none", role="status")
+ else
+ div(class="row min-vh-100 flex-column flex-md-row")
+ aside(class="col-12 col-md-3 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 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
+ if user.is_m4lab_idp
+ 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 color_red" 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")
@@ -43,4 +55,21 @@ 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/headfoot.js")
\ No newline at end of file
+ script(src="/js/headfoot.js")
+ script(src="/js/mobile.js")
+ script.
+ // call verifyAccount
+ function verify() {
+ $(".spinner-border").show()
+ $.get( "/resendVerificationEmail", function( data ) {
+ if (data) { alert( "Email sent!" ) }
+ else { alert("Please contact support-transfer@hft-stuttgart.de to verify your account.") }
+ })
+ .fail(function() {
+ alert( "Something went wrong. Please try again." ) // todo: to DE
+ })
+ .always(function() {
+ $(".spinner-border").hide()
+ })
+
+ }
\ No newline at end of file
diff --git a/views/DE/account/newInformation.pug b/views/DE/account/newInformation.pug
new file mode 100644
index 0000000000000000000000000000000000000000..4d82fe0d46898340fae1ae80b0b1a22484720006
--- /dev/null
+++ b/views/DE/account/newInformation.pug
@@ -0,0 +1,123 @@
+doctype html
+html(lang="de")
+ head
+ title= "Setup a new website"
+ 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="/css/bootstrap.min.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.css")
+ link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
+ body
+ div(class="container")
+ div(class="row min-vh-100 flex-column flex-md-row")
+ aside(class="col-12 col-md-3 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="/account/")
+ 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
+ if user.is_m4lab_idp
+ 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" style="color:red;")
+ 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")
+ nav(aria-label="breadcrumb")
+ ol(class="breadcrumb")
+ li(class="breadcrumb-item")
+ a(href="/account/") Konto
+ li(class="breadcrumb-item")
+ a(href="/account/services") Projekte und Dienste
+ li(class="breadcrumb-item active" aria-current="page") Neue Projektinformation
+
+ if flash.success
+ div.alert.alert-success.alert-dismissible #{flash.success}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ if flash.error
+ div.alert.alert-danger.alert-dismissible.fade.show #{flash.error}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+
+ h3(class="pb-2") Neue Projektinformation
+ div(class="mx-4")
+ h4(class="pb-1") Schritt 1: Setup
+ p Bitte füllen Sie alle Felder aus
+ form(method="POST", encType="multipart/form-data")
+ div(class='form-group row')
+ label(for="template", class="col-sm-2") Template
+ div(class="col-sm-8")
+ select#templateSelector(name="template", class="form-control")
+ option(value="generic") generic
+ option(value="simple_raw") simple_raw
+ option(value="simple_thesis") simple_thesis
+ |
See the demo: generic, simple_raw, simple_thesis
+ div(class='form-group row')
+ label(for="name", class="col-sm-2") Name
+ div(class="col-sm-8")
+ input#name(name="name", type="text", class="form-control", placeholder="Name", maxlength="75" required)
+ p(id="nameInfo" class="font-italic font-weight-light")
Ihre Webseite wird unter folgender URL veröffentlicht: https://transfer.hft-stuttgart.de/pages/#{gitlabUsername}/
+ div(class="form-group row")
+ label(for="description", class="col-sm-2") Beschreibung
+ div(class="col-sm-8")
+ textarea#description(name="description", type="text", class="form-control", placeholder="Beschreibung", maxlength="500" required)
+ div(class="form-group row")
+ label(for="logo", class="col-sm-2") Projektlogo
+ div(class="col-sm-8")
+ div(class="form-group row px-4")
+ - let defaultLogo = "/img/footer/M4_LAB_LOGO_Graustufen.png"
+ img(src=defaultLogo, width="100" height="100")
+ div(class="form-group row px-3")
+ input#logo(name="logo", class="form-control-file", type="file")
+ p
(Max file size is 80 KB.)
+ input(type="submit", class="btn btn-primary", value="Senden")
+ hr
+ div(class="mx-4", style="color: gray;")
+ h4(class="pb-1") Schritt 2: Dateneingabe
+ p Bitte stellen Sie sicher in GitLab, dass sie Folgendes abgeschlossen haben, bevor Sie Ihre Webseite veröffentlichen:
+ ol
+ li Bearbeiten Sie ihre
index.html
+ li Anpassen der Einstellungen in
settings.js
+
+ // 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")
+ // jquery-loading-overlay
+ script(src="https://cdn.jsdelivr.net/npm/gasparesganga-jquery-loading-overlay@2.1.7/dist/loadingoverlay.min.js")
+ // 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")
+ script(src="/js/mobile.js")
+ script.
+ // website URL
+ function showWebsiteURL() {
+ if ($("#name").val()) {
+ $("#nameInfo").show()
+ let webName = $("#name").val().toLowerCase().replace(/\s/g, '-')
+ document.getElementById("websiteName").innerText = webName+"/home/"
+ }
+ else {
+ $("#nameInfo").hide()
+ }
+ }
+ $('#name').on('input',function(e){
+ showWebsiteURL()
+ })
+ showWebsiteURL()
+
+ $("form").submit(function(){
+ $.LoadingOverlay("show")
+ });
\ No newline at end of file
diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug
index 12f789894c9c8b1348e41bf12e12cd5c81d9433c..0cebe97b0f8c3792d8878393404876eb7885c340 100644
--- a/views/DE/account/profile.pug
+++ b/views/DE/account/profile.pug
@@ -1,51 +1,60 @@
doctype html
html(lang="de")
head
- title= "User Profile"
+ title= "Benutzerprofil"
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="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
body
- div(class="container-fluid")
+ div(class="container")
div(class="row min-vh-100 flex-column flex-md-row")
- aside(class="col-12 col-md-2 p-0 flex-shrink-1")
+ aside(class="col-12 col-md-3 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}
+ a(class="nav-link pl-0 text-nowrap" href="/account/")
+ span(class="font-weight-bold 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
+ i(class="fa fa-user fa-fw color_black")
+ span(class="d-none d-md-inline color_black") Benutzerprofil
+ if user.is_m4lab_idp
+ 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")
+ a(class="nav-link pl-0 color_red" 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 }
- 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#profileForm(method="POST", action="/updateProfile")
+ nav(aria-label="breadcrumb")
+ ol(class="breadcrumb")
+ li(class="breadcrumb-item")
+ a(href="/account/") Konto
+ li(class="breadcrumb-item active" aria-current="page") Benutzerprofil
+
+ if flash.success
+ div.alert.alert-success.alert-dismissible #{flash.success}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ if flash.error
+ div.alert.alert-danger.alert-dismissible.fade.show #{flash.error}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+
+ h3(class="pb-2") Mein Profil
+ form#profileForm(method="POST", action="/account/updateProfile")
div(class="form-row")
div(class='form-group col-md-2')
label(for="title") Anrede
- select#inputSalutation(name="inputSalutation", class="form-control", , value=user.salutation)
+ select#inputSalutation(name="inputSalutation", class="form-control", value=user.salutation)
option(value="") - Anrede -
option(value="Herr") Herr
option(value="Frau") Frau
@@ -71,14 +80,14 @@ 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, maxlength="45" 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, maxlength="45" 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, maxlength="45" required)
+ input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email", value=user.email, maxlength="45" required)
div(class="form-row")
div(class='form-group col-md-8')
label(for="organisation") Unternehmen
@@ -99,4 +108,5 @@ 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/headfoot.js")
\ No newline at end of file
+ script(src="/js/headfoot.js")
+ script(src="/js/mobile.js")
diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug
index 3de3ed5a731a614fc8baa4eea95465e98a6df82f..df4a390576a5597d4bfdf1d6cd650819cc1349bf 100644
--- a/views/DE/account/registration.pug
+++ b/views/DE/account/registration.pug
@@ -4,29 +4,11 @@ html(lang="de")
title= "Create New Account"
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="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.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;
@@ -34,19 +16,20 @@ html(lang="de")
body
div(class="container-fluid")
div(class="row")
- div(class="col-md-6 offset-md-2")
+ div(class="pt-4 pb-4 col-md-6 offset-md-2")
h3(class="mb-3 font-weight-bold") Neues Benutzerkonto anlegen
div(class="col-md-6 offset-md-3")
- 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") ×
+ div(class="alert alert-info" role="alert")
+ | Auf dieser Seite können sich Benutzer, die keinen Account an der HFT haben, registrieren.
+ | Um sich mit ihrem HFT-Account anzumelden, klicken Sie
hier.
+ if flash.success
+ div.alert.alert-success.alert-dismissible #{flash.success}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ if flash.error
+ div.alert.alert-danger.alert-dismissible.fade.show #{flash.error}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
form(method="POST")
- h5(class="mb-3 font-weight-bold") Anmeldedaten
+ h5(class="pt-2 mb-3 font-weight-bold") Anmeldedaten
div(class='form-row')
div(class='form-group col-md-6')
input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*", maxlength="45" required)
@@ -54,7 +37,7 @@ html(lang="de")
div(class="form-group col-md-6")
input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*", maxlength="45" required)
span#passwordWarning(class='warning')
- h5(class="mb-3 font-weight-bold") Benutzerprofil
+ h5(class="pt-2 mb-3 font-weight-bold") Benutzerprofil
div(class="form-row")
div(class='form-group col-md-2')
select#inputSalutation(name="inputSalutation", class="form-control")
@@ -78,6 +61,10 @@ html(lang="de")
input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche", maxlength="45")
div(class="form-group")
input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", maxlength="100")
+ div(class="pt-2 mb-3 form-check")
+ input(class="form-check-input" type="checkbox" id="privacyPolicy" name="privacyPolicy" required)
+ label(class="form-check-label" for="privacyPolicy")
+ | Ich akzeptiere die
Datenschutzerklärung. *
p
* Pflichtfeld
input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled)
br
@@ -94,4 +81,5 @@ html(lang="de")
// M4_LAB
script(src="/js/generalFunction.js")
script(src="/js/registration.js")
- script(src="/js/headfoot.js")
\ No newline at end of file
+ script(src="/js/headfoot.js")
+ script(src="/js/mobile.js")
diff --git a/views/DE/account/reset.pug b/views/DE/account/reset.pug
index 56aa2d9220f06e178f93b0f985d187d61938828c..e81e11665072af3fb77fd0560c1366f00d5987c1 100644
--- a/views/DE/account/reset.pug
+++ b/views/DE/account/reset.pug
@@ -4,30 +4,11 @@ html(lang="de")
title= "Reset Password"
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="https://transfer.hft-stuttgart.de/css/custom/login.css")
+ link(rel="stylesheet", type="text/css", href="/css/bootstrap.min.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.css")
+ link(rel="stylesheet", type="text/css", href="/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-fluid")
div(class="row")
@@ -41,7 +22,7 @@ html(lang="de")
div.alert.alert-danger.alert-dismissible.fade.show #{ error }
a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
form#forgotForm(method="POST", class="form-signin")
- img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192")
+ img(src="https://transfer.hft-stuttgart.de/img/M4_LAB_LOGO.png", class="img-responsive center-block", width="185", height="192")
div(class="form-row")
input#inputNewPwd(name="inputNewPwd", type="password", class="form-control", placeholder="Neues Passwort" required)
span#recommendation(class='warning')
@@ -58,3 +39,4 @@ html(lang="de")
script(src="/js/security.js")
script(src="/js/generalFunction.js")
script(src="/js/headfoot.js")
+ script(src="/js/mobile.js")
\ No newline at end of file
diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug
index 15c438871580fd7d9edc0ffdfef78a0bbc531827..cd3d32390a59c2508d3c056cd0f5fa0bc4801811 100644
--- a/views/DE/account/security.pug
+++ b/views/DE/account/security.pug
@@ -4,47 +4,47 @@ html(lang="de")
title= "User Profile"
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="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.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.
.warning {
font-size: 11px;
}
body
- div(class="container-fluid")
+ div(class="container")
div(class="row min-vh-100 flex-column flex-md-row")
- aside(class="col-12 col-md-2 p-0 flex-shrink-1")
+ aside(class="col-12 col-md-3 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}
+ a(class="nav-link pl-0 text-nowrap" href="/account/")
+ span(class="font-weight-bold 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
+ i(class="fa fa-lock fa-fw color_black")
+ span(class="d-none d-md-inline 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")
+ a(class="nav-link pl-0 color_red" 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 }
- 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") ×
+ if flash.success
+ div.alert.alert-success.alert-dismissible #{flash.success}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ if flash.error
+ div.alert.alert-danger.alert-dismissible.fade.show #{flash.error}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
form(class="needs-validation", method="post", action="/account/changePwd" novalidate)
div(class="form-row")
div(class='form-group col-md-8')
@@ -64,7 +64,7 @@ html(lang="de")
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
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")
@@ -74,6 +74,7 @@ html(lang="de")
script(src="/js/security.js")
script(src="/js/generalFunction.js")
script(src="/js/headfoot.js")
+ script(src="/js/mobile.js")
script.
// check input fields
'use strict';
diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug
index 8b99f630e68a19498f6f833937b1296b580c962e..99f188620ee7490ba568e07843fbb10609b8fef9 100644
--- a/views/DE/account/services.pug
+++ b/views/DE/account/services.pug
@@ -4,41 +4,95 @@ html(lang="de")
title= "User Profile"
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="/css/m4lab.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab-mobile.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
body
- div(class="container-fluid")
+ div(class="container")
div(class="row min-vh-100 flex-column flex-md-row")
- aside(class="col-12 col-md-2 p-0 flex-shrink-1")
+ aside(class="col-12 col-md-3 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}
+ a(class="nav-link pl-0 text-nowrap" href="/")
+ span(class="font-weight-bold 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
+ if user.is_m4lab_idp
+ 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
+ i(class="fa fa-tasks fa-fw color_black")
+ span(class="d-none d-md-inline color_black") Projekte und Dienste
li(class="nav-item")
- a(class="nav-link pl-0" href="/logout")
+ a(class="nav-link pl-0 color_red" 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.
-
+ nav(aria-label="breadcrumb")
+ ol(class="breadcrumb")
+ li(class="breadcrumb-item")
+ a(href="/account/") Konto
+ li(class="breadcrumb-item active" aria-current="page") Projekte und Dienste
+
+ div(class="container")
+ h3(class="pb-2") Dienste
+ div(class="col-sm-12")
+ //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.
+ p Auf dieser Seite werden in Zukunft Funktionen bereitgestellt, um Ihre Aktivierung von Diensten zu organisieren. Diese Funktionen stehen zurzeit aber noch nicht zur Verfügung.
+ hr
+ div(class="container")
+ h3(class="pb-2") Projekte
+ div(class="col-sm-12")
+ if user.gitlabUserId
+ div(class="container")
+ div(class="row py-2 bg-light")
+ div(class="col font-weight-bold") Projektinformationen
+ div(class="col text-right")
+ a(href="/account/newInformation" class="btn btn-sm btn-success" role="button") Neue Projektinformation
+ table(class="table")
+ if gitlabPages.length == 0
+ tr
+ td Currently you have no project information
+ else
+ for item in gitlabPages
+ - let editNewPageLink = "/account/updateInformation?id="+item.projectInformation.id
+ - let websiteURL = "https://transfer.hft-stuttgart.de/pages/"+item.projectInformation.path+"/home/"
+ tr
+ td
+ img(src=item.projectInformation.logo, width="45", height="45")
+ td
+ a(href=editNewPageLink class="link-dark") #{item.projectInformation.name}
+ td
+ a(href=websiteURL class="link-dark" target="_blank") visit website
+ div(class="container")
+ div(class="row py-2 bg-light")
+ div(class="col font-weight-bold") Projektcode und -daten
+ div(class="col text-right")
+ button(type="button", class="btn btn-sm btn-success" disabled) Neuer Projektdatensatz
+ table(class="table")
+ for item in gitlabRepos
+ - let img = item.logo
+ tr
+ td
+ img(src=img, width="45", height="45")
+ td #{item.name}
+ else
+ p
+ | Bitte
melden Sie sich an der Gitlab-Instanz an, um Ihren Zugang zu aktivieren, und aktualisieren Sie diese Seite.
+
// 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")
\ No newline at end of file
+ script(src="/js/headfoot.js")
+ script(src="/js/mobile.js")
\ No newline at end of file
diff --git a/views/DE/account/updateInformation.pug b/views/DE/account/updateInformation.pug
new file mode 100644
index 0000000000000000000000000000000000000000..130dd95e687f0145f7cbafba1e69751664f70832
--- /dev/null
+++ b/views/DE/account/updateInformation.pug
@@ -0,0 +1,156 @@
+doctype html
+html(lang="de")
+ head
+ title= "Update a website"
+ 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="/css/bootstrap.min.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
+ link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
+ body
+ div(class="container")
+ div(class="row min-vh-100 flex-column flex-md-row")
+ aside(class="col-12 col-md-3 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="/account/")
+ 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
+ if user.is_m4lab_idp
+ 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" style="color:red;")
+ 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")
+ nav(aria-label="breadcrumb")
+ ol(class="breadcrumb")
+ li(class="breadcrumb-item")
+ a(href="/account/") Konto
+ li(class="breadcrumb-item")
+ a(href="/account/services") Projekte und Dienste
+ li(class="breadcrumb-item active" aria-current="page") Information aktualisieren
+
+ if flash.success
+ div.alert.alert-success.alert-dismissible #{flash.success}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ if flash.error
+ div.alert.alert-danger.alert-dismissible.fade.show #{flash.error}
+ a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
+ h3(class="pb-2") Information aktualisieren
+ div(class="mx-4")
+ form(method="POST", encType="multipart/form-data")
+ div(class='form-group row')
+ label(for="name", class="col-sm-2") Name
+ div(class="col-sm-8")
+ input#name(name="name", type="text", class="form-control", value=information.name, placeholder="Name", maxlength="75" required)
+ div(class="form-group row")
+ label(for="description", class="col-sm-2") Beschreibung
+ div(class="col-sm-8")
+ textarea#description(name="description", type="text", class="form-control", placeholder="Beschreibung", maxlength="500" required) #{information.desc}
+ div(class="form-group row")
+ label(for="logo", class="col-sm-2") Projektlogo
+ div(class="col-sm-8")
+ div(class="form-group row")
+ img(src=information.logo, width="100" height="100")
+ div(class="form-group row")
+ input#logo(name="logo", class="form-control-file", type="file")
+ p
(Max file size is 80 KB.)
+ input(type="submit", class="btn btn-primary", value="Speichern")
+ hr
+ div(class="mx-4")
+ p
[ANMERKUNG] Bitte stellen Sie sicher in GitLab, dass sie Folgendes abgeschlossen haben, bevor Sie Ihre Webseite veröffentlichen:
+ div(class="help")
+ div(class="card")
+ - let indexLink = "https://transfer.hft-stuttgart.de/gitlab/"+information.path+"/-/edit/master/public/home/index.html"
+ - let settingLink = "https://transfer.hft-stuttgart.de/gitlab/"+information.path+"/-/edit/master/public/settings.js"
+ div(class="card-header")
+ div(class="card-title")
+ |
+ | 1. Bearbeiten Sie ihre index.html
+ div(id="collapse-index" class="card-body collapse")
+ ol
+ li Klicken Sie
hier, um Ihre
index.html in GitLab zu öffnen.
+ li Bearbeiten Sie ihre Datei.
+ li Um die Änderungen zu speichern und auf ihrer Seite sofort zu übernehmen, klicken Sie auf
Commit changes
+ img(src="/img/help/save_file.png", class="img-fluid", style="border: 1px solid gray;", alt="index.html")
+ li Sobald Sie Änderungen an Ihrer
index.html vornehmen, wird Ihre Website veröffentlicht.
+ div(class="card-header")
+ div(class="card-title")
+ |
2. Anpassen der Einstellungen in settings.js
+ div(id="collapse-setting" class="card-body collapse")
+ ol
+ li Klicken Sie
settings.js, um Ihre
settings.js in GitLab zu öffnen.
+ li Bearbeiten Sie ihre Datei.
+ li Hier sehen Sie die Standardwerde für Soziale Netzwerke und persönliche Webseiten eines Teilnehmers sowie den Standardavatar. Es wird empfohlen, diese Werte nicht zu ändern, aber Sie können weitere Soziale Netzwerke hinzufügen.
+ img(src="/img/help/default_settings.png", class="img-fluid", style="border: 1px solid gray;")
+ li Diese Schalter kontrollieren, welche Teile der gitlab-Seite angezeigt werden sollen. Wenn Sie also beispielsweise nur eine einzige Seite haben, benötigen Sie kein Menü und können den Wert für 'menu' auf OFF stellen.
+ img(src="/img/help/switches.png", class="img-fluid", style="border: 1px solid gray;")
+ li Hier ändern Sie das Projektlogo. Das Logo wird am oberen Rand der Seite mittig angezeigt. Wenn der Schalter für 'project logo' auf OFF steht, wird es nicht angezeigt.
+ img(src="/img/help/pr_logo.png", class="img-fluid", style="border: 1px solid gray;")
+ li Hier ändern Sie das Menü Ihrer gitlab-Seite. Ein Menü kann entweder auf einen Unterordner/ template verweisen oder aber auf einen externen Link, z.B. eine Demo. Sie können Menüeinträge hinzufügen oder entfernen. Das Menü wird mit dem Schalter 'OFF' verborgen. Vergessen Sie nicht den Schrägstrich am Ende eines Menülinks, wenn dieser auf einen Ordner zeigt.
+ img(src="/img/help/menu.png", class="img-fluid", style="border: 1px solid gray;")
+ li Hier ändern Sie die Teilnehmenden. Sie können die Standardwerte für Soziale Netzwerke (diese beinhalten die HFT-Kanäle) oder Ihr eigenen Profile verwenden. Sie können auf Ihre persönliche Webseite verlinken. Sie können soziale Netzwerke hinzufügen oder entfernen. Sie können auch einen persönlichen Avatar oder den Standard-Avatar (DEFAULT.avatar) verwenden.
+ img(src="/img/help/partic.png", class="img-fluid", style="border: 1px solid gray;")
+ li Hier ist ein Beispiel mit zwei Teilnehmenden:
+ img(src="/img/help/partic2.png", class="img-fluid", style="border: 1px solid gray;")
+ li Hier ändern Sie die Fußzeilenlogos z.B. zu denen von Projektpartnern. Wenn Sie das Logo nicht mit einer externen Webseite verlinken wollen, verwenden Sie EMPTY_LINK als Wert für href. Der Titel title wird bei Mouse-Hover über dem Logo erscheinen.
+ img(src="/img/help/f_logos.png", class="img-fluid", style="border: 1px solid gray;")
+ li Klicken Sie anschließend auf
Commit changes, um die Änderungen zu speichern.
+ img(src="/img/help/edit_settings_generic.png", class="img-fluid", style="border: 1px solid gray;")
+
+ hr
+ div(class="mx-4")
+ div(class="alert alert-danger" role="alert")
Webseite löschen
+ p Dies wird
#{information.name} sofort endgültig löschen, inklusive ihrer Repositorien und aller zugehöriger Ressourcen.
+ p Sind Sie WIRKLICH SICHER, dass Sie diese Webseite löschen wollen?
+ button(type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteWebsiteConfirmation") Löschen
+
+ // Modal
+ div(class="modal" id="deleteWebsiteConfirmation" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true")
+ div(class="modal-dialog" role="document")
+ div(class="modal-content")
+ div(class="modal-header")
+ h5(class="modal-title" id="modalLabel") Sind Sie WIRKLICH SICHER?
+ button(type="button" class="close" data-dismiss="modal" aria-label="Close")
+ span(aria-hidden="true") ×
+ div(class="modal-body")
+ |
Sie sind dabei, diese Webseite, ihr Repositorium und alle zugehörigen Ressourcen, inklusive aller Inhalte, Bilder etc. endgültig zu löschen.
+ |
Sobald eine Webseite endgültig gelöscht ist, kann sie nicht wiederhergestellt werden. Diese Aktion kann nicht rückgängig gemacht werden.
+ div(class="modal-footer")
+ form(method="POST", action="/account/deleteProject?_method=DELETE", encType="multipart/form-data")
+ input(name="id", value=information.id, type="hidden")
+ button(type="button" class="btn btn-primary mx-2" data-dismiss="modal") Abbrechen, Webseite behalten
+ button(type="submit" class="btn btn-danger") Ja, Webseite löschen
+
+ // 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")
+ // jquery-loading-overlay
+ script(src="https://cdn.jsdelivr.net/npm/gasparesganga-jquery-loading-overlay@2.1.7/dist/loadingoverlay.min.js")
+ // 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")
+ script.
+ function sendPublishRequest() {
+ $.post("/sendPublishRequest", {projectName: $("#name").val()}, function(resp){
+ alert(resp)
+ })
+ }
+
+ $("form").submit(function(){
+ $.LoadingOverlay("show")
+ });
\ No newline at end of file
diff --git a/views/DE/account/verification.pug b/views/DE/account/verification.pug
new file mode 100644
index 0000000000000000000000000000000000000000..805cceb5c959649966d9d1d23956f6ee941b36dd
--- /dev/null
+++ b/views/DE/account/verification.pug
@@ -0,0 +1,36 @@
+doctype html
+html(lang="de")
+ head
+ title= "User Verification"
+ 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="/css/bootstrap.min.css")
+ link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
+ style.
+ .container {
+ height: 400px;
+ position: relative;
+ }
+ .center {
+ margin: 0;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -ms-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ }
+ body
+ div(class="container")
+ div(class="center", align="center")
+ a(href="https://transfer.hft-stuttgart.de")
+ img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192")
+ br
+ br
+ if status == true
+ p(class="h5") Ihr Benutzerkonto wurde bestätigt. Bitte
melden Sie sich an.
+ else if status == false
+ p(class="h5") Ihr Benutzerkonto konnte nicht bestätigt werden, bitte versuchen Sie es erneut.
+ else
+ p(class="h5") Ihr Benutzerkonto wurde nicht gefunden.
+ // Bootstrap
+ script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
\ No newline at end of file
diff --git a/views/DE/layout.pug b/views/DE/layout.pug
deleted file mode 100644
index 32d27e01d25d57838d7c44edf1de5f54b7568fdf..0000000000000000000000000000000000000000
--- a/views/DE/layout.pug
+++ /dev/null
@@ -1,12 +0,0 @@
-doctype html
-html
- head
- title PassportJS SAML example
- block links
- link(rel='stylesheet', href='bower_components/bootstrap/dist/css/bootstrap.css')
- body
- div.container
- block content
- script(src='bower_components/jquery/dist/jquery.min.js')
- script(src='bower_components/bootstrap/dist/js/bootstrap.min.js')
- block scripts
diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug
deleted file mode 100644
index f6517d29faccb116a9e7345b04084ca0a86e53d5..0000000000000000000000000000000000000000
--- a/views/DE/project/addProjectOverview.pug
+++ /dev/null
@@ -1,143 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Add Project Overview"
- 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", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
- // jQuery UI - Datepicker
- link(rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css")
- 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;
- }
- body
- div(class="container-fluid")
- div(class="row")
- div(class="col-md-6 offset-md-2")
- h4(class="mb-3 font-weight-bold") Neues Projekt
- div(class="col-md-6 offset-md-3")
- 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" encType="multipart/form-data")
- div(class='form-row')
- div(class='form-group col-md-12')
- input#inputPname(name="title" class="form-control" type="text" placeholder="Projekttitel*" required)
- div(class="form-group col-md-12")
- 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')
- select#inputCategory(name="category", class="form-control")
- option(value="") - Projektkategorie -
- option(value="Experten-Gruppe") Experten-Gruppe
- option(value="Student-Projekt") Student-Projekt
- option(value="Lehr Projekt") Lehr Projekt
- option(value="Transfer-projekt") Transfer-projekt
- div(class="form-group col-md-12")
- 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")
- div(class="input-group-prepend")
- div(class="input-group-text")
- input#inputWiki(name="wiki" type="checkbox")
- | Wiki
-
- h5(class="mb-3 font-weight-bold") Inhalte
- div(class='form-row')
- div(class='form-group col-md-12')
- textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="Projektüberblick")
- div(class="form-group col-md-12")
- textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="Fragestellung")
- div(class='form-group col-md-12')
- textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="Vorgehensweise")
- div(class="form-group col-md-12")
- textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="Ergebnis und Nutzung")
- div(class="form-group col-md-12")
- input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords")
- h5(class="mb-3 font-weight-bold") Projektinformationen
- div(class='form-row')
- 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-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="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)")
- div(class="form-group col-md-12")
- input#inputWebsite(name="website" class="form-control" type="text" placeholder="Projekt-Website")
- h5(class="mb-3 font-weight-bold") Bilder
- div(class='form-row')
- div(class="form-group col-md-12")
- 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
- div(class='form-row')
- div(class="form-group col-md-2")
-
Ansprechperson
- div(class="form-group col-md-5")
- input#inputContactName(name="contactName" class="form-control" type="text" placeholder="Anrede, Titel, Vorname, Nachname")
- div(class="form-group col-md-5")
- input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="E-Mail-Adresse")
- div(class="form-group col-md-2")
-
Projektleitung
- div(class="form-group col-md-5")
- input#inputLeaderName(name="leaderName" class="form-control" type="text" placeholder="Anrede, Titel, Vorname, Nachname")
- div(class="form-group col-md-5")
- input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="E-Mail-Adresse")
- p
* Pflichtfeld
- input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen")
-
- // 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")
- // jQuery UI - Datepicker
- script(src="https://code.jquery.com/ui/1.12.1/jquery-ui.js")
- script(src="/js/jquery-ui/i18n/datepicker-de.js")
- //script(src="i18n/datepicker-de.js")
- // 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/headfoot.js")
- script.
- $( function() {
- $.datepicker.setDefaults( $.datepicker.regional["de"] );
- $("#inputTermFrom").datepicker();
- $("#inputTermTo").datepicker();
- });
\ No newline at end of file
diff --git a/views/DE/project/landingpage.html b/views/DE/project/landingpage.html
deleted file mode 100644
index d9c19d49a9b7381e7a43cd7d7d6842e22663945f..0000000000000000000000000000000000000000
--- a/views/DE/project/landingpage.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-
-
Als innovative Hochschule wollen wir den Wandel in der Gesellschaft zukunftsfähig und verantwortungsvoll mitgestalten.
-
-
Unser Ziel ist die Beantwortung gesellschaftlich relevanter Zukunftsfragen.
-
- Diese bearbeiten wir durch Forschungs-, Innovations- und Transferprojekte und entwickeln dabei anwendungsbezogene Lösungen.
- Als Impulsgeber ermöglichen wir den Transfer innovativer Ideen, indem wir Kooperationen fördern und Räume für kreativen Austausch schaffen.
-
- Dabei verknüpfen wir unsere Expertise mit Partnern innerhalb und außerhalb der Region Stuttgart. Wir informieren und involvieren Interessierte und Beteiligte durch die unterschiedlichsten Events und Formate.
-
-
Willst du dabei sein?
-
- Dann findest du unter
Informationen mehr über unsere Expertise, Projekte, Publikationen und Lösungen.
-
- Erfahre mehr über unsere
Events und über die Möglichkeiten zur
Zusammenarbeit.
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/views/DE/project/landingpage.pug b/views/DE/project/landingpage.pug
deleted file mode 100644
index a835ec04d9823d0f847956b9bf6012eaf92b083f..0000000000000000000000000000000000000000
--- a/views/DE/project/landingpage.pug
+++ /dev/null
@@ -1,47 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Project List"
- 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", 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;
- }
- body
- include landingpage.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
diff --git a/views/DE/project/mailinglists.pug b/views/DE/project/mailinglists.pug
deleted file mode 100644
index c38c8042e3dead88fbbf9febf47439d6258e1eab..0000000000000000000000000000000000000000
--- a/views/DE/project/mailinglists.pug
+++ /dev/null
@@ -1,99 +0,0 @@
-html(lang="de")
- head
- title= "Mailinglisten"
- meta(charset="UTF-8")
- 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;
- }
- .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/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
- 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
deleted file mode 100644
index cb868f9ab04683fb3d9c4d4cd5c514c91083f284..0000000000000000000000000000000000000000
--- a/views/DE/project/project-simplified.pug
+++ /dev/null
@@ -1,51 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Project List"
- 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", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
- style.
- .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
- script(src="/js/headfoot.js")
diff --git a/views/DE/project/project.html b/views/DE/project/project.html
deleted file mode 100644
index 73cd0ee53cc11528b2806c7f66a7fa886b0bbdea..0000000000000000000000000000000000000000
--- a/views/DE/project/project.html
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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:
-
-
- -
- Folgen Sie dem
- Link zu den Gitlab-Projekten, um zum Gitlab zu
- gelangen.
-
- -
- Melden Sie sich bei Gitlab an, indem Sie im Gitlab auf den Link Sign-In klicken.
-
- -
- Sie werden dann auf eine Anmeldeseite von unserem Portal geführt. Geben Sie dort bitte ihre
- Benutzerdaten vom Portal ein.
-
- -
- Nach erfolgreichem Anmelden werden Sie zum Gitlab zurückgeführt.
-
- -
- Navigieren Sie dann zum Projekt Ihrer Wahl.
-
- -
- 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.
-
-
-
-
-
-
-
-
-
-
-
- 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:
-
-
- -
- Folgen Sie dem
- Link zu den Gitlab-Projekten, um zum Gitlab zu
- gelangen.
-
- -
- Melden Sie sich bei Gitlab an, indem Sie im Gitlab auf den Link Sign-In klicken.
-
- -
- Sie werden dann auf eine Anmeldeseite von unserem Portal geführt. Geben Sie dort bitte ihre
- Benutzerdaten vom Portal ein.
-
- -
- Nach erfolgreichem Anmelden werden Sie zum Gitlab zurückgeführt.
-
- -
- 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.
-
-
- 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
deleted file mode 100644
index e015d1e650c22ff70c32feda6ebff7d2edd7b3b2..0000000000000000000000000000000000000000
--- a/views/DE/project/projectOverview.pug
+++ /dev/null
@@ -1,162 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Project List"
- 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", 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;
- }
- body
- div
- for project in projectOV
- div(class="flex-container")
- div(class="main")
- h1 #{project.title}
- div(style="float:right; margin-left:30px; margin-bottom:0px; width:50%;")
- img(src=project.src, width="100%")
- p(style="text-align:right") #{project.caption}
-
- h2 Projektüberblick
- p !{project.overview}
- br
- b keywords:
- span #{project.keywords}
- br
- h2 Fragestellung
- p !{project.question}
- p
- h2 Vorgehensweise
- p !{project.approach}
- br
- br
- h2 Ergebnis und Nutzung
- p !{project.result}
- div(class="side")
- for image in projectImgs
- if image.pos == '2' || image.pos == '3'
- div(class="projectimg")
-
- if image.caption
- span #{image.caption}
-
-
- div(class="fakeimg")
- if project.leader_lastname
- p
- b Projektleitung HfT:
-
#{project.leader_lastname}
- div(class="fakeimg")
- if project.contact_lastname
- p
- b Ansprechperson:
-
#{project.contact_lastname}
- div(class="fakeimg")
- if project.announcement
- p
- b Ausschreibung:
- span !{project.announcement}
-
- div(class="fakeimg")
- if project.partner_name
- p
- b Projektpartner:
- br
- for website, i in partnerWS
- if website
-
#{partnerN[i]}
- br
- else
- #{partnerN[i]}
- br
-
- div(class="fakeimg")
- if project.term
- p
- b Projektlaufzeit:
- span #{project.term}
-
- div(class="fakeimg")
- if project.award_name
- p
- b Preise:
- br
- for awardsite, i in awardWS
- if awardsite
-
#{awardN[i]}
- br
- else
- #{awardN[i]}
- br
-
- div(class="fakeimg")
- if project.administrator
- p
- b Projektträger:
- span #{project.administrator}
-
- div(class="fakeimg")
- if project.sponsor_name
- p
- b Geldgeber:
- br
- for website, i in sponsorWS
- if website
-
#{sponsorN[i]}
- br
- else
- #{sponsorN[i]}
- br
-
- div(class="fakeimg")
- if project.website || project.further_details
- p
- b Mehr Informationen:
- if project.website
-
#{project.website}
- br
- span !{project.further_details}
-
- if project.pname == 'M4LAB'
- div(class="Downloads" style="height:200px;")
- h5 Downloads
-
- 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/Innovative_Hochschule_Initiative_BMBF_GWK_RGB.png" width="100%")
-
- //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
- 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
deleted file mode 100644
index c2730b807aa30e4e7446275dc791777989f1c30b..0000000000000000000000000000000000000000
--- a/views/DE/project/projects.pug
+++ /dev/null
@@ -1,114 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Project List"
- 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", 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;
- }
- body
- div(class="container-fluid")
- if isUserAuthenticated
- p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte.
- a(href="/addprojectoverview" class="btn btn-primary" role="button" aria-pressed="true") Projekt anlegen
- else
- p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte.
- p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen]
- if successes
- for success in successes
- div.alert.alert-success.alert-dismissible #{ success }
- a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
- // Active projects
- h3(class="mb-3 font-weight-bold") Aktive Projekte
- table(class="table table-striped")
- thead
- tr
- th Logo
- th Akronym
- th Title
- th Kernziel
- th Kategorie
- th Ansprechpartner
- th Projektinhalte
- tbody
- for item in active
- tr
- //td #{item.status}
- td
- img(src=item.logo, width="40", height="40")
- td #{item.akronym}
- td #{item.title}
- td #{item.summary}
- td #{item.category}
- td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}]
- td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht]
- if item.gitlab
- a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien
- a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki
- else
- a(class="nav-link", href="#") Projektdateien
- a(class="nav-link", href="#") Projektwiki
- br
- // Non-active projects
- h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte
- table(class="table table-striped")
- thead
- tr
- th Logo
- th Akronym
- th Title
- th Kernziel
- th Kategorie
- th Ansprechpartner
- th Projektinhalte
- tbody
- for item in nonActive
- tr
- //td #{item.status}
- td
- img(src=item.logo, width="40", height="40")
- td #{item.akronym}
- td #{item.title}
- td #{item.summary}
- td #{item.category}
- td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}]
- td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht]
- if item.gitlab
- a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien
- a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki
- else
- a(class="nav-link", href="#") Projektdateien
- a(class="nav-link", href="#") Projektwiki
-
- // 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
- 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
deleted file mode 100644
index e6ee7b6907023ec96a97b4e4345c72d94587491e..0000000000000000000000000000000000000000
--- a/views/DE/project/videoconferences.pug
+++ /dev/null
@@ -1,67 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Project List"
- 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", 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;
- }
- body
- div(class="flex-container")
- div(class="main")
- h1 Videokonferenzen
-
- p Wir bieten grundsätzlich zwei Möglichkeiten an, Viodeokonferenzen abzuhalten:
-
- h2 Jitsi
-
- p
-
Jitsi ist ein Opensource Videokonferenz-System, welches es ermöglicht, direkt über den Browser Videokonferenzen abzuhalten.
- br
- span Da die Hauptlast bei diesem System Clientseitig getragen wird, raten wir zu einer Nutzung auf Desktopsystemen bzw. Laptops.
-
- p Um eine Videokonferenz starten zu können, muss sich zunächst ein Organisator am Portal anmelden und die Videokonferenz eröffnen. Weitere Teilnehmer können dann ohne Anmeldung einfach über einen Link hinzugefügt werden.
-
- p Der Zugang zu Jitsi findet sich
hier
-
- h2 GoToMeeting
-
- p Eine weitere Option, die wir anbieten werden, ist die Organisation von Videokonferenzen via GoToMeeting
-
- p Mehr Informationen darüber erhalten Sie zu gegebener Zeit an dieser Stelle
-
-
-
-
- //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
- script(src="/js/headfoot.js")
\ No newline at end of file
diff --git a/views/EN/account/forgotPwd.pug b/views/EN/account/forgotPwd.pug
index 1cde0888090e2046496e472178d2d296a6f8c647..7688a512b17b02a6ae8d3869cd7acb7b43ee2f6d 100644
--- a/views/EN/account/forgotPwd.pug
+++ b/views/EN/account/forgotPwd.pug
@@ -4,8 +4,8 @@ html(lang="en")
title= "Forgot Password"
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="https://transfer.hft-stuttgart.de/css/custom/login.css")
+ link(rel="stylesheet", type="text/css", href="/css/bootstrap.css")
+ link(rel="stylesheet", type="text/css", href="/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 {
@@ -53,4 +53,4 @@ html(lang="en")
// 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="https://transfer.hft-stuttgart.de/js/headfoot.js")
+ script(src="/js/headfoot.js")
diff --git a/views/EN/account/home.pug b/views/EN/account/home.pug
index d2f3875a5a831fde499fae7baddb5acfbd47e34d..df71fe1840f6c5bd6be7cf0ba88e320669129905 100644
--- a/views/EN/account/home.pug
+++ b/views/EN/account/home.pug
@@ -4,7 +4,7 @@ html(lang="en")
title= "User Account"
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.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 {
diff --git a/views/EN/account/profile.pug b/views/EN/account/profile.pug
index 47c1f7e8683e370e2fb368337c4fca5d419230fe..60788795491df06cca87c2faa1c76465c6f6f47c 100644
--- a/views/EN/account/profile.pug
+++ b/views/EN/account/profile.pug
@@ -4,7 +4,7 @@ html(lang="en")
title= "User Profile"
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.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 {
diff --git a/views/EN/account/registration.pug b/views/EN/account/registration.pug
index 88ef5a932c510753f110253fec986dd426f6896f..25096b1516ee21d3dc970ed4acea0e818605ea69 100644
--- a/views/EN/account/registration.pug
+++ b/views/EN/account/registration.pug
@@ -4,7 +4,7 @@ html(lang="en")
title= "Create New Account"
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.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 {
@@ -89,4 +89,4 @@ html(lang="en")
// M4_LAB
script(src="/js/generalFunction.js")
script(src="/js/registration.js")
- script(src="https://transfer.hft-stuttgart.de/js/headfoot.js")
\ No newline at end of file
+ script(src="/js/headfoot.js")
\ No newline at end of file
diff --git a/views/EN/account/reset.pug b/views/EN/account/reset.pug
index b8939ea2200d627786fa64a8feae03da02d5b346..610a914e9ea684e3e64a41a32dfd1ed5be1fa82b 100644
--- a/views/EN/account/reset.pug
+++ b/views/EN/account/reset.pug
@@ -4,8 +4,8 @@ html(lang="en")
title= "Reset Password"
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="https://transfer.hft-stuttgart.de/css/custom/login.css")
+ link(rel="stylesheet", type="text/css", href="/css/bootstrap.css")
+ link(rel="stylesheet", type="text/css", href="/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 {
@@ -57,4 +57,4 @@ html(lang="en")
// M4_LAB
script(src="/js/security.js")
script(src="/js/generalFunction.js")
- script(src="https://transfer.hft-stuttgart.de/js/headfoot.js")
+ script(src="/js/headfoot.js")
diff --git a/views/EN/account/security.pug b/views/EN/account/security.pug
index 2a5c248ce1f9e98b429b52eb9261f322cd38fcf9..c2c997b0ececb95abc04617a40ce0fd373b88ea1 100644
--- a/views/EN/account/security.pug
+++ b/views/EN/account/security.pug
@@ -4,7 +4,7 @@ html(lang="en")
title= "User Profile"
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.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 {
diff --git a/views/EN/account/services.pug b/views/EN/account/services.pug
index f095144beb05de603a741230ae857d11b543b3f9..c70d729fa83da0e81bf5d82058008a5b14b9d3d5 100644
--- a/views/EN/account/services.pug
+++ b/views/EN/account/services.pug
@@ -4,7 +4,7 @@ html(lang="en")
title= "User Profile"
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.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 {
diff --git a/views/EN/error.pug b/views/EN/error.pug
deleted file mode 100644
index bf750c0087880c06604b3d1bc9bb1bfe8e522372..0000000000000000000000000000000000000000
--- a/views/EN/error.pug
+++ /dev/null
@@ -1,6 +0,0 @@
-html
- head
- title Error
- body
- h1 An error occurred!
- block content
\ No newline at end of file
diff --git a/views/EN/layout.pug b/views/EN/layout.pug
deleted file mode 100644
index 32d27e01d25d57838d7c44edf1de5f54b7568fdf..0000000000000000000000000000000000000000
--- a/views/EN/layout.pug
+++ /dev/null
@@ -1,12 +0,0 @@
-doctype html
-html
- head
- title PassportJS SAML example
- block links
- link(rel='stylesheet', href='bower_components/bootstrap/dist/css/bootstrap.css')
- body
- div.container
- block content
- script(src='bower_components/jquery/dist/jquery.min.js')
- script(src='bower_components/bootstrap/dist/js/bootstrap.min.js')
- block scripts
diff --git a/views/EN/project/addProjectOverview.pug b/views/EN/project/addProjectOverview.pug
deleted file mode 100644
index 7b40b54fc63b3d774caf8d0b8af272f4e3a554ce..0000000000000000000000000000000000000000
--- a/views/EN/project/addProjectOverview.pug
+++ /dev/null
@@ -1,115 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Add Project Overview"
- 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", 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;
- }
- body
- div(class="container-fluid")
- div(class="row")
- div(class="col-md-6 offset-md-2")
- h4(class="mb-3 font-weight-bold") Neues Projekt
- div(class="col-md-6 offset-md-3")
- 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")
- div(class='form-row')
- div(class='form-group col-md-12')
- input#inputPname(name="pname" class="form-control" type="text" placeholder="human-readable short project name*" required)
- div(class="form-group col-md-12")
- input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required)
- div(class="form-group col-md-12")
- input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project")
- div(class="form-group col-md-12")
- input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project")
- div(class="form-group col-md-12")
- input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project")
- 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")
- div(class="input-group-prepend")
- div(class="input-group-text")
- input#inputWiki(name="wiki" type="checkbox")
- | Wiki
-
- h5(class="mb-3 font-weight-bold") Content
- div(class='form-row')
- div(class='form-group col-md-12')
- textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview")
- div(class="form-group col-md-12")
- textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question")
- div(class='form-group col-md-12')
- textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach")
- div(class="form-group col-md-12")
- textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result")
- div(class="form-group col-md-12")
- input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords")
- h5(class="mb-3 font-weight-bold") Info
- div(class='form-row')
- div(class='form-group col-md-12')
- textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung")
- div(class="form-group col-md-12")
- input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit")
- div(class='form-group col-md-12')
- textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen")
- div(class="form-group col-md-12")
- input#inputWebsite(name="website" class="form-control" type="text" placeholder="website")
- h5(class="mb-3 font-weight-bold") Images
- div(class='form-row')
- div(class="form-group col-md-12")
- input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source")
- div(class="form-group col-md-12")
- input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image")
- h5(class="mb-3 font-weight-bold") Contact
- div(class='form-row')
- div(class="form-group col-md-4")
- input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname")
- div(class="form-group col-md-4")
- input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname")
- div(class="form-group col-md-4")
- input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email")
- div(class="form-group col-md-4")
- input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname")
- div(class="form-group col-md-4")
- input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname")
- div(class="form-group col-md-4")
- input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email")
- p
* Pflichtfeld
- input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen")
-
- // 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
- script(src="/js/headfootLogout.js")
\ No newline at end of file
diff --git a/views/EN/project/mailinglists.pug b/views/EN/project/mailinglists.pug
deleted file mode 100644
index f2ddbd8b8e7eb89a85e4dc16310b96acf74e06e3..0000000000000000000000000000000000000000
--- a/views/EN/project/mailinglists.pug
+++ /dev/null
@@ -1,61 +0,0 @@
-html(lang="en")
- head
- title= "Mailinglisten"
- 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", 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()
- 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:
- // 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="https://transfer.hft-stuttgart.de/js/headfoot.js")
\ No newline at end of file
diff --git a/views/EN/project/projects.pug b/views/EN/project/projects.pug
deleted file mode 100644
index 56f65c10de4655b786ec93a865b6e57adc5f5e10..0000000000000000000000000000000000000000
--- a/views/EN/project/projects.pug
+++ /dev/null
@@ -1,117 +0,0 @@
-doctype html
-html(lang="de")
- head
- title= "Project List"
- 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", 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;
- }
- body
- div(class="container-fluid")
- if isUserAuthenticated
- p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte.
- a(href="/addprojectoverview" class="btn btn-primary" role="button" aria-pressed="true") Projekt anlegen
- else
- p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte.
- p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen]
- if successes
- for success in successes
- div.alert.alert-success.alert-dismissible #{ success }
- a(class="close", href="#", data-dismiss="alert", aria-label="close") ×
- // Active projects
- h3(class="mb-3 font-weight-bold") Aktive Projekte
- table(class="table table-striped")
- thead
- tr
- th Logo
- th Akronym
- th Title
- th Kernziel
- th Kategorie
- th Ansprechpartner
- th Projektinhalte
- tbody
- for item in active
- tr
- //td #{item.status}
- td
- img(src=item.logo, width="40", height="40")
- td #{item.akronym}
- td #{item.title}
- td #{item.summary}
- td #{item.category}
- td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}]
- td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht]
- if item.gitlab
- a(class="nav-link", href=item.gitlab+"/tree/master") Projektdateien
- a(class="nav-link", href=item.gitlab+"/wikis/home") Projektwiki
- else
- a(class="nav-link", href="#") Projektdateien
- a(class="nav-link", href="#") Projektwiki
- br
- // Non-active projects
- h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte
- table(class="table table-striped")
- thead
- tr
- th Logo
- th Akronym
- th Title
- th Kernziel
- th Kategorie
- th Ansprechpartner
- th Projektinhalte
- tbody
- for item in nonActive
- tr
- //td #{item.status}
- td
- img(src=item.logo, width="40", height="40")
- td #{item.akronym}
- td #{item.title}
- td #{item.summary}
- td #{item.category}
- td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}]
- td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht]
- if item.gitlab
- a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien
- a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki
- else
- a(class="nav-link", href="#") Projektdateien
- a(class="nav-link", href="#") Projektwiki
-
- // 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="https://transfer.hft-stuttgart.de/js/headfoot.js")
\ No newline at end of file