Skip to content

Commit

Permalink
🎨 style: Layout-Optimierung und Vorbereitung für Themes
Browse files Browse the repository at this point in the history
- 📏 Abstände im gesamten Layout verbessert für konsistentere Darstellung
- 📄 Automatischer Seitenumbruch bei Noten implementiert, wenn diese über das Seitenende hinausgehen
  - ⚠️ Hinweis: Manueller Seitenumbruch muss vor dem Titel eingefügt werden

- 🎨 Template-CSS optimiert für einfachere Anpassbarkeit
- 🔧 Vorbereitung für zukünftige Theme-Implementierung
- 🔢 Abstände als Konstanten definiert für einheitliche und leicht änderbare Werte

Diese Änderungen verbessern die visuelle Konsistenz der Anwendung und
legen den Grundstein für zukünftige Theme-Anpassungen. Der automatische
Seitenumbruch bei Noten erhöht die Benutzerfreundlichkeit, während die
CSS-Optimierungen die Wartbarkeit und Flexibilität des Designs steigern.
  • Loading branch information
Simon Luthe authored and Simon Luthe committed Aug 8, 2024
1 parent 0a17b76 commit da22ece
Show file tree
Hide file tree
Showing 13 changed files with 554 additions and 250 deletions.
57 changes: 52 additions & 5 deletions backend/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const PORT = process.env.PORT || 3000;

app.use(express.json());
app.use(cors({
origin: process.env.URL ? process.env.URL.split(',') : '*',
origin: process.env.URL ? process.env.URL.split(',') : ['*', 'https://hymnoscribe.de'],
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type', 'Authorization']
}));
Expand Down Expand Up @@ -154,10 +154,6 @@ app.use(express.urlencoded({ limit: '50mb', extended: true }));

app.use(express.static(path.join(__dirname, '../frontend')));

app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, '../frontend/index.html'));
});

app.get('/admin.html', (req, res) => {
res.sendFile(path.join(__dirname, '../frontend/admin.html'));
});
Expand All @@ -166,6 +162,56 @@ app.get('/reset-password.html', (req, res) => {
res.sendFile(path.join(__dirname, 'public', '../frontend/admin.html'));
});

apiRouter.post('/contact', async (req, res) => {
const { name, email, subject, message, inquiryType } = req.body;

try {
const emailContent = `
Name: ${name}
E-Mail: ${email}
Anfragetyp: ${inquiryType}
Betreff: ${subject}
Nachricht: ${message}
`;

await sendContactEmail(email, subject, emailContent);

res.json({ message: 'Nachricht erfolgreich gesendet' });
} catch (error) {
console.error('Fehler beim Senden der Kontaktnachricht:', error);
res.status(500).json({ error: 'Interner Serverfehler beim Senden der Nachricht' });
}
});

async function sendContactEmail(senderEmail, subject, content) {
const transporter = createTransporter();
const template = getEmailTemplate();

const renderedTemplate = renderEmailTemplate(template, {
Name: 'Administrator',
Hauptinhalt: `
<p>Eine neue Kontaktanfrage wurde über das Formular gesendet:</p>
<pre>${content}</pre>
`,
ButtonText: 'Antworten',
ButtonUrl: `mailto:${senderEmail}`
});

try {
await transporter.sendMail({
from: process.env.EMAIL_FROM,
to: process.env.CONTACT_EMAIL || process.env.EMAIL_FROM,
subject: `Neue Kontaktanfrage: ${subject}`,
html: renderedTemplate,
replyTo: senderEmail
});
console.log('Contact email sent successfully');
} catch (error) {
console.error('Error sending contact email:', error);
throw error;
}
}

// Anforderung zum Zurücksetzen des Passworts
apiRouter.post('/request-password-reset', async (req, res) => {
const { email } = req.body;
Expand Down Expand Up @@ -1216,6 +1262,7 @@ function renderEmailTemplate(template, data) {
const regex = new RegExp(`\\[${key}\\]`, 'g');
renderedTemplate = renderedTemplate.replace(regex, data[key]);
}

return renderedTemplate.replace('[LOGO_URL]', process.env.LOGO_URL);
}

Expand Down
2 changes: 1 addition & 1 deletion frontend/admin.html
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@
<!-- <h1>HymnoScribe</h1>-->

<div class="header-buttons">
<a href="dashboard.html" class="btn">Zurück zum Dashboard</a>
<a href="dashboard.html" id="dashboard-back" class="btn">Zurück zum Dashboard</a>
<button id="logout-btn" class="btn">Abmelden</button>
</div>
<div class="hamburger-menu">
Expand Down
Loading

0 comments on commit da22ece

Please sign in to comment.