diff --git a/app.js b/app.js index 31f2d20..d15cbeb 100644 --- a/app.js +++ b/app.js @@ -234,6 +234,9 @@ app.post('/login', async (req, res) => { if (user.is_active) { req.session.userId = user.id; req.session.userName = user.username; + req.session.activeRiege = 1; + req.session.activeTab = 'geraete'; + req.session.message = [ title = '', message = '', type = 'none' ]; if (user.admin_status === 'expired') { await pool.query('UPDATE users SET role = $1, admin_temp = NULL WHERE id = $2', ['user', user.id]); req.session.role='user'; @@ -420,6 +423,7 @@ app.post('/profile', requireAuth, async (req, res) => { app.post('/update-training', requireAuth, async (req, res) => { const { trainingId, type, spielName } = req.body; + req.session.activeTab = 'spiel'; let spielId; const spiel = await pool.query(`SELECT * FROM spiele WHERE name = $1`, [spielName]); @@ -439,6 +443,7 @@ app.post('/update-training', requireAuth, async (req, res) => { } else if (type === 'aufwaermen') { await pool.query('UPDATE trainings SET aufwaermen = $1 WHERE id = $2', [ spielId, trainingId ]); } + req.session.message = [title = '', body = '', type = 'none']; res.redirect('/training'); } catch (error) { console.error(error); @@ -449,7 +454,7 @@ app.post('/update-training', requireAuth, async (req, res) => { app.post('/update-leader', requireAuth , async (req, res) => { const { trainingId, type, leaderId } = req.body; - +req.session.activeTab = 'spiel'; try { if (type === 'aufwaermleiter') { await pool.query('UPDATE trainings SET aufwaermleiter = $1 WHERE id = $2', [leaderId, trainingId]); @@ -562,6 +567,8 @@ app.get('/training', requireAuth, async (req, res) => { previousTraining, nextTraining, riegen, + activeRiege: req.session.activeRiege, + activeTab: req.session.activeTab, moment }); } catch (error) { @@ -601,8 +608,8 @@ app.get('/riege', requireAuth, async (req, res) => { res.render('riegen', { riegen: riegen, session: req.session }); } catch (error) { console.error('Error fetching riegen:', error); - const message = 'Error fetching riegen:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.render('error', {session: req.session}); } }); @@ -618,8 +625,8 @@ app.get('/teilnehmer', requireAuth, async (req, res) => { res.render('teilnehmer', { teilnehmende, session: req.session }); } catch (error) { console.error(error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.render('error', { session: req.session }); } }); @@ -629,6 +636,7 @@ app.get('/mitglied/:id', requireAuth, async (req, res) => { const userResult = await pool.query('SELECT * FROM teilnehmende WHERE id = $1', [id]); const riegeResult = await pool.query('SELECT * FROM riegen WHERE fremdid_teilnehmende = $1', [id]); const riege = riegeResult.rows[0].riegennummer; + req.session.activeRiege = riege; const numberResult = await pool.query('SELECT telefonnummern.*, telverbindung.bezeichnung FROM telefonnummern JOIN telverbindung ON telefonnummern.verbindung = telverbindung.id WHERE telefonnummern.fid_teilnehmer = $1', [id]); const numbers = numberResult.rows if (userResult.rows.length > 0) { @@ -644,12 +652,13 @@ app.get('/mitglied/:id', requireAuth, async (req, res) => { session: req.session }); } else { - res.status(400).send('Mitglied existiert nicht'); + req.session.message = ['Error', 'Mitglied existiert nicht' , 'error']; + res.redirect('/teilnehmer') } } catch (error) { console.error('Error in Mitglied:', error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', 'Mitglied existiert nicht' , 'error']; + res.redirect('/teilnehmer'); } }); @@ -675,13 +684,14 @@ app.post('/update-mitglied', requireAdmin, async (req, res) => { res.redirect('/mitglied/' + id); } catch (error) { console.error(error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.redirect('/mitglied/' + id); } }); // Login und Registrierung anzeigen app.get('/login', (req, res) => { + req.session.message=['', '', 'none']; res.render('login', {session: req.session}); // Stelle sicher, dass es eine login.ejs gibt }); @@ -698,8 +708,8 @@ app.get('/spiele', async (req, res) => { res.render('spiele', { spiele, session: req.session }); } catch (error) { console.error('Error in Mitglied:', error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.render('spiele', { spiele, session: req.session }); } }) @@ -715,12 +725,17 @@ app.get('/spiel/:id', async (req, res) => { const { id } = req.params; try { const spieleResult = await pool.query('SELECT * FROM spiele WHERE id = $1', [id]); + if (spieleResult.rows.length > 0) { const spiel = spieleResult.rows[0]; res.render('spiel', { spiel, session: req.session }); + } else { + req.session.message = ['Error', 'Spiel existiert nicht', 'error']; + res.redirect('/spiele'); + } } catch (error) { - console.error('Error in Mitglied:', error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + console.error('Error in Spiele:', error); + req.session.message = ['Error', 'Spiel existiert nicht' , 'error']; + res.redirect('/spiele'); } }) @@ -729,17 +744,19 @@ app.post('/edit-spiel', requireAuth, async (req, res) => { const { material, dauer, regeln, variationen, type, id } = req.body; try { const queryResult = await pool.query('UPDATE spiele set material = $1, regeln = $2, dauer = $3, variationen = $4, type = $5 Where id = $6 ', [material, regeln, dauer, variationen, type, id]); + req.session.message = ['Erfolg', 'Das Spiel wurde gespeichert', 'success']; res.redirect('/spiel/' + id); } catch (error) { console.error('Error in edit Spiel:', error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.redirect('/spiel/' + id); } }) // Startseite app.get('/', (req, res) => { + req.session.message = ['', '', 'none'] res.render('index', {session: req.session}); }); @@ -749,11 +766,12 @@ app.get('/changelog', async (req, res) => { try { const changeResult = await pool.query('SELECT * FROM changelog ORDER BY datetime DESC;'); const changes = changeResult.rows; + req.session.message = ['Erfolg', 'Log gespeichert' , 'success']; res.render('changelog', { changes, session: req.session }); } catch (error) { console.error('Error:', error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.redirect('/changelog'); } }) @@ -767,22 +785,25 @@ app.post('/changelog', requireAdmin, async (req, res) => { res.render('changelog', { changes, session: req.session }); } catch (error) { console.error('Error:', error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.render('changelog', { changes, session: req.session }); } }) app.post('/anwesend', requireAuth, async (req, res) => { -const { anw, trainingId } = req.body; +const { anw, trainingId, riege } = req.body; +req.session.activeTab = 'anwesend'; +req.session.message = [title = 'Erfolg', body = 'Die Anwesenheit wurde gespeichert', type = 'success']; try { for (const teilnehmer of anw) { await pool.query('INSERT INTO anwesend (fid_teilnehmer, fid_training) VALUES ($1, $2)', [teilnehmer, trainingId]); } + req.session.activeRiege = riege; res.redirect('/training'); } catch (error) { console.error('Error:', error); - const message = 'Error:' + error; - res.render('error', {session: req.session, message}); + req.session.message = ['Error', error , 'error']; + res.redirect('/training'); }}) const server = app.listen(port, '0.0.0.0', () => { diff --git a/views/partials/header.ejs b/views/partials/header.ejs index 0650c6a..911fedf 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -63,3 +63,29 @@
+ + + + + + + + + + + + + <% if (session.message){ %> + <% if (session && session.message[2] === 'success') { %> + + <% session.message[2] = 'none' %> + <% } %> + <% if (session && session.message[2] === 'error') { %> + + <% session.message[2] = 'none' %> + <% } %> + <% } %> \ No newline at end of file diff --git a/views/trainings.ejs b/views/trainings.ejs index acd89b9..4d39450 100644 --- a/views/trainings.ejs +++ b/views/trainings.ejs @@ -14,18 +14,18 @@ <% if (training) { %>
-
+

Geräte

  • Riege 1: <%= training.geraet_riege_1_name %>
  • @@ -35,7 +35,7 @@
  • Riege 5: <%= training.geraet_riege_5_name %>
-
+

Aufwärmen:

@@ -118,14 +118,14 @@
-
+

Anwesenheit

@@ -133,7 +133,7 @@
<% Object.keys(riegen).forEach((riegennummer, index) => { %> -
+
@@ -156,6 +156,7 @@
+