From c5fe3ad808b77ff71847ba4f105bbfa9c377e10d Mon Sep 17 00:00:00 2001
From: Housemann <40449280+Housemann@users.noreply.github.com>
Date: Sat, 13 Jun 2026 10:19:44 +0200
Subject: [PATCH] design anpasungen und url for image
---
DEPLOYMENT.md | 323 ----------
NEONAIL_PROJECT_PROMPT.md | 483 ---------------
WEBSPACE-SETUP.md | 205 -------
activate-admin-role.sh | 37 --
add-admin-role-migration.php | 17 -
admin-check.php | 47 --
apache-config.txt | 28 -
apache-diagnose.sh | 74 ---
.../Controllers/UserNailPolishController.php | 44 +-
black-screen-fix.md | 136 ----
check-admin-user.php | 53 --
check-laravel-logs.sh | 45 --
check-user-collection.php | 77 ---
clear-route-cache.sh | 37 --
complete-fix.sh | 72 ---
create-admin.php | 40 --
debug-405-error.php | 118 ----
debug-500-error.php | 131 ----
debug-image-upload.php | 194 ------
debug-logout-detailed.php | 202 ------
debug-logout.php | 218 -------
deploy-manufacturer-feature.sh | 67 --
deploy-sqlite.sh | 64 --
deploy.sh | 43 --
deployment-checklist.md | 111 ----
emergency-apache-fix.sh | 66 --
env-production-example.txt | 55 --
env-production-guide.md | 0
env-sqlite-example.txt | 64 --
fix-405-error.sh | 55 --
fix-admin-controller-email.php | 284 ---------
fix-admin-layout.php | 291 ---------
fix-admin-role-database.php | 120 ----
fix-admin-role.php | 54 --
fix-admin-routes.php | 165 -----
fix-admin-view.php | 158 -----
fix-all-405-errors.sh | 50 --
fix-all-forms-https.sh | 97 ---
fix-all-safari-warnings.sh | 189 ------
fix-apache-documentroot.sh | 67 --
fix-apache-headers.sh | 103 ----
fix-appserviceprovider-syntax.sh | 27 -
fix-black-screen.sh | 60 --
fix-https-config.sh | 48 --
fix-https-form-security.sh | 70 ---
fix-image-display.sh | 55 --
fix-image-upload-fallback.php | 49 --
fix-image-upload-final.php | 282 ---------
fix-image-upload-simple.php | 222 -------
fix-image-urls.php | 60 --
fix-laravel-setup.sh | 53 --
fix-logout-final.php | 110 ----
fix-logout-route.php | 194 ------
fix-logout-simple-2.php | 147 -----
fix-logout-simple.php | 81 ---
fix-logout.php | 277 ---------
fix-mail-config.sh | 56 --
fix-pail-cache.sh | 35 --
fix-pail-final.sh | 46 --
fix-permissions.sh | 67 --
fix-production-issues.sh | 0
fix-remaining-safari-warnings.sh | 104 ----
fix-safari-form-security.sh | 207 -------
fix-safari-https.sh | 171 ------
fix-safari-security-warnings.sh | 166 -----
fix-sqlite-permissions.sh | 41 --
fix-storage-link.sh | 70 ---
fix-upload-limits.php | 133 ----
fix-user-login.sh | 0
fix-webspace-production.sh | 0
force-upload-fix.sh | 158 -----
htaccess-root.txt | 24 -
install-composer-local.sh | 20 -
install-composer.sh | 34 -
install-gd-extension.sh | 38 --
install-sqlite.sh | 25 -
laravel-test.php | 114 ----
mail-configuration-fix.md | 97 ---
make-existing-user-admin.php | 71 ---
make-user-admin.php | 65 --
memory/MEMORY.md | 3 +
memory/project_overview.md | 34 +
monitor-logs.php | 137 -----
quick-500-fix.sh | 49 --
quick-debug.sh | 28 -
resources/views/auth/login.blade.php | 84 +--
resources/views/layouts/app.blade.php | 580 +++++++++++++-----
.../user-nail-polishes/available.blade.php | 206 +++----
.../views/user-nail-polishes/create.blade.php | 313 ++++++----
.../views/user-nail-polishes/index.blade.php | 204 +++---
send-mail-to-user.php | 122 ----
send-test-mail.php | 65 --
send-user-mail.php | 116 ----
setup-apache.sh | 66 --
setup-html-directory.sh | 112 ----
setup-webspace.sh | 131 ----
simple-htaccess-fix.sh | 47 --
simple-laravel-setup.sh | 46 --
smart-setup.sh | 62 --
smtp-mail-setup.md | 138 -----
test-admin-access.php | 169 -----
test-admin-checkbox.php | 90 ---
test-admin-functionality.php | 126 ----
test-admin-user-management.sh | 67 --
test-all-forms-final.php | 50 --
test-all-forms.php | 31 -
test-apache-status.php | 87 ---
test-forms-fixed.php | 49 --
test-https-security.php | 59 --
test-mail-connection.sh | 68 --
test-mail.php | 233 -------
test-remove-fix.php | 99 ---
test-route-fix.php | 83 ---
test-upload-limits.php | 63 --
test.php | 109 ----
upload-vendor-instructions.md | 40 --
webspace-production-fix.md | 0
117 files changed, 943 insertions(+), 11184 deletions(-)
delete mode 100755 DEPLOYMENT.md
delete mode 100755 NEONAIL_PROJECT_PROMPT.md
delete mode 100755 WEBSPACE-SETUP.md
delete mode 100755 activate-admin-role.sh
delete mode 100644 add-admin-role-migration.php
delete mode 100755 admin-check.php
delete mode 100755 apache-config.txt
delete mode 100755 apache-diagnose.sh
delete mode 100644 black-screen-fix.md
delete mode 100755 check-admin-user.php
delete mode 100755 check-laravel-logs.sh
delete mode 100644 check-user-collection.php
delete mode 100755 clear-route-cache.sh
delete mode 100755 complete-fix.sh
delete mode 100755 create-admin.php
delete mode 100644 debug-405-error.php
delete mode 100644 debug-500-error.php
delete mode 100644 debug-image-upload.php
delete mode 100644 debug-logout-detailed.php
delete mode 100644 debug-logout.php
delete mode 100755 deploy-manufacturer-feature.sh
delete mode 100755 deploy-sqlite.sh
delete mode 100755 deploy.sh
delete mode 100755 deployment-checklist.md
delete mode 100755 emergency-apache-fix.sh
delete mode 100755 env-production-example.txt
delete mode 100644 env-production-guide.md
delete mode 100755 env-sqlite-example.txt
delete mode 100755 fix-405-error.sh
delete mode 100644 fix-admin-controller-email.php
delete mode 100644 fix-admin-layout.php
delete mode 100644 fix-admin-role-database.php
delete mode 100755 fix-admin-role.php
delete mode 100644 fix-admin-routes.php
delete mode 100644 fix-admin-view.php
delete mode 100644 fix-all-405-errors.sh
delete mode 100755 fix-all-forms-https.sh
delete mode 100755 fix-all-safari-warnings.sh
delete mode 100755 fix-apache-documentroot.sh
delete mode 100755 fix-apache-headers.sh
delete mode 100644 fix-appserviceprovider-syntax.sh
delete mode 100755 fix-black-screen.sh
delete mode 100755 fix-https-config.sh
delete mode 100755 fix-https-form-security.sh
delete mode 100755 fix-image-display.sh
delete mode 100644 fix-image-upload-fallback.php
delete mode 100644 fix-image-upload-final.php
delete mode 100644 fix-image-upload-simple.php
delete mode 100644 fix-image-urls.php
delete mode 100755 fix-laravel-setup.sh
delete mode 100644 fix-logout-final.php
delete mode 100644 fix-logout-route.php
delete mode 100644 fix-logout-simple-2.php
delete mode 100644 fix-logout-simple.php
delete mode 100644 fix-logout.php
delete mode 100755 fix-mail-config.sh
delete mode 100755 fix-pail-cache.sh
delete mode 100755 fix-pail-final.sh
delete mode 100755 fix-permissions.sh
delete mode 100755 fix-production-issues.sh
delete mode 100755 fix-remaining-safari-warnings.sh
delete mode 100644 fix-safari-form-security.sh
delete mode 100644 fix-safari-https.sh
delete mode 100755 fix-safari-security-warnings.sh
delete mode 100755 fix-sqlite-permissions.sh
delete mode 100755 fix-storage-link.sh
delete mode 100644 fix-upload-limits.php
delete mode 100755 fix-user-login.sh
delete mode 100755 fix-webspace-production.sh
delete mode 100755 force-upload-fix.sh
delete mode 100755 htaccess-root.txt
delete mode 100755 install-composer-local.sh
delete mode 100755 install-composer.sh
delete mode 100755 install-gd-extension.sh
delete mode 100755 install-sqlite.sh
delete mode 100755 laravel-test.php
delete mode 100644 mail-configuration-fix.md
delete mode 100644 make-existing-user-admin.php
delete mode 100644 make-user-admin.php
create mode 100644 memory/MEMORY.md
create mode 100644 memory/project_overview.md
delete mode 100644 monitor-logs.php
delete mode 100755 quick-500-fix.sh
delete mode 100755 quick-debug.sh
delete mode 100644 send-mail-to-user.php
delete mode 100644 send-test-mail.php
delete mode 100644 send-user-mail.php
delete mode 100755 setup-apache.sh
delete mode 100755 setup-html-directory.sh
delete mode 100755 setup-webspace.sh
delete mode 100755 simple-htaccess-fix.sh
delete mode 100755 simple-laravel-setup.sh
delete mode 100755 smart-setup.sh
delete mode 100644 smtp-mail-setup.md
delete mode 100644 test-admin-access.php
delete mode 100644 test-admin-checkbox.php
delete mode 100644 test-admin-functionality.php
delete mode 100755 test-admin-user-management.sh
delete mode 100644 test-all-forms-final.php
delete mode 100644 test-all-forms.php
delete mode 100644 test-apache-status.php
delete mode 100644 test-forms-fixed.php
delete mode 100644 test-https-security.php
delete mode 100755 test-mail-connection.sh
delete mode 100644 test-mail.php
delete mode 100644 test-remove-fix.php
delete mode 100644 test-route-fix.php
delete mode 100644 test-upload-limits.php
delete mode 100755 test.php
delete mode 100755 upload-vendor-instructions.md
delete mode 100644 webspace-production-fix.md
diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md
deleted file mode 100755
index ea2d32b..0000000
--- a/DEPLOYMENT.md
+++ /dev/null
@@ -1,323 +0,0 @@
-# 🚀 NeoNail DB - Deployment Guide
-
-## 📋 Schnellstart (5 Minuten)
-
-### Option A: SQLite (Einfacher - Empfohlen)
-- ✅ Keine MySQL-Installation nötig
-- ✅ Einfache Datei-basierte Datenbank
-- ✅ Perfekt für kleinere bis mittlere Anwendungen
-- ✅ Einfaches Backup (nur eine Datei)
-
-### Option B: MySQL/MariaDB
-- ✅ Für größere Anwendungen
-- ✅ Mehrere gleichzeitige Benutzer
-- ✅ Erweiterte Datenbank-Features
-
----
-
-## 🗄️ SQLite Deployment (Empfohlen)
-
-### 1. Webspace vorbereiten
-- PHP 8.1+ installiert
-- SQLite3 PHP-Erweiterung aktiviert
-- Composer verfügbar (falls möglich)
-
-### 2. .env für SQLite konfigurieren
-```env
-APP_ENV=production
-APP_DEBUG=false
-APP_URL=https://ihre-domain.de
-
-# SQLite Konfiguration
-DB_CONNECTION=sqlite
-DB_DATABASE=/path/to/database.sqlite
-# DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD nicht nötig!
-```
-
-### 3. SQLite-Datenbank erstellen
-```bash
-# Auf dem Server:
-touch database.sqlite
-chmod 664 database.sqlite
-chown www-data:www-data database.sqlite # Falls verfügbar
-```
-
-### 4. Deployment ausführen
-```bash
-composer install --optimize-autoloader --no-dev
-php artisan migrate --force
-php artisan storage:link
-php artisan config:cache
-```
-
-### 5. Admin-User erstellen
-```bash
-php artisan tinker
-```
-```php
-use App\Models\User;
-User::create([
- 'name' => 'Admin',
- 'email' => 'admin@neonail.com',
- 'password' => bcrypt('ihr_sicheres_passwort')
-]);
-```
-
-## 🗄️ MySQL/MariaDB Deployment
-
-### 1. Webspace vorbereiten
-- PHP 8.1+ installiert
-- MySQL/MariaDB Datenbank erstellt
-- Composer verfügbar (falls möglich)
-
-### 2. Dateien hochladen
-```bash
-# Alle Dateien außer:
-# - node_modules/ (falls vorhanden)
-# - vendor/ (wird auf Server installiert)
-# - .git/ (nicht nötig)
-```
-
-### 3. .env konfigurieren
-```env
-APP_ENV=production
-APP_DEBUG=false
-APP_URL=https://ihre-domain.de
-
-DB_CONNECTION=mysql
-DB_HOST=localhost
-DB_PORT=3306
-DB_DATABASE=ihre_datenbank
-DB_USERNAME=ihr_username
-DB_PASSWORD=ihr_passwort
-```
-
-### 4. Deployment ausführen
-```bash
-# Falls SSH verfügbar:
-chmod +x deploy.sh
-./deploy.sh
-
-# Oder manuell:
-composer install --optimize-autoloader --no-dev
-php artisan storage:link
-php artisan migrate --force
-php artisan config:cache
-```
-
-### 5. Admin-User erstellen
-```bash
-php artisan tinker
-```
-```php
-use App\Models\User;
-User::create([
- 'name' => 'Admin',
- 'email' => 'admin@neonail.com',
- 'password' => bcrypt('ihr_sicheres_passwort')
-]);
-```
-
-## 🔧 Detaillierte Anleitung
-
-### SQLite vs MySQL Vergleich
-
-| Feature | SQLite | MySQL |
-|---------|--------|-------|
-| Installation | ✅ Einfach | ❌ Komplexer |
-| Konfiguration | ✅ Minimal | ❌ Mehr Aufwand |
-| Backup | ✅ Eine Datei | ❌ Dump nötig |
-| Performance | ✅ Gut (klein/mittel) | ✅ Sehr gut (groß) |
-| Gleichzeitige User | ✅ Bis ~100 | ✅ Unbegrenzt |
-| Wartung | ✅ Minimal | ❌ Regelmäßig |
-
-### Voraussetzungen prüfen
-
-**SQLite PHP-Erweiterungen:**
-```bash
-php -m | grep -E "(sqlite3|pdo_sqlite)"
-```
-
-**MySQL PHP-Erweiterungen:**
-```bash
-php -m | grep -E "(mysql|pdo_mysql)"
-```
-
-**Composer installieren (falls nicht verfügbar):**
-```bash
-curl -sS https://getcomposer.org/installer | php
-mv composer.phar /usr/local/bin/composer
-```
-
-### Datei-Struktur (SQLite)
-```
-public_html/
-├── public/ # Web-Root
-├── storage/ # Schreibrechte erforderlich
-├── bootstrap/cache/ # Schreibrechte erforderlich
-├── database.sqlite # SQLite-Datenbank
-└── .env # Konfiguration
-```
-
-### Datei-Struktur (MySQL)
-```
-public_html/
-├── public/ # Web-Root
-├── storage/ # Schreibrechte erforderlich
-├── bootstrap/cache/ # Schreibrechte erforderlich
-└── .env # Konfiguration
-```
-
-### Berechtigungen (SQLite)
-```bash
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-chmod 664 database.sqlite
-chmod 644 .env
-```
-
-### Berechtigungen (MySQL)
-```bash
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-chmod 644 .env
-```
-
-## 🛡️ Sicherheit
-
-### Wichtige Einstellungen
-- `APP_DEBUG=false` in Produktion
-- Starke Passwörter verwenden
-- HTTPS aktivieren
-- `.env` nicht öffentlich zugänglich
-
-### SQLite-spezifische Sicherheit
-```apache
-# .htaccess - SQLite-Datei schützen
-
- Order allow,deny
- Deny from all
-
-```
-
-### MySQL-spezifische Sicherheit
-```apache
-# .htaccess bereits konfiguriert
-# Zusätzliche Sicherheit:
-
- Order allow,deny
- Deny from all
-
-```
-
-## 📱 Mobile Optimierung
-
-### PWA-Features (optional)
-- Manifest.json hinzufügen
-- Service Worker für Offline-Funktionalität
-- App-Icons erstellen
-
-### Performance
-- Bilder komprimieren
-- CDN für statische Assets
-- Browser-Caching aktivieren
-
-## 🔄 Backup-Strategie
-
-### SQLite Backup
-```bash
-#!/bin/bash
-# backup_sqlite.sh
-DATE=$(date +%Y%m%d_%H%M%S)
-cp database.sqlite backup_sqlite_$DATE.sqlite
-tar -czf storage_backup_$DATE.tar.gz storage/
-```
-
-### MySQL Backup
-```bash
-#!/bin/bash
-# backup_mysql.sh
-DATE=$(date +%Y%m%d_%H%M%S)
-mysqldump -u username -p database > backup_mysql_$DATE.sql
-tar -czf storage_backup_$DATE.tar.gz storage/
-```
-
-### Cron-Job (täglich)
-```bash
-0 2 * * * /path/to/backup_sqlite.sh
-```
-
-## 🐛 Troubleshooting
-
-### SQLite-spezifische Probleme
-
-**1. "Database is locked"**
-```bash
-chmod 664 database.sqlite
-chown www-data:www-data database.sqlite
-```
-
-**2. "SQLite3 not found"**
-```bash
-# PHP-Erweiterung aktivieren
-php -m | grep sqlite
-```
-
-**3. Berechtigungsfehler**
-```bash
-chmod 664 database.sqlite
-chmod -R 755 storage/
-```
-
-### MySQL-spezifische Probleme
-
-**1. "Class not found" Fehler**
-```bash
-composer dump-autoload
-```
-
-**2. Berechtigungsfehler**
-```bash
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-```
-
-**3. Datenbank-Verbindung**
-- Host, Port, Credentials prüfen
-- MySQL-Service läuft
-
-**4. Bilder werden nicht angezeigt**
-```bash
-php artisan storage:link
-```
-
-### Logs prüfen
-```bash
-tail -f storage/logs/laravel.log
-```
-
-## 📞 Support
-
-Bei Problemen:
-1. Logs prüfen (`storage/logs/laravel.log`)
-2. Debug-Modus temporär aktivieren
-3. Browser-Entwicklertools prüfen
-4. Server-Error-Logs prüfen
-
-## 🎯 Nach dem Deployment
-
-### Testen
-- [ ] Login funktioniert
-- [ ] Neuen Lack erstellen
-- [ ] Bild-Upload funktioniert
-- [ ] Mobile-Ansicht prüfen
-- [ ] Admin-Funktionen testen
-
-### Monitoring
-- Server-Ressourcen überwachen
-- Datenbank-Performance prüfen
-- User-Feedback sammeln
-
----
-
-**Viel Erfolg beim Deployment! 🎉**
diff --git a/NEONAIL_PROJECT_PROMPT.md b/NEONAIL_PROJECT_PROMPT.md
deleted file mode 100755
index 13ce683..0000000
--- a/NEONAIL_PROJECT_PROMPT.md
+++ /dev/null
@@ -1,483 +0,0 @@
-# 🎨 NeoNail DB - Projekt Prompt
-
-## 📋 Projekt-Übersicht
-
-**NeoNail DB** ist eine Laravel-basierte Webanwendung zur Verwaltung von NeoNail-Nagellack-Sammlungen.
-
-### 🎯 Hauptfunktionen
-- ✅ Kollaborative Nagellack-Datenbank
-- ✅ User können eigene Lacke hinzufügen (werden automatisch zum Hauptkatalog hinzugefügt)
-- ✅ Hersteller-Verwaltung für alle User (flexibel und kollaborativ)
-- ✅ Mobile-optimiert für Handy-Nutzung im Laden
-- ✅ Admin-Interface für User-Verwaltung
-- ✅ Bild-Upload mit automatischer Optimierung
-- ✅ Suchfunktion nach Name/Nummer
-- ✅ SQLite-Datenbank (einfach zu deployen)
-
-## 🏗️ Technische Architektur
-
-### Framework & Versionen
-- **Laravel 12.22.1** (PHP 8.4.11)
-- **Bootstrap 5** (Responsive Design)
-- **Intervention Image** (Bildverarbeitung)
-- **SQLite** (Datenbank)
-
-### Datenbank-Schema
-```sql
--- users (Laravel Standard + is_admin Spalte)
--- manufacturers (Name, Description, Website, Country)
--- nail_polishes (Name, Number, Manufacturer_ID, Image)
--- user_nail_polishes (Pivot-Tabelle für User-Sammlungen)
-```
-
-### Wichtige Models
-- `User` - Benutzer mit `nailPolishes()` Relationship
-- `Manufacturer` - Hersteller mit `nailPolishes()` Relationship
-- `NailPolish` - Nagellacke mit `users()` und `manufacturer()` Relationship
-
-## 🔧 Aktuelle Deployment-Situation
-
-### Webspace-Status
-- **URL:** http://192.168.30.81/
-- **Struktur:** Direkt im HTML-Verzeichnis
-- **Status:** Neue .env Datei erstellt, Setup bereit
-
-### Datei-Struktur auf Webspace
-```
-/html/ (oder /var/www/html/)
-├── .htaccess ← Umleitung auf public/
-├── index.php ← Fallback-Umleitung
-├── .env ← Konfiguration (neu erstellt)
-├── database.sqlite ← SQLite-Datenbank im Hauptverzeichnis
-├── public/ ← Laravel Document Root
-├── app/ ← Laravel App
-├── bootstrap/ ← Laravel Bootstrap
-├── config/ ← Laravel Config
-├── database/ ← Migrationen
-├── resources/ ← Views, Assets
-├── routes/ ← Routen
-├── storage/ ← Speicher (777 Berechtigungen)
-├── vendor/ ← Composer Dependencies
-├── test.php ← PHP-Diagnose
-├── laravel-test.php ← Laravel-Diagnose
-├── fix-permissions.sh ← Berechtigungs-Script
-├── setup-html-directory.sh ← Neues Setup-Script
-└── env-production-example.txt ← Neue .env Vorlage
-```
-
-### Aktuelle .env Konfiguration
-```env
-APP_NAME="NeoNail DB"
-APP_ENV=production
-APP_KEY=base64:+LTZYPKjkZ+O3iFTgU2sS+9bNvxxvG8Kw8JSEPiG7Rs=
-APP_DEBUG=false
-APP_URL=http://192.168.30.81
-
-DB_CONNECTION=sqlite
-DB_DATABASE=database.sqlite # ✅ Korrekt - Datenbank im Hauptverzeichnis
-
-# Weitere Standard-Laravel-Einstellungen...
-```
-
-## 🚨 Offene Probleme
-
-### 1. ✅ DB_DATABASE Pfad geklärt
-**Status:** Datenbank liegt im Hauptverzeichnis
-- **Pfad:** `/html/database.sqlite` (oder `/var/www/html/database.sqlite`)
-- **Konfiguration:** `DB_DATABASE=database.sqlite` ✅
-
-### 2. ✅ Mail-System Problem behoben
-**Status:** SMTP-Konfiguration korrigiert und getestet
-- **SMTP-Server:** mail.selfhost.de:465 (SSL)
-- **Credentials:** postmaster@hjzyyqdm.mail.selfhost.de / Ikmyra
-- **From-Address:** neonail@vogt.de.com
-- **Test:** Erfolgreich an oliver@vogt.de.com gesendet
-- **Status:** User-Registrierung und Admin-Benachrichtigungen funktionieren
-
-### 3. Deployment-Status
-- ✅ Berechtigungen korrigiert (777 für storage/, bootstrap/cache/)
-- ✅ APP_KEY generiert und gesetzt
-- ✅ .htaccess Umleitung funktioniert
-- ✅ SQLite-Datenbank-Pfad geklärt
-- ✅ Composer install ausgeführt
-- ✅ Migrationen ausgeführt (inkl. Hersteller-Feature)
-- ✅ is_admin Spalte zur users Tabelle hinzugefügt
-- ✅ Admin-User erstellt (admin@neonail.com / admin123)
-- ✅ Hersteller-Feature vollständig implementiert und deployed
-- ✅ Production-Probleme behoben (schwarzer Bildschirm, Login)
-- ✅ Mail-System vollständig funktionsfähig
-
-## 🔄 Nächste Schritte
-
-### Sofortige Aktionen
-1. ✅ **DB_DATABASE Pfad geklärt** - Datenbank im Hauptverzeichnis
-2. ✅ **Composer install** ausgeführt
-3. ✅ **Migrationen** ausgeführt: `php artisan migrate --force`
-4. ✅ **is_admin Spalte** zur users Tabelle hinzugefügt
-5. ✅ **Admin-User** erstellt (admin@neonail.com / admin123)
-6. ✅ **Anwendung getestet** - Hersteller-Feature funktioniert
-7. ✅ **HTTPS-Sicherheit** für alle Hersteller-Forms implementiert
-8. ✅ **Production-Probleme** behoben (schwarzer Bildschirm, Login)
-9. ✅ **Mail-System** konfiguriert und getestet (SMTP funktioniert)
-
-### Admin-User erstellen
-```bash
-php artisan tinker
-```
-```php
-use App\Models\User;
-User::create([
- 'name' => 'Admin',
- 'email' => 'admin@neonail.com',
- 'password' => bcrypt('admin123'),
- 'is_admin' => true
-]);
-```
-
-### Standard-Login-Daten
-**Email:** `admin@neonail.com`
-**Passwort:** `admin123`
-
-## 📱 Anwendungs-Features
-
-### User-Features
-- **Meine Sammlung** - Eigene Lacke anzeigen/verwalten
-- **Verfügbare Lacke** - Alle Lacke aus Hauptkatalog
-- **Neuen Lack hinzufügen** - Erstellt Lack im Hauptkatalog + fügt zur eigenen Sammlung hinzu
-- **Hersteller verwalten** - Hersteller erstellen, bearbeiten, löschen (für alle User)
-- **Bild-Upload** - Handykamera-Unterstützung, automatische Optimierung
-- **Suche** - Nach Name oder Nummer
-
-### Admin-Features
-- **Dashboard** - Übersicht über User, Lacke und Hersteller
-- **User-Verwaltung** - User erstellen, bearbeiten, löschen
-- **Nagellack-Verwaltung** - Alle Lacke verwalten
-- **Hersteller-Verwaltung** - Alle Hersteller verwalten
-- **Statistiken** - Anwendungs-Statistiken inkl. Hersteller
-- **User-Sammlungen** - Sammlungen anderer User einsehen
-
-## 🛠️ Wichtige Dateien
-
-### Controllers
-- `UserNailPolishController` - User-Sammlungen verwalten (erweitert um Hersteller)
-- `NailPolishController` - Admin-Nagellack-Verwaltung
-- `ManufacturerController` - Hersteller-Verwaltung für alle User
-- `AdminController` - Admin-Dashboard und User-Verwaltung (erweitert um Hersteller-Statistiken)
-- `LoginController` - Authentifizierung
-
-### Views
-- `user-nail-polishes/` - User-Sammlungs-Views (erweitert um Hersteller-Anzeige)
-- `nail-polishes/` - Admin-Nagellack-Views (erweitert um Hersteller-Anzeige)
-- `manufacturers/` - Hersteller-Verwaltungs-Views (index, create, edit, show)
-- `admin/` - Admin-Interface-Views
-- `auth/` - Login-Views
-
-### Routes
-```php
-// User-Routes
-/my-collection - Eigene Sammlung
-/available - Verfügbare Lacke
-/create-nail-polish - Neuen Lack erstellen
-/add-to-collection/{id} - Lack zur Sammlung hinzufügen
-/remove-from-collection/{id} - Lack aus Sammlung entfernen
-
-// Hersteller-Routes (für alle User)
-/manufacturers - Hersteller-Übersicht
-/manufacturers/create - Neuen Hersteller erstellen
-/manufacturers/{id} - Hersteller anzeigen
-/manufacturers/{id}/edit - Hersteller bearbeiten
-/manufacturers-search - AJAX-Suche nach Herstellern
-
-// Admin-Routes
-/admin/dashboard - Admin-Dashboard
-/admin/users - User-Verwaltung
-/nail-polishes - Nagellack-Verwaltung
-/admin/statistics - Statistiken
-```
-
-## 🔒 Sicherheit
-
-### Admin-Zugang
-- **Email:** admin@neonail.com
-- **Passwort:** Muss noch gesetzt werden
-
-### Middleware
-- `auth` - Authentifizierung erforderlich
-- `admin` - Nur für admin@neonail.com
-- `guest` - Nur für nicht-eingeloggte User
-
-## 📊 Datenbank-Beziehungen
-
-### Datenbank-Beziehungen
-```php
-// User Model
-public function nailPolishes() {
- return $this->belongsToMany(NailPolish::class, 'user_nail_polishes');
-}
-
-// Manufacturer Model
-public function nailPolishes() {
- return $this->hasMany(NailPolish::class);
-}
-
-// NailPolish Model
-public function users() {
- return $this->belongsToMany(User::class, 'user_nail_polishes');
-}
-
-public function manufacturer() {
- return $this->belongsTo(Manufacturer::class);
-}
-```
-
-### Pivot-Tabelle
-```sql
-user_nail_polishes (user_id, nail_polish_id, timestamps)
-```
-
-### Hersteller-Feature
-- **Flexibilität:** Jeder User kann neue Hersteller erstellen
-- **Eindeutigkeit:** Hersteller-Namen müssen eindeutig sein
-- **Globale Verfügbarkeit:** Alle User können alle Hersteller nutzen
-- **Automatische Erstellung:** Beim Nagellack-Erstellen falls nicht vorhanden
-- **Referentielle Integrität:** Hersteller können nicht gelöscht werden, wenn Nagellacke zugeordnet sind
-
-## 🎨 UI/UX Features
-
-### Mobile-Optimierung
-- Responsive Bootstrap 5 Design
-- Touch-freundliche Buttons
-- Handykamera-Integration (`capture="environment"`)
-- Optimierte Bildgrößen (400x400px)
-- Intelligente Hersteller-Auswahl mit JavaScript
-
-### Design-Elemente
-- Gradient-Hintergrund
-- Glassmorphism-Effekte
-- Font Awesome Icons
-- Bootstrap Cards und Grid-System
-
-## 🔧 Deployment-Scripts
-
-### fix-permissions.sh
-```bash
-# Berechtigungen korrigieren
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-chmod 664 database.sqlite
-chmod 644 .env
-```
-
-### deploy-manufacturer-feature.sh
-```bash
-# Hersteller-Feature Deployment
-# - Migration-Reihenfolge korrigieren
-# - Migrationen ausführen
-# - Cache leeren
-# - Autoload aktualisieren
-# - Berechtigungen setzen
-```
-
-### fix-production-issues.sh
-```bash
-# Production-Issues Fix
-# - Migration-Reihenfolge korrigieren
-# - Migrationen ausführen
-# - Cache leeren
-# - Autoload aktualisieren
-# - Berechtigungen setzen
-```
-
-### fix-webspace-production.sh
-```bash
-# Webspace Production Fix
-# - Migration-Reset und Neuausführung
-# - Cache komplett leeren
-# - Autoload optimieren
-# - Datenbank-Tabellen prüfen
-```
-
-### fix-black-screen.sh
-```bash
-# Schwarzer Bildschirm Fix
-# - Debug temporär aktivieren
-# - Cache komplett leeren
-# - Autoload neu generieren
-# - Datenbank-Verbindung testen
-```
-
-### fix-user-login.sh
-```bash
-# User Login Fix
-# - is_admin Spalte hinzufügen
-# - Admin-User erstellen
-# - Cache leeren
-```
-
-### test-mail-connection.sh
-```bash
-# Mail Connection Test
-# - SMTP-Verbindung testen
-# - Test-Mail an oliver@vogt.de.com senden
-# - Mail-Konfiguration prüfen
-# - Fehler-Diagnose
-```
-
-### fix-mail-config.sh
-```bash
-# Mail Configuration Fix
-# - Mail-Konfiguration auf log-Modus setzen
-# - Backup der .env erstellen
-# - Cache leeren
-# - Test-Mail senden
-```
-
-### setup-webspace.sh
-```bash
-# Vollständiges Setup
-# - .env erstellen
-# - Berechtigungen setzen
-# - Composer install
-# - Laravel Setup
-```
-
-### deploy-sqlite.sh
-```bash
-# SQLite-spezifisches Deployment
-# - SQLite-Datenbank erstellen
-# - Optimierte Einstellungen
-```
-
-## 🐛 Bekannte Probleme & Lösungen
-
-### 1. "Permission denied" Fehler
-**Lösung:** `chmod -R 777 storage/ bootstrap/cache/`
-
-### 2. "APP_KEY" Fehler
-**Lösung:** `php artisan key:generate` oder manueller Key
-
-### 3. "Database connection failed"
-**Lösung:** SQLite-Datei erstellen, Berechtigungen prüfen
-
-### 4. "Class not found"
-**Lösung:** `composer install` oder `composer dump-autoload`
-
-### 5. "Images not displayed"
-**Lösung:** `php artisan storage:link`
-
-### 6. "no such table: manufacturers"
-**Lösung:** Migrationen ausführen: `php artisan migrate --force`
-
-### 7. "Migration-Reihenfolge Fehler"
-**Lösung:** Migration `add_manufacturer_id_to_nail_polishes_table` nach `create_nail_polishes_table` verschieben
-
-### 8. "Schwarzer Bildschirm in Production"
-**Lösung:** `fix-black-screen.sh` ausführen oder manuell Debug aktivieren und Cache leeren
-
-### 9. "User-Login funktioniert nicht nach Migrationen"
-**Lösung:** `is_admin` Spalte zur users Tabelle hinzufügen und Admin-User erstellen
-
-### 10. "E-Mails werden nicht versendet"
-**Lösung:** SMTP-Konfiguration in .env prüfen und `test-mail-connection.sh` ausführen
-
-## 🌐 Production-Deployment
-
-### Production-Einstellungen (.env)
-```env
-APP_ENV=production
-APP_DEBUG=false
-APP_URL=https://neonail.vogt.de.com
-```
-
-### Standard-Login-Daten
-**Email:** `admin@neonail.com`
-**Passwort:** `admin123`
-
-### Production-Fix Scripts
-- `fix-production-issues.sh` - Allgemeine Production-Probleme
-- `fix-webspace-production.sh` - Webspace-spezifische Probleme
-- `fix-black-screen.sh` - Schwarzer Bildschirm Problem
-- `fix-user-login.sh` - User-Login Problem
-- `test-mail-connection.sh` - Mail-Verbindung testen
-- `fix-mail-config.sh` - Mail-Konfiguration reparieren
-
-### Manuelle Production-Fixes
-```bash
-# Schwarzer Bildschirm
-sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
-php artisan config:clear
-# Cache leeren, Fehler beheben, dann APP_DEBUG=false setzen
-
-# User-Login Problem
-php artisan tinker --execute="use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; Schema::table('users', function (Blueprint \$table) { \$table->boolean('is_admin')->default(false)->after('password'); });"
-php artisan tinker --execute="use App\Models\User; use Illuminate\Support\Facades\Hash; User::create(['name' => 'Admin', 'email' => 'admin@neonail.com', 'password' => Hash::make('admin123'), 'is_admin' => true]);"
-
-# Mail-System Problem
-# .env korrekte SMTP-Daten:
-MAIL_MAILER=smtp
-MAIL_HOST=mail.selfhost.de
-MAIL_PORT=465
-MAIL_USERNAME=postmaster@hjzyyqdm.mail.selfhost.de
-MAIL_PASSWORD=Ikmyra
-MAIL_ENCRYPTION=SSL
-MAIL_FROM_ADDRESS="neonail@vogt.de.com"
-MAIL_FROM_NAME="${APP_NAME}"
-
-# Cache leeren nach .env Änderung
-php artisan config:clear
-
-# Mail-Verbindung testen
-php artisan tinker --execute="use Illuminate\Support\Facades\Mail; Mail::raw('Test-Mail von NeoNail DB - ' . now(), function(\$message) { \$message->to('oliver@vogt.de.com')->subject('NeoNail DB - SMTP Test')->from('neonail@vogt.de.com', 'NeoNail DB'); }); echo 'Test-Mail gesendet';"
-```
-
-## 📞 Support-Informationen
-
-### Logs
-- `storage/logs/laravel.log` - Laravel-Logs
-- `storage/logs/` - Weitere Logs
-
-### Debug-Modus
-```env
-APP_DEBUG=true # Für Fehlerdiagnose
-```
-
-### Test-Dateien
-- `test.php` - PHP-Diagnose
-- `laravel-test.php` - Laravel-spezifische Diagnose
-- `test-mail-connection.sh` - Mail-Verbindung testen
-- `smtp-mail-setup.md` - Mail-Konfiguration Anleitung
-- `mail-configuration-fix.md` - Mail-Problem Lösung
-
-## 🎯 Projekt-Ziele
-
-### Erreicht ✅
-- Kollaborative Datenbank
-- Mobile-Optimierung
-- Admin-Interface
-- Bild-Upload
-- Suchfunktion
-- SQLite-Deployment
-- Hersteller-Verwaltung für alle User
-- HTTPS-Sicherheit für alle Forms
-- Intelligente Hersteller-Auswahl
-- Production-Ready Deployment
-- Vollständige User-Authentifizierung
-- Fehlerbehebung für alle Production-Probleme
-- Vollständiges Mail-System (SMTP funktioniert)
-- User-Registrierung mit E-Mail-Benachrichtigungen
-- Admin-Benachrichtigungen bei neuen Usern
-
-### Nächste Schritte 🚀
-1. ✅ Webspace-Deployment abgeschlossen
-2. ✅ Admin-User erstellt (admin@neonail.com / admin123)
-3. ✅ Anwendung getestet (inkl. Hersteller-Feature)
-4. ✅ Production-Probleme behoben
-5. ✅ Mail-System vollständig funktionsfähig
-6. User-Feedback sammeln
-7. Weitere Features entwickeln
-
----
-
-**Projekt-Status:** 100% abgeschlossen, Production-Ready
-**Letzte Aktion:** Mail-System vollständig funktionsfähig, SMTP-Test erfolgreich
-**Nächste Aktion:** User-Feedback sammeln und weitere Features entwickeln
diff --git a/WEBSPACE-SETUP.md b/WEBSPACE-SETUP.md
deleted file mode 100755
index db3c52a..0000000
--- a/WEBSPACE-SETUP.md
+++ /dev/null
@@ -1,205 +0,0 @@
-# 🌐 Webspace Setup - NeoNail DB
-
-## 🚨 Problem: Verzeichnisliste wird angezeigt
-
-Wenn Sie eine Verzeichnisliste sehen statt der Laravel-Anwendung, liegt das daran, dass der Webserver nicht auf das `public/` Verzeichnis zeigt.
-
-## 🔧 Lösungen je nach Hosting-Provider
-
-### **Option A: Shared Hosting (cPanel, Plesk, etc.)**
-
-**1. Document Root ändern:**
-- Gehen Sie zu Ihrem Hosting-Panel
-- Suchen Sie "Document Root" oder "Web Root"
-- Ändern Sie von `/neonail/` zu `/neonail/public/`
-
-**2. Oder Unterverzeichnis erstellen:**
-```
-public_html/
-└── neonail/
- └── public/ ← Hier alle Laravel-Dateien
-```
-
-### **Option B: VPS/Dedicated Server**
-
-**1. Apache Virtual Host:**
-```apache
-
- ServerName ihre-domain.de
- DocumentRoot /var/www/neonail/public
-
-
- AllowOverride All
- Require all granted
-
-
-```
-
-**2. Nginx:**
-```nginx
-server {
- listen 80;
- server_name ihre-domain.de;
- root /var/www/neonail/public;
-
- index index.php index.html;
-
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
-
- location ~ \.php$ {
- fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
- include fastcgi_params;
- }
-}
-```
-
-### **Option C: Automatische Umleitung (Empfohlen)**
-
-**1. .htaccess im Hauptverzeichnis (bereits erstellt):**
-```apache
-RewriteEngine On
-RewriteRule ^$ public/ [L]
-RewriteRule (.*) public/$1 [L]
-```
-
-**2. index.php im Hauptverzeichnis (bereits erstellt):**
-```php
- 'Admin',
- 'email' => 'admin@neonail.com',
- 'password' => bcrypt('ihr_passwort')
-]);
-```
-
-## 🐛 Troubleshooting
-
-### **Problem: "500 Internal Server Error"**
-**Lösung:**
-1. `.env` Datei prüfen
-2. Berechtigungen prüfen
-3. PHP-Version prüfen (8.1+)
-4. Logs prüfen: `storage/logs/laravel.log`
-
-### **Problem: "Class not found"**
-**Lösung:**
-```bash
-composer dump-autoload
-```
-
-### **Problem: "Database connection failed"**
-**Lösung:**
-1. SQLite-Datei erstellen
-2. Berechtigungen prüfen
-3. Pfad in .env prüfen
-
-### **Problem: "Permission denied"**
-**Lösung:**
-```bash
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-chmod 664 database.sqlite
-```
-
-## 📱 Testen
-
-### **Nach dem Setup:**
-1. **URL aufrufen:** `https://ihre-domain.de/neonail`
-2. **Login testen:** `admin@neonail.com`
-3. **Neuen Lack erstellen**
-4. **Bild-Upload testen**
-5. **Mobile-Ansicht prüfen**
-
-### **Erwartetes Ergebnis:**
-- ✅ Login-Seite wird angezeigt
-- ✅ Keine Verzeichnisliste mehr
-- ✅ Laravel-Anwendung läuft
-- ✅ Alle Funktionen funktionieren
-
-## 🆘 Support
-
-**Falls nichts funktioniert:**
-1. Hosting-Provider kontaktieren
-2. PHP-Version prüfen (8.1+)
-3. mod_rewrite aktiviert?
-4. .htaccess erlaubt?
-
----
-
-**Viel Erfolg beim Setup! 🎉**
diff --git a/activate-admin-role.sh b/activate-admin-role.sh
deleted file mode 100755
index cc9395a..0000000
--- a/activate-admin-role.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-
-echo "👑 Admin-Rolle aktivieren"
-echo "========================"
-
-# 1. Admin-Rolle zur Datenbank hinzufügen
-echo "🗄️ Füge Admin-Rolle zur Datenbank hinzu..."
-sqlite3 database.sqlite "ALTER TABLE users ADD COLUMN is_admin BOOLEAN DEFAULT 0;" 2>/dev/null || echo "⚠️ Spalte existiert bereits"
-
-# 2. Bestehende Admin-User als Admin markieren
-echo "👤 Markiere bestehende Admin-User..."
-sqlite3 database.sqlite "UPDATE users SET is_admin = 1 WHERE email IN ('admin@neonail.com', 'neueradmin@neonail.com');"
-
-# 3. Laravel Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-
-# 4. Admin-User prüfen
-echo "🔍 Prüfe Admin-User..."
-sqlite3 database.sqlite "SELECT id, name, email, is_admin FROM users;" 2>/dev/null || echo "⚠️ Keine User gefunden"
-
-# 5. Test-Admin-User erstellen (falls gewünscht)
-echo "🧪 Erstelle Test-Admin-User..."
-sqlite3 database.sqlite "INSERT OR IGNORE INTO users (name, email, password, is_admin, created_at, updated_at) VALUES ('Test Admin', 'testadmin@neonail.com', '\$2y\$12\$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 1, datetime('now'), datetime('now'));"
-
-echo ""
-echo "✅ Admin-Rolle aktiviert!"
-echo ""
-echo "📋 Admin-Funktionen:"
-echo "1. User bearbeiten: https://neonail.vogt.de.com/admin/users"
-echo "2. Admin-Rechte gewähren: Checkbox in User-Bearbeitung"
-echo "3. Admin-Status anzeigen: Badge in User-Liste"
-echo ""
-echo "🔑 Test-Admin-Login:"
-echo "Email: testadmin@neonail.com"
-echo "Passwort: password"
diff --git a/add-admin-role-migration.php b/add-admin-role-migration.php
deleted file mode 100644
index ee1388a..0000000
--- a/add-admin-role-migration.php
+++ /dev/null
@@ -1,17 +0,0 @@
-
diff --git a/admin-check.php b/admin-check.php
deleted file mode 100755
index 5b92ec9..0000000
--- a/admin-check.php
+++ /dev/null
@@ -1,47 +0,0 @@
-🔍 Admin-User Check";
-
-try {
- // Laravel laden
- require_once 'vendor/autoload.php';
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // User Model verwenden
- $users = \App\Models\User::all();
-
- echo "
Benutzer in der Datenbank: ";
- if ($users->count() > 0) {
- echo "✅ {$users->count()} Benutzer gefunden
";
-
- foreach ($users as $user) {
- echo "";
- echo "ID: {$user->id} ";
- echo "Name: {$user->name} ";
- echo "Email: {$user->email} ";
- echo "Erstellt: {$user->created_at} ";
- echo "
";
- }
-
- // Admin-User prüfen
- $admin = \App\Models\User::where('email', 'admin@neonail.com')->first();
- if ($admin) {
- echo "👑 Admin-User gefunden! ";
- echo "Sie können sich mit admin@neonail.com anmelden.
";
- echo "🚀 Zur Anwendung
";
- }
-
- } else {
- echo "❌ Keine Benutzer gefunden
";
- echo "Admin-User erstellen: ";
- echo "php artisan tinker ";
- echo "use App\Models\User; ";
- echo "User::create(['name' => 'Admin', 'email' => 'admin@neonail.com', 'password' => bcrypt('ihr_passwort')]);";
- }
-
-} catch (Exception $e) {
- echo "❌ Fehler: ";
- echo "{$e->getMessage()}
";
-}
-?>
diff --git a/apache-config.txt b/apache-config.txt
deleted file mode 100755
index ee2f31d..0000000
--- a/apache-config.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# Apache Virtual Host Konfiguration für NeoNail DB
-# Datei: /etc/apache2/sites-available/neonail.conf
-
-
- ServerName 192.168.30.81
- DocumentRoot /var/www/html/public
-
-
- AllowOverride All
- Require all granted
-
-
- # Sicherheit - Zugriff auf sensible Dateien verhindern
-
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-
- ErrorLog ${APACHE_LOG_DIR}/neonail_error.log
- CustomLog ${APACHE_LOG_DIR}/neonail_access.log combined
-
diff --git a/apache-diagnose.sh b/apache-diagnose.sh
deleted file mode 100755
index 6cdc98d..0000000
--- a/apache-diagnose.sh
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/bash
-
-echo "🔍 Apache Diagnose für NeoNail DB"
-echo "================================"
-
-echo "1. 📁 Verzeichnis-Struktur prüfen:"
-echo "--------------------------------"
-ls -la /var/www/html/
-echo ""
-
-echo "2. 📁 Public-Ordner prüfen:"
-echo "--------------------------"
-ls -la /var/www/html/public/
-echo ""
-
-echo "3. 🌐 Apache DocumentRoot prüfen:"
-echo "-------------------------------"
-apache2ctl -S 2>/dev/null | grep "DocumentRoot" || echo "⚠️ Apache2ctl nicht verfügbar"
-echo ""
-
-echo "4. 📋 Apache Sites prüfen:"
-echo "------------------------"
-ls -la /etc/apache2/sites-enabled/
-echo ""
-
-echo "5. 📋 Apache Sites verfügbar:"
-echo "----------------------------"
-ls -la /etc/apache2/sites-available/
-echo ""
-
-echo "6. 🔧 Apache Konfiguration prüfen:"
-echo "--------------------------------"
-if [ -f "/etc/apache2/sites-enabled/neonail.conf" ]; then
- echo "✅ neonail.conf ist aktiviert"
- cat /etc/apache2/sites-enabled/neonail.conf
-else
- echo "❌ neonail.conf ist NICHT aktiviert"
-fi
-echo ""
-
-echo "7. 📝 .htaccess im Hauptverzeichnis:"
-echo "----------------------------------"
-if [ -f "/var/www/html/.htaccess" ]; then
- echo "✅ .htaccess gefunden:"
- cat /var/www/html/.htaccess
-else
- echo "❌ .htaccess nicht gefunden"
-fi
-echo ""
-
-echo "8. 📝 .htaccess im public-Ordner:"
-echo "-------------------------------"
-if [ -f "/var/www/html/public/.htaccess" ]; then
- echo "✅ public/.htaccess gefunden:"
- cat /var/www/html/public/.htaccess
-else
- echo "❌ public/.htaccess nicht gefunden"
-fi
-echo ""
-
-echo "9. 🔍 Apache-Logs prüfen:"
-echo "-----------------------"
-tail -5 /var/log/apache2/error.log
-echo ""
-
-echo "10. 🧪 Test-Request:"
-echo "------------------"
-curl -I http://192.168.30.81 2>/dev/null || echo "⚠️ curl nicht verfügbar"
-echo ""
-
-echo "📋 Nächste Schritte:"
-echo "1. Falls public/index.php fehlt: Laravel nicht vollständig"
-echo "2. Falls .htaccess fehlt: Umleitung nicht konfiguriert"
-echo "3. Falls Apache-Site nicht aktiviert: Virtual Host nicht konfiguriert"
diff --git a/app/Http/Controllers/UserNailPolishController.php b/app/Http/Controllers/UserNailPolishController.php
index 15811e2..6684257 100755
--- a/app/Http/Controllers/UserNailPolishController.php
+++ b/app/Http/Controllers/UserNailPolishController.php
@@ -109,7 +109,8 @@ class UserNailPolishController extends Controller
"number" => "required|string|max:50",
"manufacturer_id" => "required_without:new_manufacturer|exists:manufacturers,id",
"new_manufacturer" => "required_without:manufacturer_id|string|max:255|unique:manufacturers,name",
- "image" => "nullable|image|max:10240", // Max 10MB
+ "image" => "nullable|image|max:10240",
+ "image_url" => "nullable|url|max:500",
], [
"name.required" => "Der Name des Lackes ist erforderlich.",
"number.required" => "Die Nummer des Lackes ist erforderlich.",
@@ -118,6 +119,7 @@ class UserNailPolishController extends Controller
"new_manufacturer.unique" => "Ein Hersteller mit diesem Namen existiert bereits.",
"image.image" => "Die Datei muss ein Bild sein.",
"image.max" => "Das Bild darf maximal 10MB groß sein.",
+ "image_url.url" => "Bitte geben Sie eine gültige URL ein (https://...).",
]);
try {
@@ -138,19 +140,45 @@ class UserNailPolishController extends Controller
$nailPolish->number = trim($request->number);
$nailPolish->manufacturer_id = $manufacturerId;
- // Vereinfachte Bildverarbeitung ohne Intervention Image
+ // Bild per Datei-Upload
if ($request->hasFile("image") && $request->file("image")->isValid()) {
$image = $request->file("image");
-
- // Erstelle einen eindeutigen Dateinamen
$filename = "nail_polish_" . time() . "_" . uniqid() . "." . $image->getClientOriginalExtension();
$path = "nail_polishes/" . $filename;
-
- // Speichere das Bild direkt ohne Verarbeitung
Storage::disk("public")->putFileAs("nail_polishes", $image, $filename);
$nailPolish->image_path = $path;
-
- \Log::info("Bild erfolgreich gespeichert: " . $path);
+
+ // Bild per URL herunterladen
+ } elseif ($request->filled("image_url")) {
+ $imageUrl = trim($request->image_url);
+ try {
+ $response = \Illuminate\Support\Facades\Http::timeout(15)
+ ->withHeaders(['User-Agent' => 'Mozilla/5.0'])
+ ->get($imageUrl);
+
+ if (!$response->successful()) {
+ throw new \Exception("HTTP-Status " . $response->status());
+ }
+
+ $contentType = strtolower($response->header('Content-Type') ?? '');
+ if (!str_starts_with($contentType, 'image/')) {
+ throw new \Exception("URL enthält kein Bild (Content-Type: {$contentType})");
+ }
+
+ $ext = 'jpg';
+ if (str_contains($contentType, 'png')) $ext = 'png';
+ elseif (str_contains($contentType, 'gif')) $ext = 'gif';
+ elseif (str_contains($contentType, 'webp')) $ext = 'webp';
+
+ $filename = "nail_polish_" . time() . "_" . uniqid() . "." . $ext;
+ $path = "nail_polishes/" . $filename;
+ Storage::disk("public")->put($path, $response->body());
+ $nailPolish->image_path = $path;
+
+ } catch (\Exception $e) {
+ \Log::warning("Bild-URL konnte nicht geladen werden: " . $e->getMessage());
+ // Lack wird ohne Bild gespeichert, kein Abbruch
+ }
}
$nailPolish->save();
diff --git a/black-screen-fix.md b/black-screen-fix.md
deleted file mode 100644
index aee97d7..0000000
--- a/black-screen-fix.md
+++ /dev/null
@@ -1,136 +0,0 @@
-# 🖥️ Schwarzer Bildschirm in Production - Lösung
-
-## 🚨 **Problem:**
-- Seite zeigt nur schwarzen Bildschirm
-- Keine Fehlermeldung sichtbar
-- Logs zeigen unvollständige Fehler
-
-## 🔍 **Ursache:**
-Ein kritischer Fehler tritt auf, aber wird nicht angezeigt.
-
-## 🔧 **Lösung:**
-
-### **Schritt 1: Auf dem Webspace ausführen**
-
-```bash
-# 1. Ins Laravel-Verzeichnis wechseln
-cd /var/www/html
-
-# 2. Black Screen Fix ausführen
-./fix-black-screen.sh
-```
-
-### **Schritt 2: Manuell (falls Script nicht funktioniert)**
-
-```bash
-# 1. Temporär Debug aktivieren
-sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
-php artisan config:clear
-
-# 2. Logs leeren
-> storage/logs/laravel.log
-
-# 3. Cache komplett leeren
-php artisan config:clear
-php artisan route:clear
-php artisan view:clear
-php artisan cache:clear
-php artisan optimize:clear
-
-# 4. Composer Autoload neu generieren
-composer dump-autoload --optimize
-
-# 5. Berechtigungen prüfen
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-chmod 664 database.sqlite
-chmod 644 .env
-
-# 6. Datenbank-Verbindung testen
-php artisan tinker --execute="echo 'DB Test: '; try { DB::connection()->getPdo(); echo 'OK'; } catch(Exception \$e) { echo 'FEHLER: ' . \$e->getMessage(); }"
-
-# 7. Routen testen
-php artisan route:list | head -10
-
-# 8. Storage-Link prüfen
-if [ ! -L "public/storage" ]; then
- php artisan storage:link
-fi
-```
-
-### **Schritt 3: Fehlermeldung analysieren**
-
-1. **Seite aufrufen** - sollte jetzt Fehlermeldung zeigen
-2. **Fehlermeldung notieren**
-3. **Logs prüfen:**
- ```bash
- tail -f storage/logs/laravel.log
- ```
-
-### **Schritt 4: Häufige Fehler beheben**
-
-#### **Fehler: "Class not found"**
-```bash
-composer dump-autoload --optimize
-```
-
-#### **Fehler: "Table not found"**
-```bash
-php artisan migrate --force
-```
-
-#### **Fehler: "Permission denied"**
-```bash
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-```
-
-#### **Fehler: "View not found"**
-```bash
-php artisan view:clear
-```
-
-### **Schritt 5: Production-Modus wiederherstellen**
-
-```bash
-# Debug deaktivieren
-sed -i 's/APP_DEBUG=true/APP_DEBUG=false/' .env
-php artisan config:clear
-
-# Cache optimieren
-php artisan optimize
-```
-
-## 🎯 **Häufige Ursachen:**
-
-### **1. Autoload-Probleme**
-- Neue Klassen nicht gefunden
-- Composer Autoload nicht aktualisiert
-
-### **2. Cache-Probleme**
-- Alte Konfigurationen im Cache
-- Route-Cache-Probleme
-
-### **3. Datenbank-Probleme**
-- Fehlende Tabellen
-- Verbindungsprobleme
-
-### **4. Berechtigungs-Probleme**
-- Storage nicht beschreibbar
-- Cache nicht beschreibbar
-
-## 📋 **Checklist:**
-
-- [ ] Debug temporär aktiviert
-- [ ] Cache geleert
-- [ ] Autoload aktualisiert
-- [ ] Berechtigungen korrekt
-- [ ] Datenbank getestet
-- [ ] Fehlermeldung analysiert
-- [ ] Fehler behoben
-- [ ] Debug deaktiviert
-
-## 🚀 **Nach dem Fix:**
-
-Die Seite sollte jetzt funktionieren!
-
diff --git a/check-admin-user.php b/check-admin-user.php
deleted file mode 100755
index 97581f5..0000000
--- a/check-admin-user.php
+++ /dev/null
@@ -1,53 +0,0 @@
-make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- echo "🔍 Admin-User Status ";
-
- // Alle User anzeigen
- $users = User::all();
-
- if ($users->count() > 0) {
- echo "✅ Benutzer gefunden: ";
- echo "";
- echo "ID Name Email Erstellt ";
-
- foreach ($users as $user) {
- echo "";
- echo "{$user->id} ";
- echo "{$user->name} ";
- echo "{$user->email} ";
- echo "{$user->created_at} ";
- echo " ";
- }
- echo "
";
-
- // Admin-User finden
- $admin = User::where('email', 'admin@neonail.com')->first();
- if ($admin) {
- echo "👑 Admin-User gefunden: ";
- echo "Name: {$admin->name}
";
- echo "Email: {$admin->email}
";
- echo "ID: {$admin->id}
";
- }
-
- } else {
- echo "❌ Keine Benutzer gefunden ";
- echo "Bitte Admin-User erstellen:
";
- echo "php artisan tinker ";
- echo "use App\Models\User; ";
- echo "User::create(['name' => 'Admin', 'email' => 'admin@neonail.com', 'password' => bcrypt('ihr_passwort')]);";
- }
-
-} catch (Exception $e) {
- echo "❌ Fehler: ";
- echo "{$e->getMessage()}
";
-}
-?>
diff --git a/check-laravel-logs.sh b/check-laravel-logs.sh
deleted file mode 100755
index 423725d..0000000
--- a/check-laravel-logs.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/bash
-
-echo "🔍 Laravel Logs prüfen"
-echo "====================="
-
-echo "1. 📝 Laravel Log-Datei:"
-echo "----------------------"
-if [ -f "storage/logs/laravel.log" ]; then
- echo "✅ Laravel Log gefunden"
- echo "Letzte 20 Zeilen:"
- tail -20 storage/logs/laravel.log
-else
- echo "❌ Laravel Log nicht gefunden"
-fi
-echo ""
-
-echo "2. 📝 Apache Error Log:"
-echo "---------------------"
-if [ -f "/var/log/apache2/neonail_error.log" ]; then
- echo "✅ NeoNail Error Log gefunden"
- echo "Letzte 10 Zeilen:"
- tail -10 /var/log/apache2/neonail_error.log
-else
- echo "❌ NeoNail Error Log nicht gefunden"
- echo "Standard Apache Error Log:"
- tail -10 /var/log/apache2/error.log
-fi
-echo ""
-
-echo "3. 🔧 Laravel Debug aktivieren:"
-echo "-----------------------------"
-echo "Setze APP_DEBUG=true in .env..."
-sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
-echo "✅ Debug aktiviert"
-echo ""
-
-echo "4. 🧪 Test-Request mit Debug:"
-echo "---------------------------"
-curl -I http://192.168.30.81
-echo ""
-
-echo "📋 Nächste Schritte:"
-echo "1. Browser öffnen: http://192.168.30.81"
-echo "2. Fehlermeldung anzeigen lassen"
-echo "3. Logs prüfen für Details"
diff --git a/check-user-collection.php b/check-user-collection.php
deleted file mode 100644
index 4132901..0000000
--- a/check-user-collection.php
+++ /dev/null
@@ -1,77 +0,0 @@
-make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- echo "🔍 User-Sammlung prüfen ";
-
- // Admin-User finden
- $admin = User::where('email', 'admin@neonail.com')->first();
-
- if ($admin) {
- echo "👑 Admin-User gefunden: ";
- echo "Name: {$admin->name}
";
- echo "Email: {$admin->email}
";
- echo "ID: {$admin->id}
";
-
- // Sammlung prüfen
- $collection = $admin->nailPolishes;
-
- echo "📦 Sammlung ({$collection->count()} Lacke): ";
-
- if ($collection->count() > 0) {
- echo "";
- echo "ID Name Nummer Bild ";
-
- foreach ($collection as $polish) {
- echo "";
- echo "{$polish->id} ";
- echo "{$polish->name} ";
- echo "{$polish->number} ";
- echo "" . ($polish->image_path ? "✅" : "❌") . " ";
- echo " ";
- }
- echo "
";
- } else {
- echo "❌ Keine Lacke in der Sammlung
";
- }
-
- // Alle Lacke prüfen
- echo "🗄️ Alle Lacke in der Datenbank: ";
- $allPolishes = NailPolish::all();
-
- if ($allPolishes->count() > 0) {
- echo "";
- echo "ID Name Nummer Bild In Sammlung ";
-
- foreach ($allPolishes as $polish) {
- $inCollection = $admin->nailPolishes()->where('nail_polish_id', $polish->id)->exists();
- echo "";
- echo "{$polish->id} ";
- echo "{$polish->name} ";
- echo "{$polish->number} ";
- echo "" . ($polish->image_path ? "✅" : "❌") . " ";
- echo "" . ($inCollection ? "✅" : "❌") . " ";
- echo " ";
- }
- echo "
";
- } else {
- echo "❌ Keine Lacke in der Datenbank
";
- }
-
- } else {
- echo "❌ Admin-User nicht gefunden ";
- }
-
-} catch (Exception $e) {
- echo "❌ Fehler: ";
- echo "{$e->getMessage()}
";
-}
-?>
diff --git a/clear-route-cache.sh b/clear-route-cache.sh
deleted file mode 100755
index 1925be9..0000000
--- a/clear-route-cache.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-
-echo "🧹 Route-Cache leeren"
-echo "===================="
-
-# 1. Laravel Cache leeren
-echo "1. Laravel Cache leeren..."
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo "⚠️ view:clear übersprungen"
-
-# 2. Bootstrap Cache leeren
-echo "2. Bootstrap Cache leeren..."
-rm -f bootstrap/cache/*.php 2>/dev/null || echo "⚠️ bootstrap/cache/*.php nicht gefunden"
-
-# 3. Route-Test ausführen
-echo "3. Route-Test ausführen..."
-php test-route-fix.php
-
-# 4. Debug-Modus aktivieren
-echo "4. Debug-Modus aktivieren..."
-if [ -f .env ]; then
- sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
- sed -i 's/APP_ENV=production/APP_ENV=local/' .env
- echo "✅ Debug-Modus aktiviert"
-else
- echo "❌ .env Datei nicht gefunden"
-fi
-
-echo ""
-echo "✅ Route-Cache geleert!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. https://neonail.vogt.de.com/create-nail-polish"
-echo "2. Versuchen Sie einen neuen Lack zu erstellen"
-echo "3. Falls Problem besteht: php artisan route:list | grep create"
diff --git a/complete-fix.sh b/complete-fix.sh
deleted file mode 100755
index c36c51d..0000000
--- a/complete-fix.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-
-echo "🔧 NeoNail DB - Vollständige Reparatur"
-echo "====================================="
-
-# 1. SQLite-Treiber installieren
-echo "🗄️ Installiere SQLite-Treiber..."
-apt update
-apt install -y sqlite3 php-sqlite3 php-pdo-sqlite
-
-# 2. Cache-Dateien löschen (Pail-Problem)
-echo "🧹 Lösche Cache-Dateien..."
-rm -f bootstrap/cache/packages.php
-rm -f bootstrap/cache/services.php
-rm -f bootstrap/cache/config.php
-
-# 3. .env erstellen
-echo "📝 Erstelle .env Datei..."
-if [ ! -f ".env" ]; then
- cp env-production-example.txt .env
-fi
-
-# 4. SQLite-Datenbank erstellen
-echo "🗄️ Erstelle SQLite-Datenbank..."
-touch database.sqlite
-chmod 664 database.sqlite
-
-# 5. Berechtigungen setzen
-echo "🔐 Setze Berechtigungen..."
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-chmod 644 .env
-
-# 6. Composer autoload neu generieren
-echo "🔄 Generiere autoload neu..."
-if command -v composer &> /dev/null; then
- composer dump-autoload --optimize
-elif [ -f "composer.phar" ]; then
- php composer.phar dump-autoload --optimize
-else
- echo "⚠️ Composer nicht verfügbar"
-fi
-
-# 7. Laravel Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-
-# 8. Migrationen ausführen
-echo "🗃️ Führe Migrationen aus..."
-php artisan migrate --force 2>/dev/null || echo "⚠️ Migrationen übersprungen"
-
-# 9. Storage Link erstellen
-echo "🔗 Prüfe Storage Link..."
-if [ ! -L "public/storage" ]; then
- php artisan storage:link 2>/dev/null || echo "⚠️ Storage Link übersprungen"
-else
- echo "✅ Storage Link bereits vorhanden"
-fi
-
-echo ""
-echo "✅ Vollständige Reparatur abgeschlossen!"
-echo ""
-echo "📋 Testen Sie:"
-echo "1. php artisan --version"
-echo "2. php -m | grep sqlite"
-echo "3. http://192.168.30.81"
-echo ""
-echo "📋 Admin-User erstellen:"
-echo "php artisan tinker"
-echo "use App\Models\User;"
-echo "User::create(['name' => 'Admin', 'email' => 'admin@neonail.com', 'password' => bcrypt('ihr_passwort')]);"
diff --git a/create-admin.php b/create-admin.php
deleted file mode 100755
index 9ad798f..0000000
--- a/create-admin.php
+++ /dev/null
@@ -1,40 +0,0 @@
-👑 Admin-User erstellen";
-
-try {
- // Laravel laden
- require_once 'vendor/autoload.php';
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Prüfen ob Admin bereits existiert
- $existingAdmin = \App\Models\User::where('email', 'admin@neonail.com')->first();
-
- if ($existingAdmin) {
- echo "✅ Admin-User existiert bereits! ";
- echo "Name: {$existingAdmin->name}
";
- echo "Email: {$existingAdmin->email}
";
- echo "ID: {$existingAdmin->id}
";
- echo "🚀 Zur Anwendung
";
- } else {
- // Admin-User erstellen
- $admin = \App\Models\User::create([
- 'name' => 'Admin',
- 'email' => 'admin@neonail.com',
- 'password' => bcrypt('admin123')
- ]);
-
- echo "✅ Admin-User erstellt! ";
- echo "Name: {$admin->name}
";
- echo "Email: {$admin->email}
";
- echo "Passwort: admin123
";
- echo "ID: {$admin->id}
";
- echo "🚀 Zur Anwendung
";
- }
-
-} catch (Exception $e) {
- echo "❌ Fehler: ";
- echo "{$e->getMessage()}
";
-}
-?>
diff --git a/debug-405-error.php b/debug-405-error.php
deleted file mode 100644
index b50d3b9..0000000
--- a/debug-405-error.php
+++ /dev/null
@@ -1,118 +0,0 @@
-query("SELECT COUNT(*) FROM users");
- $userCount = $stmt->fetchColumn();
- echo " - User in Datenbank: $userCount\n";
-
-} catch (Exception $e) {
- echo " ❌ Datenbankfehler: " . $e->getMessage() . "\n";
-}
-
-// 3. Prüfe Laravel-Routes
-echo "\n3. Laravel-Routes:\n";
-try {
- // Simuliere Laravel-Bootstrap
- require_once 'vendor/autoload.php';
-
- // Erstelle Laravel-App
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Hole Router
- $router = $app->make('router');
-
- // Prüfe spezifische Route
- $routes = $router->getRoutes();
- $foundRoute = false;
-
- foreach ($routes as $route) {
- if ($route->getName() === 'user-nail-polishes.store') {
- echo " ✅ Route 'user-nail-polishes.store' gefunden\n";
- echo " - URI: " . $route->uri() . "\n";
- echo " - Method: " . implode('|', $route->methods()) . "\n";
- echo " - Controller: " . $route->getActionName() . "\n";
- $foundRoute = true;
- break;
- }
- }
-
- if (!$foundRoute) {
- echo " ❌ Route 'user-nail-polishes.store' nicht gefunden\n";
- }
-
- // Zeige alle POST-Routes
- echo "\n 📋 Alle POST-Routes:\n";
- foreach ($routes as $route) {
- if (in_array('POST', $route->methods())) {
- echo " - " . $route->uri() . " -> " . $route->getName() . "\n";
- }
- }
-
-} catch (Exception $e) {
- echo " ❌ Laravel-Fehler: " . $e->getMessage() . "\n";
-}
-
-// 4. Prüfe Dateisystem
-echo "\n4. Dateisystem:\n";
-$files = [
- 'routes/web.php' => 'Route-Definitionen',
- 'app/Http/Controllers/UserNailPolishController.php' => 'Controller',
- 'resources/views/user-nail-polishes/create.blade.php' => 'Create-View',
- 'bootstrap/app.php' => 'Laravel-Bootstrap',
- 'vendor/autoload.php' => 'Composer Autoload'
-];
-
-foreach ($files as $file => $description) {
- if (file_exists($file)) {
- echo " ✅ $description: $file\n";
- } else {
- echo " ❌ $description fehlt: $file\n";
- }
-}
-
-// 5. Prüfe .htaccess
-echo "\n5. .htaccess-Konfiguration:\n";
-$htaccessFiles = [
- '.htaccess' => 'Hauptverzeichnis',
- 'public/.htaccess' => 'Public-Verzeichnis'
-];
-
-foreach ($htaccessFiles as $file => $location) {
- if (file_exists($file)) {
- echo " ✅ $location .htaccess gefunden\n";
- $content = file_get_contents($file);
- if (strpos($content, 'RewriteEngine On') !== false) {
- echo " - RewriteEngine aktiviert\n";
- }
- if (strpos($content, 'index.php') !== false) {
- echo " - index.php Weiterleitung konfiguriert\n";
- }
- } else {
- echo " ❌ $location .htaccess fehlt\n";
- }
-}
-
-echo "\n🔧 Nächste Schritte:\n";
-echo "1. Prüfen Sie die Laravel-Logs: storage/logs/laravel.log\n";
-echo "2. Aktivieren Sie APP_DEBUG=true in .env\n";
-echo "3. Leeren Sie den Cache: php artisan cache:clear\n";
-echo "4. Prüfen Sie die Apache-Logs für weitere Details\n";
-?>
diff --git a/debug-500-error.php b/debug-500-error.php
deleted file mode 100644
index a91d391..0000000
--- a/debug-500-error.php
+++ /dev/null
@@ -1,131 +0,0 @@
- 'Laravel Entry Point',
- 'bootstrap/app.php' => 'Laravel Bootstrap',
- 'vendor/autoload.php' => 'Composer Autoload',
- 'config/app.php' => 'App Config',
- '.env' => 'Environment File',
- 'database.sqlite' => 'Database File'
-];
-
-foreach ($criticalFiles as $file => $description) {
- if (file_exists($file)) {
- $perms = substr(sprintf('%o', fileperms($file)), -4);
- echo " ✅ $description: $file (Perms: $perms)\n";
- } else {
- echo " ❌ $description fehlt: $file\n";
- }
-}
-
-// 5. Prüfe Verzeichnisberechtigungen
-echo "\n5. Verzeichnisberechtigungen prüfen:\n";
-$directories = [
- 'storage' => 'Storage Directory',
- 'storage/logs' => 'Logs Directory',
- 'storage/framework' => 'Framework Directory',
- 'storage/framework/cache' => 'Cache Directory',
- 'storage/framework/sessions' => 'Sessions Directory',
- 'storage/framework/views' => 'Views Directory',
- 'bootstrap/cache' => 'Bootstrap Cache'
-];
-
-foreach ($directories as $dir => $description) {
- if (is_dir($dir)) {
- $perms = substr(sprintf('%o', fileperms($dir)), -4);
- $writable = is_writable($dir) ? 'writable' : 'not writable';
- echo " ✅ $description: $dir (Perms: $perms, $writable)\n";
- } else {
- echo " ❌ $description fehlt: $dir\n";
- }
-}
-
-// 6. Prüfe Laravel-Bootstrap
-echo "\n6. Laravel-Bootstrap Test:\n";
-try {
- require_once 'vendor/autoload.php';
- echo " ✅ Composer Autoload erfolgreich\n";
-
- $app = require_once 'bootstrap/app.php';
- echo " ✅ Laravel App erstellt\n";
-
- $kernel = $app->make('Illuminate\Contracts\Console\Kernel');
- echo " ✅ Kernel erstellt\n";
-
- $kernel->bootstrap();
- echo " ✅ Laravel Bootstrap erfolgreich\n";
-
-} catch (Exception $e) {
- echo " ❌ Laravel-Fehler: " . $e->getMessage() . "\n";
- echo " 📍 Datei: " . $e->getFile() . ":" . $e->getLine() . "\n";
-}
-
-echo "\n🔧 Nächste Schritte:\n";
-echo "1. Prüfen Sie die Laravel-Logs für detaillierte Fehlermeldungen\n";
-echo "2. Aktivieren Sie APP_DEBUG=true in .env\n";
-echo "3. Prüfen Sie die Apache-Logs für Server-Fehler\n";
-echo "4. Stellen Sie sicher, dass alle Verzeichnisse beschreibbar sind\n";
-?>
diff --git a/debug-image-upload.php b/debug-image-upload.php
deleted file mode 100644
index 01fa643..0000000
--- a/debug-image-upload.php
+++ /dev/null
@@ -1,194 +0,0 @@
- ini_get('upload_max_filesize'),
- 'post_max_size' => ini_get('post_max_size'),
- 'max_file_uploads' => ini_get('max_file_uploads'),
- 'memory_limit' => ini_get('memory_limit'),
- 'max_execution_time' => ini_get('max_execution_time'),
- 'max_input_time' => ini_get('max_input_time'),
- 'file_uploads' => ini_get('file_uploads'),
- 'upload_tmp_dir' => ini_get('upload_tmp_dir')
-];
-
-foreach ($uploadSettings as $setting => $value) {
- echo " - $setting: $value\n";
-}
-
-// 2. GD Extension prüfen
-echo "\n2. GD Extension prüfen:\n";
-if (extension_loaded('gd')) {
- echo " ✅ GD Extension geladen\n";
- $gdInfo = gd_info();
- echo " - GD Version: " . $gdInfo['GD Version'] . "\n";
- echo " - JPEG Support: " . ($gdInfo['JPEG Support'] ? 'Ja' : 'Nein') . "\n";
- echo " - PNG Support: " . ($gdInfo['PNG Support'] ? 'Ja' : 'Nein') . "\n";
- echo " - GIF Support: " . ($gdInfo['GIF Support'] ? 'Ja' : 'Nein') . "\n";
-} else {
- echo " ❌ GD Extension nicht geladen\n";
-}
-
-// 3. Intervention Image prüfen
-echo "\n3. Intervention Image prüfen:\n";
-try {
- require_once 'vendor/autoload.php';
-
- if (class_exists('Intervention\Image\ImageManager')) {
- echo " ✅ Intervention Image verfügbar\n";
-
- // Test ImageManager
- $manager = new \Intervention\Image\ImageManager(new \Intervention\Image\Drivers\Gd\Driver());
- echo " ✅ ImageManager funktioniert\n";
- } else {
- echo " ❌ Intervention Image nicht verfügbar\n";
- }
-} catch (Exception $e) {
- echo " ❌ Intervention Image Fehler: " . $e->getMessage() . "\n";
-}
-
-// 4. Storage-Verzeichnisse prüfen
-echo "\n4. Storage-Verzeichnisse prüfen:\n";
-$storagePaths = [
- 'storage' => 'Storage Root',
- 'storage/app' => 'Storage App',
- 'storage/app/public' => 'Storage Public',
- 'storage/app/public/nail_polishes' => 'Nail Polishes Storage',
- 'public/storage' => 'Public Storage Link'
-];
-
-foreach ($storagePaths as $path => $description) {
- if (file_exists($path)) {
- $perms = substr(sprintf('%o', fileperms($path)), -4);
- $writable = is_writable($path) ? 'writable' : 'not writable';
- $type = is_dir($path) ? 'directory' : (is_link($path) ? 'symlink' : 'file');
- echo " ✅ $description: $path ($type, perms: $perms, $writable)\n";
- } else {
- echo " ❌ $description: $path (nicht gefunden)\n";
- }
-}
-
-// 5. Laravel Storage Link prüfen
-echo "\n5. Laravel Storage Link prüfen:\n";
-$publicStoragePath = 'public/storage';
-if (is_link($publicStoragePath)) {
- $target = readlink($publicStoragePath);
- echo " ✅ Storage Link existiert: $publicStoragePath -> $target\n";
-} else {
- echo " ⚠️ Storage Link existiert nicht\n";
-
- // Versuche Storage Link zu erstellen
- try {
- if (file_exists('storage/app/public')) {
- if (is_dir('public/storage')) {
- rmdir('public/storage');
- }
- symlink('../storage/app/public', 'public/storage');
- echo " ✅ Storage Link erstellt\n";
- } else {
- echo " ❌ storage/app/public existiert nicht\n";
- }
- } catch (Exception $e) {
- echo " ❌ Storage Link erstellen fehlgeschlagen: " . $e->getMessage() . "\n";
- }
-}
-
-// 6. Laravel-Logs prüfen
-echo "\n6. Laravel-Logs prüfen:\n";
-$logFiles = [
- 'storage/logs/laravel.log',
- 'storage/logs/laravel-' . date('Y-m-d') . '.log'
-];
-
-foreach ($logFiles as $logFile) {
- if (file_exists($logFile)) {
- echo " 📋 $logFile gefunden\n";
- $lines = file($logFile);
- $lastLines = array_slice($lines, -5);
- echo " 📄 Letzte 5 Zeilen:\n";
- foreach ($lastLines as $line) {
- if (strpos($line, 'error') !== false || strpos($line, 'Exception') !== false || strpos($line, 'upload') !== false) {
- echo " " . trim($line) . "\n";
- }
- }
- } else {
- echo " ❌ $logFile nicht gefunden\n";
- }
-}
-
-// 7. Test-Bild erstellen
-echo "\n7. Test-Bild erstellen:\n";
-try {
- $testImagePath = 'storage/app/public/nail_polishes/test.jpg';
-
- if (extension_loaded('gd')) {
- // Erstelle ein einfaches Test-Bild
- $image = imagecreate(100, 100);
- $bgColor = imagecolorallocate($image, 255, 255, 255);
- $textColor = imagecolorallocate($image, 0, 0, 0);
- imagestring($image, 5, 10, 40, 'TEST', $textColor);
-
- if (imagejpeg($image, $testImagePath, 80)) {
- echo " ✅ Test-Bild erstellt: $testImagePath\n";
-
- // Prüfe ob Bild über Web erreichbar ist
- $webPath = 'public/storage/nail_polishes/test.jpg';
- if (file_exists($webPath)) {
- echo " ✅ Test-Bild über Web erreichbar\n";
- } else {
- echo " ❌ Test-Bild nicht über Web erreichbar\n";
- }
- } else {
- echo " ❌ Test-Bild erstellen fehlgeschlagen\n";
- }
-
- imagedestroy($image);
- } else {
- echo " ❌ GD Extension nicht verfügbar für Test-Bild\n";
- }
-} catch (Exception $e) {
- echo " ❌ Test-Bild Fehler: " . $e->getMessage() . "\n";
-}
-
-// 8. Controller-Code prüfen
-echo "\n8. Controller-Code prüfen:\n";
-$controllerPath = 'app/Http/Controllers/UserNailPolishController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
-
- // Prüfe ImageManager Import
- if (strpos($content, 'use Intervention\\Image\\ImageManager') !== false) {
- echo " ✅ ImageManager Import vorhanden\n";
- } else {
- echo " ❌ ImageManager Import fehlt\n";
- }
-
- // Prüfe Driver Import
- if (strpos($content, 'use Intervention\\Image\\Drivers\\Gd\\Driver') !== false) {
- echo " ✅ Driver Import vorhanden\n";
- } else {
- echo " ❌ Driver Import fehlt\n";
- }
-
- // Prüfe Bildverarbeitungscode
- if (strpos($content, 'new ImageManager(new Driver())') !== false) {
- echo " ✅ Bildverarbeitungscode vorhanden\n";
- } else {
- echo " ❌ Bildverarbeitungscode fehlt\n";
- }
-} else {
- echo " ❌ Controller nicht gefunden\n";
-}
-
-echo "\n✅ Bild-Upload Debug abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/create-nail-polish\n";
-echo "\n📋 Nächste Schritte:\n";
-echo "1. Prüfen Sie die Laravel-Logs für spezifische Fehlermeldungen\n";
-echo "2. Testen Sie mit einem kleinen Bild (< 1MB)\n";
-echo "3. Prüfen Sie Browser-Entwicklertools (F12) für Netzwerk-Fehler\n";
-echo "4. Schauen Sie in Apache-Logs für Server-Fehler\n";
-?>
diff --git a/debug-logout-detailed.php b/debug-logout-detailed.php
deleted file mode 100644
index 292656f..0000000
--- a/debug-logout-detailed.php
+++ /dev/null
@@ -1,202 +0,0 @@
- $line) {
- if (strpos($line, 'logout') !== false) {
- $logoutLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- if (!empty($logoutLines)) {
- echo " ✅ Logout-bezogene Zeilen gefunden:\n";
- foreach ($logoutLines as $line) {
- echo " 📋 $line\n";
- }
- } else {
- echo " ❌ Keine Logout-bezogenen Zeilen gefunden\n";
- }
-
-} else {
- echo " ❌ Layout-Datei nicht gefunden\n";
-}
-
-// 2. Routes prüfen
-echo "\n2. 🛣️ Routes prüfen...\n";
-$routesPath = 'routes/web.php';
-if (file_exists($routesPath)) {
- $content = file_get_contents($routesPath);
-
- // Zeige alle Logout-bezogenen Zeilen
- $lines = explode("\n", $content);
- $logoutLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'logout') !== false) {
- $logoutLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- if (!empty($logoutLines)) {
- echo " ✅ Logout-Routes gefunden:\n";
- foreach ($logoutLines as $line) {
- echo " 📋 $line\n";
- }
- } else {
- echo " ❌ Keine Logout-Routes gefunden\n";
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 3. LoginController prüfen
-echo "\n3. 🔐 LoginController prüfen...\n";
-$controllerPath = 'app/Http/Controllers/Auth/LoginController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
-
- if (strpos($content, 'public function logout') !== false) {
- echo " ✅ Logout-Methode vorhanden\n";
-
- // Zeige Logout-Methode
- $lines = explode("\n", $content);
- $inLogoutMethod = false;
- $methodLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'public function logout') !== false) {
- $inLogoutMethod = true;
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- } elseif ($inLogoutMethod && strpos($line, 'public function') !== false) {
- $inLogoutMethod = false;
- } elseif ($inLogoutMethod) {
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- echo " 📋 Logout-Methode:\n";
- foreach ($methodLines as $line) {
- echo " $line\n";
- }
-
- } else {
- echo " ❌ Logout-Methode nicht gefunden\n";
- }
-
-} else {
- echo " ❌ LoginController nicht gefunden\n";
-}
-
-// 4. Einfache Logout-Route erstellen
-echo "\n4. 🛣️ Einfache Logout-Route erstellen...\n";
-$routesPath = 'routes/web.php';
-if (file_exists($routesPath)) {
- $content = file_get_contents($routesPath);
-
- // Prüfe ob GET Logout-Route existiert
- if (strpos($content, "Route::get('/logout', [LoginController::class, 'logout'])->name('logout');") === false) {
- // Füge GET Logout-Route hinzu
- $newRoute = "\n// Einfache Logout-Route für Debugging\nRoute::get('/logout', [App\\Http\\Controllers\\Auth\\LoginController::class, 'logout'])->name('logout');\n";
-
- // Füge am Ende der Datei hinzu
- $content .= $newRoute;
- file_put_contents($routesPath, $content);
- echo " ✅ GET Logout-Route hinzugefügt\n";
- } else {
- echo " ℹ️ GET Logout-Route bereits vorhanden\n";
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 5. LoginController erweitern
-echo "\n5. 🔐 LoginController erweitern...\n";
-$controllerPath = 'app/Http/Controllers/Auth/LoginController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
-
- // Prüfe ob Logout-Methode GET und POST unterstützt
- if (strpos($content, 'public function logout(Request $request)') !== false) {
- echo " ✅ Logout-Methode unterstützt bereits GET und POST\n";
- } else {
- echo " ℹ️ Logout-Methode prüfen...\n";
- }
-
- // Zeige aktuelle Logout-Methode
- $lines = explode("\n", $content);
- $inLogoutMethod = false;
- $methodLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'public function logout') !== false) {
- $inLogoutMethod = true;
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- } elseif ($inLogoutMethod && strpos($line, 'public function') !== false) {
- $inLogoutMethod = false;
- } elseif ($inLogoutMethod) {
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- echo " 📋 Aktuelle Logout-Methode:\n";
- foreach ($methodLines as $line) {
- echo " $line\n";
- }
-
-} else {
- echo " ❌ LoginController nicht gefunden\n";
-}
-
-// 6. Cache leeren
-echo "\n6. 🧹 Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 7. Test-Logout-Links erstellen
-echo "\n7. 🧪 Test-Logout-Links erstellen...\n";
-$testLinks = [
- 'https://neonail.vogt.de.com/logout (GET)',
- 'https://neonail.vogt.de.com/logout (POST)',
- 'https://neonail.vogt.de.com/',
- 'https://neonail.vogt.de.com/login'
-];
-
-foreach ($testLinks as $link) {
- echo " 🔗 $link\n";
-}
-
-// 8. Debug-Anleitung
-echo "\n8. 🔍 Debug-Anleitung...\n";
-echo " 📋 1. Öffnen Sie: https://neonail.vogt.de.com\n";
-echo " 📋 2. Melden Sie sich an\n";
-echo " 📋 3. Öffnen Sie Browser-Entwicklertools (F12)\n";
-echo " 📋 4. Gehen Sie zu Console-Tab\n";
-echo " 📋 5. Klicken Sie auf Ihren Benutzernamen\n";
-echo " 📋 6. Wählen Sie 'Abmelden'\n";
-echo " 📋 7. Schauen Sie nach JavaScript-Fehlern\n";
-echo " 📋 8. Gehen Sie zu Network-Tab\n";
-echo " 📋 9. Schauen Sie welche URL aufgerufen wird\n";
-echo " 📋 10. Testen Sie direkt: https://neonail.vogt.de.com/logout\n";
-
-echo "\n✅ Detailliertes Logout-Debug abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Das normale Logout über das Dropdown\n";
-echo "2. Den direkten Link: https://neonail.vogt.de.com/logout\n";
-echo "3. Teilen Sie alle Fehlermeldungen mit\n";
-?>
diff --git a/debug-logout.php b/debug-logout.php
deleted file mode 100644
index 1f4bbcb..0000000
--- a/debug-logout.php
+++ /dev/null
@@ -1,218 +0,0 @@
- $line) {
- if (strpos($line, 'logout') !== false) {
- echo " 📋 Zeile " . ($lineNumber + 1) . ": " . trim($line) . "\n";
- }
- }
- } else {
- echo " ❌ Logout-Form nicht gefunden\n";
- }
-
- // Prüfe Route-Verwendung
- if (strpos($content, '{{ route("logout") }}') !== false) {
- echo " ✅ Laravel Route wird verwendet\n";
- } elseif (strpos($content, 'https://neonail.vogt.de.com/logout') !== false) {
- echo " ❌ Hardcodierte URL wird verwendet\n";
- } else {
- echo " ❓ Unbekannte Logout-Konfiguration\n";
- }
-
-} else {
- echo " ❌ Layout-Datei nicht gefunden\n";
-}
-
-// 2. Routes prüfen
-echo "\n2. 🛣️ Routes prüfen...\n";
-$routesPath = 'routes/web.php';
-if (file_exists($routesPath)) {
- $content = file_get_contents($routesPath);
-
- // Zeige alle Logout-bezogenen Zeilen
- $lines = explode("\n", $content);
- $logoutLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'logout') !== false) {
- $logoutLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- if (!empty($logoutLines)) {
- echo " ✅ Logout-Routes gefunden:\n";
- foreach ($logoutLines as $line) {
- echo " 📋 $line\n";
- }
- } else {
- echo " ❌ Keine Logout-Routes gefunden\n";
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 3. LoginController prüfen
-echo "\n3. 🔐 LoginController prüfen...\n";
-$controllerPath = 'app/Http/Controllers/Auth/LoginController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
-
- if (strpos($content, 'logout') !== false) {
- echo " ✅ Logout-Methode gefunden\n";
-
- // Zeige Logout-Methode
- $lines = explode("\n", $content);
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'logout') !== false) {
- echo " 📋 Zeile " . ($lineNumber + 1) . ": " . trim($line) . "\n";
- }
- }
- } else {
- echo " ❌ Logout-Methode nicht gefunden\n";
- }
-
-} else {
- echo " ❌ LoginController nicht gefunden\n";
-}
-
-// 4. Laravel Route-Liste generieren
-echo "\n4. 🛣️ Laravel Route-Liste generieren...\n";
-try {
- require_once 'vendor/autoload.php';
-
- // Laravel Bootstrap
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Route-Liste abrufen
- $routes = \Illuminate\Support\Facades\Route::getRoutes();
-
- $logoutRoutes = [];
- foreach ($routes as $route) {
- $uri = $route->uri();
- $methods = $route->methods();
- $name = $route->getName();
-
- if (strpos($uri, 'logout') !== false || strpos($name, 'logout') !== false) {
- $logoutRoutes[] = [
- 'uri' => $uri,
- 'methods' => $methods,
- 'name' => $name
- ];
- }
- }
-
- if (empty($logoutRoutes)) {
- echo " ❌ Keine Logout-Routes in Laravel registriert\n";
- } else {
- echo " ✅ Logout-Routes in Laravel gefunden:\n";
- foreach ($logoutRoutes as $route) {
- $methods = implode('|', $route['methods']);
- $name = $route['name'] ?: 'kein Name';
- echo " 📋 $methods $uri ($name)\n";
- }
- }
-
-} catch (Exception $e) {
- echo " ❌ Fehler beim Abrufen der Routes: " . $e->getMessage() . "\n";
-}
-
-// 5. Cache-Status prüfen
-echo "\n5. 🧹 Cache-Status prüfen...\n";
-$cacheFiles = [
- 'bootstrap/cache/packages.php' => 'Packages Cache',
- 'bootstrap/cache/services.php' => 'Services Cache',
- 'bootstrap/cache/routes.php' => 'Routes Cache',
- 'bootstrap/cache/config.php' => 'Config Cache'
-];
-
-foreach ($cacheFiles as $cacheFile => $description) {
- if (file_exists($cacheFile)) {
- echo " ⚠️ Cache vorhanden: $description\n";
- } else {
- echo " ✅ Cache geleert: $description\n";
- }
-}
-
-// 6. Test-Logout-URLs generieren
-echo "\n6. 🔗 Test-Logout-URLs:\n";
-$testUrls = [
- 'https://neonail.vogt.de.com/logout',
- 'https://neonail.vogt.de.com/logout (POST)',
- 'https://neonail.vogt.de.com/logout (GET)',
- 'https://neonail.vogt.de.com/',
- 'https://neonail.vogt.de.com/login'
-];
-
-foreach ($testUrls as $url) {
- echo " 🔗 $url\n";
-}
-
-// 7. Layout korrigieren (falls nötig)
-echo "\n7. 🔧 Layout korrigieren...\n";
-$layoutPath = 'resources/views/layouts/app.blade.php';
-if (file_exists($layoutPath)) {
- $content = file_get_contents($layoutPath);
-
- // Ersetze alle hardcodierten Logout-URLs
- $replacements = [
- 'action="https://neonail.vogt.de.com/logout"' => 'action="{{ route("logout") }}"',
- 'href="https://neonail.vogt.de.com/logout"' => 'href="{{ route("logout") }}"',
- 'action="http://neonail.vogt.de.com/logout"' => 'action="{{ route("logout") }}"',
- 'href="http://neonail.vogt.de.com/logout"' => 'href="{{ route("logout") }}"'
- ];
-
- $modified = false;
- foreach ($replacements as $old => $new) {
- if (strpos($content, $old) !== false) {
- $content = str_replace($old, $new, $content);
- $modified = true;
- echo " ✅ Ersetzt: $old → $new\n";
- }
- }
-
- if ($modified) {
- file_put_contents($layoutPath, $content);
- echo " ✅ Layout aktualisiert\n";
- } else {
- echo " ℹ️ Keine Änderungen nötig\n";
- }
-
-} else {
- echo " ❌ Layout-Datei nicht gefunden\n";
-}
-
-// 8. Cache leeren
-echo "\n8. 🧹 Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-echo "\n✅ Logout-Debug abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Klicken Sie auf Ihren Benutzernamen (oben rechts)\n";
-echo "2. Wählen Sie 'Abmelden' aus dem Dropdown\n";
-echo "3. Falls das nicht funktioniert, versuchen Sie direkt:\n";
-echo " - https://neonail.vogt.de.com/logout\n";
-echo "\n📋 Falls Problem besteht:\n";
-echo "- Prüfen Sie Browser-Entwicklertools (F12) für Fehler\n";
-echo "- Schauen Sie in die Laravel-Logs: tail -f storage/logs/laravel.log\n";
-echo "- Teilen Sie die Debug-Ausgabe mit\n";
-?>
diff --git a/deploy-manufacturer-feature.sh b/deploy-manufacturer-feature.sh
deleted file mode 100755
index 754f525..0000000
--- a/deploy-manufacturer-feature.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-
-# NeoNail DB - Hersteller-Feature Deployment Script
-# Führt die neuen Migrationen aus und aktualisiert die Anwendung
-
-echo "🎨 NeoNail DB - Hersteller-Feature Deployment"
-echo "=============================================="
-
-# Prüfe, ob wir im richtigen Verzeichnis sind
-if [ ! -f "artisan" ]; then
- echo "❌ Fehler: artisan Datei nicht gefunden. Bitte führen Sie das Script im Laravel-Root-Verzeichnis aus."
- exit 1
-fi
-
-echo "📋 Prüfe Migration-Reihenfolge..."
-# Stelle sicher, dass die manufacturer_id Migration nach der nail_polishes Migration kommt
-if [ -f "database/migrations/2025_01_15_000001_add_manufacturer_id_to_nail_polishes_table.php" ]; then
- echo "🔄 Korrigiere Migration-Reihenfolge..."
- mv database/migrations/2025_01_15_000001_add_manufacturer_id_to_nail_polishes_table.php \
- database/migrations/2025_08_10_020524_add_manufacturer_id_to_nail_polishes_table.php
- echo "✅ Migration-Reihenfolge korrigiert"
-fi
-
-echo "📋 Führe Migrationen aus..."
-php artisan migrate --force
-
-if [ $? -eq 0 ]; then
- echo "✅ Migrationen erfolgreich ausgeführt"
-else
- echo "❌ Fehler beim Ausführen der Migrationen"
- exit 1
-fi
-
-echo "🔄 Cache leeren..."
-php artisan config:clear
-php artisan route:clear
-php artisan view:clear
-
-echo "📦 Composer Autoload aktualisieren..."
-composer dump-autoload
-
-echo "🔗 Storage-Link prüfen..."
-if [ ! -L "public/storage" ]; then
- echo "📎 Storage-Link erstellen..."
- php artisan storage:link
-else
- echo "✅ Storage-Link bereits vorhanden"
-fi
-
-echo "🔒 Berechtigungen setzen..."
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-chmod 664 database.sqlite
-
-echo "✅ Hersteller-Feature erfolgreich deployed!"
-echo ""
-echo "🎯 Neue Features:"
-echo " - Hersteller-Verwaltung für alle User"
-echo " - Hersteller-Auswahl beim Erstellen von Nagellacken"
-echo " - Automatische Hersteller-Erstellung"
-echo " - Hersteller-Statistiken im Admin-Bereich"
-echo ""
-echo "🌐 Zugriff:"
-echo " - Hersteller-Übersicht: /manufacturers"
-echo " - Neuen Hersteller erstellen: /manufacturers/create"
-echo ""
-echo "🚀 Anwendung ist bereit!"
diff --git a/deploy-sqlite.sh b/deploy-sqlite.sh
deleted file mode 100755
index e7ec256..0000000
--- a/deploy-sqlite.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/bash
-
-# NeoNail DB SQLite Deployment Script
-echo "🚀 NeoNail DB SQLite Deployment gestartet..."
-
-# 1. SQLite-Datenbank erstellen (falls nicht vorhanden)
-echo "🗄️ SQLite-Datenbank erstellen..."
-if [ ! -f database.sqlite ]; then
- touch database.sqlite
- echo "✅ SQLite-Datenbank erstellt"
-else
- echo "✅ SQLite-Datenbank bereits vorhanden"
-fi
-
-# 2. Berechtigungen für SQLite-Datenbank setzen
-echo "🔐 SQLite-Berechtigungen setzen..."
-chmod 664 database.sqlite
-if command -v chown &> /dev/null; then
- chown www-data:www-data database.sqlite 2>/dev/null || echo "⚠️ chown nicht verfügbar"
-fi
-
-# 3. Composer Dependencies optimieren
-echo "📦 Composer Dependencies optimieren..."
-composer install --optimize-autoloader --no-dev
-
-# 4. Cache leeren
-echo "🧹 Cache leeren..."
-php artisan config:clear
-php artisan cache:clear
-php artisan view:clear
-php artisan route:clear
-
-# 5. Storage-Link erstellen
-echo "🔗 Storage-Link erstellen..."
-php artisan storage:link
-
-# 6. Berechtigungen setzen
-echo "🔐 Berechtigungen setzen..."
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-chmod 644 .env
-
-# 7. Datenbank-Migrationen
-echo "🗄️ Datenbank-Migrationen..."
-php artisan migrate --force
-
-# 8. Cache optimieren
-echo "⚡ Cache optimieren..."
-php artisan config:cache
-php artisan route:cache
-php artisan view:cache
-
-echo "✅ SQLite Deployment abgeschlossen!"
-echo ""
-echo "📋 Nächste Schritte:"
-echo "1. Admin-User erstellen: php artisan tinker"
-echo "2. Testen der Anwendung"
-echo "3. HTTPS aktivieren"
-echo "4. Backup-Strategie einrichten"
-echo ""
-echo "💡 SQLite Vorteile:"
-echo "- Keine MySQL-Installation nötig"
-echo "- Einfaches Backup (nur eine Datei)"
-echo "- Minimaler Konfigurationsaufwand"
diff --git a/deploy.sh b/deploy.sh
deleted file mode 100755
index ab47a51..0000000
--- a/deploy.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-
-# NeoNail DB Deployment Script
-echo "🚀 NeoNail DB Deployment gestartet..."
-
-# 1. Composer Dependencies optimieren
-echo "📦 Composer Dependencies optimieren..."
-composer install --optimize-autoloader --no-dev
-
-# 2. Cache leeren
-echo "🧹 Cache leeren..."
-php artisan config:clear
-php artisan cache:clear
-php artisan view:clear
-php artisan route:clear
-
-# 3. Storage-Link erstellen
-echo "🔗 Storage-Link erstellen..."
-php artisan storage:link
-
-# 4. Berechtigungen setzen
-echo "🔐 Berechtigungen setzen..."
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-chmod 644 .env
-
-# 5. Datenbank-Migrationen
-echo "🗄️ Datenbank-Migrationen..."
-php artisan migrate --force
-
-# 6. Cache optimieren
-echo "⚡ Cache optimieren..."
-php artisan config:cache
-php artisan route:cache
-php artisan view:cache
-
-echo "✅ Deployment abgeschlossen!"
-echo ""
-echo "📋 Nächste Schritte:"
-echo "1. Admin-User erstellen: php artisan tinker"
-echo "2. Testen der Anwendung"
-echo "3. HTTPS aktivieren"
-echo "4. Backup-Strategie einrichten"
diff --git a/deployment-checklist.md b/deployment-checklist.md
deleted file mode 100755
index 097f175..0000000
--- a/deployment-checklist.md
+++ /dev/null
@@ -1,111 +0,0 @@
-# NeoNail DB - Deployment Checklist
-
-## Vorbereitung (Lokal)
-
-### 1. Produktions-Umgebung konfigurieren
-```bash
-# .env.production erstellen
-cp .env .env.production
-
-# Produktions-Einstellungen in .env.production:
-APP_ENV=production
-APP_DEBUG=false
-APP_URL=https://ihre-domain.de
-
-# Datenbank-Einstellungen
-DB_CONNECTION=mysql
-DB_HOST=localhost
-DB_PORT=3306
-DB_DATABASE=ihre_datenbank
-DB_USERNAME=ihr_username
-DB_PASSWORD=ihr_passwort
-```
-
-### 2. Dependencies optimieren
-```bash
-composer install --optimize-autoloader --no-dev
-npm run build # falls vorhanden
-```
-
-### 3. Cache leeren und optimieren
-```bash
-php artisan config:clear
-php artisan cache:clear
-php artisan view:clear
-php artisan route:clear
-```
-
-### 4. Storage-Link erstellen
-```bash
-php artisan storage:link
-```
-
-## Upload zum Webspace
-
-### 1. Dateien hochladen
-- Alle Dateien außer `node_modules/`, `vendor/` (falls vorhanden)
-- `.env.production` als `.env` hochladen
-- `storage/` und `bootstrap/cache/` Ordner mit Schreibrechten
-
-### 2. Composer installieren (falls verfügbar)
-```bash
-composer install --optimize-autoloader --no-dev
-```
-
-### 3. Datenbank-Migrationen
-```bash
-php artisan migrate --force
-```
-
-### 4. Berechtigungen setzen
-```bash
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-chmod 644 .env
-```
-
-## Nach dem Upload
-
-### 1. Cache optimieren
-```bash
-php artisan config:cache
-php artisan route:cache
-php artisan view:cache
-```
-
-### 2. Admin-User erstellen
-```bash
-php artisan tinker
-```
-```php
-use App\Models\User;
-User::create([
- 'name' => 'Admin',
- 'email' => 'admin@neonail.com',
- 'password' => bcrypt('ihr_admin_passwort')
-]);
-```
-
-### 3. Testen
-- Login mit admin@neonail.com
-- Neuen Lack erstellen
-- Bild-Upload testen
-- Mobile-Ansicht prüfen
-
-## Wichtige Hinweise
-
-### Sicherheit
-- APP_KEY muss gesetzt sein
-- Starke Passwörter verwenden
-- HTTPS verwenden
-- .env nicht öffentlich zugänglich
-
-### Performance
-- OPcache aktivieren (falls verfügbar)
-- Redis für Cache (optional)
-- CDN für Bilder (optional)
-
-### Backup
-- Regelmäßige Datenbank-Backups
-- Storage-Ordner sichern
-- Code-Backup
diff --git a/emergency-apache-fix.sh b/emergency-apache-fix.sh
deleted file mode 100755
index c2791cf..0000000
--- a/emergency-apache-fix.sh
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/bash
-
-echo "🚨 EMERGENCY: Apache komplett reparieren"
-echo "======================================="
-
-# 1. Apache-Status prüfen
-echo "1. 🔍 Apache-Status prüfen..."
-systemctl status apache2 2>/dev/null || service apache2 status 2>/dev/null || echo " ⚠️ Apache-Status nicht verfügbar"
-
-# 2. Apache stoppen
-echo "2. 🛑 Apache stoppen..."
-systemctl stop apache2 2>/dev/null || service apache2 stop 2>/dev/null || echo " ⚠️ Apache stop fehlgeschlagen"
-
-# 3. .htaccess zurücksetzen
-echo "3. 🔄 .htaccess zurücksetzen..."
-if [ -f public/.htaccess.backup ]; then
- cp public/.htaccess.backup public/.htaccess
- echo " ✅ .htaccess aus Backup wiederhergestellt"
-elif [ -f public/.htaccess.simple ]; then
- cp public/.htaccess.simple public/.htaccess
- echo " ✅ .htaccess aus simple wiederhergestellt"
-else
- # Erstelle minimale .htaccess
- cat > public/.htaccess << 'EOF'
-
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^ index.php [L]
-
-EOF
- echo " ✅ Minimale .htaccess erstellt"
-fi
-
-# 4. Apache-Module zurücksetzen
-echo "4. 🔧 Apache-Module zurücksetzen..."
-a2dismod headers 2>/dev/null || echo " ⚠️ mod_headers deaktivieren fehlgeschlagen"
-a2enmod rewrite 2>/dev/null || echo " ⚠️ mod_rewrite aktivieren fehlgeschlagen"
-
-# 5. Apache-Konfiguration testen
-echo "5. 🧪 Apache-Konfiguration testen..."
-apache2ctl -t 2>/dev/null && echo " ✅ Apache-Konfiguration OK" || echo " ❌ Apache-Konfiguration fehlerhaft"
-
-# 6. Apache starten
-echo "6. 🚀 Apache starten..."
-systemctl start apache2 2>/dev/null || service apache2 start 2>/dev/null || echo " ⚠️ Apache start fehlgeschlagen"
-
-# 7. Apache-Status prüfen
-echo "7. 🔍 Apache-Status nach Start..."
-systemctl status apache2 2>/dev/null || service apache2 status 2>/dev/null || echo " ⚠️ Apache-Status nicht verfügbar"
-
-# 8. Test-Request
-echo "8. 🧪 Test-Request..."
-curl -I http://localhost/ 2>/dev/null && echo " ✅ Apache antwortet" || echo " ❌ Apache antwortet nicht"
-
-echo ""
-echo "✅ Emergency Apache Fix abgeschlossen!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. http://neonail.vogt.de.com"
-echo "2. https://neonail.vogt.de.com"
-echo ""
-echo "📝 Falls Problem besteht:"
-echo "- Prüfen Sie: systemctl status apache2"
-echo "- Schauen Sie in: /var/log/apache2/error.log"
-echo "- Führen Sie: apache2ctl -t"
diff --git a/env-production-example.txt b/env-production-example.txt
deleted file mode 100755
index 0fe2526..0000000
--- a/env-production-example.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-APP_NAME="NeoNail DB"
-APP_ENV=production
-APP_KEY=base64:+LTZYPKjkZ+O3iFTgU2sS+9bNvxxvG8Kw8JSEPiG7Rs=
-APP_DEBUG=false
-APP_URL=http://192.168.30.81
-
-LOG_CHANNEL=stack
-LOG_DEPRECATIONS_CHANNEL=null
-LOG_LEVEL=debug
-
-DB_CONNECTION=sqlite
-DB_DATABASE=database.sqlite
-
-BROADCAST_DRIVER=log
-CACHE_DRIVER=file
-FILESYSTEM_DISK=local
-QUEUE_CONNECTION=sync
-SESSION_DRIVER=file
-SESSION_LIFETIME=120
-
-MEMCACHED_HOST=127.0.0.1
-
-REDIS_HOST=127.0.0.1
-REDIS_PASSWORD=null
-REDIS_PORT=6379
-
-MAIL_MAILER=smtp
-MAIL_HOST=mailpit
-MAIL_PORT=1025
-MAIL_USERNAME=null
-MAIL_PASSWORD=null
-MAIL_ENCRYPTION=null
-MAIL_FROM_ADDRESS="hello@example.com"
-MAIL_FROM_NAME="${APP_NAME}"
-
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-AWS_DEFAULT_REGION=us-east-1
-AWS_BUCKET=
-AWS_USE_PATH_STYLE_ENDPOINT=false
-
-PUSHER_APP_ID=
-PUSHER_APP_KEY=
-PUSHER_APP_SECRET=
-PUSHER_HOST=
-PUSHER_PORT=443
-PUSHER_SCHEME=https
-PUSHER_APP_CLUSTER=mt1
-
-VITE_APP_NAME="${APP_NAME}"
-VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
-VITE_PUSHER_HOST="${PUSHER_HOST}"
-VITE_PUSHER_PORT="${PUSHER_PORT}"
-VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
-VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/env-production-guide.md b/env-production-guide.md
deleted file mode 100644
index e69de29..0000000
diff --git a/env-sqlite-example.txt b/env-sqlite-example.txt
deleted file mode 100755
index 27bdb00..0000000
--- a/env-sqlite-example.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-APP_NAME="NeoNail DB"
-APP_ENV=production
-APP_KEY=base64:YOUR_APP_KEY_HERE
-APP_DEBUG=false
-APP_URL=https://ihre-domain.de
-
-LOG_CHANNEL=stack
-LOG_DEPRECATIONS_CHANNEL=null
-LOG_LEVEL=error
-
-# SQLite Konfiguration (Einfachste Option)
-DB_CONNECTION=sqlite
-DB_DATABASE=/path/to/database.sqlite
-
-# MySQL Konfiguration (Alternative)
-# DB_CONNECTION=mysql
-# DB_HOST=localhost
-# DB_PORT=3306
-# DB_DATABASE=ihre_datenbank
-# DB_USERNAME=ihr_username
-# DB_PASSWORD=ihr_passwort
-
-BROADCAST_DRIVER=log
-CACHE_DRIVER=file
-FILESYSTEM_DISK=local
-QUEUE_CONNECTION=sync
-SESSION_DRIVER=file
-SESSION_LIFETIME=120
-
-MEMCACHED_HOST=127.0.0.1
-
-REDIS_HOST=127.0.0.1
-REDIS_PASSWORD=null
-REDIS_PORT=6379
-
-MAIL_MAILER=smtp
-MAIL_HOST=mailpit
-MAIL_PORT=1025
-MAIL_USERNAME=null
-MAIL_PASSWORD=null
-MAIL_ENCRYPTION=null
-MAIL_FROM_ADDRESS="hello@example.com"
-MAIL_FROM_NAME="${APP_NAME}"
-
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-AWS_DEFAULT_REGION=us-east-1
-AWS_BUCKET=
-AWS_USE_PATH_STYLE_ENDPOINT=false
-
-PUSHER_APP_ID=
-PUSHER_APP_KEY=
-PUSHER_APP_SECRET=
-PUSHER_HOST=
-PUSHER_PORT=443
-PUSHER_SCHEME=https
-PUSHER_APP_CLUSTER=mt1
-
-VITE_APP_NAME="${APP_NAME}"
-VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
-VITE_PUSHER_HOST="${PUSHER_HOST}"
-VITE_PUSHER_PORT="${PUSHER_PORT}"
-VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
-VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/fix-405-error.sh b/fix-405-error.sh
deleted file mode 100755
index 53d3a57..0000000
--- a/fix-405-error.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash
-
-echo "🔧 Fix: HTTP 405 Method Not Allowed"
-echo "==================================="
-
-# 1. Debug-Script ausführen
-echo "1. 🔍 Diagnose ausführen..."
-php debug-405-error.php
-
-echo ""
-echo "2. 🧹 Laravel Cache leeren..."
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-
-echo ""
-echo "3. 🔄 Route-Cache neu generieren..."
-php artisan route:cache 2>/dev/null || echo "⚠️ route:cache übersprungen"
-
-echo ""
-echo "4. 📝 .env Debug aktivieren..."
-if [ -f .env ]; then
- sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
- sed -i 's/APP_ENV=production/APP_ENV=local/' .env
- echo "✅ Debug-Modus aktiviert"
-else
- echo "❌ .env Datei nicht gefunden"
-fi
-
-echo ""
-echo "5. 🔍 Apache-Logs prüfen..."
-if [ -f /var/log/apache2/error.log ]; then
- echo "📋 Letzte Apache-Fehler:"
- tail -10 /var/log/apache2/error.log | grep -E "(405|Method|Not Allowed)" || echo "Keine 405-Fehler gefunden"
-else
- echo "⚠️ Apache-Logs nicht verfügbar"
-fi
-
-echo ""
-echo "6. 🧪 Route-Test..."
-echo "📋 Teste POST-Route direkt:"
-curl -X POST https://neonail.vogt.de.com/create-nail-polish \
- -H "Content-Type: application/x-www-form-urlencoded" \
- -d "name=Test&number=123&_token=test" \
- -w "\nHTTP-Status: %{http_code}\n" \
- 2>/dev/null || echo "❌ curl nicht verfügbar"
-
-echo ""
-echo "✅ Fix abgeschlossen!"
-echo ""
-echo "🔧 Nächste Schritte:"
-echo "1. Testen Sie das Formular erneut"
-echo "2. Prüfen Sie die Browser-Entwicklertools (F12) für Details"
-echo "3. Schauen Sie in storage/logs/laravel.log für Laravel-Fehler"
-echo "4. Falls Problem besteht: php artisan route:list | grep store"
diff --git a/fix-admin-controller-email.php b/fix-admin-controller-email.php
deleted file mode 100644
index d40f9ca..0000000
--- a/fix-admin-controller-email.php
+++ /dev/null
@@ -1,284 +0,0 @@
-take(5)->get();
- $recentNailPolishes = NailPolish::latest()->take(5)->get();
-
- return view("admin.dashboard", compact("totalUsers", "totalNailPolishes", "recentUsers", "recentNailPolishes"));
- }
-
- /**
- * Liste aller Benutzer
- */
- public function users(Request $request)
- {
- $search = $request->get("search");
-
- $users = User::when($search, function($query) use ($search) {
- return $query->where("name", "like", "%{$search}%")
- ->orWhere("email", "like", "%{$search}%");
- })->orderBy("name")->paginate(20);
-
- return view("admin.users.index", compact("users", "search"));
- }
-
- /**
- * Formular zum Erstellen eines neuen Benutzers
- */
- public function createUser()
- {
- return view("admin.users.create");
- }
-
- /**
- * Neuen Benutzer speichern
- */
- public function storeUser(Request $request)
- {
- $request->validate([
- "name" => "required|string|max:255",
- "email" => "required|string|email|max:255|unique:users",
- "password" => "required|string|min:8|confirmed",
- ]);
-
- // Passwort für E-Mail speichern (wird nach dem Speichern gelöscht)
- $plainPassword = $request->password;
-
- // User erstellen
- $user = User::create([
- "name" => $request->name,
- "email" => $request->email,
- "password" => Hash::make($request->password),
- "is_admin" => $request->has("is_admin"),
- ]);
-
- // Willkommens-E-Mail senden
- try {
- Mail::send("emails.welcome-user", [
- "user" => $user,
- "password" => $plainPassword
- ], function($message) use ($user) {
- $message->to($user->email, $user->name)
- ->subject("🎨 Willkommen bei der NeoNail DB - Ihre Login-Daten")
- ->from(config("mail.from.address"), config("mail.from.name"));
- });
-
- // Admin-Bestätigung senden
- Mail::raw("Hallo Admin!
-
-Ein neuer User wurde erfolgreich erstellt und eine Willkommens-E-Mail gesendet.
-
-📋 User-Details:
- - Name: {$user->name}
- - E-Mail: {$user->email}
- - Admin-Status: " . ($user->isAdmin() ? "Ja" : "Nein") . "
- - Erstellt: " . now() . "
-
-Die Willkommens-E-Mail enthält:
- - Login-Daten (Website, E-Mail, Passwort)
- - Aufforderung zum Passwort-Ändern
- - Feature-Übersicht
- - Direkte Links zur Anwendung
-
-Viele Grüße,
-NeoNail DB System", function($message) {
- $message->to("oliver@vogt.de.com", "Admin")
- ->subject("✅ NeoNail DB - Neuer User erstellt")
- ->from(config("mail.from.address"), config("mail.from.name"));
- });
-
- $successMessage = "Benutzer erfolgreich erstellt! Willkommens-E-Mail wurde gesendet.";
-
- } catch (\Exception $e) {
- // User wurde erstellt, aber E-Mail fehlgeschlagen
- \Log::error("Fehler beim Senden der Willkommens-E-Mail: " . $e->getMessage());
- $successMessage = "Benutzer erfolgreich erstellt! E-Mail konnte nicht gesendet werden.";
- }
-
- return redirect()->route("admin.users.index")
- ->with("success", $successMessage);
- }
-
- /**
- * Formular zum Bearbeiten eines Benutzers
- */
- public function editUser(User $user)
- {
- return view("admin.users.edit", compact("user"));
- }
-
- /**
- * Benutzer aktualisieren
- */
- public function updateUser(Request $request, User $user)
- {
- $request->validate([
- "name" => "required|string|max:255",
- "email" => "required|string|email|max:255|unique:users,email," . $user->id,
- "password" => "nullable|string|min:8|confirmed",
- ]);
-
- $user->name = $request->name;
- $user->email = $request->email;
- $user->is_admin = $request->has("is_admin");
-
- if ($request->filled("password")) {
- $user->password = Hash::make($request->password);
- }
-
- $user->save();
-
- return redirect()->route("admin.users.index")
- ->with("success", "Benutzer erfolgreich aktualisiert!");
- }
-
- /**
- * Benutzer löschen
- */
- public function destroyUser(User $user)
- {
- $userName = $user->name;
- $userEmail = $user->email;
-
- $user->delete();
-
- // Admin-Benachrichtigung über gelöschten User
- try {
- Mail::raw("Hallo Admin!
-
-Ein User wurde erfolgreich gelöscht.
-
-📋 Gelöschter User:
- - Name: {$userName}
- - E-Mail: {$userEmail}
- - Gelöscht: " . now() . "
-
-Viele Grüße,
-NeoNail DB System", function($message) {
- $message->to("oliver@vogt.de.com", "Admin")
- ->subject("🗑️ NeoNail DB - User gelöscht")
- ->from(config("mail.from.address"), config("mail.from.name"));
- });
- } catch (\Exception $e) {
- \Log::error("Fehler beim Senden der Lösch-Benachrichtigung: " . $e->getMessage());
- }
-
- return redirect()->route("admin.users.index")
- ->with("success", "Benutzer erfolgreich gelöscht!");
- }
-
- /**
- * Statistiken anzeigen
- */
- public function statistics()
- {
- $totalUsers = User::count();
- $totalNailPolishes = NailPolish::count();
- $usersWithCollections = User::has("nailPolishes")->count();
- $averageCollectionSize = User::withCount("nailPolishes")->avg("nail_polishes_count");
-
- $topUsers = User::withCount("nailPolishes")
- ->orderBy("nail_polishes_count", "desc")
- ->take(10)
- ->get();
-
- return view("admin.statistics", compact(
- "totalUsers",
- "totalNailPolishes",
- "usersWithCollections",
- "averageCollectionSize",
- "topUsers"
- ));
- }
-}';
-
-file_put_contents('app/Http/Controllers/AdminController.php', $controllerContent);
-echo " ✅ AdminController erweitert\n";
-
-// 2. E-Mail-Verzeichnis erstellen
-echo "2. 📁 E-Mail-Verzeichnis erstellen...\n";
-$emailDir = 'resources/views/emails';
-if (!is_dir($emailDir)) {
- mkdir($emailDir, 0755, true);
- echo " ✅ E-Mail-Verzeichnis erstellt: $emailDir\n";
-} else {
- echo " ℹ️ E-Mail-Verzeichnis existiert bereits: $emailDir\n";
-}
-
-// 3. Cache leeren
-echo "3. 🧹 Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 4. Test-E-Mail senden
-echo "4. 📧 Test-E-Mail senden...\n";
-try {
- require_once 'vendor/autoload.php';
-
- // Laravel Bootstrap
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Test-User erstellen
- $testUser = new \App\Models\User();
- $testUser->name = 'Test User';
- $testUser->email = 'test@example.com';
- $testUser->password = 'testpassword123';
- $testUser->is_admin = false;
-
- // Test-E-Mail senden
- $result = \Illuminate\Support\Facades\Mail::send('emails.welcome-user', [
- 'user' => $testUser,
- 'password' => 'testpassword123'
- ], function($message) use ($testUser) {
- $message->to('oliver@vogt.de.com', 'Admin')
- ->subject('🧪 Test: NeoNail DB Willkommens-E-Mail Template')
- ->from(config('mail.from.address'), config('mail.from.name'));
- });
-
- echo " ✅ Test-E-Mail erfolgreich gesendet!\n";
-
-} catch (Exception $e) {
- echo " ❌ Test-E-Mail Fehler: " . $e->getMessage() . "\n";
-}
-
-echo "\n✅ AdminController mit E-Mail-Versendung erweitert!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Gehen Sie zu: https://neonail.vogt.de.com/admin/users/create\n";
-echo "2. Erstellen Sie einen neuen User\n";
-echo "3. Der User erhält automatisch eine Willkommens-E-Mail\n";
-echo "4. Sie erhalten eine Admin-Bestätigung\n";
-echo "\n📧 Die Willkommens-E-Mail enthält:\n";
-echo "- Login-Daten (Website, E-Mail, Passwort)\n";
-echo "- Aufforderung zum Passwort-Ändern\n";
-echo "- Feature-Übersicht\n";
-echo "- Direkte Links zur Anwendung\n";
-echo "- Admin-spezifische Informationen (falls Admin)\n";
-?>
diff --git a/fix-admin-layout.php b/fix-admin-layout.php
deleted file mode 100644
index daa8e46..0000000
--- a/fix-admin-layout.php
+++ /dev/null
@@ -1,291 +0,0 @@
-
-
-
-
-
-
- @yield("title", "NeoNail Datenbank")
-
-
-
-
-
-
-
-
- @yield("styles")
-
-
-
-
-
-
-
-
- @if(session("success"))
-
- {{ session("success") }}
-
-
- @endif
-
- @if(session("error"))
-
- {{ session("error") }}
-
-
- @endif
-
- @yield("content")
-
-
-
-
-
-
- @yield("scripts")
-
-';
-
-file_put_contents('resources/views/layouts/app.blade.php', $layoutContent);
-echo " ✅ Layout-Datei korrigiert\n";
-
-// 2. User Model prüfen und korrigieren
-echo "2. 📋 User Model prüfen...\n";
-$userModelPath = 'app/Models/User.php';
-if (file_exists($userModelPath)) {
- $content = file_get_contents($userModelPath);
-
- // Prüfe ob isAdmin Methode korrekt ist
- if (strpos($content, 'public function isAdmin()') !== false) {
- echo " ✅ isAdmin() Methode vorhanden\n";
-
- // Prüfe ob die Methode korrekt implementiert ist
- if (strpos($content, '$this->is_admin || in_array($this->email') !== false) {
- echo " ✅ isAdmin() Methode korrekt implementiert\n";
- } else {
- echo " ⚠️ isAdmin() Methode könnte inkorrekt sein\n";
- }
- } else {
- echo " ❌ isAdmin() Methode fehlt\n";
- }
-
-} else {
- echo " ❌ User Model nicht gefunden\n";
-}
-
-// 3. Cache leeren
-echo "3. 🧹 Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 4. Admin-User Status prüfen
-echo "4. 👑 Admin-User Status prüfen...\n";
-try {
- require_once 'vendor/autoload.php';
-
- // Laravel Bootstrap
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Alle User prüfen
- $users = \App\Models\User::all();
-
- foreach ($users as $user) {
- $isAdmin = $user->isAdmin();
- $isAdminColumn = $user->is_admin;
- $email = $user->email;
-
- echo " 📧 $email:\n";
- echo " - is_admin Spalte: " . ($isAdminColumn ? 'Ja' : 'Nein') . "\n";
- echo " - isAdmin() Methode: " . ($isAdmin ? 'Ja' : 'Nein') . "\n";
-
- if ($isAdminColumn && !$isAdmin) {
- echo " ⚠️ WARNUNG: Spalte ist true, aber Methode gibt false zurück!\n";
- } elseif (!$isAdminColumn && $isAdmin) {
- echo " ℹ️ INFO: Spalte ist false, aber Methode gibt true zurück (Email-Check)\n";
- }
- echo "\n";
- }
-
-} catch (Exception $e) {
- echo " ❌ Fehler beim Prüfen der User: " . $e->getMessage() . "\n";
-}
-
-echo "\n✅ Admin-Layout korrigiert!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Melden Sie sich als neuer Admin an\n";
-echo "2. Prüfen Sie ob Admin-Menü sichtbar ist\n";
-echo "3. Prüfen Sie ob Admin-Badge neben dem Namen steht\n";
-echo "4. Versuchen Sie auf /admin/users zuzugreifen\n";
-echo "5. Falls Problem besteht, führen Sie php fix-admin-view.php aus\n";
-?>
diff --git a/fix-admin-role-database.php b/fix-admin-role-database.php
deleted file mode 100644
index 9f735df..0000000
--- a/fix-admin-role-database.php
+++ /dev/null
@@ -1,120 +0,0 @@
-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
- echo "1. 🔍 Prüfe users-Tabelle...\n";
-
- // Prüfe ob is_admin Spalte existiert
- $stmt = $pdo->query("PRAGMA table_info(users)");
- $columns = $stmt->fetchAll(PDO::FETCH_ASSOC);
- $hasAdminColumn = false;
-
- echo " 📋 Aktuelle Spalten in users-Tabelle:\n";
- foreach ($columns as $column) {
- echo " - {$column['name']} ({$column['type']})\n";
- if ($column['name'] === 'is_admin') {
- $hasAdminColumn = true;
- }
- }
-
- if (!$hasAdminColumn) {
- echo "\n2. ➕ Füge is_admin Spalte hinzu...\n";
-
- // Füge is_admin Spalte hinzu
- $pdo->exec("ALTER TABLE users ADD COLUMN is_admin BOOLEAN DEFAULT 0");
- echo " ✅ is_admin Spalte hinzugefügt\n";
-
- // Prüfe nochmal
- $stmt = $pdo->query("PRAGMA table_info(users)");
- $columns = $stmt->fetchAll(PDO::FETCH_ASSOC);
- $hasAdminColumn = false;
-
- foreach ($columns as $column) {
- if ($column['name'] === 'is_admin') {
- $hasAdminColumn = true;
- break;
- }
- }
-
- if ($hasAdminColumn) {
- echo " ✅ is_admin Spalte erfolgreich erstellt\n";
- } else {
- echo " ❌ is_admin Spalte konnte nicht erstellt werden\n";
- exit;
- }
- } else {
- echo "\n2. ℹ️ is_admin Spalte existiert bereits\n";
- }
-
- echo "\n3. 👑 Markiere bestehende Admin-User...\n";
-
- // Markiere bestehende Admin-User
- $stmt = $pdo->prepare("UPDATE users SET is_admin = 1 WHERE email IN (?, ?)");
- $stmt->execute(['admin@neonail.com', 'neueradmin@neonail.com']);
- $affectedRows = $stmt->rowCount();
- echo " ✅ $affectedRows Admin-User aktualisiert\n";
-
- echo "\n4. 📋 Zeige alle User mit Admin-Status...\n";
-
- // Zeige alle User
- $stmt = $pdo->query("SELECT id, name, email, is_admin FROM users ORDER BY is_admin DESC, name");
- $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
-
- foreach ($users as $user) {
- $adminStatus = $user['is_admin'] ? '👑 Admin' : '👤 User';
- echo " - {$user['name']} ({$user['email']}) - {$adminStatus}\n";
- }
-
- echo "\n5. 🧪 Test: Mache einen User zum Admin...\n";
-
- // Finde einen User, der noch kein Admin ist
- $stmt = $pdo->prepare("SELECT id, name, email FROM users WHERE is_admin = 0 LIMIT 1");
- $stmt->execute();
- $testUser = $stmt->fetch(PDO::FETCH_ASSOC);
-
- if ($testUser) {
- echo " 📝 Teste mit User: {$testUser['name']} ({$testUser['email']})\n";
-
- // Mache User zum Admin
- $stmt = $pdo->prepare("UPDATE users SET is_admin = 1 WHERE id = ?");
- $stmt->execute([$testUser['id']]);
-
- echo " ✅ User zum Admin gemacht\n";
-
- // Prüfe Änderung
- $stmt = $pdo->prepare("SELECT is_admin FROM users WHERE id = ?");
- $stmt->execute([$testUser['id']]);
- $result = $stmt->fetch(PDO::FETCH_ASSOC);
-
- if ($result['is_admin']) {
- echo " ✅ Admin-Status korrekt gesetzt\n";
- } else {
- echo " ❌ Admin-Status nicht korrekt gesetzt\n";
- }
-
- // Mache User wieder zurück
- $stmt = $pdo->prepare("UPDATE users SET is_admin = 0 WHERE id = ?");
- $stmt->execute([$testUser['id']]);
- echo " 🔄 User-Status zurückgesetzt\n";
-
- } else {
- echo " ℹ️ Alle User sind bereits Admins\n";
- }
-
- echo "\n✅ Admin-Rolle erfolgreich zur Datenbank hinzugefügt!\n";
- echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/admin/users\n";
- echo "📝 Sie können jetzt User zum Admin machen!\n";
-
-} catch (Exception $e) {
- echo "❌ Fehler: " . $e->getMessage() . "\n";
- echo "📍 Datei: " . $e->getFile() . ":" . $e->getLine() . "\n";
-}
-?>
diff --git a/fix-admin-role.php b/fix-admin-role.php
deleted file mode 100755
index 67a864e..0000000
--- a/fix-admin-role.php
+++ /dev/null
@@ -1,54 +0,0 @@
-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
- echo "🔧 Admin-Rolle hinzufügen...\n";
-
- // 1. Prüfe ob is_admin Spalte existiert
- $stmt = $pdo->query("PRAGMA table_info(users)");
- $columns = $stmt->fetchAll(PDO::FETCH_ASSOC);
- $hasAdminColumn = false;
-
- foreach ($columns as $column) {
- if ($column['name'] === 'is_admin') {
- $hasAdminColumn = true;
- break;
- }
- }
-
- if (!$hasAdminColumn) {
- // 2. Füge is_admin Spalte hinzu
- $pdo->exec("ALTER TABLE users ADD COLUMN is_admin BOOLEAN DEFAULT 0");
- echo "✅ is_admin Spalte hinzugefügt\n";
- } else {
- echo "ℹ️ is_admin Spalte existiert bereits\n";
- }
-
- // 3. Markiere bestehende Admin-User
- $stmt = $pdo->prepare("UPDATE users SET is_admin = 1 WHERE email IN (?, ?)");
- $stmt->execute(['admin@neonail.com', 'neueradmin@neonail.com']);
- echo "✅ Admin-User aktualisiert\n";
-
- // 4. Zeige alle User
- echo "\n📋 Alle User:\n";
- $stmt = $pdo->query("SELECT id, name, email, is_admin FROM users");
- $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
-
- foreach ($users as $user) {
- $adminStatus = $user['is_admin'] ? '👑 Admin' : '👤 User';
- echo "- {$user['name']} ({$user['email']}) - {$adminStatus}\n";
- }
-
- echo "\n✅ Admin-Rolle erfolgreich aktiviert!\n";
- echo "🔗 Gehen Sie zu: https://neonail.vogt.de.com/admin/users\n";
- echo "📝 Bearbeiten Sie einen User und aktivieren Sie die 'Admin-Rechte gewähren' Checkbox\n";
-
-} catch (Exception $e) {
- echo "❌ Fehler: " . $e->getMessage() . "\n";
-}
-?>
diff --git a/fix-admin-routes.php b/fix-admin-routes.php
deleted file mode 100644
index 5be868b..0000000
--- a/fix-admin-routes.php
+++ /dev/null
@@ -1,165 +0,0 @@
- $line) {
- if (strpos($line, 'admin') !== false || strpos($line, 'Admin') !== false) {
- $adminLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- echo " 📄 Admin-bezogene Zeilen in routes/web.php:\n";
- foreach ($adminLines as $line) {
- echo " $line\n";
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 2. Route-Liste generieren
-echo "\n2. 🛣️ Route-Liste generieren:\n";
-try {
- // Laravel Bootstrap
- require_once 'vendor/autoload.php';
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Route-Liste abrufen
- $routes = \Illuminate\Support\Facades\Route::getRoutes();
-
- $adminRoutes = [];
- foreach ($routes as $route) {
- $uri = $route->uri();
- $methods = $route->methods();
- $name = $route->getName();
-
- if (strpos($uri, 'admin') !== false || strpos($name, 'admin') !== false) {
- $adminRoutes[] = [
- 'uri' => $uri,
- 'methods' => $methods,
- 'name' => $name
- ];
- }
- }
-
- if (empty($adminRoutes)) {
- echo " ⚠️ Keine Admin-Routes gefunden\n";
- } else {
- echo " ✅ Admin-Routes gefunden:\n";
- foreach ($adminRoutes as $route) {
- $methods = implode('|', $route['methods']);
- $name = $route['name'] ?: 'kein Name';
- echo " $methods $uri ($name)\n";
- }
- }
-
-} catch (Exception $e) {
- echo " ❌ Fehler beim Abrufen der Routes: " . $e->getMessage() . "\n";
-}
-
-// 3. Admin-Routes manuell prüfen
-echo "\n3. 🔍 Admin-Routes manuell prüfen:\n";
-$routesPath = 'routes/web.php';
-if (file_exists($routesPath)) {
- $content = file_get_contents($routesPath);
-
- // Suche nach spezifischen Admin-Route-Patterns
- $adminPatterns = [
- 'admin/dashboard' => 'Dashboard Route',
- 'admin/users' => 'Users Index Route',
- 'admin/users/create' => 'Users Create Route',
- 'admin/users/{user}/edit' => 'Users Edit Route',
- 'admin/statistics' => 'Statistics Route',
- 'admin/users/{user}' => 'Users Show/Edit Route',
- 'nail-polishes' => 'Nail Polishes Route'
- ];
-
- foreach ($adminPatterns as $pattern => $description) {
- if (strpos($content, $pattern) !== false) {
- echo " ✅ Pattern gefunden: $pattern ($description)\n";
- } else {
- echo " ❌ Pattern fehlt: $pattern ($description)\n";
- }
- }
-
- // Prüfe Route-Gruppen
- if (strpos($content, "Route::middleware(['admin'])->prefix('admin')") !== false) {
- echo " ✅ Admin Route-Gruppe gefunden\n";
- } else {
- echo " ❌ Admin Route-Gruppe nicht gefunden\n";
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 4. Cache leeren und Routes neu laden
-echo "\n4. 🧹 Cache leeren und Routes neu laden...\n";
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 5. Admin-User Status prüfen
-echo "\n5. 👑 Admin-User Status prüfen:\n";
-try {
- // Alle User mit Admin-Rechten auflisten
- $users = \App\Models\User::all();
-
- foreach ($users as $user) {
- $isAdmin = $user->isAdmin();
- $isAdminColumn = $user->is_admin;
- $email = $user->email;
-
- if ($isAdmin || $isAdminColumn) {
- echo " 📧 $email:\n";
- echo " - is_admin Spalte: " . ($isAdminColumn ? 'Ja' : 'Nein') . "\n";
- echo " - isAdmin() Methode: " . ($isAdmin ? 'Ja' : 'Nein') . "\n";
- echo " - Admin-Status: " . ($isAdmin ? '✅ Admin' : '❌ Kein Admin') . "\n";
- echo "\n";
- }
- }
-
-} catch (Exception $e) {
- echo " ❌ Fehler beim Prüfen der User: " . $e->getMessage() . "\n";
-}
-
-// 6. Test-URLs generieren
-echo "\n6. 🔗 Test-URLs für Admin-Zugriffe:\n";
-$baseUrl = 'https://neonail.vogt.de.com';
-$adminUrls = [
- '/admin/dashboard' => 'Admin Dashboard',
- '/admin/users' => 'Admin Users',
- '/admin/users/create' => 'Admin Create User',
- '/admin/statistics' => 'Admin Statistics',
- '/nail-polishes' => 'Nail Polishes Management'
-];
-
-foreach ($adminUrls as $url => $description) {
- echo " 🔗 $baseUrl$url ($description)\n";
-}
-
-echo "\n✅ Admin-Routes Analyse abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Melden Sie sich als Admin an (oliver@vogt.de.com)\n";
-echo "2. Prüfen Sie ob Admin-Menü sichtbar ist\n";
-echo "3. Klicken Sie auf 'Admin' → 'Benutzer'\n";
-echo "4. Oder versuchen Sie direkt: $baseUrl/admin/users\n";
-echo "5. Falls 403 Fehler: Prüfen Sie ob User wirklich Admin ist\n";
-echo "\n📋 Falls Probleme bestehen:\n";
-echo "- Prüfen Sie Browser-Entwicklertools (F12) für Fehler\n";
-echo "- Schauen Sie in die Laravel-Logs: tail -f storage/logs/laravel.log\n";
-echo "- Teilen Sie eventuelle Fehlermeldungen mit\n";
-?>
diff --git a/fix-admin-view.php b/fix-admin-view.php
deleted file mode 100644
index 08c1415..0000000
--- a/fix-admin-view.php
+++ /dev/null
@@ -1,158 +0,0 @@
-make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Datenbankverbindung herstellen
- $users = \App\Models\User::all();
-
- foreach ($users as $user) {
- $isAdmin = $user->isAdmin();
- $isAdminColumn = $user->is_admin;
- $email = $user->email;
-
- echo " 📧 $email:\n";
- echo " - is_admin Spalte: " . ($isAdminColumn ? 'Ja' : 'Nein') . "\n";
- echo " - isAdmin() Methode: " . ($isAdmin ? 'Ja' : 'Nein') . "\n";
- echo " - Admin-Email Check: " . (in_array($email, ['admin@neonail.com', 'neueradmin@neonail.com']) ? 'Ja' : 'Nein') . "\n";
- echo "\n";
- }
-
-} catch (Exception $e) {
- echo " ❌ Fehler beim Prüfen der User: " . $e->getMessage() . "\n";
-}
-
-// 2. User Model prüfen
-echo "2. 📋 User Model prüfen:\n";
-$userModelPath = 'app/Models/User.php';
-if (file_exists($userModelPath)) {
- $content = file_get_contents($userModelPath);
-
- // Prüfe isAdmin Methode
- if (strpos($content, 'public function isAdmin()') !== false) {
- echo " ✅ isAdmin() Methode vorhanden\n";
- } else {
- echo " ❌ isAdmin() Methode fehlt\n";
- }
-
- // Prüfe is_admin in fillable
- if (strpos($content, "'is_admin'") !== false) {
- echo " ✅ is_admin in \$fillable vorhanden\n";
- } else {
- echo " ❌ is_admin nicht in \$fillable\n";
- }
-
- // Prüfe makeAdmin Methode
- if (strpos($content, 'public function makeAdmin()') !== false) {
- echo " ✅ makeAdmin() Methode vorhanden\n";
- } else {
- echo " ❌ makeAdmin() Methode fehlt\n";
- }
-
-} else {
- echo " ❌ User Model nicht gefunden\n";
-}
-
-// 3. AdminMiddleware prüfen
-echo "3. 🛡️ AdminMiddleware prüfen:\n";
-$middlewarePath = 'app/Http/Middleware/AdminMiddleware.php';
-if (file_exists($middlewarePath)) {
- $content = file_get_contents($middlewarePath);
-
- if (strpos($content, 'auth()->user()->isAdmin()') !== false) {
- echo " ✅ AdminMiddleware verwendet isAdmin() Methode\n";
- } else {
- echo " ❌ AdminMiddleware verwendet nicht isAdmin() Methode\n";
- }
-
-} else {
- echo " ❌ AdminMiddleware nicht gefunden\n";
-}
-
-// 4. Routes prüfen
-echo "4. 🛣️ Admin-Routes prüfen:\n";
-$routesPath = 'routes/web.php';
-if (file_exists($routesPath)) {
- $content = file_get_contents($routesPath);
-
- $adminRoutes = [
- 'admin/users',
- 'admin/dashboard',
- 'nail-polishes'
- ];
-
- foreach ($adminRoutes as $route) {
- if (strpos($content, $route) !== false) {
- echo " ✅ Route gefunden: $route\n";
- } else {
- echo " ❌ Route fehlt: $route\n";
- }
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 5. Layout prüfen
-echo "5. 🎨 Layout prüfen:\n";
-$layoutPath = 'resources/views/layouts/app.blade.php';
-if (file_exists($layoutPath)) {
- $content = file_get_contents($layoutPath);
-
- if (strpos($content, 'auth()->user()->isAdmin()') !== false) {
- echo " ✅ Layout verwendet isAdmin() für Admin-Menü\n";
- } else {
- echo " ❌ Layout verwendet nicht isAdmin() für Admin-Menü\n";
- }
-
-} else {
- echo " ❌ Layout-Datei nicht gefunden\n";
-}
-
-// 6. Cache leeren
-echo "6. 🧹 Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 7. Test-Admin erstellen
-echo "7. 👑 Test-Admin erstellen...\n";
-try {
- $testUser = \App\Models\User::where('email', 'testadmin@neonail.com')->first();
-
- if (!$testUser) {
- $testUser = new \App\Models\User();
- $testUser->name = 'Test Admin';
- $testUser->email = 'testadmin@neonail.com';
- $testUser->password = bcrypt('password123');
- $testUser->is_admin = true;
- $testUser->save();
- echo " ✅ Test-Admin erstellt: testadmin@neonail.com\n";
- } else {
- $testUser->is_admin = true;
- $testUser->save();
- echo " ✅ Test-Admin aktualisiert: testadmin@neonail.com\n";
- }
-
-} catch (Exception $e) {
- echo " ❌ Fehler beim Erstellen des Test-Admins: " . $e->getMessage() . "\n";
-}
-
-echo "\n✅ Admin-Ansicht Problem Analyse abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Melden Sie sich als neuer Admin an\n";
-echo "2. Prüfen Sie ob Admin-Menü sichtbar ist\n";
-echo "3. Versuchen Sie auf /admin/users zuzugreifen\n";
-echo "4. Falls Problem besteht, teilen Sie die Ausgabe mit\n";
-?>
diff --git a/fix-all-405-errors.sh b/fix-all-405-errors.sh
deleted file mode 100644
index a503001..0000000
--- a/fix-all-405-errors.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/bash
-
-echo "🔧 Fix: Alle HTTP 405 Method Not Allowed Fehler"
-echo "=============================================="
-
-# 1. Laravel Cache leeren
-echo "1. 🧹 Laravel Cache leeren..."
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo "⚠️ view:clear übersprungen"
-
-# 2. Bootstrap Cache leeren
-echo "2. 🗂️ Bootstrap Cache leeren..."
-rm -f bootstrap/cache/*.php 2>/dev/null || echo "⚠️ bootstrap/cache/*.php nicht gefunden"
-
-# 3. Route-Tests ausführen
-echo "3. 🧪 Route-Tests ausführen..."
-echo " - Create-Route Test:"
-php test-route-fix.php 2>/dev/null || echo "⚠️ test-route-fix.php übersprungen"
-
-echo " - Remove-Route Test:"
-php test-remove-fix.php 2>/dev/null || echo "⚠️ test-remove-fix.php übersprungen"
-
-# 4. Debug-Modus aktivieren
-echo "4. 🐛 Debug-Modus aktivieren..."
-if [ -f .env ]; then
- sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
- sed -i 's/APP_ENV=production/APP_ENV=local/' .env
- echo " ✅ Debug-Modus aktiviert"
-else
- echo " ❌ .env Datei nicht gefunden"
-fi
-
-# 5. Route-Liste anzeigen
-echo "5. 📋 Route-Liste prüfen..."
-php artisan route:list | grep -E "(create|remove|store)" 2>/dev/null || echo "⚠️ route:list übersprungen"
-
-echo ""
-echo "✅ Alle 405-Fehler behoben!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. Neuen Lack erstellen: https://neonail.vogt.de.com/create-nail-polish"
-echo "2. Lack entfernen: https://neonail.vogt.de.com/my-collection"
-echo "3. Admin-User verwalten: https://neonail.vogt.de.com/admin/users"
-echo ""
-echo "📝 Falls Probleme bestehen:"
-echo "- Prüfen Sie die Browser-Entwicklertools (F12)"
-echo "- Schauen Sie in storage/logs/laravel.log"
-echo "- Führen Sie php artisan route:list aus"
diff --git a/fix-all-forms-https.sh b/fix-all-forms-https.sh
deleted file mode 100755
index 810608d..0000000
--- a/fix-all-forms-https.sh
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/bash
-
-echo "🔒 Alle Formulare für HTTPS reparieren"
-echo "====================================="
-
-# 1. Laravel Cache komplett leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo "⚠️ view:clear übersprungen"
-
-# 2. .env für HTTPS erzwingen
-echo "📝 Erzwinge HTTPS in .env..."
-sed -i 's|APP_URL=http://|APP_URL=https://|' .env
-sed -i 's|APP_URL=https://192.168.30.81|APP_URL=https://neonail.vogt.de.com|' .env
-
-# 3. Session-Konfiguration für HTTPS
-echo "🔐 Konfiguriere Session für HTTPS..."
-cat > config/session.php << 'EOF'
- env('SESSION_DRIVER', 'file'),
- 'lifetime' => env('SESSION_LIFETIME', 120),
- 'expire_on_close' => false,
- 'encrypt' => false,
- 'files' => storage_path('framework/sessions'),
- 'connection' => env('SESSION_CONNECTION'),
- 'table' => 'sessions',
- 'store' => env('SESSION_STORE'),
- 'lottery' => [2, 100],
- 'cookie' => env(
- 'SESSION_COOKIE',
- Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
- ),
- 'path' => '/',
- 'domain' => env('SESSION_DOMAIN'),
- 'secure' => true,
- 'http_only' => true,
- 'same_site' => 'lax',
-];
-EOF
-
-# 4. AppServiceProvider für HTTPS erzwingen
-echo "⚙️ Konfiguriere AppServiceProvider für HTTPS..."
-cat > app/Providers/AppServiceProvider.php << 'EOF'
-";
- });
- }
-}
-EOF
-
-# 5. Apache neu laden
-echo "🔄 Lade Apache neu..."
-systemctl reload apache2
-
-# 6. Test
-echo "🧪 Teste HTTPS-Konfiguration..."
-curl -I https://neonail.vogt.de.com
-
-echo ""
-echo "✅ Alle Formulare für HTTPS repariert!"
-echo "📋 Testen Sie: https://neonail.vogt.de.com"
-echo ""
-echo "📋 Falls Warnung bleibt:"
-echo "1. Safari-Cache leeren (Cmd+Shift+R)"
-echo "2. Private-Fenster testen"
-echo "3. Safari-Einstellungen: Entwickler > Leere Caches"
-echo "4. Safari-Einstellungen: Datenschutz > Website-Daten verwalten"
-echo "5. Safari komplett neu starten"
diff --git a/fix-all-safari-warnings.sh b/fix-all-safari-warnings.sh
deleted file mode 100755
index 1e3c663..0000000
--- a/fix-all-safari-warnings.sh
+++ /dev/null
@@ -1,189 +0,0 @@
-#!/bin/bash
-
-echo "🛡️ Fix: Alle Safari Sicherheitswarnungen"
-echo "======================================="
-
-# 1. Alle Formulare mit HTTPS-URLs beheben
-echo "1. 🔒 Alle Formulare mit HTTPS beheben..."
-
-# Login-Formular
-if [ -f resources/views/auth/login.blade.php ]; then
- sed -i 's|action="{{ route('\''login'\'') }}"|action="https://neonail.vogt.de.com/login"|' resources/views/auth/login.blade.php
- echo " ✅ Login-Formular behoben"
-fi
-
-# Create Nail Polish Formular
-if [ -f resources/views/user-nail-polishes/create.blade.php ]; then
- sed -i 's|action="{{ route('\''user-nail-polishes.store'\'') }}"|action="https://neonail.vogt.de.com/create-nail-polish"|' resources/views/user-nail-polishes/create.blade.php
- echo " ✅ Create Nail Polish Formular behoben"
-fi
-
-# Remove Nail Polish Formular
-if [ -f resources/views/user-nail-polishes/index.blade.php ]; then
- sed -i 's|action="https://neonail.vogt.de.com/user-nail-polishes/|action="https://neonail.vogt.de.com/remove-from-collection/|' resources/views/user-nail-polishes/index.blade.php
- echo " ✅ Remove Nail Polish Formular behoben"
-fi
-
-# Admin Nail Polish Delete Formular
-if [ -f resources/views/nail-polishes/index.blade.php ]; then
- sed -i 's|action="{{ route('\''nail-polishes.destroy'\'', $nailPolish) }}"|action="https://neonail.vogt.de.com/nail-polishes/{{ $nailPolish->id }}"|' resources/views/nail-polishes/index.blade.php
- echo " ✅ Admin Nail Polish Delete Formular behoben"
-fi
-
-# Admin User Create Formular
-if [ -f resources/views/admin/users/create.blade.php ]; then
- sed -i 's|action="{{ route('\''admin.users.store'\'') }}"|action="https://neonail.vogt.de.com/admin/users"|' resources/views/admin/users/create.blade.php
- echo " ✅ Admin User Create Formular behoben"
-fi
-
-# Admin User Edit Formular
-if [ -f resources/views/admin/users/edit.blade.php ]; then
- sed -i 's|action="{{ route('\''admin.users.update'\'', $user) }}"|action="https://neonail.vogt.de.com/admin/users/{{ $user->id }}"|' resources/views/admin/users/edit.blade.php
- echo " ✅ Admin User Edit Formular behoben"
-fi
-
-# Admin User Delete Formular
-if [ -f resources/views/admin/users/index.blade.php ]; then
- sed -i 's|action="{{ route('\''admin.users.destroy'\'', $user) }}"|action="https://neonail.vogt.de.com/admin/users/{{ $user->id }}"|' resources/views/admin/users/index.blade.php
- echo " ✅ Admin User Delete Formular behoben"
-fi
-
-# 2. .env HTTPS-Einstellungen
-echo "2. 🔒 .env HTTPS-Einstellungen..."
-if [ -f .env ]; then
- sed -i 's|APP_URL=.*|APP_URL=https://neonail.vogt.de.com|' .env
- sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
- sed -i 's/APP_ENV=production/APP_ENV=local/' .env
-
- # HTTPS-spezifische Einstellungen
- grep -q "FORCE_HTTPS=true" .env || echo "FORCE_HTTPS=true" >> .env
- grep -q "SECURE_COOKIES=true" .env || echo "SECURE_COOKIES=true" >> .env
- grep -q "SESSION_SECURE_COOKIE=true" .env || echo "SESSION_SECURE_COOKIE=true" >> .env
- grep -q "SESSION_SAME_SITE=lax" .env || echo "SESSION_SAME_SITE=lax" >> .env
- grep -q "SESSION_HTTP_ONLY=true" .env || echo "SESSION_HTTP_ONLY=true" >> .env
-
- echo " ✅ .env HTTPS-Einstellungen aktualisiert"
-else
- echo " ❌ .env Datei nicht gefunden"
-fi
-
-# 3. Session-Konfiguration
-echo "3. 🍪 Session-Konfiguration..."
-if [ -f config/session.php ]; then
- sed -i "s/'secure' => false/'secure' => true/" config/session.php
- sed -i "s/'http_only' => false/'http_only' => true/" config/session.php
- echo " ✅ Session-Konfiguration aktualisiert"
-else
- echo " ❌ config/session.php nicht gefunden"
-fi
-
-# 4. CSRF-Konfiguration
-echo "4. 🔐 CSRF-Konfiguration..."
-if [ -f config/csrf.php ]; then
- sed -i "s/'secure' => false/'secure' => true/" config/csrf.php
- echo " ✅ CSRF-Konfiguration aktualisiert"
-else
- echo " ❌ config/csrf.php nicht gefunden"
-fi
-
-# 5. Minimale .htaccess mit HTTPS-Force
-echo "5. 🌐 .htaccess HTTPS-Force..."
-cat > public/.htaccess << 'EOF'
-
- RewriteEngine On
-
- # Force HTTPS
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
-
- # Handle Authorization Header
- RewriteCond %{HTTP:Authorization} .
- RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- # Redirect Trailing Slashes If Not A Folder...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_URI} (.+)/$
- RewriteRule ^ %1 [L,R=301]
-
- # Send Requests To Front Controller...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^ index.php [L]
-
-
-# Protect sensitive files
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-EOF
-
-echo " ✅ .htaccess HTTPS-Force erstellt"
-
-# 6. Laravel Cache leeren
-echo "6. 🧹 Laravel Cache leeren..."
-php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"
-php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"
-
-# 7. Test-Script erstellen
-echo "7. 🧪 Test-Script erstellen..."
-cat > test-all-forms.php << 'EOF'
- 'Login-Formular',
- 'resources/views/user-nail-polishes/create.blade.php' => 'Create Nail Polish',
- 'resources/views/user-nail-polishes/index.blade.php' => 'Remove Nail Polish',
- 'resources/views/nail-polishes/index.blade.php' => 'Admin Delete Nail Polish',
- 'resources/views/admin/users/create.blade.php' => 'Admin Create User',
- 'resources/views/admin/users/edit.blade.php' => 'Admin Edit User',
- 'resources/views/admin/users/index.blade.php' => 'Admin Delete User'
-];
-
-foreach ($forms as $file => $description) {
- if (file_exists($file)) {
- $content = file_get_contents($file);
- if (strpos($content, 'action="https://neonail.vogt.de.com') !== false) {
- echo " ✅ $description: HTTPS-URL gefunden\n";
- } else {
- echo " ❌ $description: Keine HTTPS-URL gefunden\n";
- }
- } else {
- echo " ❌ $description: Datei nicht gefunden\n";
- }
-}
-
-echo "\n✅ Alle Formulare getestet!\n";
-echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com\n";
-?>
-EOF
-
-echo " ✅ Test-Script erstellt"
-
-echo ""
-echo "✅ Alle Safari Sicherheitswarnungen behoben!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. Login: https://neonail.vogt.de.com/login"
-echo "2. Admin-Panel: https://neonail.vogt.de.com/admin/users"
-echo "3. Lack erstellen: https://neonail.vogt.de.com/create-nail-polish"
-echo ""
-echo "📝 Falls Warnungen bestehen:"
-echo "- Führen Sie php test-all-forms.php aus"
-echo "- Leeren Sie Browser-Cache"
-echo "- Prüfen Sie Browser-Entwicklertools (F12)"
diff --git a/fix-apache-documentroot.sh b/fix-apache-documentroot.sh
deleted file mode 100755
index fe60c76..0000000
--- a/fix-apache-documentroot.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-
-echo "🌐 Apache DocumentRoot korrigieren"
-echo "================================="
-
-# 1. Standard-Site deaktivieren
-echo "🔧 Deaktiviere Standard-Site..."
-a2dissite 000-default.conf 2>/dev/null || echo "⚠️ Standard-Site bereits deaktiviert"
-
-# 2. NeoNail-Site neu erstellen
-echo "📝 Erstelle NeoNail-Site neu..."
-cat > /etc/apache2/sites-available/neonail.conf << 'EOF'
-
- ServerName 192.168.30.81
- DocumentRoot /var/www/html/public
-
-
- AllowOverride All
- Require all granted
- Options Indexes FollowSymLinks
-
-
- # Sicherheit für sensible Dateien
-
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-
- ErrorLog ${APACHE_LOG_DIR}/neonail_error.log
- CustomLog ${APACHE_LOG_DIR}/neonail_access.log combined
-
-EOF
-
-# 3. NeoNail-Site aktivieren
-echo "✅ Aktiviere NeoNail-Site..."
-a2ensite neonail.conf
-
-# 4. Apache-Konfiguration testen
-echo "🔍 Teste Apache-Konfiguration..."
-apache2ctl configtest
-
-# 5. Apache neu laden
-echo "🔄 Lade Apache neu..."
-systemctl reload apache2
-
-# 6. Status prüfen
-echo "📊 Apache-Status..."
-systemctl status apache2 --no-pager -l
-
-# 7. Test
-echo "🧪 Teste Anwendung..."
-curl -I http://192.168.30.81
-
-echo ""
-echo "✅ Apache DocumentRoot korrigiert!"
-echo "📋 Testen Sie: http://192.168.30.81"
-echo ""
-echo "📋 Falls es nicht funktioniert:"
-echo "1. Apache-Logs: tail -f /var/log/apache2/neonail_error.log"
-echo "2. DocumentRoot prüfen: apache2ctl -S"
diff --git a/fix-apache-headers.sh b/fix-apache-headers.sh
deleted file mode 100755
index d3c0aa7..0000000
--- a/fix-apache-headers.sh
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/bash
-
-echo "🔧 Fix: Apache mod_headers aktivieren"
-echo "===================================="
-
-# 1. Prüfe verfügbare Apache-Module
-echo "1. 🔍 Verfügbare Apache-Module prüfen..."
-apache2ctl -M 2>/dev/null | grep -E "(headers|rewrite)" || echo " ⚠️ apache2ctl nicht verfügbar"
-
-# 2. Aktiviere mod_headers
-echo "2. 🔧 mod_headers aktivieren..."
-a2enmod headers 2>/dev/null || echo " ⚠️ a2enmod headers fehlgeschlagen"
-
-# 3. Aktiviere mod_rewrite (falls nicht aktiviert)
-echo "3. 🔧 mod_rewrite aktivieren..."
-a2enmod rewrite 2>/dev/null || echo " ⚠️ a2enmod rewrite fehlgeschlagen"
-
-# 4. Apache neu laden
-echo "4. 🔄 Apache neu laden..."
-systemctl reload apache2 2>/dev/null || service apache2 reload 2>/dev/null || echo " ⚠️ Apache reload fehlgeschlagen"
-
-# 5. Prüfe .htaccess Syntax
-echo "5. 🔍 .htaccess Syntax prüfen..."
-if [ -f public/.htaccess ]; then
- echo " 📋 public/.htaccess gefunden"
- echo " 📄 Header-Befehle in .htaccess:"
- grep -n "Header" public/.htaccess || echo " ⚠️ Keine Header-Befehle gefunden"
-else
- echo " ❌ public/.htaccess nicht gefunden"
-fi
-
-# 6. Alternative .htaccess ohne Header erstellen
-echo "6. 🔧 Alternative .htaccess erstellen..."
-cat > public/.htaccess.simple << 'EOF'
-
-
- Options -MultiViews -Indexes
-
-
- RewriteEngine On
-
- # Force HTTPS
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
-
- # Handle Authorization Header
- RewriteCond %{HTTP:Authorization} .
- RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- # Redirect Trailing Slashes If Not A Folder...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_URI} (.+)/$
- RewriteRule ^ %1 [L,R=301]
-
- # Send Requests To Front Controller...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^ index.php [L]
-
-
-# Protect sensitive files
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-EOF
-
-echo " ✅ Alternative .htaccess erstellt"
-
-# 7. Backup und ersetze .htaccess
-echo "7. 🔄 .htaccess ersetzen..."
-if [ -f public/.htaccess ]; then
- cp public/.htaccess public/.htaccess.backup
- echo " ✅ Backup erstellt: public/.htaccess.backup"
-fi
-
-cp public/.htaccess.simple public/.htaccess
-echo " ✅ .htaccess ersetzt"
-
-# 8. Test Apache-Konfiguration
-echo "8. 🧪 Apache-Konfiguration testen..."
-apache2ctl -t 2>/dev/null && echo " ✅ Apache-Konfiguration OK" || echo " ❌ Apache-Konfiguration fehlerhaft"
-
-echo ""
-echo "✅ Apache mod_headers Fix abgeschlossen!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. https://neonail.vogt.de.com"
-echo "2. Admin-Panel: https://neonail.vogt.de.com/admin/users"
-echo ""
-echo "📝 Falls Problem besteht:"
-echo "- Prüfen Sie: apache2ctl -M | grep headers"
-echo "- Schauen Sie in: /var/log/apache2/error.log"
diff --git a/fix-appserviceprovider-syntax.sh b/fix-appserviceprovider-syntax.sh
deleted file mode 100644
index 52f2a0b..0000000
--- a/fix-appserviceprovider-syntax.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-echo "🔧 Fix: AppServiceProvider Syntax-Fehler"
-echo "======================================="
-
-# 1. Syntax prüfen
-echo "1. 🔍 PHP Syntax prüfen..."
-php -l app/Providers/AppServiceProvider.php
-
-# 2. Laravel Cache leeren
-echo "2. 🧹 Laravel Cache leeren..."
-php artisan cache:clear
-php artisan config:clear
-php artisan route:clear
-php artisan view:clear
-
-# 3. HTTPS-Sicherheit testen
-echo "3. 🧪 HTTPS-Sicherheit testen..."
-php test-https-security.php
-
-echo ""
-echo "✅ AppServiceProvider Syntax-Fehler behoben!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. Admin-Panel: https://neonail.vogt.de.com/admin/users"
-echo "2. Lack löschen im Admin-Panel"
-echo "3. User bearbeiten/löschen"
diff --git a/fix-black-screen.sh b/fix-black-screen.sh
deleted file mode 100755
index 46e2475..0000000
--- a/fix-black-screen.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/bash
-
-# NeoNail DB - Black Screen Fix Script
-# Behebt schwarzen Bildschirm in Production
-
-echo "🖥️ NeoNail DB - Black Screen Fix"
-echo "================================="
-
-# Prüfe, ob wir im richtigen Verzeichnis sind
-if [ ! -f "artisan" ]; then
- echo "❌ Fehler: artisan Datei nicht gefunden. Bitte führen Sie das Script im Laravel-Root-Verzeichnis aus."
- exit 1
-fi
-
-echo "🔍 Schritt 1: Temporär Debug aktivieren..."
-sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
-php artisan config:clear
-
-echo "🔍 Schritt 2: Logs leeren..."
-> storage/logs/laravel.log
-
-echo "🔍 Schritt 3: Cache komplett leeren..."
-php artisan config:clear
-php artisan route:clear
-php artisan view:clear
-php artisan cache:clear
-php artisan optimize:clear
-
-echo "🔍 Schritt 4: Composer Autoload neu generieren..."
-composer dump-autoload --optimize
-
-echo "🔍 Schritt 5: Berechtigungen prüfen..."
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-chmod 664 database.sqlite
-chmod 644 .env
-
-echo "🔍 Schritt 6: Datenbank-Verbindung testen..."
-php artisan tinker --execute="echo 'DB Test: '; try { DB::connection()->getPdo(); echo 'OK'; } catch(Exception \$e) { echo 'FEHLER: ' . \$e->getMessage(); }"
-
-echo "🔍 Schritt 7: Routen testen..."
-php artisan route:list | head -10
-
-echo "🔍 Schritt 8: Storage-Link prüfen..."
-if [ ! -L "public/storage" ]; then
- echo "📎 Storage-Link erstellen..."
- php artisan storage:link
-else
- echo "✅ Storage-Link bereits vorhanden"
-fi
-
-echo "✅ Black Screen Fix abgeschlossen!"
-echo ""
-echo "🎯 Nächste Schritte:"
-echo "1. Seite aufrufen (sollte jetzt Fehlermeldung zeigen)"
-echo "2. Fehlermeldung notieren"
-echo "3. Fehler beheben"
-echo "4. APP_DEBUG=false setzen"
-echo ""
-echo "📋 Logs prüfen mit: tail -f storage/logs/laravel.log"
diff --git a/fix-https-config.sh b/fix-https-config.sh
deleted file mode 100755
index 3074d27..0000000
--- a/fix-https-config.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-
-echo "🔒 HTTPS-Konfiguration für NeoNail DB"
-echo "===================================="
-
-# 1. .env für HTTPS aktualisieren
-echo "📝 Aktualisiere .env für HTTPS..."
-sed -i 's|APP_URL=http://192.168.30.81|APP_URL=https://neonail.vogt.de.com|' .env
-sed -i 's|APP_URL=http://neonail.vogt.de.com|APP_URL=https://neonail.vogt.de.com|' .env
-
-# 2. Laravel Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-
-# 3. Trusted Proxies konfigurieren (falls hinter Proxy)
-echo "🔧 Konfiguriere Trusted Proxies..."
-cat > config/trusted-proxies.php << 'EOF'
- [
- '192.168.30.81',
- 'neonail.vogt.de.com',
- ],
- 'headers' => [
- 'X-Forwarded-For' => 'X_FORWARDED_FOR',
- 'X-Forwarded-Host' => 'X_FORWARDED_HOST',
- 'X-Forwarded-Proto' => 'X_FORWARDED_PROTO',
- ],
-];
-EOF
-
-# 4. Session-Konfiguration für HTTPS
-echo "🔐 Konfiguriere Sessions für HTTPS..."
-sed -i 's|SESSION_SECURE_COOKIE=false|SESSION_SECURE_COOKIE=true|' .env 2>/dev/null || echo "⚠️ SESSION_SECURE_COOKIE nicht gefunden"
-
-# 5. Test
-echo "🧪 Teste HTTPS-Konfiguration..."
-curl -I https://neonail.vogt.de.com
-
-echo ""
-echo "✅ HTTPS-Konfiguration abgeschlossen!"
-echo "📋 Testen Sie: https://neonail.vogt.de.com"
-echo ""
-echo "📋 Falls Probleme auftreten:"
-echo "1. Browser-Cache leeren"
-echo "2. Laravel-Logs prüfen: tail -f storage/logs/laravel.log"
diff --git a/fix-https-form-security.sh b/fix-https-form-security.sh
deleted file mode 100755
index 915a652..0000000
--- a/fix-https-form-security.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/bash
-
-echo "🔒 HTTPS-Formular-Sicherheit beheben"
-echo "==================================="
-
-# 1. .env für HTTPS konfigurieren
-echo "📝 Konfiguriere .env für HTTPS..."
-sed -i 's|APP_URL=http://|APP_URL=https://|' .env
-sed -i 's|APP_URL=https://192.168.30.81|APP_URL=https://neonail.vogt.de.com|' .env
-
-# 2. Session-Konfiguration für HTTPS
-echo "🔐 Konfiguriere Sessions für HTTPS..."
-cat >> .env << 'EOF'
-
-# HTTPS-Konfiguration
-SESSION_SECURE_COOKIE=true
-SESSION_SAME_SITE=lax
-EOF
-
-# 3. Laravel Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-
-# 4. CSRF-Token für HTTPS konfigurieren
-echo "🛡️ Konfiguriere CSRF für HTTPS..."
-cat > config/csrf.php << 'EOF'
- [
- 'secure' => true,
- 'same_site' => 'lax',
- ],
-];
-EOF
-
-# 5. Trusted Proxies konfigurieren
-echo "🌐 Konfiguriere Trusted Proxies..."
-cat > config/trusted-proxies.php << 'EOF'
- [
- '192.168.30.81',
- 'neonail.vogt.de.com',
- '127.0.0.1',
- '::1',
- ],
- 'headers' => [
- 'X-Forwarded-For' => 'X_FORWARDED_FOR',
- 'X-Forwarded-Host' => 'X_FORWARDED_HOST',
- 'X-Forwarded-Proto' => 'X_FORWARDED_PROTO',
- ],
-];
-EOF
-
-# 6. Test
-echo "🧪 Teste HTTPS-Konfiguration..."
-curl -I https://neonail.vogt.de.com
-
-echo ""
-echo "✅ HTTPS-Formular-Sicherheit behoben!"
-echo "📋 Testen Sie: https://neonail.vogt.de.com"
-echo ""
-echo "📋 Falls Warnungen bleiben:"
-echo "1. Browser-Cache leeren (Strg+F5)"
-echo "2. Private/Inkognito-Modus testen"
-echo "3. HTTPS-Zertifikat prüfen"
diff --git a/fix-image-display.sh b/fix-image-display.sh
deleted file mode 100755
index a7d10bb..0000000
--- a/fix-image-display.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash
-
-echo "🖼️ Bild-Anzeige reparieren"
-echo "========================="
-
-# 1. Storage Link prüfen und neu erstellen
-echo "🔗 Prüfe Storage Link..."
-if [ -L "public/storage" ]; then
- echo "✅ Storage Link existiert"
- ls -la public/storage
-else
- echo "❌ Storage Link fehlt - erstelle neu..."
- rm -f public/storage
- php artisan storage:link
-fi
-
-# 2. Storage-Verzeichnis-Berechtigungen
-echo "🔐 Setze Storage-Berechtigungen..."
-chmod -R 777 storage/
-chmod -R 755 public/storage/
-
-# 3. Bilder-Verzeichnis erstellen
-echo "📁 Erstelle Bilder-Verzeichnis..."
-mkdir -p storage/app/public/nail_polishes
-chmod -R 777 storage/app/public/nail_polishes
-
-# 4. Test-Bild erstellen (falls keine Bilder vorhanden)
-echo "🧪 Erstelle Test-Bild..."
-if [ ! -f "storage/app/public/nail_polishes/test.jpg" ]; then
- # Einfaches Test-Bild erstellen
- echo "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==" | base64 -d > storage/app/public/nail_polishes/test.jpg
- echo "✅ Test-Bild erstellt"
-fi
-
-# 5. Laravel Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-
-# 6. Test-URL prüfen
-echo "🧪 Teste Bild-URL..."
-curl -I https://neonail.vogt.de.com/storage/nail_polishes/test.jpg 2>/dev/null || echo "⚠️ Test-URL nicht erreichbar"
-
-# 7. Datenbank-Bilder prüfen
-echo "🗄️ Prüfe Datenbank-Bilder..."
-sqlite3 database.sqlite "SELECT id, name, image_path FROM nail_polishes WHERE image_path IS NOT NULL;" 2>/dev/null || echo "⚠️ Keine Bilder in Datenbank gefunden"
-
-echo ""
-echo "✅ Bild-Anzeige repariert!"
-echo "📋 Testen Sie: https://neonail.vogt.de.com/storage/nail_polishes/test.jpg"
-echo ""
-echo "📋 Falls Bilder immer noch nicht angezeigt werden:"
-echo "1. Browser-Cache leeren (Strg+F5)"
-echo "2. Private-Fenster testen"
-echo "3. Bild-URL direkt aufrufen"
diff --git a/fix-image-upload-fallback.php b/fix-image-upload-fallback.php
deleted file mode 100644
index b0fa419..0000000
--- a/fix-image-upload-fallback.php
+++ /dev/null
@@ -1,49 +0,0 @@
-hasFile('image') && $request->file('image')->isValid()) {
- $image = $request->file('image');
- $filename = 'nail_polish_' . time() . '_' . uniqid() . '.jpg';
- $path = 'nail_polishes/' . $filename;
-
- $manager = new ImageManager(new Driver());
- $img = $manager->read($image);
- $img->resize(400, 400, function ($constraint) {
- $constraint->aspectRatio();
- $constraint->upsize();
- });
-
- $imageData = $img->toJpeg(80)->toString();
- Storage::disk('public')->put($path, $imageData);
- $nailPolish->image_path = $path;
-}
-*/
-
-// Fallback-Code (ohne GD):
-if ($request->hasFile('image') && $request->file('image')->isValid()) {
- $image = $request->file('image');
-
- // Prüfe Dateigröße (max 2MB)
- if ($image->getSize() > 2 * 1024 * 1024) {
- return back()->with('error', 'Das Bild darf maximal 2MB groß sein.')->withInput();
- }
-
- // Prüfe Dateityp
- $allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'];
- if (!in_array($image->getMimeType(), $allowedTypes)) {
- return back()->with('error', 'Nur JPG, PNG und GIF Dateien sind erlaubt.')->withInput();
- }
-
- // Speichere Original-Bild ohne Verarbeitung
- $filename = 'nail_polish_' . time() . '_' . uniqid() . '.' . $image->getClientOriginalExtension();
- $path = 'nail_polishes/' . $filename;
-
- Storage::disk('public')->put($path, file_get_contents($image));
- $nailPolish->image_path = $path;
-}
-?>
diff --git a/fix-image-upload-final.php b/fix-image-upload-final.php
deleted file mode 100644
index 00b52b4..0000000
--- a/fix-image-upload-final.php
+++ /dev/null
@@ -1,282 +0,0 @@
-get("search");
-
- $query = $user->nailPolishes();
-
- if ($search) {
- $query->where(function($q) use ($search) {
- $q->where("name", "like", "%{$search}%")
- ->orWhere("number", "like", "%{$search}%");
- });
- }
-
- $nailPolishes = $query->orderBy("name")->paginate(12);
-
- return view("user-nail-polishes.index", compact("nailPolishes", "search"));
- }
-
- /**
- * Zeigt alle verfügbaren Lacke an, die der User noch nicht hat
- */
- public function available(Request $request)
- {
- $user = Auth::user();
- $search = $request->get("search");
-
- $query = NailPolish::whereNotIn("id", $user->nailPolishes()->pluck("nail_polishes.id"));
-
- if ($search) {
- $query->search($search);
- }
-
- $nailPolishes = $query->orderBy("name")->paginate(12);
-
- return view("user-nail-polishes.available", compact("nailPolishes", "search"));
- }
-
- /**
- * Fügt einen Lack zur Sammlung des Users hinzu
- */
- public function add(NailPolish $nailPolish)
- {
- $user = Auth::user();
-
- // Prüfe, ob der Lack bereits in der Sammlung ist
- if ($user->nailPolishes()->where("nail_polish_id", $nailPolish->id)->exists()) {
- return back()->with("warning", "Dieser Lack ist bereits in Ihrer Sammlung!");
- }
-
- $user->nailPolishes()->attach($nailPolish->id);
-
- return back()->with("success", "Lack \"{$nailPolish->name}\" wurde zu Ihrer Sammlung hinzugefügt!");
- }
-
- /**
- * Entfernt einen Lack aus der Sammlung des Users
- */
- public function remove(NailPolish $nailPolish)
- {
- try {
- $user = Auth::user();
-
- // Prüfe, ob der Lack in der Sammlung ist
- if (!$user->nailPolishes()->where("nail_polish_id", $nailPolish->id)->exists()) {
- return back()->with("warning", "Dieser Lack ist nicht in Ihrer Sammlung!");
- }
-
- $user->nailPolishes()->detach($nailPolish->id);
-
- return back()->with("success", "Lack \"{$nailPolish->name}\" wurde aus Ihrer Sammlung entfernt!");
-
- } catch (\Exception $e) {
- \Log::error("Fehler beim Entfernen des Lackes: " . $e->getMessage());
- return back()->with("error", "Fehler beim Entfernen des Lackes. Bitte versuchen Sie es erneut.");
- }
- }
-
- /**
- * Zeigt das Formular zum Erstellen eines neuen Lackes
- */
- public function create()
- {
- return view("user-nail-polishes.create");
- }
-
- /**
- * Speichert einen neuen Lack (wird automatisch zum Hauptkatalog hinzugefügt)
- */
- public function store(Request $request)
- {
- $request->validate([
- "name" => "required|string|max:255",
- "number" => "required|string|max:50",
- "image" => "nullable|image|max:10240", // Max 10MB
- ], [
- "name.required" => "Der Name des Lackes ist erforderlich.",
- "number.required" => "Die Nummer des Lackes ist erforderlich.",
- "image.image" => "Die Datei muss ein Bild sein.",
- "image.max" => "Das Bild darf maximal 10MB groß sein.",
- ]);
-
- try {
- $nailPolish = new NailPolish();
- $nailPolish->name = trim($request->name);
- $nailPolish->number = trim($request->number);
-
- // Vereinfachte Bildverarbeitung ohne Intervention Image
- if ($request->hasFile("image") && $request->file("image")->isValid()) {
- $image = $request->file("image");
-
- // Erstelle einen eindeutigen Dateinamen
- $filename = "nail_polish_" . time() . "_" . uniqid() . "." . $image->getClientOriginalExtension();
- $path = "nail_polishes/" . $filename;
-
- // Speichere das Bild direkt ohne Verarbeitung
- Storage::disk("public")->putFileAs("nail_polishes", $image, $filename);
- $nailPolish->image_path = $path;
-
- \Log::info("Bild erfolgreich gespeichert: " . $path);
- }
-
- $nailPolish->save();
-
- // Füge den Lack automatisch zur Sammlung des Users hinzu
- $user = Auth::user();
- $user->nailPolishes()->attach($nailPolish->id);
-
- return redirect()->route("user-nail-polishes.index")
- ->with("success", "Lack \"{$nailPolish->name}\" wurde erfolgreich erstellt und zu Ihrer Sammlung hinzugefügt!");
-
- } catch (\Exception $e) {
- \Log::error("Fehler beim Erstellen des Lackes: " . $e->getMessage());
- return back()->with("error", "Fehler beim Erstellen des Lackes: " . $e->getMessage())
- ->withInput();
- }
- }
-
- /**
- * Zeigt die Sammlung eines bestimmten Users (für Admin)
- */
- public function showUserCollection(User $user)
- {
- $nailPolishes = $user->nailPolishes()->orderBy("name")->paginate(12);
-
- return view("user-nail-polishes.show-user", compact("user", "nailPolishes"));
- }
-}';
-
-file_put_contents('app/Http/Controllers/UserNailPolishController.php', $controllerContent);
-echo " ✅ Controller mit vereinfachtem Upload erstellt\n";
-
-// 2. Storage-Verzeichnisse erstellen
-echo "2. 📁 Storage-Verzeichnisse erstellen...\n";
-$directories = [
- 'storage/app/public',
- 'storage/app/public/nail_polishes'
-];
-
-foreach ($directories as $dir) {
- if (!is_dir($dir)) {
- mkdir($dir, 0755, true);
- echo " ✅ Verzeichnis erstellt: $dir\n";
- } else {
- echo " ℹ️ Verzeichnis existiert bereits: $dir\n";
- }
-}
-
-// 3. Berechtigungen setzen
-echo "3. 🔐 Berechtigungen setzen...\n";
-system('chmod -R 755 storage/');
-system('chown -R www-data:www-data storage/ 2>/dev/null || echo " ⚠️ chown fehlgeschlagen"');
-echo " ✅ Berechtigungen gesetzt\n";
-
-// 4. Storage Link erstellen
-echo "4. 🔗 Storage Link erstellen...\n";
-if (file_exists('public/storage')) {
- if (is_dir('public/storage')) {
- system('rm -rf public/storage');
- }
-}
-system('ln -sf ../storage/app/public public/storage');
-echo " ✅ Storage Link erstellt\n";
-
-// 5. Laravel Cache leeren
-echo "5. 🧹 Laravel Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 6. Test-Bild erstellen
-echo "6. 🖼️ Test-Bild erstellen...\n";
-$testImagePath = 'storage/app/public/nail_polishes/test.jpg';
-if (extension_loaded('gd')) {
- $image = imagecreate(100, 100);
- $bgColor = imagecolorallocate($image, 255, 255, 255);
- $textColor = imagecolorallocate($image, 0, 0, 0);
- imagestring($image, 5, 10, 40, 'TEST', $textColor);
-
- if (imagejpeg($image, $testImagePath, 80)) {
- echo " ✅ Test-Bild erstellt: $testImagePath\n";
- } else {
- echo " ❌ Test-Bild erstellen fehlgeschlagen\n";
- }
-
- imagedestroy($image);
-} else {
- echo " ❌ GD Extension nicht verfügbar\n";
-}
-
-// 7. Upload-Limits in .htaccess prüfen
-echo "7. 📏 Upload-Limits prüfen...\n";
-$htaccessPath = 'public/.htaccess';
-if (file_exists($htaccessPath)) {
- $htaccessContent = file_get_contents($htaccessPath);
-
- $requiredSettings = [
- 'upload_max_filesize 10M',
- 'post_max_size 10M',
- 'max_file_uploads 20',
- 'memory_limit 256M'
- ];
-
- $missingSettings = [];
- foreach ($requiredSettings as $setting) {
- if (strpos($htaccessContent, $setting) === false) {
- $missingSettings[] = $setting;
- }
- }
-
- if (empty($missingSettings)) {
- echo " ✅ Alle Upload-Limits in .htaccess vorhanden\n";
- } else {
- echo " ⚠️ Fehlende Upload-Limits: " . implode(', ', $missingSettings) . "\n";
-
- // Füge fehlende Settings hinzu
- $uploadSettings = "\n# Upload-Limits für Bild-Upload\n";
- foreach ($missingSettings as $setting) {
- $uploadSettings .= "php_value " . $setting . "\n";
- }
-
- $htaccessContent .= $uploadSettings;
- file_put_contents($htaccessPath, $htaccessContent);
- echo " ✅ Upload-Limits zu .htaccess hinzugefügt\n";
- }
-} else {
- echo " ❌ .htaccess nicht gefunden\n";
-}
-
-echo "\n✅ Finales Bild-Upload-System erstellt!\n";
-echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/create-nail-polish\n";
-echo "📝 Das System speichert Bilder jetzt direkt ohne Verarbeitung\n";
-echo "📋 Falls Upload immer noch fehlschlägt:\n";
-echo "- Prüfen Sie die Laravel-Logs: tail -f storage/logs/laravel.log\n";
-echo "- Testen Sie mit einem kleinen Bild (< 1MB)\n";
-echo "- Prüfen Sie Browser-Entwicklertools (F12) für Netzwerk-Fehler\n";
-?>
diff --git a/fix-image-upload-simple.php b/fix-image-upload-simple.php
deleted file mode 100644
index dfc9f9b..0000000
--- a/fix-image-upload-simple.php
+++ /dev/null
@@ -1,222 +0,0 @@
-get("search");
-
- $query = $user->nailPolishes();
-
- if ($search) {
- $query->where(function($q) use ($search) {
- $q->where("name", "like", "%{$search}%")
- ->orWhere("number", "like", "%{$search}%");
- });
- }
-
- $nailPolishes = $query->orderBy("name")->paginate(12);
-
- return view("user-nail-polishes.index", compact("nailPolishes", "search"));
- }
-
- /**
- * Zeigt alle verfügbaren Lacke an, die der User noch nicht hat
- */
- public function available(Request $request)
- {
- $user = Auth::user();
- $search = $request->get("search");
-
- $query = NailPolish::whereNotIn("id", $user->nailPolishes()->pluck("nail_polishes.id"));
-
- if ($search) {
- $query->search($search);
- }
-
- $nailPolishes = $query->orderBy("name")->paginate(12);
-
- return view("user-nail-polishes.available", compact("nailPolishes", "search"));
- }
-
- /**
- * Fügt einen Lack zur Sammlung des Users hinzu
- */
- public function add(NailPolish $nailPolish)
- {
- $user = Auth::user();
-
- // Prüfe, ob der Lack bereits in der Sammlung ist
- if ($user->nailPolishes()->where("nail_polish_id", $nailPolish->id)->exists()) {
- return back()->with("warning", "Dieser Lack ist bereits in Ihrer Sammlung!");
- }
-
- $user->nailPolishes()->attach($nailPolish->id);
-
- return back()->with("success", "Lack \"{$nailPolish->name}\" wurde zu Ihrer Sammlung hinzugefügt!");
- }
-
- /**
- * Entfernt einen Lack aus der Sammlung des Users
- */
- public function remove(NailPolish $nailPolish)
- {
- try {
- $user = Auth::user();
-
- // Prüfe, ob der Lack in der Sammlung ist
- if (!$user->nailPolishes()->where("nail_polish_id", $nailPolish->id)->exists()) {
- return back()->with("warning", "Dieser Lack ist nicht in Ihrer Sammlung!");
- }
-
- $user->nailPolishes()->detach($nailPolish->id);
-
- return back()->with("success", "Lack \"{$nailPolish->name}\" wurde aus Ihrer Sammlung entfernt!");
-
- } catch (\Exception $e) {
- \Log::error("Fehler beim Entfernen des Lackes: " . $e->getMessage());
- return back()->with("error", "Fehler beim Entfernen des Lackes. Bitte versuchen Sie es erneut.");
- }
- }
-
- /**
- * Zeigt das Formular zum Erstellen eines neuen Lackes
- */
- public function create()
- {
- return view("user-nail-polishes.create");
- }
-
- /**
- * Speichert einen neuen Lack (wird automatisch zum Hauptkatalog hinzugefügt)
- */
- public function store(Request $request)
- {
- $request->validate([
- "name" => "required|string|max:255",
- "number" => "required|string|max:50",
- "image" => "nullable|image|max:10240", // Max 10MB
- ], [
- "name.required" => "Der Name des Lackes ist erforderlich.",
- "number.required" => "Die Nummer des Lackes ist erforderlich.",
- "image.image" => "Die Datei muss ein Bild sein.",
- "image.max" => "Das Bild darf maximal 10MB groß sein.",
- ]);
-
- try {
- $nailPolish = new NailPolish();
- $nailPolish->name = trim($request->name);
- $nailPolish->number = trim($request->number);
-
- // Vereinfachte Bildverarbeitung ohne Intervention Image
- if ($request->hasFile("image") && $request->file("image")->isValid()) {
- $image = $request->file("image");
-
- // Erstelle einen eindeutigen Dateinamen
- $filename = "nail_polish_" . time() . "_" . uniqid() . "." . $image->getClientOriginalExtension();
- $path = "nail_polishes/" . $filename;
-
- // Speichere das Bild direkt ohne Verarbeitung
- Storage::disk("public")->putFileAs("nail_polishes", $image, $filename);
- $nailPolish->image_path = $path;
-
- \Log::info("Bild erfolgreich gespeichert: " . $path);
- }
-
- $nailPolish->save();
-
- // Füge den Lack automatisch zur Sammlung des Users hinzu
- $user = Auth::user();
- $user->nailPolishes()->attach($nailPolish->id);
-
- return redirect()->route("user-nail-polishes.index")
- ->with("success", "Lack \"{$nailPolish->name}\" wurde erfolgreich erstellt und zu Ihrer Sammlung hinzugefügt!");
-
- } catch (\Exception $e) {
- \Log::error("Fehler beim Erstellen des Lackes: " . $e->getMessage());
- return back()->with("error", "Fehler beim Erstellen des Lackes: " . $e->getMessage())
- ->withInput();
- }
- }
-
- /**
- * Zeigt die Sammlung eines bestimmten Users (für Admin)
- */
- public function showUserCollection(User $user)
- {
- $nailPolishes = $user->nailPolishes()->orderBy("name")->paginate(12);
-
- return view("user-nail-polishes.show-user", compact("user", "nailPolishes"));
- }
-}';
-
-file_put_contents('app/Http/Controllers/UserNailPolishController.php', $controllerContent);
-echo " ✅ Controller mit vereinfachtem Upload erstellt\n";
-
-// 2. Storage-Verzeichnisse erstellen
-echo "2. 📁 Storage-Verzeichnisse erstellen...\n";
-$directories = [
- 'storage/app/public',
- 'storage/app/public/nail_polishes'
-];
-
-foreach ($directories as $dir) {
- if (!is_dir($dir)) {
- mkdir($dir, 0755, true);
- echo " ✅ Verzeichnis erstellt: $dir\n";
- } else {
- echo " ℹ️ Verzeichnis existiert bereits: $dir\n";
- }
-}
-
-// 3. Berechtigungen setzen
-echo "3. 🔐 Berechtigungen setzen...\n";
-system('chmod -R 755 storage/');
-system('chown -R www-data:www-data storage/ 2>/dev/null || echo " ⚠️ chown fehlgeschlagen"');
-echo " ✅ Berechtigungen gesetzt\n";
-
-// 4. Storage Link erstellen
-echo "4. 🔗 Storage Link erstellen...\n";
-if (file_exists('public/storage')) {
- if (is_dir('public/storage')) {
- system('rm -rf public/storage');
- }
-}
-system('ln -sf ../storage/app/public public/storage');
-echo " ✅ Storage Link erstellt\n";
-
-// 5. Laravel Cache leeren
-echo "5. 🧹 Laravel Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-echo "\n✅ Vereinfachtes Bild-Upload-System erstellt!\n";
-echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/create-nail-polish\n";
-echo "📝 Das System speichert Bilder jetzt direkt ohne Verarbeitung\n";
-echo "📋 Falls Upload immer noch fehlschlägt:\n";
-echo "- Führen Sie php debug-image-upload.php aus\n";
-echo "- Prüfen Sie die Laravel-Logs\n";
-echo "- Testen Sie mit einem kleinen Bild (< 1MB)\n";
-?>
diff --git a/fix-image-urls.php b/fix-image-urls.php
deleted file mode 100644
index b75346e..0000000
--- a/fix-image-urls.php
+++ /dev/null
@@ -1,60 +0,0 @@
-exists($imagePath)) {
- return null;
- }
-
- // Erstelle die URL
- $url = \Storage::disk('public')->url($imagePath);
-
- // Stelle sicher, dass HTTPS verwendet wird
- if (strpos($url, 'http://') === 0) {
- $url = str_replace('http://', 'https://', $url);
- }
-
- return $url;
- }
-
- public static function getImageUrlOrPlaceholder($imagePath, $size = '400x400')
- {
- $url = self::getImageUrl($imagePath);
-
- if ($url) {
- return $url;
- }
-
- // Fallback zu einem Placeholder-Bild
- return "https://via.placeholder.com/{$size}/cccccc/666666?text=Kein+Bild";
- }
-}
-
-// In der View verwenden:
-// {{ \App\Helpers\ImageHelper::getImageUrlOrPlaceholder($nailPolish->image_path) }}
-
-// Oder als Blade-Directive in AppServiceProvider.php registrieren:
-/*
-public function boot()
-{
- Blade::directive('nailPolishImage', function ($expression) {
- return "";
- });
-}
-*/
-
-// Dann in der View:
-// @nailPolishImage($nailPolish->image_path)
-?>
diff --git a/fix-laravel-setup.sh b/fix-laravel-setup.sh
deleted file mode 100755
index 5dc3db6..0000000
--- a/fix-laravel-setup.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-
-echo "🔧 Laravel Setup Reparieren"
-echo "==========================="
-
-# 1. Vendor-Ordner prüfen
-echo "📦 Prüfe vendor/ Ordner..."
-if [ ! -d "vendor" ]; then
- echo "❌ vendor/ Ordner nicht gefunden!"
- echo "📋 Bitte laden Sie den vendor/ Ordner hoch oder führen Sie composer install aus"
- exit 1
-fi
-
-# 2. Composer autoload neu generieren
-echo "🔄 Generiere Composer autoload neu..."
-if command -v composer &> /dev/null; then
- composer dump-autoload --optimize
-elif [ -f "composer.phar" ]; then
- php composer.phar dump-autoload --optimize
-else
- echo "⚠️ Composer nicht verfügbar, überspringe autoload"
-fi
-
-# 3. Laravel Cache leeren
-echo "🗑️ Leere Laravel Cache..."
-php artisan config:clear
-php artisan route:clear
-php artisan view:clear
-php artisan cache:clear
-
-# 4. Laravel neu initialisieren
-echo "⚙️ Initialisiere Laravel neu..."
-php artisan config:cache
-php artisan route:cache
-php artisan view:cache
-
-# 5. Berechtigungen setzen
-echo "🔐 Setze Berechtigungen..."
-chmod -R 755 vendor/
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-
-# 6. .env prüfen
-echo "📝 Prüfe .env Datei..."
-if [ ! -f ".env" ]; then
- echo "❌ .env Datei nicht gefunden!"
- echo "📋 Kopieren Sie env-production-example.txt zu .env"
- exit 1
-fi
-
-echo ""
-echo "✅ Laravel Setup repariert!"
-echo "📋 Testen Sie jetzt: php artisan --version"
diff --git a/fix-logout-final.php b/fix-logout-final.php
deleted file mode 100644
index 80c7290..0000000
--- a/fix-logout-final.php
+++ /dev/null
@@ -1,110 +0,0 @@
-/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 3. Layout nochmal prüfen
-echo "\n3. 🎨 Layout final prüfen...\n";
-if (file_exists($layoutPath)) {
- $content = file_get_contents($layoutPath);
-
- // Suche nach Logout-Form
- if (strpos($content, 'logout-form') !== false) {
- echo " ✅ Logout-Form gefunden\n";
-
- // Zeige Logout-Form Details
- $lines = explode("\n", $content);
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'logout') !== false) {
- echo " 📋 Zeile " . ($lineNumber + 1) . ": " . trim($line) . "\n";
- }
- }
- } else {
- echo " ❌ Logout-Form nicht gefunden\n";
- }
-
-} else {
- echo " ❌ Layout-Datei nicht gefunden\n";
-}
-
-// 4. JavaScript prüfen
-echo "\n4. 🔧 JavaScript prüfen...\n";
-if (file_exists($layoutPath)) {
- $content = file_get_contents($layoutPath);
-
- // Suche nach onclick Event
- if (strpos($content, 'onclick="event.preventDefault(); document.getElementById("logout-form").submit();"') !== false) {
- echo " ✅ JavaScript Event Handler gefunden\n";
- } else {
- echo " ❌ JavaScript Event Handler nicht gefunden\n";
- }
-
- // Suche nach Bootstrap JS
- if (strpos($content, 'bootstrap.bundle.min.js') !== false) {
- echo " ✅ Bootstrap JS geladen\n";
- } else {
- echo " ❌ Bootstrap JS nicht geladen\n";
- }
-
-} else {
- echo " ❌ Layout-Datei nicht gefunden\n";
-}
-
-// 5. Test-Anleitung
-echo "\n5. 🧪 Test-Anleitung...\n";
-echo " 📋 1. Öffnen Sie: https://neonail.vogt.de.com\n";
-echo " 📋 2. Melden Sie sich an\n";
-echo " 📋 3. Klicken Sie auf Ihren Benutzernamen (oben rechts)\n";
-echo " 📋 4. Wählen Sie 'Abmelden' aus dem Dropdown\n";
-echo " 📋 5. Sie sollten zur Login-Seite weitergeleitet werden\n";
-echo "\n 🔍 Falls Problem besteht:\n";
-echo " 📋 - Öffnen Sie Browser-Entwicklertools (F12)\n";
-echo " 📋 - Gehen Sie zu Console-Tab\n";
-echo " 📋 - Klicken Sie auf Abmelden\n";
-echo " 📋 - Schauen Sie nach JavaScript-Fehlern\n";
-echo " 📋 - Gehen Sie zu Network-Tab\n";
-echo " 📋 - Schauen Sie welche URL aufgerufen wird\n";
-
-echo "\n✅ Logout-Problem final behoben!\n";
-echo "🔗 Testen Sie jetzt das Logout und teilen Sie mit:\n";
-echo "1. Funktioniert das Logout jetzt?\n";
-echo "2. Werden Sie zur Login-Seite weitergeleitet?\n";
-echo "3. Falls nicht: Welche Fehlermeldungen sehen Sie?\n";
-?>
diff --git a/fix-logout-route.php b/fix-logout-route.php
deleted file mode 100644
index 51d989b..0000000
--- a/fix-logout-route.php
+++ /dev/null
@@ -1,194 +0,0 @@
-/dev/null || echo " ⚠️ composer dump-autoload übersprungen"');
-echo " ✅ Autoload neu generiert\n";
-
-// 3. Laravel Cache komplett leeren
-echo "\n3. 🧹 Laravel Cache komplett leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-system('php artisan optimize:clear 2>/dev/null || echo " ⚠️ optimize:clear übersprungen"');
-echo " ✅ Laravel Cache geleert\n";
-
-// 4. Routes-Datei prüfen und korrigieren
-echo "\n4. 🛣️ Routes-Datei prüfen...\n";
-$routesPath = 'routes/web.php';
-if (file_exists($routesPath)) {
- $content = file_get_contents($routesPath);
-
- // Zeige alle Logout-bezogenen Zeilen
- $lines = explode("\n", $content);
- $logoutLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'logout') !== false) {
- $logoutLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- if (!empty($logoutLines)) {
- echo " ✅ Logout-Routes gefunden:\n";
- foreach ($logoutLines as $line) {
- echo " 📋 $line\n";
- }
- } else {
- echo " ❌ Keine Logout-Routes gefunden\n";
- }
-
- // Prüfe ob die Route korrekt ist
- if (strpos($content, "Route::post('/logout', [LoginController::class, 'logout'])->name('logout')->middleware('auth');") !== false) {
- echo " ✅ Logout-Route ist korrekt definiert\n";
- } else {
- echo " ❌ Logout-Route ist nicht korrekt definiert\n";
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 5. LoginController prüfen
-echo "\n5. 🔐 LoginController prüfen...\n";
-$controllerPath = 'app/Http/Controllers/Auth/LoginController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
-
- if (strpos($content, 'public function logout') !== false) {
- echo " ✅ Logout-Methode vorhanden\n";
-
- // Zeige Logout-Methode
- $lines = explode("\n", $content);
- $inLogoutMethod = false;
- $methodLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'public function logout') !== false) {
- $inLogoutMethod = true;
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- } elseif ($inLogoutMethod && strpos($line, 'public function') !== false) {
- $inLogoutMethod = false;
- } elseif ($inLogoutMethod) {
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- echo " 📋 Logout-Methode:\n";
- foreach ($methodLines as $line) {
- echo " $line\n";
- }
-
- } else {
- echo " ❌ Logout-Methode nicht gefunden\n";
- }
-
-} else {
- echo " ❌ LoginController nicht gefunden\n";
-}
-
-// 6. Route-Liste neu generieren
-echo "\n6. 🛣️ Route-Liste neu generieren...\n";
-try {
- require_once 'vendor/autoload.php';
-
- // Laravel Bootstrap
- $app = require_once 'bootstrap/app.php';
- $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- // Route-Liste abrufen
- $routes = \Illuminate\Support\Facades\Route::getRoutes();
-
- $logoutRoutes = [];
- foreach ($routes as $route) {
- $uri = $route->uri();
- $methods = $route->methods();
- $name = $route->getName();
-
- if (strpos($uri, 'logout') !== false || strpos($name, 'logout') !== false) {
- $logoutRoutes[] = [
- 'uri' => $uri,
- 'methods' => $methods,
- 'name' => $name
- ];
- }
- }
-
- if (empty($logoutRoutes)) {
- echo " ❌ Keine Logout-Routes in Laravel registriert\n";
- } else {
- echo " ✅ Logout-Routes in Laravel gefunden:\n";
- foreach ($logoutRoutes as $route) {
- $methods = implode('|', $route['methods']);
- $name = $route['name'] ?: 'kein Name';
- echo " 📋 $methods $uri ($name)\n";
- }
- }
-
-} catch (Exception $e) {
- echo " ❌ Fehler beim Abrufen der Routes: " . $e->getMessage() . "\n";
-}
-
-// 7. Test-Logout-Form erstellen
-echo "\n7. 🧪 Test-Logout-Form erstellen...\n";
-$testForm = '
-
-
- Logout Test
-
-
-
- Logout Test
-
- Route: {{ route("logout") }}
-
-';
-
-file_put_contents('public/logout-test.blade.php', $testForm);
-echo " ✅ Test-Form erstellt: public/logout-test.blade.php\n";
-
-// 8. Apache neu laden (falls möglich)
-echo "\n8. 🔄 Apache neu laden...\n";
-system('systemctl reload apache2 2>/dev/null || echo " ⚠️ Apache reload übersprungen"');
-echo " ✅ Apache neu geladen\n";
-
-echo "\n✅ Logout-Route Fix abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Klicken Sie auf Ihren Benutzernamen (oben rechts)\n";
-echo "2. Wählen Sie 'Abmelden' aus dem Dropdown\n";
-echo "3. Falls das nicht funktioniert:\n";
-echo " - Öffnen Sie Browser-Entwicklertools (F12)\n";
-echo " - Gehen Sie zu Network-Tab\n";
-echo " - Klicken Sie auf Abmelden\n";
-echo " - Schauen Sie welche URL aufgerufen wird\n";
-echo "\n📋 Falls Problem besteht:\n";
-echo "- Teilen Sie die Network-Tab Ausgabe mit\n";
-echo "- Schauen Sie in die Laravel-Logs: tail -f storage/logs/laravel.log\n";
-echo "- Testen Sie direkt: https://neonail.vogt.de.com/logout\n";
-?>
diff --git a/fix-logout-simple-2.php b/fix-logout-simple-2.php
deleted file mode 100644
index c0908db..0000000
--- a/fix-logout-simple-2.php
+++ /dev/null
@@ -1,147 +0,0 @@
-/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Laravel Cache geleert\n";
-
-// 3. Routes-Datei prüfen
-echo "\n3. 🛣️ Routes-Datei prüfen...\n";
-$routesPath = 'routes/web.php';
-if (file_exists($routesPath)) {
- $content = file_get_contents($routesPath);
-
- // Zeige alle Logout-bezogenen Zeilen
- $lines = explode("\n", $content);
- $logoutLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'logout') !== false) {
- $logoutLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- if (!empty($logoutLines)) {
- echo " ✅ Logout-Routes gefunden:\n";
- foreach ($logoutLines as $line) {
- echo " 📋 $line\n";
- }
- } else {
- echo " ❌ Keine Logout-Routes gefunden\n";
- }
-
-} else {
- echo " ❌ Routes-Datei nicht gefunden\n";
-}
-
-// 4. LoginController prüfen
-echo "\n4. 🔐 LoginController prüfen...\n";
-$controllerPath = 'app/Http/Controllers/Auth/LoginController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
-
- if (strpos($content, 'public function logout') !== false) {
- echo " ✅ Logout-Methode vorhanden\n";
-
- // Zeige Logout-Methode
- $lines = explode("\n", $content);
- $inLogoutMethod = false;
- $methodLines = [];
-
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'public function logout') !== false) {
- $inLogoutMethod = true;
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- } elseif ($inLogoutMethod && strpos($line, 'public function') !== false) {
- $inLogoutMethod = false;
- } elseif ($inLogoutMethod) {
- $methodLines[] = ($lineNumber + 1) . ": " . trim($line);
- }
- }
-
- echo " 📋 Logout-Methode:\n";
- foreach ($methodLines as $line) {
- echo " $line\n";
- }
-
- } else {
- echo " ❌ Logout-Methode nicht gefunden\n";
- }
-
-} else {
- echo " ❌ LoginController nicht gefunden\n";
-}
-
-// 5. Layout prüfen
-echo "\n5. 🎨 Layout prüfen...\n";
-$layoutPath = 'resources/views/layouts/app.blade.php';
-if (file_exists($layoutPath)) {
- $content = file_get_contents($layoutPath);
-
- // Suche nach Logout-Form
- if (strpos($content, 'logout-form') !== false) {
- echo " ✅ Logout-Form gefunden\n";
-
- // Zeige Logout-Form Details
- $lines = explode("\n", $content);
- foreach ($lines as $lineNumber => $line) {
- if (strpos($line, 'logout') !== false) {
- echo " 📋 Zeile " . ($lineNumber + 1) . ": " . trim($line) . "\n";
- }
- }
- } else {
- echo " ❌ Logout-Form nicht gefunden\n";
- }
-
-} else {
- echo " ❌ Layout-Datei nicht gefunden\n";
-}
-
-// 6. Test-Logout-URL erstellen
-echo "\n6. 🧪 Test-Logout-URL erstellen...\n";
-$testUrl = 'https://neonail.vogt.de.com/logout';
-echo " 🔗 Test-URL: $testUrl\n";
-echo " 📋 Methode: POST\n";
-echo " 📋 CSRF-Token erforderlich\n";
-
-// 7. Einfacher Test
-echo "\n7. 🧪 Einfacher Test...\n";
-echo " 📋 Öffnen Sie: https://neonail.vogt.de.com\n";
-echo " 📋 Melden Sie sich an\n";
-echo " 📋 Klicken Sie auf Ihren Benutzernamen\n";
-echo " 📋 Wählen Sie 'Abmelden'\n";
-echo " 📋 Falls Fehler: Öffnen Sie Browser-Entwicklertools (F12)\n";
-echo " 📋 Gehen Sie zu Network-Tab\n";
-echo " 📋 Schauen Sie welche URL aufgerufen wird\n";
-
-echo "\n✅ Logout-Route Fix abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt das Logout und teilen Sie mit:\n";
-echo "1. Funktioniert das Logout?\n";
-echo "2. Falls nicht: Welche URL wird im Network-Tab angezeigt?\n";
-echo "3. Gibt es Fehlermeldungen in der Browser-Konsole?\n";
-?>
diff --git a/fix-logout-simple.php b/fix-logout-simple.php
deleted file mode 100644
index c39288c..0000000
--- a/fix-logout-simple.php
+++ /dev/null
@@ -1,81 +0,0 @@
-/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 4. Alternative Logout-URL testen
-echo "\n4. 🔗 Alternative Logout-URLs:\n";
-echo " - https://neonail.vogt.de.com/logout\n";
-echo " - https://neonail.vogt.de.com/logout (POST)\n";
-
-echo "\n✅ Logout-Problem behoben!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Klicken Sie auf Ihren Benutzernamen (oben rechts)\n";
-echo "2. Wählen Sie 'Abmelden' aus dem Dropdown\n";
-echo "3. Sie sollten zur Login-Seite weitergeleitet werden\n";
-echo "\n📋 Falls Problem besteht:\n";
-echo "- Versuchen Sie direkt: https://neonail.vogt.de.com/logout\n";
-echo "- Prüfen Sie Browser-Entwicklertools (F12) für Fehler\n";
-echo "- Schauen Sie in die Laravel-Logs: tail -f storage/logs/laravel.log\n";
-?>
diff --git a/fix-logout.php b/fix-logout.php
deleted file mode 100644
index 9a30494..0000000
--- a/fix-logout.php
+++ /dev/null
@@ -1,277 +0,0 @@
-
-
-
-
-
-
- @yield("title", "NeoNail Datenbank")
-
-
-
-
-
-
-
-
- @yield("styles")
-
-
-
-
-
-
-
-
- @if(session("success"))
-
- {{ session("success") }}
-
-
- @endif
-
- @if(session("error"))
-
- {{ session("error") }}
-
-
- @endif
-
- @yield("content")
-
-
-
-
-
-
- @yield("scripts")
-
-';
-
-file_put_contents('resources/views/layouts/app.blade.php', $layoutContent);
-echo " ✅ Layout korrigiert\n";
-
-// 3. LoginController prüfen
-echo "\n3. 🔐 LoginController prüfen...\n";
-$controllerPath = 'app/Http/Controllers/Auth/LoginController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
-
- if (strpos($content, 'logout') !== false) {
- echo " ✅ Logout-Methode gefunden\n";
- } else {
- echo " ❌ Logout-Methode fehlt\n";
- }
-} else {
- echo " ❌ LoginController nicht gefunden\n";
-}
-
-// 4. Cache leeren
-echo "\n4. 🧹 Cache leeren...\n";
-system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"');
-system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"');
-system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"');
-system('php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"');
-echo " ✅ Cache geleert\n";
-
-// 5. Test-Logout-URL generieren
-echo "\n5. 🔗 Test-Logout-URL:\n";
-echo " https://neonail.vogt.de.com/logout\n";
-
-echo "\n✅ Logout-Problem behoben!\n";
-echo "🔗 Testen Sie jetzt:\n";
-echo "1. Klicken Sie auf Ihren Benutzernamen (oben rechts)\n";
-echo "2. Wählen Sie 'Abmelden' aus dem Dropdown\n";
-echo "3. Sie sollten zur Login-Seite weitergeleitet werden\n";
-echo "\n📋 Falls Problem besteht:\n";
-echo "- Prüfen Sie Browser-Entwicklertools (F12) für Fehler\n";
-echo "- Schauen Sie in die Laravel-Logs: tail -f storage/logs/laravel.log\n";
-echo "- Versuchen Sie direkt: https://neonail.vogt.de.com/logout\n";
-?>
diff --git a/fix-mail-config.sh b/fix-mail-config.sh
deleted file mode 100755
index 0c2939b..0000000
--- a/fix-mail-config.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-
-# NeoNail DB - Mail Configuration Fix Script
-# Behebt Mail-Probleme in Production
-
-echo "📧 NeoNail DB - Mail Configuration Fix"
-echo "======================================"
-
-# Prüfe, ob wir im richtigen Verzeichnis sind
-if [ ! -f "artisan" ]; then
- echo "❌ Fehler: artisan Datei nicht gefunden. Bitte führen Sie das Script im Laravel-Root-Verzeichnis aus."
- exit 1
-fi
-
-echo "🔍 Schritt 1: Aktuelle Mail-Konfiguration prüfen..."
-php artisan tinker --execute="echo 'Mail-Konfiguration:'; echo 'MAIL_MAILER: ' . config('mail.default'); echo 'MAIL_HOST: ' . config('mail.mailers.smtp.host'); echo 'MAIL_PORT: ' . config('mail.mailers.smtp.port'); echo 'MAIL_FROM: ' . config('mail.from.address');"
-
-echo "🔍 Schritt 2: Mail-Logs prüfen..."
-echo "Letzte Mail-Fehler:"
-tail -n 10 storage/logs/laravel.log | grep -i mail
-
-echo "🔍 Schritt 3: Mail-Konfiguration für Production anpassen..."
-
-# Backup der .env erstellen
-cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
-
-# Mail-Konfiguration auf log setzen (für Production ohne SMTP)
-sed -i 's/MAIL_MAILER=smtp/MAIL_MAILER=log/' .env
-sed -i 's/MAIL_HOST=mail.selfhost.de/MAIL_HOST=127.0.0.1/' .env
-sed -i 's/MAIL_PORT=465/MAIL_PORT=1025/' .env
-sed -i 's/MAIL_USERNAME=.*/MAIL_USERNAME=null/' .env
-sed -i 's/MAIL_PASSWORD=.*/MAIL_PASSWORD=null/' .env
-sed -i 's/MAIL_ENCRYPTION=ssl/MAIL_ENCRYPTION=null/' .env
-sed -i 's/MAIL_FROM_ADDRESS=.*/MAIL_FROM_ADDRESS="noreply@neonail.vogt.de.com"/' .env
-sed -i 's/MAIL_FROM_NAME=.*/MAIL_FROM_NAME="NeoNail DB"/' .env
-
-echo "🔍 Schritt 4: Cache leeren..."
-php artisan config:clear
-
-echo "🔍 Schritt 5: Neue Mail-Konfiguration prüfen..."
-php artisan tinker --execute="echo 'Neue Mail-Konfiguration:'; echo 'MAIL_MAILER: ' . config('mail.default'); echo 'MAIL_HOST: ' . config('mail.mailers.smtp.host'); echo 'MAIL_PORT: ' . config('mail.mailers.smtp.port'); echo 'MAIL_FROM: ' . config('mail.from.address');"
-
-echo "🔍 Schritt 6: Test-Mail senden..."
-php artisan tinker --execute="use Illuminate\Support\Facades\Mail; try { Mail::raw('Test-Mail von NeoNail DB - ' . now(), function(\$message) { \$message->to('test@example.com')->subject('Test-Mail'); }); echo 'Test-Mail erfolgreich gesendet (in Logs)'; } catch(Exception \$e) { echo 'Mail-Fehler: ' . \$e->getMessage(); }"
-
-echo "✅ Mail Configuration Fix abgeschlossen!"
-echo ""
-echo "🎯 Was wurde geändert:"
-echo " - MAIL_MAILER auf 'log' gesetzt (E-Mails werden in Logs geschrieben)"
-echo " - SMTP-Konfiguration für Production angepasst"
-echo " - Backup der .env erstellt"
-echo ""
-echo "📋 E-Mails werden jetzt in storage/logs/laravel.log geschrieben"
-echo "📋 Für echte E-Mail-Versendung SMTP-Server konfigurieren"
-echo ""
-echo "🚀 Mail-System ist jetzt funktionsfähig!"
diff --git a/fix-pail-cache.sh b/fix-pail-cache.sh
deleted file mode 100755
index c05ceac..0000000
--- a/fix-pail-cache.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-echo "🧹 Pail Cache Problem lösen"
-echo "=========================="
-
-# 1. Cache-Dateien löschen
-echo "🗑️ Lösche Cache-Dateien..."
-rm -f bootstrap/cache/packages.php
-rm -f bootstrap/cache/services.php
-rm -f bootstrap/cache/config.php
-
-# 2. Composer autoload neu generieren
-echo "🔄 Generiere autoload neu..."
-if command -v composer &> /dev/null; then
- composer dump-autoload --optimize
-elif [ -f "composer.phar" ]; then
- php composer.phar dump-autoload --optimize
-else
- echo "⚠️ Composer nicht verfügbar"
-fi
-
-# 3. Laravel Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo "⚠️ view:clear übersprungen"
-
-# 4. Berechtigungen setzen
-echo "🔐 Setze Berechtigungen..."
-chmod -R 777 bootstrap/cache/
-
-echo ""
-echo "✅ Pail Cache Problem behoben!"
-echo "📋 Testen Sie: php artisan --version"
diff --git a/fix-pail-final.sh b/fix-pail-final.sh
deleted file mode 100755
index c7048a5..0000000
--- a/fix-pail-final.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-
-echo "🧹 Finale Pail-Problem Lösung"
-echo "============================="
-
-# 1. Alle Cache-Dateien löschen
-echo "🗑️ Lösche alle Cache-Dateien..."
-rm -f bootstrap/cache/packages.php
-rm -f bootstrap/cache/services.php
-rm -f bootstrap/cache/config.php
-rm -f bootstrap/cache/routes.php
-rm -f bootstrap/cache/views.php
-
-# 2. Composer autoload neu generieren
-echo "🔄 Generiere Composer autoload neu..."
-if command -v composer &> /dev/null; then
- composer dump-autoload --optimize
-elif [ -f "composer.phar" ]; then
- php composer.phar dump-autoload --optimize
-else
- echo "⚠️ Composer nicht verfügbar, überspringe autoload"
-fi
-
-# 3. Laravel Cache komplett leeren
-echo "🧹 Leere Laravel Cache komplett..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo "⚠️ view:clear übersprungen"
-
-# 4. Berechtigungen setzen
-echo "🔐 Setze Berechtigungen..."
-chmod -R 777 bootstrap/cache/
-chmod -R 777 storage/
-
-# 5. Debug deaktivieren (für Produktion)
-echo "🔧 Setze Debug-Modus zurück..."
-sed -i 's/APP_DEBUG=true/APP_DEBUG=false/' .env
-
-# 6. Test
-echo "🧪 Teste Anwendung..."
-curl -I http://192.168.30.81
-
-echo ""
-echo "✅ Pail-Problem behoben!"
-echo "📋 Testen Sie: http://192.168.30.81"
diff --git a/fix-permissions.sh b/fix-permissions.sh
deleted file mode 100755
index cd9b5f8..0000000
--- a/fix-permissions.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-
-# NeoNail DB - Berechtigungen korrigieren
-echo "🔧 NeoNail DB - Berechtigungen korrigieren..."
-
-# 1. Storage-Verzeichnisse erstellen (falls nicht vorhanden)
-echo "📁 Storage-Verzeichnisse erstellen..."
-mkdir -p storage/framework/views
-mkdir -p storage/framework/cache
-mkdir -p storage/framework/sessions
-mkdir -p storage/logs
-mkdir -p bootstrap/cache
-
-# 2. Berechtigungen für Storage setzen
-echo "🔐 Storage-Berechtigungen setzen..."
-chmod -R 777 storage/
-chmod -R 777 storage/framework/
-chmod -R 777 storage/framework/views/
-chmod -R 777 storage/framework/cache/
-chmod -R 777 storage/framework/sessions/
-chmod -R 777 storage/logs/
-
-# 3. Bootstrap/Cache-Berechtigungen
-echo "🔐 Bootstrap/Cache-Berechtigungen setzen..."
-chmod -R 777 bootstrap/cache/
-
-# 4. SQLite-Datenbank erstellen und Berechtigungen setzen
-echo "🗄️ SQLite-Datenbank erstellen..."
-if [ ! -f database.sqlite ]; then
- touch database.sqlite
- echo "✅ SQLite-Datenbank erstellt"
-else
- echo "✅ SQLite-Datenbank bereits vorhanden"
-fi
-chmod 664 database.sqlite
-
-# 5. .env Berechtigungen
-echo "🔐 .env Berechtigungen setzen..."
-if [ -f .env ]; then
- chmod 644 .env
- echo "✅ .env Berechtigungen gesetzt"
-else
- echo "⚠️ .env Datei nicht gefunden"
-fi
-
-# 6. Cache leeren
-echo "🧹 Cache leeren..."
-php artisan config:clear 2>/dev/null || echo "⚠️ php artisan nicht verfügbar"
-php artisan cache:clear 2>/dev/null || echo "⚠️ php artisan nicht verfügbar"
-php artisan view:clear 2>/dev/null || echo "⚠️ php artisan nicht verfügbar"
-
-# 7. Storage-Link erstellen
-echo "🔗 Storage-Link erstellen..."
-php artisan storage:link 2>/dev/null || echo "⚠️ php artisan nicht verfügbar"
-
-echo "✅ Berechtigungen korrigiert!"
-echo ""
-echo "📋 Nächste Schritte:"
-echo "1. Seite neu laden: http://192.168.30.81/neonail/"
-echo "2. Falls immer noch Fehler: Composer install ausführen"
-echo "3. Migrationen ausführen: php artisan migrate --force"
-echo "4. Admin-User erstellen: php artisan tinker"
-echo ""
-echo "💡 Falls Probleme bestehen:"
-echo "- Hosting-Provider kontaktieren"
-echo "- SSH-Zugang anfordern"
-echo "- Berechtigungen über Hosting-Panel prüfen"
diff --git a/fix-production-issues.sh b/fix-production-issues.sh
deleted file mode 100755
index e69de29..0000000
diff --git a/fix-remaining-safari-warnings.sh b/fix-remaining-safari-warnings.sh
deleted file mode 100755
index 8d1550a..0000000
--- a/fix-remaining-safari-warnings.sh
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/bin/bash
-
-echo "🛡️ Fix: Verbleibende Safari Sicherheitswarnungen"
-echo "==============================================="
-
-# 1. Logout-Formular beheben
-echo "1. 🔒 Logout-Formular beheben..."
-if [ -f resources/views/layouts/app.blade.php ]; then
- sed -i 's|action="{{ route('\''logout'\'') }}"|action="https://neonail.vogt.de.com/logout"|' resources/views/layouts/app.blade.php
- echo " ✅ Logout-Formular behoben"
-else
- echo " ❌ layouts/app.blade.php nicht gefunden"
-fi
-
-# 2. Alle verbleibenden route() Aufrufe finden
-echo "2. 🔍 Alle verbleibenden route() Aufrufe finden..."
-grep -r "route(" resources/views/ --include="*.blade.php" | grep -E "(action|href)" || echo " ℹ️ Keine verbleibenden route() Aufrufe in action/href gefunden"
-
-# 3. Alle Formulare mit HTTPS-URLs prüfen
-echo "3. 🔒 Alle Formulare mit HTTPS prüfen..."
-php test-forms-fixed.php
-
-# 4. Laravel Cache leeren
-echo "4. 🧹 Laravel Cache leeren..."
-php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"
-php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"
-
-# 5. Test-Script erstellen
-echo "5. 🧪 Test-Script erstellen..."
-cat > test-all-forms-final.php << 'EOF'
- 'Login-Formular',
- 'resources/views/user-nail-polishes/create.blade.php' => 'Create Nail Polish',
- 'resources/views/user-nail-polishes/index.blade.php' => 'Remove Nail Polish',
- 'resources/views/nail-polishes/index.blade.php' => 'Admin Delete Nail Polish',
- 'resources/views/admin/users/create.blade.php' => 'Admin Create User',
- 'resources/views/admin/users/edit.blade.php' => 'Admin Edit User',
- 'resources/views/admin/users/index.blade.php' => 'Admin Delete User',
- 'resources/views/layouts/app.blade.php' => 'Logout-Formular'
-];
-
-$allFixed = true;
-
-foreach ($forms as $file => $description) {
- if (file_exists($file)) {
- $content = file_get_contents($file);
- if (strpos($content, 'action="https://neonail.vogt.de.com') !== false) {
- echo " ✅ $description: HTTPS-URL gefunden\n";
- } else {
- echo " ❌ $description: Keine HTTPS-URL gefunden\n";
- $allFixed = false;
-
- // Zeige die aktuelle action
- if (preg_match('/action="([^"]+)"/', $content, $matches)) {
- echo " Aktuelle action: " . $matches[1] . "\n";
- }
- }
- } else {
- echo " ❌ $description: Datei nicht gefunden\n";
- $allFixed = false;
- }
-}
-
-echo "\n";
-if ($allFixed) {
- echo "🎉 ALLE Formulare sind jetzt mit HTTPS-URLs konfiguriert!\n";
- echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com\n";
- echo "📝 Safari-Sicherheitswarnungen sollten komplett verschwunden sein.\n";
-} else {
- echo "⚠️ Einige Formulare müssen noch korrigiert werden.\n";
- echo "🔧 Führen Sie das Fix-Script erneut aus.\n";
-}
-
-echo "\n✅ Finaler Formular-Test abgeschlossen!\n";
-?>
-EOF
-
-echo " ✅ Test-Script erstellt"
-
-# 6. Finalen Test ausführen
-echo "6. 🧪 Finalen Test ausführen..."
-php test-all-forms-final.php
-
-echo ""
-echo "✅ Verbleibende Safari Sicherheitswarnungen behoben!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. Login: https://neonail.vogt.de.com/login"
-echo "2. Logout: Klicken Sie auf Ihren Namen → Abmelden"
-echo "3. Admin-Panel: https://neonail.vogt.de.com/admin/users"
-echo "4. Lack erstellen: https://neonail.vogt.de.com/create-nail-polish"
-echo ""
-echo "📝 Falls Warnungen bestehen:"
-echo "- Führen Sie php test-all-forms-final.php aus"
-echo "- Leeren Sie Browser-Cache komplett"
-echo "- Prüfen Sie Browser-Entwicklertools (F12)"
-echo "- Testen Sie in einem Inkognito-Fenster"
diff --git a/fix-safari-form-security.sh b/fix-safari-form-security.sh
deleted file mode 100644
index 8a7777f..0000000
--- a/fix-safari-form-security.sh
+++ /dev/null
@@ -1,207 +0,0 @@
-#!/bin/bash
-
-echo "🍎 Safari Formular-Sicherheit beheben"
-echo "===================================="
-
-# 1. .env komplett für HTTPS konfigurieren
-echo "📝 Konfiguriere .env für HTTPS..."
-cat > .env << 'EOF'
-APP_NAME="NeoNail DB"
-APP_ENV=production
-APP_KEY=base64:+LTZYPKjkZ+O3iFTgU2sS+9bNvxxvG8Kw8JSEPiG7Rs=
-APP_DEBUG=false
-APP_URL=https://neonail.vogt.de.com
-
-LOG_CHANNEL=stack
-LOG_DEPRECATIONS_CHANNEL=null
-LOG_LEVEL=debug
-
-DB_CONNECTION=sqlite
-DB_DATABASE=database.sqlite
-
-BROADCAST_DRIVER=log
-CACHE_DRIVER=file
-FILESYSTEM_DISK=local
-QUEUE_CONNECTION=sync
-SESSION_DRIVER=file
-SESSION_LIFETIME=120
-SESSION_SECURE_COOKIE=true
-SESSION_SAME_SITE=lax
-SESSION_HTTP_ONLY=true
-
-MEMCACHED_HOST=127.0.0.1
-
-REDIS_HOST=127.0.0.1
-REDIS_PASSWORD=null
-REDIS_PORT=6379
-
-MAIL_MAILER=smtp
-MAIL_HOST=mailpit
-MAIL_PORT=1025
-MAIL_USERNAME=null
-MAIL_PASSWORD=null
-MAIL_ENCRYPTION=null
-MAIL_FROM_ADDRESS="hello@example.com"
-MAIL_FROM_NAME="${APP_NAME}"
-
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-AWS_DEFAULT_REGION=us-east-1
-AWS_BUCKET=
-AWS_USE_PATH_STYLE_ENDPOINT=false
-
-PUSHER_APP_ID=
-PUSHER_APP_KEY=
-PUSHER_APP_SECRET=
-PUSHER_HOST=
-PUSHER_PORT=443
-PUSHER_SCHEME=https
-PUSHER_APP_CLUSTER=mt1
-
-VITE_APP_NAME="${APP_NAME}"
-VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
-VITE_PUSHER_HOST="${PUSHER_HOST}"
-VITE_PUSHER_PORT="${PUSHER_PORT}"
-VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
-VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
-
-# HTTPS-Konfiguration
-FORCE_HTTPS=true
-SECURE_COOKIES=true
-EOF
-
-# 2. Session-Konfiguration für HTTPS
-echo "🔐 Konfiguriere Session für HTTPS..."
-cat > config/session.php << 'EOF'
- env('SESSION_DRIVER', 'file'),
- 'lifetime' => env('SESSION_LIFETIME', 120),
- 'expire_on_close' => false,
- 'encrypt' => false,
- 'files' => storage_path('framework/sessions'),
- 'connection' => env('SESSION_CONNECTION'),
- 'table' => 'sessions',
- 'store' => env('SESSION_STORE'),
- 'lottery' => [2, 100],
- 'cookie' => env(
- 'SESSION_COOKIE',
- Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
- ),
- 'path' => '/',
- 'domain' => env('SESSION_DOMAIN'),
- 'secure' => true,
- 'http_only' => true,
- 'same_site' => 'lax',
-];
-EOF
-
-# 3. Laravel Cache komplett leeren
-echo "🧹 Leere Laravel Cache komplett..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo "⚠️ view:clear übersprungen"
-
-# 4. HTTPS-Force in .htaccess
-echo "🔒 Füge HTTPS-Force hinzu..."
-cat > public/.htaccess << 'EOF'
-
-
- Options -MultiViews -Indexes
-
-
- RewriteEngine On
-
- # Force HTTPS
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
-
- # Handle Authorization Header
- RewriteCond %{HTTP:Authorization} .
- RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- # Redirect Trailing Slashes If Not A Folder...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_URI} (.+)/$
- RewriteRule ^ %1 [L,R=301]
-
- # Send Requests To Front Controller...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^ index.php [L]
-
-
-# Security Headers
-
- Header always set X-Content-Type-Options nosniff
- Header always set X-Frame-Options DENY
- Header always set X-XSS-Protection "1; mode=block"
- Header always set Referrer-Policy "strict-origin-when-cross-origin"
- Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
- Header always set Content-Security-Policy "upgrade-insecure-requests"
- Header always set X-Forwarded-Proto https
-
-
-# Protect sensitive files
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-# Compression
-
- AddOutputFilterByType DEFLATE text/plain
- AddOutputFilterByType DEFLATE text/html
- AddOutputFilterByType DEFLATE text/xml
- AddOutputFilterByType DEFLATE text/css
- AddOutputFilterByType DEFLATE application/xml
- AddOutputFilterByType DEFLATE application/xhtml+xml
- AddOutputFilterByType DEFLATE application/rss+xml
- AddOutputFilterByType DEFLATE application/javascript
- AddOutputFilterByType DEFLATE application/x-javascript
-
-
-# Cache Control
-
- ExpiresActive on
- ExpiresByType text/css "access plus 1 year"
- ExpiresByType application/javascript "access plus 1 year"
- ExpiresByType image/png "access plus 1 year"
- ExpiresByType image/jpg "access plus 1 year"
- ExpiresByType image/jpeg "access plus 1 year"
- ExpiresByType image/gif "access plus 1 year"
- ExpiresByType image/svg+xml "access plus 1 year"
-
-EOF
-
-# 5. Apache neu laden
-echo "🔄 Lade Apache neu..."
-systemctl reload apache2
-
-# 6. Test
-echo "🧪 Teste HTTPS-Konfiguration..."
-curl -I https://neonail.vogt.de.com
-
-echo ""
-echo "✅ Safari Formular-Sicherheit behoben!"
-echo "📋 Testen Sie: https://neonail.vogt.de.com"
-echo ""
-echo "📋 Falls Warnung bleibt:"
-echo "1. Safari-Cache leeren (Cmd+Shift+R)"
-echo "2. Private-Fenster testen"
-echo "3. Safari-Einstellungen: Entwickler > Leere Caches"
-echo "4. Safari-Einstellungen: Datenschutz > Website-Daten verwalten"
diff --git a/fix-safari-https.sh b/fix-safari-https.sh
deleted file mode 100644
index a963c34..0000000
--- a/fix-safari-https.sh
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/bin/bash
-
-echo "🍎 Safari HTTPS-Warnung beheben"
-echo "=============================="
-
-# 1. .env komplett für HTTPS konfigurieren
-echo "📝 Konfiguriere .env komplett für HTTPS..."
-cat > .env << 'EOF'
-APP_NAME="NeoNail DB"
-APP_ENV=production
-APP_KEY=base64:+LTZYPKjkZ+O3iFTgU2sS+9bNvxxvG8Kw8JSEPiG7Rs=
-APP_DEBUG=false
-APP_URL=https://neonail.vogt.de.com
-
-LOG_CHANNEL=stack
-LOG_DEPRECATIONS_CHANNEL=null
-LOG_LEVEL=debug
-
-DB_CONNECTION=sqlite
-DB_DATABASE=database.sqlite
-
-BROADCAST_DRIVER=log
-CACHE_DRIVER=file
-FILESYSTEM_DISK=local
-QUEUE_CONNECTION=sync
-SESSION_DRIVER=file
-SESSION_LIFETIME=120
-SESSION_SECURE_COOKIE=true
-SESSION_SAME_SITE=lax
-
-MEMCACHED_HOST=127.0.0.1
-
-REDIS_HOST=127.0.0.1
-REDIS_PASSWORD=null
-REDIS_PORT=6379
-
-MAIL_MAILER=smtp
-MAIL_HOST=mailpit
-MAIL_PORT=1025
-MAIL_USERNAME=null
-MAIL_PASSWORD=null
-MAIL_ENCRYPTION=null
-MAIL_FROM_ADDRESS="hello@example.com"
-MAIL_FROM_NAME="${APP_NAME}"
-
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-AWS_DEFAULT_REGION=us-east-1
-AWS_BUCKET=
-AWS_USE_PATH_STYLE_ENDPOINT=false
-
-PUSHER_APP_ID=
-PUSHER_APP_KEY=
-PUSHER_APP_SECRET=
-PUSHER_HOST=
-PUSHER_PORT=443
-PUSHER_SCHEME=https
-PUSHER_APP_CLUSTER=mt1
-
-VITE_APP_NAME="${APP_NAME}"
-VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
-VITE_PUSHER_HOST="${PUSHER_HOST}"
-VITE_PUSHER_PORT="${PUSHER_PORT}"
-VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
-VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
-EOF
-
-# 2. Laravel Cache komplett leeren
-echo "🧹 Leere Laravel Cache komplett..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo "⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo "⚠️ view:clear übersprungen"
-
-# 3. HTTPS-Header in .htaccess hinzufügen
-echo "🔒 Füge HTTPS-Header hinzu..."
-cat > public/.htaccess << 'EOF'
-
-
- Options -MultiViews -Indexes
-
-
- RewriteEngine On
-
- # Force HTTPS
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
-
- # Handle Authorization Header
- RewriteCond %{HTTP:Authorization} .
- RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- # Redirect Trailing Slashes If Not A Folder...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_URI} (.+)/$
- RewriteRule ^ %1 [L,R=301]
-
- # Send Requests To Front Controller...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^ index.php [L]
-
-
-# Security Headers
-
- Header always set X-Content-Type-Options nosniff
- Header always set X-Frame-Options DENY
- Header always set X-XSS-Protection "1; mode=block"
- Header always set Referrer-Policy "strict-origin-when-cross-origin"
- Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
- Header always set Content-Security-Policy "upgrade-insecure-requests"
-
-
-# Protect sensitive files
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-# Compression
-
- AddOutputFilterByType DEFLATE text/plain
- AddOutputFilterByType DEFLATE text/html
- AddOutputFilterByType DEFLATE text/xml
- AddOutputFilterByType DEFLATE text/css
- AddOutputFilterByType DEFLATE application/xml
- AddOutputFilterByType DEFLATE application/xhtml+xml
- AddOutputFilterByType DEFLATE application/rss+xml
- AddOutputFilterByType DEFLATE application/javascript
- AddOutputFilterByType DEFLATE application/x-javascript
-
-
-# Cache Control
-
- ExpiresActive on
- ExpiresByType text/css "access plus 1 year"
- ExpiresByType application/javascript "access plus 1 year"
- ExpiresByType image/png "access plus 1 year"
- ExpiresByType image/jpg "access plus 1 year"
- ExpiresByType image/jpeg "access plus 1 year"
- ExpiresByType image/gif "access plus 1 year"
- ExpiresByType image/svg+xml "access plus 1 year"
-
-EOF
-
-# 4. Apache neu laden
-echo "🔄 Lade Apache neu..."
-systemctl reload apache2
-
-# 5. Test
-echo "🧪 Teste HTTPS-Konfiguration..."
-curl -I https://neonail.vogt.de.com
-
-echo ""
-echo "✅ Safari HTTPS-Warnung behoben!"
-echo "📋 Testen Sie: https://neonail.vogt.de.com"
-echo ""
-echo "📋 Falls Warnung bleibt:"
-echo "1. Safari-Cache leeren (Cmd+Shift+R)"
-echo "2. Private-Fenster testen"
-echo "3. Safari-Einstellungen: Entwickler > Leere Caches"
diff --git a/fix-safari-security-warnings.sh b/fix-safari-security-warnings.sh
deleted file mode 100755
index 8b86c27..0000000
--- a/fix-safari-security-warnings.sh
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/bin/bash
-
-echo "🛡️ Fix: Safari Sicherheitswarnungen"
-echo "=================================="
-
-# 1. .env HTTPS-Einstellungen
-echo "1. 🔒 HTTPS-Einstellungen in .env..."
-if [ -f .env ]; then
- # Setze alle HTTPS-Einstellungen
- sed -i 's|APP_URL=.*|APP_URL=https://neonail.vogt.de.com|' .env
- sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
- sed -i 's/APP_ENV=production/APP_ENV=local/' .env
-
- # HTTPS-spezifische Einstellungen
- echo "FORCE_HTTPS=true" >> .env
- echo "SECURE_COOKIES=true" >> .env
- echo "SESSION_SECURE_COOKIE=true" >> .env
- echo "SESSION_SAME_SITE=lax" >> .env
- echo "SESSION_HTTP_ONLY=true" >> .env
-
- echo " ✅ .env HTTPS-Einstellungen aktualisiert"
-else
- echo " ❌ .env Datei nicht gefunden"
-fi
-
-# 2. Session-Konfiguration
-echo "2. 🍪 Session-Konfiguration..."
-if [ -f config/session.php ]; then
- sed -i "s/'secure' => false/'secure' => true/" config/session.php
- sed -i "s/'http_only' => false/'http_only' => true/" config/session.php
- echo " ✅ Session-Konfiguration aktualisiert"
-else
- echo " ❌ config/session.php nicht gefunden"
-fi
-
-# 3. CSRF-Konfiguration
-echo "3. 🔐 CSRF-Konfiguration..."
-if [ -f config/csrf.php ]; then
- sed -i "s/'secure' => false/'secure' => true/" config/csrf.php
- sed -i "s/'same_site' => 'lax'/'same_site' => 'lax'/" config/csrf.php
- echo " ✅ CSRF-Konfiguration aktualisiert"
-else
- echo " ❌ config/csrf.php nicht gefunden"
-fi
-
-# 4. .htaccess HTTPS-Headers
-echo "4. 🌐 .htaccess HTTPS-Headers..."
-if [ -f public/.htaccess ]; then
- # Füge HTTPS-Headers hinzu
- if ! grep -q "Strict-Transport-Security" public/.htaccess; then
- sed -i '/# Security Headers/a\
-Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"\
-Header always set Content-Security-Policy "upgrade-insecure-requests"' public/.htaccess
- fi
-
- # Force HTTPS
- if ! grep -q "RewriteCond %{HTTPS} off" public/.htaccess; then
- sed -i '/RewriteEngine On/a\
-RewriteCond %{HTTPS} off\
-RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]' public/.htaccess
- fi
-
- echo " ✅ .htaccess HTTPS-Headers aktualisiert"
-else
- echo " ❌ public/.htaccess nicht gefunden"
-fi
-
-# 5. AppServiceProvider HTTPS-Force
-echo "5. 🔧 AppServiceProvider HTTPS-Force..."
-if [ -f app/Providers/AppServiceProvider.php ]; then
- if ! grep -q "URL::forceScheme('https')" app/Providers/AppServiceProvider.php; then
- sed -i "/public function boot(): void/a\\
- if (config('app.env') === 'production') {\\
- URL::forceScheme('https');\\
- }" app/Providers/AppServiceProvider.php
- fi
- echo " ✅ AppServiceProvider HTTPS-Force aktualisiert"
-else
- echo " ❌ AppServiceProvider nicht gefunden"
-fi
-
-# 6. Laravel Cache leeren
-echo "6. 🧹 Laravel Cache leeren..."
-php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"
-php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"
-
-# 7. Test-Script erstellen
-echo "7. 🧪 Test-Script erstellen..."
-cat > test-https-security.php << 'EOF'
- true") !== false) {
- echo " ✅ Session secure: true\n";
- } else {
- echo " ❌ Session secure: false\n";
- }
- if (strpos($content, "'http_only' => true") !== false) {
- echo " ✅ Session http_only: true\n";
- } else {
- echo " ❌ Session http_only: false\n";
- }
-}
-
-// 3. Prüfe CSRF-Konfiguration
-echo "\n3. CSRF-Konfiguration:\n";
-if (file_exists('config/csrf.php')) {
- $content = file_get_contents('config/csrf.php');
- if (strpos($content, "'secure' => true") !== false) {
- echo " ✅ CSRF secure: true\n";
- } else {
- echo " ❌ CSRF secure: false\n";
- }
-}
-
-// 4. Prüfe .htaccess
-echo "\n4. .htaccess HTTPS-Headers:\n";
-if (file_exists('public/.htaccess')) {
- $content = file_get_contents('public/.htaccess');
- if (strpos($content, 'Strict-Transport-Security') !== false) {
- echo " ✅ HSTS Header vorhanden\n";
- } else {
- echo " ❌ HSTS Header fehlt\n";
- }
- if (strpos($content, 'upgrade-insecure-requests') !== false) {
- echo " ✅ CSP upgrade-insecure-requests vorhanden\n";
- } else {
- echo " ❌ CSP upgrade-insecure-requests fehlt\n";
- }
-}
-
-echo "\n✅ HTTPS-Sicherheit Test abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/admin/users\n";
-?>
-EOF
-
-echo " ✅ Test-Script erstellt"
-
-echo ""
-echo "✅ Safari Sicherheitswarnungen behoben!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. Admin-Panel: https://neonail.vogt.de.com/admin/users"
-echo "2. Lack löschen im Admin-Panel"
-echo "3. User bearbeiten/löschen"
-echo ""
-echo "📝 Falls Warnungen bestehen:"
-echo "- Führen Sie php test-https-security.php aus"
-echo "- Prüfen Sie Browser-Entwicklertools (F12)"
-echo "- Leeren Sie Browser-Cache"
diff --git a/fix-sqlite-permissions.sh b/fix-sqlite-permissions.sh
deleted file mode 100755
index a49d71b..0000000
--- a/fix-sqlite-permissions.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-echo "🗄️ SQLite-Berechtigungen korrigieren"
-echo "==================================="
-
-# 1. Aktuelle Berechtigungen prüfen
-echo "🔍 Aktuelle Berechtigungen:"
-ls -la database.sqlite
-echo ""
-
-# 2. Berechtigungen korrigieren
-echo "🔐 Setze SQLite-Berechtigungen..."
-chown www-data:www-data database.sqlite
-chmod 664 database.sqlite
-
-# 3. Verzeichnis-Berechtigungen
-echo "📁 Setze Verzeichnis-Berechtigungen..."
-chown -R www-data:www-data /var/www/html
-chmod -R 755 /var/www/html
-chmod -R 777 storage/
-chmod -R 777 bootstrap/cache/
-
-# 4. SQLite-Datei testen
-echo "🧪 Teste SQLite-Schreibzugriff..."
-if [ -w database.sqlite ]; then
- echo "✅ SQLite-Datei ist schreibbar"
-else
- echo "❌ SQLite-Datei ist NICHT schreibbar"
-fi
-
-# 5. Apache-User prüfen
-echo "👤 Apache-User:"
-ps aux | grep apache | head -1
-
-# 6. Test-Schreibzugriff
-echo "📝 Teste Schreibzugriff..."
-sqlite3 database.sqlite "CREATE TABLE IF NOT EXISTS test_write (id INTEGER); DROP TABLE test_write;" 2>/dev/null && echo "✅ SQLite-Schreibzugriff funktioniert" || echo "❌ SQLite-Schreibzugriff fehlgeschlagen"
-
-echo ""
-echo "✅ SQLite-Berechtigungen korrigiert!"
-echo "📋 Testen Sie jetzt das Erstellen eines Lackes"
diff --git a/fix-storage-link.sh b/fix-storage-link.sh
deleted file mode 100755
index 204c16b..0000000
--- a/fix-storage-link.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/bash
-
-echo "🔗 Storage Link Problem lösen"
-echo "============================"
-
-# 1. Aktuellen Storage-Status prüfen
-echo "🔍 Aktueller Storage-Status:"
-ls -la public/storage
-echo ""
-
-# 2. Storage-Verzeichnis entfernen (falls es ein Verzeichnis ist)
-echo "🗑️ Entferne falsches Storage-Verzeichnis..."
-if [ -d "public/storage" ]; then
- rm -rf public/storage
- echo "✅ Storage-Verzeichnis entfernt"
-elif [ -L "public/storage" ]; then
- rm public/storage
- echo "✅ Storage-Link entfernt"
-fi
-
-# 3. Storage Link neu erstellen
-echo "🔗 Erstelle Storage Link neu..."
-php artisan storage:link
-
-# 4. Link prüfen
-echo "🔍 Prüfe neuen Storage Link:"
-ls -la public/storage
-echo ""
-
-# 5. Ziel-Verzeichnis prüfen
-echo "📁 Prüfe Ziel-Verzeichnis:"
-ls -la storage/app/public/
-echo ""
-
-# 6. Bilder-Verzeichnis prüfen
-echo "🖼️ Prüfe Bilder-Verzeichnis:"
-ls -la storage/app/public/nail_polishes/ 2>/dev/null || echo "⚠️ nail_polishes Verzeichnis nicht gefunden"
-
-# 7. Test-Bild erstellen
-echo "🧪 Erstelle Test-Bild..."
-mkdir -p storage/app/public/nail_polishes
-echo "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==" | base64 -d > storage/app/public/nail_polishes/test.jpg
-chmod 644 storage/app/public/nail_polishes/test.jpg
-
-# 8. Berechtigungen setzen
-echo "🔐 Setze Berechtigungen..."
-chmod -R 755 public/storage/
-chmod -R 777 storage/app/public/
-
-# 9. Test-URL
-echo "🧪 Teste Bild-URL..."
-curl -I https://neonail.vogt.de.com/storage/nail_polishes/test.jpg
-
-# 10. Echte Bilder testen
-echo "🖼️ Teste echte Bilder..."
-sqlite3 database.sqlite "SELECT image_path FROM nail_polishes WHERE image_path IS NOT NULL LIMIT 1;" | while read image_path; do
- if [ ! -z "$image_path" ]; then
- echo "Teste: $image_path"
- if [ -f "storage/app/public/$image_path" ]; then
- echo "✅ Bild existiert: $image_path"
- curl -I "https://neonail.vogt.de.com/storage/$image_path"
- else
- echo "❌ Bild fehlt: $image_path"
- fi
- fi
-done
-
-echo ""
-echo "✅ Storage Link Problem behoben!"
-echo "📋 Testen Sie: https://neonail.vogt.de.com"
diff --git a/fix-upload-limits.php b/fix-upload-limits.php
deleted file mode 100644
index c5fed06..0000000
--- a/fix-upload-limits.php
+++ /dev/null
@@ -1,133 +0,0 @@
- ini_get('upload_max_filesize'),
- 'post_max_size' => ini_get('post_max_size'),
- 'max_file_uploads' => ini_get('max_file_uploads'),
- 'memory_limit' => ini_get('memory_limit'),
- 'max_execution_time' => ini_get('max_execution_time'),
- 'max_input_time' => ini_get('max_input_time')
-];
-
-foreach ($limits as $setting => $value) {
- echo " - $setting: $value\n";
-}
-
-// 2. Konvertiere zu Bytes für Vergleich
-function convertToBytes($sizeStr) {
- $sizeStr = strtolower(trim($sizeStr));
- $last = strtolower($sizeStr[strlen($sizeStr)-1]);
- $size = (int)$sizeStr;
-
- switch($last) {
- case 'g': $size *= 1024;
- case 'm': $size *= 1024;
- case 'k': $size *= 1024;
- }
-
- return $size;
-}
-
-$uploadMaxBytes = convertToBytes($limits['upload_max_filesize']);
-$postMaxBytes = convertToBytes($limits['post_max_size']);
-$requiredBytes = 10 * 1024 * 1024; // 10MB
-
-echo "\n2. 📊 Größenvergleich:\n";
-echo " - Upload max filesize: " . number_format($uploadMaxBytes) . " Bytes\n";
-echo " - Post max size: " . number_format($postMaxBytes) . " Bytes\n";
-echo " - Benötigt für 10MB: " . number_format($requiredBytes) . " Bytes\n";
-
-if ($uploadMaxBytes < $requiredBytes) {
- echo " ⚠️ upload_max_filesize ist zu klein für 10MB Uploads\n";
-} else {
- echo " ✅ upload_max_filesize ist ausreichend\n";
-}
-
-if ($postMaxBytes < $requiredBytes) {
- echo " ⚠️ post_max_size ist zu klein für 10MB Uploads\n";
-} else {
- echo " ✅ post_max_size ist ausreichend\n";
-}
-
-// 3. .htaccess für Upload-Limits erstellen
-echo "\n3. 🔧 .htaccess Upload-Limits erstellen...\n";
-$htaccessContent = "
-# Upload-Limits für Bild-Upload
-php_value upload_max_filesize 10M
-php_value post_max_size 10M
-php_value max_file_uploads 20
-php_value memory_limit 256M
-php_value max_execution_time 300
-php_value max_input_time 300
-";
-
-if (file_exists('public/.htaccess')) {
- $currentHtaccess = file_get_contents('public/.htaccess');
-
- // Prüfe ob Upload-Limits bereits vorhanden sind
- if (strpos($currentHtaccess, 'upload_max_filesize') === false) {
- // Füge Upload-Limits hinzu
- $newHtaccess = $currentHtaccess . "\n" . $htaccessContent;
- file_put_contents('public/.htaccess', $newHtaccess);
- echo " ✅ Upload-Limits zu .htaccess hinzugefügt\n";
- } else {
- echo " ℹ️ Upload-Limits bereits in .htaccess vorhanden\n";
- }
-} else {
- echo " ❌ public/.htaccess nicht gefunden\n";
-}
-
-// 4. Test-Upload-Funktionalität
-echo "\n4. 🧪 Test Upload-Funktionalität...\n";
-
-// Prüfe GD Extension
-if (extension_loaded('gd')) {
- echo " ✅ GD Extension geladen\n";
-} else {
- echo " ❌ GD Extension nicht geladen - Bildverarbeitung nicht möglich\n";
-}
-
-// Prüfe Storage-Verzeichnis
-$storagePath = 'storage/app/public/nail_polishes';
-if (is_dir($storagePath)) {
- echo " ✅ Storage-Verzeichnis existiert: $storagePath\n";
-} else {
- echo " ⚠️ Storage-Verzeichnis existiert nicht: $storagePath\n";
- mkdir($storagePath, 0755, true);
- echo " ✅ Storage-Verzeichnis erstellt\n";
-}
-
-// Prüfe Schreibrechte
-if (is_writable($storagePath)) {
- echo " ✅ Storage-Verzeichnis beschreibbar\n";
-} else {
- echo " ❌ Storage-Verzeichnis nicht beschreibbar\n";
-}
-
-// 5. Laravel Storage Link prüfen
-echo "\n5. 🔗 Laravel Storage Link prüfen...\n";
-$publicStoragePath = 'public/storage';
-if (is_link($publicStoragePath)) {
- echo " ✅ Storage Link existiert\n";
-} else {
- echo " ⚠️ Storage Link existiert nicht\n";
- if (file_exists('public/storage')) {
- echo " ℹ️ public/storage ist ein Verzeichnis, kein Link\n";
- } else {
- echo " ℹ️ public/storage existiert nicht\n";
- }
-}
-
-echo "\n✅ Upload-Limits Fix abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/create-nail-polish\n";
-echo "📝 Versuchen Sie ein Handy-Foto hochzuladen (bis 10MB)\n";
-echo "\n📋 Falls Upload immer noch fehlschlägt:\n";
-echo "- Prüfen Sie die Browser-Entwicklertools (F12) für Details\n";
-echo "- Schauen Sie in storage/logs/laravel.log für Laravel-Fehler\n";
-echo "- Prüfen Sie die Apache-Logs für Server-Fehler\n";
-?>
diff --git a/fix-user-login.sh b/fix-user-login.sh
deleted file mode 100755
index e69de29..0000000
diff --git a/fix-webspace-production.sh b/fix-webspace-production.sh
deleted file mode 100755
index e69de29..0000000
diff --git a/force-upload-fix.sh b/force-upload-fix.sh
deleted file mode 100755
index eb12120..0000000
--- a/force-upload-fix.sh
+++ /dev/null
@@ -1,158 +0,0 @@
-#!/bin/bash
-
-echo "🚨 Force Fix: Upload-Limits erzwingen"
-echo "===================================="
-
-# 1. Laravel Cache komplett leeren
-echo "1. 🧹 Laravel Cache komplett leeren..."
-php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"
-php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"
-php artisan route:clear 2>/dev/null || echo " ⚠️ route:clear übersprungen"
-php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"
-php artisan config:cache 2>/dev/null || echo " ⚠️ config:cache übersprungen"
-
-# 2. Bootstrap Cache leeren
-echo "2. 🗂️ Bootstrap Cache leeren..."
-rm -f bootstrap/cache/*.php 2>/dev/null || echo " ⚠️ bootstrap/cache/*.php nicht gefunden"
-
-# 3. .htaccess Upload-Limits erzwingen
-echo "3. 🔧 .htaccess Upload-Limits erzwingen..."
-cat > public/.htaccess << 'EOF'
-
- RewriteEngine On
-
- # Force HTTPS
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
-
- # Handle Authorization Header
- RewriteCond %{HTTP:Authorization} .
- RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
- # Redirect Trailing Slashes If Not A Folder...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_URI} (.+)/$
- RewriteRule ^ %1 [L,R=301]
-
- # Send Requests To Front Controller...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^ index.php [L]
-
-
-# Upload-Limits für Bild-Upload
-php_value upload_max_filesize 10M
-php_value post_max_size 10M
-php_value max_file_uploads 20
-php_value memory_limit 256M
-php_value max_execution_time 300
-php_value max_input_time 300
-
-# Protect sensitive files
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-EOF
-
-echo " ✅ .htaccess mit Upload-Limits erstellt"
-
-# 4. PHP-Konfiguration prüfen
-echo "4. 🔍 PHP-Konfiguration prüfen..."
-php fix-upload-limits.php
-
-# 5. Apache neu laden
-echo "5. 🔄 Apache neu laden..."
-systemctl reload apache2 2>/dev/null || service apache2 reload 2>/dev/null || echo " ⚠️ Apache reload fehlgeschlagen"
-
-# 6. Test-Script erstellen
-echo "6. 🧪 Test-Script erstellen..."
-cat > test-upload-limits.php << 'EOF'
- ini_get('upload_max_filesize'),
- 'post_max_size' => ini_get('post_max_size'),
- 'max_file_uploads' => ini_get('max_file_uploads'),
- 'memory_limit' => ini_get('memory_limit')
-];
-
-foreach ($limits as $setting => $value) {
- echo " - $setting: $value\n";
-}
-
-// 2. Laravel Validierungsregeln prüfen
-echo "\n2. Laravel Validierungsregeln:\n";
-$controllerPath = 'app/Http/Controllers/UserNailPolishController.php';
-if (file_exists($controllerPath)) {
- $content = file_get_contents($controllerPath);
- if (preg_match('/image.*max:(\d+)/', $content, $matches)) {
- $maxKB = $matches[1];
- $maxMB = $maxKB / 1024;
- echo " - Bild-Upload-Limit: {$maxKB}KB ({$maxMB}MB)\n";
-
- if ($maxMB >= 10) {
- echo " ✅ Upload-Limit ist ausreichend (>= 10MB)\n";
- } else {
- echo " ❌ Upload-Limit ist zu klein (< 10MB)\n";
- }
- } else {
- echo " ❌ Keine Bild-Upload-Validierung gefunden\n";
- }
-} else {
- echo " ❌ Controller nicht gefunden\n";
-}
-
-// 3. View-Text prüfen
-echo "\n3. View-Text:\n";
-$viewPath = 'resources/views/user-nail-polishes/create.blade.php';
-if (file_exists($viewPath)) {
- $content = file_get_contents($viewPath);
- if (preg_match('/Maximale Größe: (\d+MB)/', $content, $matches)) {
- echo " - Angezeigte Größe: {$matches[1]}\n";
-
- if ($matches[1] === '10MB') {
- echo " ✅ View zeigt korrekte Größe an\n";
- } else {
- echo " ❌ View zeigt falsche Größe an\n";
- }
- } else {
- echo " ❌ Keine Größenangabe in View gefunden\n";
- }
-} else {
- echo " ❌ View nicht gefunden\n";
-}
-
-echo "\n✅ Upload-Limits Test abgeschlossen!\n";
-echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/create-nail-polish\n";
-?>
-EOF
-
-echo " ✅ Test-Script erstellt"
-
-echo ""
-echo "✅ Force Upload-Limits Fix abgeschlossen!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. https://neonail.vogt.de.com/create-nail-polish"
-echo "2. Versuchen Sie ein Handy-Foto hochzuladen"
-echo ""
-echo "📝 Falls Problem besteht:"
-echo "- Führen Sie php test-upload-limits.php aus"
-echo "- Leeren Sie Browser-Cache"
-echo "- Testen Sie in einem Inkognito-Fenster"
diff --git a/htaccess-root.txt b/htaccess-root.txt
deleted file mode 100755
index 01f9743..0000000
--- a/htaccess-root.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-# NeoNail DB - Hauptverzeichnis .htaccess
-# Umleitung auf public/ Ordner
-
-# Sicherheit
-
- Order allow,deny
- Deny from all
-
-
-
- Order allow,deny
- Deny from all
-
-
-# Umleitung auf public/
-RewriteEngine On
-RewriteRule ^$ public/ [L]
-RewriteRule (.*) public/$1 [L]
-
-# Fallback für direkte PHP-Dateien
-
- Order allow,deny
- Allow from all
-
diff --git a/install-composer-local.sh b/install-composer-local.sh
deleted file mode 100755
index 1c4c061..0000000
--- a/install-composer-local.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-echo "📦 Composer lokale Installation"
-echo "=============================="
-
-# 1. Composer herunterladen
-echo "⬇️ Lade Composer herunter..."
-curl -sS https://getcomposer.org/installer | php
-
-# 2. Composer lokal verwenden
-echo "🔗 Verwende Composer lokal..."
-php composer.phar --version
-
-echo ""
-echo "🎉 Composer lokal verfügbar!"
-echo "📋 Verwenden Sie:"
-echo " php composer.phar install --no-dev"
-echo ""
-echo "📋 Oder für andere Composer-Befehle:"
-echo " php composer.phar [befehl]"
diff --git a/install-composer.sh b/install-composer.sh
deleted file mode 100755
index e14bef2..0000000
--- a/install-composer.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-echo "📦 Composer Installation"
-echo "======================="
-
-# 1. PHP und curl prüfen
-echo "🔍 Prüfe PHP und curl..."
-if ! command -v php &> /dev/null; then
- echo "❌ PHP nicht gefunden!"
- exit 1
-fi
-
-if ! command -v curl &> /dev/null; then
- echo "❌ curl nicht gefunden!"
- exit 1
-fi
-
-# 2. Composer herunterladen
-echo "⬇️ Lade Composer herunter..."
-curl -sS https://getcomposer.org/installer | php
-
-# 3. Composer global verfügbar machen
-echo "🔗 Mache Composer global verfügbar..."
-sudo mv composer.phar /usr/local/bin/composer
-sudo chmod +x /usr/local/bin/composer
-
-# 4. Test
-echo "✅ Teste Composer..."
-composer --version
-
-echo ""
-echo "🎉 Composer erfolgreich installiert!"
-echo "📋 Jetzt können Sie ausführen:"
-echo " composer install --no-dev"
diff --git a/install-gd-extension.sh b/install-gd-extension.sh
deleted file mode 100755
index c79a51d..0000000
--- a/install-gd-extension.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-echo "🖼️ GD PHP Extension installieren"
-echo "==============================="
-
-# 1. System-Update
-echo "🔄 System-Update..."
-apt update
-
-# 2. GD Extension installieren
-echo "📦 Installiere GD Extension..."
-apt install -y php-gd
-
-# 3. Weitere nötige Extensions
-echo "📦 Installiere weitere Extensions..."
-apt install -y libpng-dev libjpeg-dev libfreetype6-dev
-
-# 4. PHP-Module neu laden
-echo "🔄 Lade PHP-Module neu..."
-systemctl reload apache2 2>/dev/null || echo "⚠️ Apache reload übersprungen"
-systemctl reload nginx 2>/dev/null || echo "⚠️ Nginx reload übersprungen"
-
-# 5. GD Extension testen
-echo "🧪 Teste GD Extension..."
-php -m | grep -i gd
-
-# 6. PHP-Info für GD
-echo "📋 GD PHP-Info:"
-php -r "if (extension_loaded('gd')) { echo '✅ GD Extension ist aktiviert\n'; echo 'Version: ' . gd_info()['GD Version'] . '\n'; } else { echo '❌ GD Extension ist NICHT aktiviert\n'; }"
-
-# 7. Laravel Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-
-echo ""
-echo "✅ GD Extension installiert!"
-echo "📋 Testen Sie jetzt das Erstellen eines Lackes mit Bild"
diff --git a/install-sqlite.sh b/install-sqlite.sh
deleted file mode 100755
index c2136a4..0000000
--- a/install-sqlite.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-echo "🗄️ SQLite-Treiber Installation"
-echo "=============================="
-
-# 1. System-Update
-echo "🔄 System-Update..."
-apt update
-
-# 2. SQLite und PHP-SQLite installieren
-echo "📦 Installiere SQLite..."
-apt install -y sqlite3 php-sqlite3 php-pdo-sqlite
-
-# 3. PHP-Module neu laden
-echo "🔄 Lade PHP-Module neu..."
-systemctl reload apache2 2>/dev/null || echo "⚠️ Apache reload übersprungen"
-systemctl reload nginx 2>/dev/null || echo "⚠️ Nginx reload übersprungen"
-
-# 4. PHP-Info prüfen
-echo "🔍 Prüfe SQLite-Installation..."
-php -m | grep -i sqlite
-
-echo ""
-echo "✅ SQLite-Treiber installiert!"
-echo "📋 Testen Sie: php -m | grep sqlite"
diff --git a/laravel-test.php b/laravel-test.php
deleted file mode 100755
index 3e6bb76..0000000
--- a/laravel-test.php
+++ /dev/null
@@ -1,114 +0,0 @@
-Laravel-Test";
-
-// 1. Composer autoload testen
-echo "1. Composer Autoload: ";
-if (file_exists('vendor/autoload.php')) {
- require_once 'vendor/autoload.php';
- echo "✅ Autoload geladen ";
-} else {
- echo "❌ vendor/autoload.php nicht gefunden ";
- echo "Führen Sie 'composer install' aus ";
- exit;
-}
-
-// 2. Laravel Bootstrap testen
-echo "2. Laravel Bootstrap: ";
-if (file_exists('bootstrap/app.php')) {
- try {
- $app = require_once 'bootstrap/app.php';
- echo "✅ Laravel App geladen ";
- } catch (Exception $e) {
- echo "❌ Laravel Bootstrap Fehler: " . $e->getMessage() . " ";
- }
-} else {
- echo "❌ bootstrap/app.php nicht gefunden ";
-}
-
-// 3. .env laden testen
-echo "3. .env Konfiguration: ";
-if (file_exists('.env')) {
- $env_content = file_get_contents('.env');
- echo "✅ .env Datei gefunden ";
-
- // Wichtige Einstellungen prüfen
- $checks = [
- 'APP_ENV' => 'production',
- 'APP_DEBUG' => 'false',
- 'DB_CONNECTION' => 'sqlite',
- 'DB_DATABASE' => 'database.sqlite'
- ];
-
- foreach ($checks as $key => $expected) {
- if (preg_match("/^$key=(.*)$/m", $env_content, $matches)) {
- $value = trim($matches[1]);
- $status = ($value === $expected) ? "✅" : "⚠️";
- echo "$status $key = $value (erwartet: $expected) ";
- } else {
- echo "❌ $key nicht gefunden ";
- }
- }
-} else {
- echo "❌ .env Datei nicht gefunden ";
-}
-
-// 4. SQLite-Verbindung testen
-echo "4. SQLite-Verbindung: ";
-if (file_exists('database.sqlite')) {
- try {
- $pdo = new PDO('sqlite:database.sqlite');
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- echo "✅ SQLite-Verbindung erfolgreich ";
-
- // Tabellen prüfen
- $tables = $pdo->query("SELECT name FROM sqlite_master WHERE type='table'")->fetchAll(PDO::FETCH_COLUMN);
- echo "Gefundene Tabellen: " . implode(', ', $tables) . " ";
-
- } catch (PDOException $e) {
- echo "❌ SQLite-Fehler: " . $e->getMessage() . " ";
- }
-} else {
- echo "❌ database.sqlite nicht gefunden ";
-}
-
-// 5. Storage-Verzeichnis testen
-echo "5. Storage-Verzeichnis: ";
-if (is_dir('storage')) {
- if (is_writable('storage')) {
- echo "✅ storage/ ist schreibbar ";
- } else {
- echo "❌ storage/ ist nicht schreibbar ";
- }
-
- // Storage-Link prüfen
- if (is_link('public/storage')) {
- echo "✅ Storage-Link existiert ";
- } else {
- echo "⚠️ Storage-Link fehlt (php artisan storage:link) ";
- }
-} else {
- echo "❌ storage/ Verzeichnis nicht gefunden ";
-}
-
-// 6. Cache-Verzeichnis testen
-echo "6. Cache-Verzeichnis: ";
-if (is_dir('bootstrap/cache')) {
- if (is_writable('bootstrap/cache')) {
- echo "✅ bootstrap/cache/ ist schreibbar ";
- } else {
- echo "❌ bootstrap/cache/ ist nicht schreibbar ";
- }
-} else {
- echo "❌ bootstrap/cache/ Verzeichnis nicht gefunden ";
-}
-
-echo " ";
-echo "Empfohlene Aktionen: ";
-echo "1. Falls Composer fehlt: composer install ausführen ";
-echo "2. Falls .env falsch: env-sqlite-example.txt zu .env kopieren ";
-echo "3. Falls Berechtigungen falsch: chmod 755 storage/ bootstrap/cache/ ";
-echo "4. Falls SQLite fehlt: touch database.sqlite && chmod 664 database.sqlite ";
-echo "5. Falls Storage-Link fehlt: php artisan storage:link ";
-echo "6. Migrationen ausführen: php artisan migrate --force ";
-?>
diff --git a/mail-configuration-fix.md b/mail-configuration-fix.md
deleted file mode 100644
index 2c2a704..0000000
--- a/mail-configuration-fix.md
+++ /dev/null
@@ -1,97 +0,0 @@
-# 📧 Mail-Konfiguration Problem - Lösung
-
-## 🚨 **Problem:**
-- E-Mails werden nicht versendet
-- Weder User noch Admin erhalten E-Mails
-- Mail-Fehler in den Logs
-
-## 🔍 **Ursache:**
-SMTP-Server `mail.selfhost.de:465` ist nicht erreichbar oder falsch konfiguriert.
-
-## 🔧 **Lösung:**
-
-### **Schritt 1: Auf dem Webspace ausführen**
-
-```bash
-# 1. Ins Laravel-Verzeichnis wechseln
-cd /var/www/html
-
-# 2. Mail Configuration Fix ausführen
-./fix-mail-config.sh
-```
-
-### **Schritt 2: Manuell (falls Script nicht funktioniert)**
-
-```bash
-# 1. Backup der .env erstellen
-cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
-
-# 2. Mail-Konfiguration anpassen
-sed -i 's/MAIL_MAILER=smtp/MAIL_MAILER=log/' .env
-sed -i 's/MAIL_HOST=mail.selfhost.de/MAIL_HOST=127.0.0.1/' .env
-sed -i 's/MAIL_PORT=465/MAIL_PORT=1025/' .env
-sed -i 's/MAIL_USERNAME=.*/MAIL_USERNAME=null/' .env
-sed -i 's/MAIL_PASSWORD=.*/MAIL_PASSWORD=null/' .env
-sed -i 's/MAIL_ENCRYPTION=ssl/MAIL_ENCRYPTION=null/' .env
-sed -i 's/MAIL_FROM_ADDRESS=.*/MAIL_FROM_ADDRESS="noreply@neonail.vogt.de.com"/' .env
-sed -i 's/MAIL_FROM_NAME=.*/MAIL_FROM_NAME="NeoNail DB"/' .env
-
-# 3. Cache leeren
-php artisan config:clear
-
-# 4. Test-Mail senden
-php artisan tinker --execute="use Illuminate\Support\Facades\Mail; Mail::raw('Test-Mail von NeoNail DB - ' . now(), function(\$message) { \$message->to('test@example.com')->subject('Test-Mail'); }); echo 'Test-Mail gesendet';"
-```
-
-### **Schritt 3: E-Mails in Logs prüfen**
-
-```bash
-# Mail-Logs anzeigen
-tail -f storage/logs/laravel.log | grep -i mail
-
-# Oder alle Logs durchsuchen
-grep -i "mail\|email" storage/logs/laravel.log
-```
-
-## 🎯 **Was passiert jetzt:**
-
-### **Option 1: Log-Modus (empfohlen für Production)**
-- E-Mails werden in `storage/logs/laravel.log` geschrieben
-- Keine echten E-Mails versendet
-- System funktioniert ohne SMTP-Server
-
-### **Option 2: Echte E-Mail-Versendung**
-Für echte E-Mail-Versendung SMTP-Server konfigurieren:
-
-```env
-MAIL_MAILER=smtp
-MAIL_HOST=ihr-smtp-server.com
-MAIL_PORT=587
-MAIL_USERNAME=ihr-username
-MAIL_PASSWORD=ihr-passwort
-MAIL_ENCRYPTION=tls
-MAIL_FROM_ADDRESS="noreply@ihre-domain.com"
-MAIL_FROM_NAME="NeoNail DB"
-```
-
-## 📋 **Mail-Logs prüfen:**
-
-```bash
-# Letzte Mail-Einträge anzeigen
-tail -n 50 storage/logs/laravel.log | grep -i mail
-
-# Spezifische Mail suchen
-grep -i "willkommens-e-mail" storage/logs/laravel.log
-```
-
-## 🚀 **Nach dem Fix:**
-
-1. **Neuen User erstellen** - E-Mail wird in Logs geschrieben
-2. **Logs prüfen** - E-Mail-Inhalt anzeigen
-3. **Bei Bedarf** - SMTP-Server für echte E-Mails konfigurieren
-
-## ⚠️ **Wichtige Hinweise:**
-
-- **Log-Modus** ist sicher für Production ohne SMTP-Server
-- **E-Mails sind in Logs verfügbar** für Debugging
-- **SMTP-Konfiguration** nur bei verfügbarem Mail-Server
diff --git a/make-existing-user-admin.php b/make-existing-user-admin.php
deleted file mode 100644
index 7ac4eac..0000000
--- a/make-existing-user-admin.php
+++ /dev/null
@@ -1,71 +0,0 @@
-make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- echo "👑 User zum Admin machen ";
-
- // Alle User anzeigen
- echo "👥 Alle User: ";
- $allUsers = User::all();
-
- if ($allUsers->count() > 0) {
- echo "";
- echo "ID Name Email Erstellt Aktion ";
-
- foreach ($allUsers as $user) {
- $isAdmin = ($user->email === 'admin@neonail.com' || $user->email === 'neueradmin@neonail.com');
- echo "";
- echo "{$user->id} ";
- echo "{$user->name} ";
- echo "{$user->email} ";
- echo "{$user->created_at} ";
- echo "" . ($isAdmin ? "👑 Admin" : "👤 User") . " ";
- echo " ";
- }
- echo "
";
-
- // User zum Admin machen (Beispiel: User mit ID 2)
- $userId = 2; // Ändern Sie diese ID
- $user = User::find($userId);
-
- if ($user) {
- echo "🔧 User zum Admin machen: ";
- echo "User: {$user->name} ({$user->email})
";
-
- // Passwort ändern (optional)
- $newPassword = 'admin123';
- $user->password = bcrypt($newPassword);
- $user->save();
-
- echo "✅ User wurde zum Admin gemacht!
";
- echo "Neues Passwort: {$newPassword}
";
- echo "Login: {$user->email} / {$newPassword}
";
- } else {
- echo "❌ User mit ID {$userId} nicht gefunden
";
- }
-
- } else {
- echo "❌ Keine User gefunden
";
- }
-
- echo "🔑 Admin-Login: ";
- echo "Verwenden Sie eine der Admin-Emails:
";
- echo "";
- echo "admin@neonail.com ";
- echo "neueradmin@neonail.com ";
- echo " ";
- echo "Passwort: admin123
";
- echo "🚀 Zur Anwendung
";
-
-} catch (Exception $e) {
- echo "❌ Fehler: ";
- echo "{$e->getMessage()}
";
-}
-?>
diff --git a/make-user-admin.php b/make-user-admin.php
deleted file mode 100644
index 54ce959..0000000
--- a/make-user-admin.php
+++ /dev/null
@@ -1,65 +0,0 @@
-make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
- echo "👑 Neuen Admin-User erstellen ";
-
- // Prüfe ob User bereits existiert
- $email = 'neueradmin@neonail.com';
- $existingUser = User::where('email', $email)->first();
-
- if ($existingUser) {
- echo "✅ User existiert bereits! ";
- echo "Name: {$existingUser->name}
";
- echo "Email: {$existingUser->email}
";
- echo "ID: {$existingUser->id}
";
- echo "Erstellt: {$existingUser->created_at}
";
- } else {
- // Neuen Admin-User erstellen
- $newAdmin = User::create([
- 'name' => 'Neuer Admin',
- 'email' => $email,
- 'password' => bcrypt('admin123')
- ]);
-
- echo "✅ Neuer Admin-User erstellt! ";
- echo "Name: {$newAdmin->name}
";
- echo "Email: {$newAdmin->email}
";
- echo "Passwort: admin123
";
- echo "ID: {$newAdmin->id}
";
- }
-
- // Alle Admin-User anzeigen
- echo "👑 Alle Admin-User: ";
- $allUsers = User::all();
-
- echo "";
- echo "ID Name Email Erstellt ";
-
- foreach ($allUsers as $user) {
- echo "";
- echo "{$user->id} ";
- echo "{$user->name} ";
- echo "{$user->email} ";
- echo "{$user->created_at} ";
- echo " ";
- }
- echo "
";
-
- echo "🔑 Login-Daten: ";
- echo "Email: neueradmin@neonail.com
";
- echo "Passwort: admin123
";
- echo "🚀 Zur Anwendung
";
-
-} catch (Exception $e) {
- echo "❌ Fehler: ";
- echo "{$e->getMessage()}
";
-}
-?>
diff --git a/memory/MEMORY.md b/memory/MEMORY.md
new file mode 100644
index 0000000..bd9f5aa
--- /dev/null
+++ b/memory/MEMORY.md
@@ -0,0 +1,3 @@
+# Memory Index — NeoNail DB
+
+- [Project Overview](project_overview.md) — Laravel 12 Nagellack-Sammlungs-App, SQLite, Bootstrap 5, Admin/User-Rollen, Foto-Upload
diff --git a/memory/project_overview.md b/memory/project_overview.md
new file mode 100644
index 0000000..e7d84b1
--- /dev/null
+++ b/memory/project_overview.md
@@ -0,0 +1,34 @@
+---
+name: project-overview
+description: NeoNail DB — Laravel-Webapp für persönliche Nagellack-Sammlungen mit Fotos, Admin-Bereich und E-Mail-Benachrichtigungen
+metadata:
+ type: project
+---
+
+NeoNail DB ist eine Laravel 12 / PHP 8.2 Webanwendung (SQLite-Datenbank), bei der Nutzer ihre eigene Nagellack-Sammlung verwalten und Fotos hochladen können.
+
+**Kernfunktionen:**
+- User-Sammlung: eigene Lacke hinzufügen/entfernen (Many-to-Many via `user_nail_polishes`)
+- Foto-Upload: Bilder werden im `storage/public/nail_polishes/` Ordner gespeichert
+- Hersteller-Verwaltung: alle eingeloggten User können Hersteller anlegen/bearbeiten
+- Admin-Bereich (`/admin`): User-CRUD, Nagellack-Katalog, Statistiken, Willkommens-E-Mails
+- E-Mail: Willkommens-Mail an neue User + Bestätigungs-Mail an Admin (oliver@vogt.de.com)
+
+**Tech-Stack:**
+- Backend: Laravel 12, PHP 8.2, SQLite (database/database.sqlite)
+- Frontend: Bootstrap 5.3, Font Awesome 6, Blade-Templates
+- Bild-Verarbeitung: Intervention Image v3 (im NailPolishController), direkt im UserNailPolishController
+- Auth: Laravel UI (kein Breeze/Jetstream), session-basiert
+
+**Rollen:**
+- User: kann Sammlung verwalten, Hersteller anlegen, eigene Lacke hinzufügen
+- Admin: `is_admin`-Flag in users-Tabelle ODER E-Mail-Whitelist in User::isAdmin()
+
+**Wichtige Controller:**
+- `NailPolishController` — Admin-only CRUD für den globalen Katalog
+- `UserNailPolishController` — User-seitige Sammlung (index, available, add, remove, create/store)
+- `AdminController` — Dashboard, User-Management, Statistiken
+- `ManufacturerController` — für alle eingeloggten User
+
+**Why:** Persönliches Hobby-Projekt zur Verwaltung einer Nagellack-Sammlung.
+**How to apply:** Bei neuen Features beachten: User sehen nur ihre eigene Sammlung, nur Admins verwalten den Gesamt-Katalog. SQLite-Datei liegt doppelt (root + database/). Viele Debug-/Fix-Skripte im Root stammen aus der Produktions-Einrichtung und können ignoriert werden.
diff --git a/monitor-logs.php b/monitor-logs.php
deleted file mode 100644
index 8b3b10b..0000000
--- a/monitor-logs.php
+++ /dev/null
@@ -1,137 +0,0 @@
-
diff --git a/quick-500-fix.sh b/quick-500-fix.sh
deleted file mode 100755
index ac8a467..0000000
--- a/quick-500-fix.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash
-
-echo "🚨 Quick Fix: HTTP 500 Internal Server Error"
-echo "==========================================="
-
-# 1. Debug aktivieren
-echo "1. 🐛 Debug aktivieren..."
-if [ -f .env ]; then
- sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
- sed -i 's/APP_ENV=production/APP_ENV=local/' .env
- echo " ✅ Debug-Modus aktiviert"
-else
- echo " ❌ .env Datei nicht gefunden"
-fi
-
-# 2. Berechtigungen reparieren
-echo "2. 🔐 Berechtigungen reparieren..."
-chmod -R 755 storage/
-chmod -R 755 bootstrap/cache/
-chown -R www-data:www-data storage/
-chown -R www-data:www-data bootstrap/cache/
-echo " ✅ Berechtigungen repariert"
-
-# 3. Cache leeren
-echo "3. 🧹 Cache leeren..."
-rm -f bootstrap/cache/*.php 2>/dev/null || echo " ⚠️ bootstrap/cache/*.php nicht gefunden"
-rm -f storage/framework/cache/* 2>/dev/null || echo " ⚠️ storage/framework/cache/* nicht gefunden"
-rm -f storage/framework/views/* 2>/dev/null || echo " ⚠️ storage/framework/views/* nicht gefunden"
-echo " ✅ Cache geleert"
-
-# 4. Log-Dateien erstellen
-echo "4. 📝 Log-Dateien erstellen..."
-mkdir -p storage/logs/
-touch storage/logs/laravel.log
-chmod 666 storage/logs/laravel.log
-chown www-data:www-data storage/logs/laravel.log
-echo " ✅ Log-Dateien erstellt"
-
-# 5. Debug-Script ausführen
-echo "5. 🔍 Debug-Script ausführen..."
-php debug-500-error.php
-
-echo ""
-echo "✅ Quick Fix abgeschlossen!"
-echo ""
-echo "🔗 Testen Sie jetzt:"
-echo "1. https://neonail.vogt.de.com"
-echo "2. Falls Fehler bestehen, prüfen Sie die Debug-Ausgabe oben"
-echo "3. Schauen Sie in storage/logs/laravel.log für Details"
diff --git a/quick-debug.sh b/quick-debug.sh
deleted file mode 100755
index 2cf2de3..0000000
--- a/quick-debug.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-echo "🔧 Schnelle Debug-Aktivierung"
-echo "============================"
-
-# 1. Debug aktivieren
-echo "📝 Aktiviere Debug-Modus..."
-sed -i 's/APP_DEBUG=false/APP_DEBUG=true/' .env
-echo "✅ APP_DEBUG=true gesetzt"
-
-# 2. Cache leeren
-echo "🧹 Leere Laravel Cache..."
-php artisan config:clear 2>/dev/null || echo "⚠️ config:clear übersprungen"
-php artisan cache:clear 2>/dev/null || echo "⚠️ cache:clear übersprungen"
-
-# 3. Berechtigungen prüfen
-echo "🔐 Prüfe Berechtigungen..."
-chmod -R 777 storage/ 2>/dev/null
-chmod -R 777 bootstrap/cache/ 2>/dev/null
-
-# 4. Test
-echo "🧪 Teste Anwendung..."
-curl -s http://192.168.30.81 | head -20
-
-echo ""
-echo "✅ Debug aktiviert!"
-echo "📋 Öffnen Sie: http://192.168.30.81"
-echo "📋 Fehlermeldung wird jetzt angezeigt"
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php
index e6a5913..1610e5a 100755
--- a/resources/views/auth/login.blade.php
+++ b/resources/views/auth/login.blade.php
@@ -1,68 +1,82 @@
@extends('layouts.app')
-@section('title', 'Anmelden - NeoNail DB')
+@section('title', 'Anmelden – NeoNail DB')
@section('content')
-
-
+
+
+
+ {{-- Logo / Hero --}}
+
+
+ 💅
+
+
+ NeoNail DB
+
+
+ Melden Sie sich an, um Ihre Sammlung zu verwalten
+
+
+
+ {{-- Card --}}
-
-
-
NeoNail DB
-
Anmelden um Ihre Sammlung zu verwalten
-
-
@endsection
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
index 49d34a0..3834fc7 100755
--- a/resources/views/layouts/app.blade.php
+++ b/resources/views/layouts/app.blade.php
@@ -4,174 +4,499 @@
-
@yield("title", "NeoNail Datenbank")
-
-
+
@yield('title', 'NeoNail DB')
+
+
+
+
-
-
+
-
- @yield("styles")
+
+ @yield('styles')
-
+
-
- NeoNail DB
+
+ 💅
+ NeoNail DB
-
-
+
+
-
+
-
+
- @if(session("success"))
-
- {{ session("success") }}
-
-
- @endif
-
- @if(session("error"))
-
- {{ session("error") }}
-
-
- @endif
-
- @yield("content")
+ @foreach(['success' => 'alert-success', 'error' => 'alert-danger', 'warning' => 'alert-warning'] as $key => $cls)
+ @if(session($key))
+
+ @if($key === 'success')
+ @elseif($key === 'error')
+ @else @endif
+ {{ session($key) }}
+
+
+ @endif
+ @endforeach
+
+ @yield('content')
-
-
-
-
-
- @yield("scripts")
+ @yield('scripts')
-