übergang auf pakete, integration von stripe und paypal, blog hinzugefügt.
This commit is contained in:
14
resources/views/emails/purchase.blade.php
Normal file
14
resources/views/emails/purchase.blade.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Purchase Confirmation</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Kauf-Bestätigung</h1>
|
||||
<p>Vielen Dank für Ihren Kauf, {{ $purchase->user->fullName }}!</p>
|
||||
<p>Package: {{ $purchase->package->name }}</p>
|
||||
<p>Preis: {{ $purchase->amount }} €</p>
|
||||
<p>Das Package ist nun in Ihrem Tenant-Account aktiviert.</p>
|
||||
<p>Mit freundlichen Grüßen,<br>Das Fotospiel-Team</p>
|
||||
</body>
|
||||
</html>
|
||||
14
resources/views/emails/welcome.blade.php
Normal file
14
resources/views/emails/welcome.blade.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Welcome to Fotospiel</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Willkommen bei Fotospiel, {{ $user->fullName }}!</h1>
|
||||
<p>Vielen Dank für Ihre Registrierung. Ihr Account ist nun aktiv.</p>
|
||||
<p>Username: {{ $user->username }}</p>
|
||||
<p>E-Mail: {{ $user->email }}</p>
|
||||
<p>Bitte verifizieren Sie Ihre E-Mail-Adresse, um auf das Admin-Panel zuzugreifen.</p>
|
||||
<p>Mit freundlichen Grüßen,<br>Das Fotospiel-Team</p>
|
||||
</body>
|
||||
</html>
|
||||
73
resources/views/layouts/marketing.blade.php
Normal file
73
resources/views/layouts/marketing.blade.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>@yield('title', 'Fotospiel - Event-Fotos einfach und sicher mit QR-Codes')</title>
|
||||
<meta name="description" content="Sammle Gastfotos für Events mit QR-Codes und unserer PWA-Plattform. Für Hochzeiten, Firmenevents und mehr. Kostenloser Einstieg.">
|
||||
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
||||
@vite(['resources/css/app.css'])
|
||||
<style>
|
||||
@keyframes aurora {
|
||||
0%, 100% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
}
|
||||
.bg-aurora {
|
||||
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
|
||||
background-size: 400% 400%;
|
||||
animation: aurora 15s ease infinite;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-50 text-gray-900">
|
||||
<!-- Header -->
|
||||
<header class="bg-white shadow-md sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-2">
|
||||
<a href="/" class="text-2xl font-bold text-gray-900">Fotospiel</a>
|
||||
<svg class="w-6 h-6 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<nav class="hidden md:flex space-x-6 items-center">
|
||||
<a href="#how-it-works" class="text-gray-600 hover:text-gray-900">How it works</a>
|
||||
<a href="#features" class="text-gray-600 hover:text-gray-900">Features</a>
|
||||
<div class="relative group">
|
||||
<button class="text-gray-600 hover:text-gray-900">Occasions</button>
|
||||
<div class="absolute top-full left-0 mt-2 bg-white border rounded shadow-lg hidden group-hover:block">
|
||||
<a href="/occasions/weddings" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Weddings</a>
|
||||
<a href="/occasions/birthdays" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Birthdays</a>
|
||||
<a href="/occasions/corporate-events" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Corporate Events</a>
|
||||
<a href="/occasions/family-celebrations" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Family Celebrations</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-600 hover:text-gray-900">Blog</a>
|
||||
<a href="/packages" class="text-gray-600 hover:text-gray-900">Packages</a>
|
||||
<a href="#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
<a href="/packages" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold hover:bg-[#FF69B4] transition">Packages entdecken</a>
|
||||
</nav>
|
||||
<!-- Mobile Menu Placeholder (Hamburger) -->
|
||||
<button class="md:hidden text-gray-600">☰</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
@yield('content')
|
||||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="bg-gray-800 text-white py-8 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<p>© 2025 Fotospiel GmbH. Alle Rechte vorbehalten.</p>
|
||||
<div class="mt-4 space-x-4">
|
||||
<a href="/impressum" class="hover:text-[#FFB6C1]">Impressum</a>
|
||||
<a href="/datenschutz" class="hover:text-[#FFB6C1]">Datenschutz</a>
|
||||
<a href="#contact" class="hover:text-[#FFB6C1]">Kontakt</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@stack('scripts')
|
||||
</body>
|
||||
</html>
|
||||
@@ -15,5 +15,14 @@
|
||||
<p>Package-Daten (Limits, Features) sind anonymisiert und werden nur für die Funktionalität benötigt. Consent für Zahlungen und E-Mails wird bei Kauf eingeholt. Daten werden nach 10 Jahren gelöscht.</p>
|
||||
<p>Ihre Rechte: Auskunft, Löschung, Widerspruch. Kontaktieren Sie uns unter <a href="/kontakt">Kontakt</a>.</p>
|
||||
<p>Cookies: Nur funktionale Cookies für die PWA.</p>
|
||||
|
||||
<h2>Persönliche Datenverarbeitung</h2>
|
||||
<p>Bei der Registrierung und Nutzung des Systems werden folgende persönliche Daten verarbeitet: Vor- und Nachname, Adresse, Telefonnummer, E-Mail-Adresse, Username. Diese Daten werden zur Erfüllung des Vertrags (Package-Kauf, Tenant-Management) und für die Authentifizierung verwendet. Die Verarbeitung erfolgt gemäß Art. 6 Abs. 1 lit. b DSGVO.</p>
|
||||
|
||||
<h2>Account-Löschung</h2>
|
||||
<p>Sie haben das Recht, Ihre persönlichen Daten jederzeit löschen zu lassen (Recht auf Löschung, Art. 17 DSGVO). Kontaktieren Sie uns unter [E-Mail] zur Löschung Ihres Accounts. Alle zugehörigen Daten (Events, Photos, Purchases) werden gelöscht, soweit keine gesetzlichen Aufbewahrungspflichten bestehen.</p>
|
||||
|
||||
<h2>Datensicherheit</h2>
|
||||
<p>Wir verwenden HTTPS, verschlüsselte Speicherung (Passwörter hashed) und regelmäßige Backups. Zugriff auf Daten ist rollebasierend beschränkt (Tenant vs SuperAdmin).</p>
|
||||
</body>
|
||||
</html>
|
||||
40
resources/views/legal/kontakt.blade.php
Normal file
40
resources/views/legal/kontakt.blade.php
Normal file
@@ -0,0 +1,40 @@
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', 'Kontakt - Fotospiel')
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
|
||||
<div class="max-w-2xl mx-auto">
|
||||
<h1 class="text-3xl font-bold text-center mb-8">Kontakt</h1>
|
||||
<p class="text-center text-gray-600 mb-8">Haben Sie Fragen? Schreiben Sie uns!</p>
|
||||
<form method="POST" action="{{ route('kontakt.submit') }}" class="space-y-4">
|
||||
@csrf
|
||||
<div>
|
||||
<label for="name" class="block text-sm font-medium text-gray-700 mb-2">Name</label>
|
||||
<input type="text" id="name" name="name" required class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-[#FFB6C1]">
|
||||
</div>
|
||||
<div>
|
||||
<label for="email" class="block text-sm font-medium text-gray-700 mb-2">E-Mail</label>
|
||||
<input type="email" id="email" name="email" required class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-[#FFB6C1]">
|
||||
</div>
|
||||
<div>
|
||||
<label for="message" class="block text-sm font-medium text-gray-700 mb-2">Nachricht</label>
|
||||
<textarea id="message" name="message" rows="4" required class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-[#FFB6C1]"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="w-full bg-[#FFB6C1] text-white py-3 rounded-md font-semibold hover:bg-[#FF69B4] transition">Senden</button>
|
||||
</form>
|
||||
@if (session('success'))
|
||||
<p class="mt-4 text-green-600 text-center">{{ session('success') }}</p>
|
||||
@endif
|
||||
@if ($errors->any())
|
||||
<div class="mt-4 p-4 bg-red-100 border border-red-400 rounded-md">
|
||||
<ul class="list-disc list-inside">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,57 +1,8 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Fotospiel - Event-Fotos einfach und sicher mit QR-Codes</title>
|
||||
<meta name="description" content="Sammle Gastfotos für Events mit QR-Codes und unserer PWA-Plattform. Für Hochzeiten, Firmenevents und mehr. Kostenloser Einstieg.">
|
||||
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
||||
@vite(['resources/css/app.css'])
|
||||
<style>
|
||||
@keyframes aurora {
|
||||
0%, 100% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
}
|
||||
.bg-aurora {
|
||||
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
|
||||
background-size: 400% 400%;
|
||||
animation: aurora 15s ease infinite;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-50 text-gray-900">
|
||||
<!-- Header -->
|
||||
<header class="bg-white shadow-md sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-2">
|
||||
<a href="/" class="text-2xl font-bold text-gray-900">Fotospiel</a>
|
||||
<svg class="w-6 h-6 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<nav class="hidden md:flex space-x-6 items-center">
|
||||
<a href="#how-it-works" class="text-gray-600 hover:text-gray-900">How it works</a>
|
||||
<a href="#features" class="text-gray-600 hover:text-gray-900">Features</a>
|
||||
<div class="relative group">
|
||||
<button class="text-gray-600 hover:text-gray-900">Occasions</button>
|
||||
<div class="absolute top-full left-0 mt-2 bg-white border rounded shadow-lg hidden group-hover:block">
|
||||
<a href="/occasions/weddings" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Weddings</a>
|
||||
<a href="/occasions/birthdays" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Birthdays</a>
|
||||
<a href="/occasions/corporate-events" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Corporate Events</a>
|
||||
<a href="/occasions/family-celebrations" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Family Celebrations</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-600 hover:text-gray-900">Blog</a>
|
||||
<a href="/packages" class="text-gray-600 hover:text-gray-900">Packages</a>
|
||||
<a href="#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
<a href="/packages" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold hover:bg-[#FF69B4] transition">Packages entdecken</a>
|
||||
</nav>
|
||||
<!-- Mobile Menu Placeholder (Hamburger) -->
|
||||
<button class="md:hidden text-gray-600">☰</button>
|
||||
</div>
|
||||
</header>
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', 'Fotospiel - Event-Fotos einfach und sicher mit QR-Codes')
|
||||
|
||||
@section('content')
|
||||
<!-- Hero Section id="hero" -->
|
||||
<section id="hero" class="bg-aurora text-white py-20 px-4">
|
||||
<div class="container mx-auto flex flex-col md:flex-row items-center gap-8 max-w-6xl">
|
||||
@@ -142,7 +93,7 @@
|
||||
<section id="contact" class="py-20 px-4 bg-white">
|
||||
<div class="container mx-auto max-w-2xl">
|
||||
<h2 class="text-3xl font-bold text-center mb-12">Kontakt</h2>
|
||||
<form method="POST" action="/kontakt" class="space-y-4">
|
||||
<form method="POST" action="{{ route('kontakt.submit') }}" class="space-y-4">
|
||||
@csrf
|
||||
<div>
|
||||
<label for="name" class="block text-sm font-medium mb-2">Name</label>
|
||||
@@ -210,17 +161,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="bg-gray-800 text-white py-8 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<p>© 2025 Fotospiel GmbH. Alle Rechte vorbehalten.</p>
|
||||
<div class="mt-4 space-x-4">
|
||||
<a href="/impressum" class="hover:text-[#FFB6C1]">Impressum</a>
|
||||
<a href="/datenschutz" class="hover:text-[#FFB6C1]">Datenschutz</a>
|
||||
<a href="#contact" class="hover:text-[#FFB6C1]">Kontakt</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@endsection
|
||||
@@ -3,12 +3,8 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ $post->meta_title ?? $post->title }} - Fotospiel</title>
|
||||
<meta name="description" content="{{ $post->meta_description ?? $post->excerpt }}">
|
||||
<meta property="og:title" content="{{ $post->meta_title ?? $post->title }}">
|
||||
<meta property="og:description" content="{{ $post->meta_description ?? $post->excerpt }}">
|
||||
<meta property="og:image" content="{{ $post->featured_image }}">
|
||||
<meta property="og:url" content="{{ route('blog.show', $post) }}">
|
||||
<title>{{ $post->title }} - Fotospiel Blog</title>
|
||||
<meta name="description" content="{{ Str::limit(strip_tags($post->content), 160) }}">
|
||||
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
||||
@vite(['resources/css/app.css'])
|
||||
</head>
|
||||
@@ -33,44 +29,35 @@
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-900 font-semibold">Blog</a>
|
||||
<a href="/marketing#pricing" class="text-gray-600 hover:text-gray-900">Pricing</a>
|
||||
<a href="/packages" class="text-gray-600 hover:text-gray-900">Pricing</a>
|
||||
<a href="/marketing#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
</nav>
|
||||
<a href="/buy-credits/basic" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold">Jetzt starten</a>
|
||||
<a href="/packages" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold">Jetzt starten</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Blog Post Hero -->
|
||||
<section class="py-20 px-4 bg-gradient-to-r from-[#FFB6C1] via-[#FFD700] to-[#87CEEB] text-white">
|
||||
<div class="container mx-auto max-w-4xl">
|
||||
@if ($post->featured_image)
|
||||
<img src="{{ $post->featured_image }}" alt="{{ $post->title }}" class="w-full h-64 object-cover rounded mb-8">
|
||||
@endif
|
||||
<!-- Hero for Single Post -->
|
||||
<section class="bg-gradient-to-r from-[#FFB6C1] via-[#FFD700] to-[#87CEEB] text-white py-20 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-4">{{ $post->title }}</h1>
|
||||
<p class="text-xl mb-8">{{ $post->excerpt }}</p>
|
||||
<p class="text-sm text-gray-200">Veröffentlicht am {{ $post->published_at->format('d.m.Y') }}</p>
|
||||
<p class="text-lg mb-8">Von {{ $post->author->name ?? 'Fotospiel Team' }} | {{ $post->published_at->format('d.m.Y') }}</p>
|
||||
@if ($post->featured_image)
|
||||
<img src="{{ $post->featured_image }}" alt="{{ $post->title }}" class="mx-auto rounded-lg shadow-lg max-w-2xl">
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Blog Post Content -->
|
||||
<section class="py-20 px-4">
|
||||
<div class="container mx-auto max-w-4xl">
|
||||
<div class="prose max-w-none">
|
||||
{!! $post->content !!}
|
||||
</div>
|
||||
<div class="mt-8 p-4 bg-gray-100 rounded">
|
||||
<h3 class="font-semibold mb-2">Kategorien:</h3>
|
||||
@foreach ($post->categories as $category)
|
||||
<span class="inline-block bg-[#FFB6C1] text-white px-2 py-1 rounded text-sm mr-2 mb-2">{{ $category->name }}</span>
|
||||
@endforeach
|
||||
<h3 class="font-semibold mt-4 mb-2">Tags:</h3>
|
||||
@foreach ($post->tags as $tag)
|
||||
<span class="inline-block bg-gray-200 text-gray-800 px-2 py-1 rounded text-sm mr-2 mb-2">#{{ $tag->name }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="mt-8 text-center">
|
||||
<a href="/blog" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold">Zurück zum Blog</a>
|
||||
</div>
|
||||
<!-- Post Content -->
|
||||
<section class="py-20 px-4 bg-white">
|
||||
<div class="container mx-auto max-w-4xl prose prose-lg max-w-none">
|
||||
{!! $post->content !!}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Back to Blog -->
|
||||
<section class="py-10 px-4 bg-gray-50">
|
||||
<div class="container mx-auto text-center">
|
||||
<a href="/blog" class="bg-[#FFB6C1] text-white px-8 py-3 rounded-full font-semibold hover:bg-[#FF69B4] transition">Zurück zum Blog</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,41 +1,8 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Fotospiel - Blog</title>
|
||||
<meta name="description" content="Tipps, News und Anleitungen zu Event-Fotos mit QR-Codes und PWA.">
|
||||
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
||||
@vite(['resources/css/app.css'])
|
||||
</head>
|
||||
<body class="bg-gray-50 text-gray-900">
|
||||
<!-- Shared Header (wie in occasions.blade.php) -->
|
||||
<header class="bg-white shadow-md sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-2">
|
||||
<a href="/marketing" class="text-2xl font-bold text-gray-900">Fotospiel</a>
|
||||
<svg class="w-6 h-6 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
|
||||
</div>
|
||||
<nav class="hidden md:flex space-x-6">
|
||||
<a href="/marketing#how-it-works" class="text-gray-600 hover:text-gray-900">How it works</a>
|
||||
<a href="/marketing#features" class="text-gray-600 hover:text-gray-900">Features</a>
|
||||
<div class="relative">
|
||||
<button class="text-gray-600 hover:text-gray-900">Occasions</button>
|
||||
<div class="absolute top-full left-0 mt-2 bg-white border rounded shadow-lg">
|
||||
<a href="/occasions/weddings" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Weddings</a>
|
||||
<a href="/occasions/birthdays" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Birthdays</a>
|
||||
<a href="/occasions/corporate-events" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Corporate Events</a>
|
||||
<a href="/occasions/family-celebrations" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Family Celebrations</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-900 font-semibold">Blog</a>
|
||||
<a href="/marketing#pricing" class="text-gray-600 hover:text-gray-900">Pricing</a>
|
||||
<a href="/marketing#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
</nav>
|
||||
<a href="/buy-credits/basic" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold">Jetzt starten</a>
|
||||
</div>
|
||||
</header>
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', 'Fotospiel - Blog')
|
||||
|
||||
@section('content')
|
||||
<!-- Hero for Blog -->
|
||||
<section class="bg-gradient-to-r from-[#FFB6C1] via-[#FFD700] to-[#87CEEB] text-white py-20 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
@@ -73,17 +40,4 @@
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer (wie in occasions.blade.php) -->
|
||||
<footer class="bg-gray-800 text-white py-8 px-4 mt-20">
|
||||
<div class="container mx-auto text-center">
|
||||
<p>© 2025 Fotospiel GmbH. Alle Rechte vorbehalten.</p>
|
||||
<div class="mt-4 space-x-4">
|
||||
<a href="/impressum" class="hover:text-[#FFB6C1]">Impressum</a>
|
||||
<a href="/datenschutz" class="hover:text-[#FFB6C1]">Datenschutz</a>
|
||||
<a href="/marketing#contact" class="hover:text-[#FFB6C1]">Kontakt</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@endsection
|
||||
@@ -29,7 +29,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-600 hover:text-gray-900">Blog</a>
|
||||
<a href="/marketing#pricing" class="text-gray-600 hover:text-gray-900">Pricing</a>
|
||||
<a href="/packages" class="text-gray-600 hover:text-gray-900">Pricing</a>
|
||||
<a href="/marketing#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
</nav>
|
||||
<a href="/packages" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold">Packages wählen</a>
|
||||
|
||||
@@ -73,7 +73,11 @@
|
||||
</li>
|
||||
@endif
|
||||
@if($package->features)
|
||||
@foreach(json_decode($package->features, true) as $feature => $enabled)
|
||||
@php
|
||||
$features = is_array($package->features) ? $package->features : (is_string($package->features) ? json_decode($package->features, true) : []);
|
||||
$features = is_array($features) ? $features : [];
|
||||
@endphp
|
||||
@foreach($features as $feature => $enabled)
|
||||
@if($enabled)
|
||||
<li class="flex items-center text-sm text-gray-700">
|
||||
<svg class="w-4 h-4 text-green-500 mr-2" fill="currentColor" viewBox="0 0 20 20">
|
||||
@@ -85,8 +89,8 @@
|
||||
@endforeach
|
||||
@endif
|
||||
</ul>
|
||||
<a href="/packages?type=endcustomer&package_id={{ $package->id }}" class="w-full bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-md text-center font-semibold transition duration-300">
|
||||
{{ __('marketing.packages.buy_now') }}
|
||||
<a href="{{ route('register', ['package_id' => $package->id]) }}" class="w-full bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-md text-center font-semibold transition duration-300">
|
||||
{{ __('marketing.packages.register_buy') }}
|
||||
</a>
|
||||
</div>
|
||||
@endforeach
|
||||
@@ -118,7 +122,11 @@
|
||||
</li>
|
||||
@endif
|
||||
@if($package->features)
|
||||
@foreach(json_decode($package->features, true) as $feature => $enabled)
|
||||
@php
|
||||
$features = is_array($package->features) ? $package->features : (is_string($package->features) ? json_decode($package->features, true) : []);
|
||||
$features = is_array($features) ? $features : [];
|
||||
@endphp
|
||||
@foreach($features as $feature => $enabled)
|
||||
@if($enabled)
|
||||
<li class="flex items-center text-sm text-gray-700">
|
||||
<svg class="w-4 h-4 text-green-500 mr-2" fill="currentColor" viewBox="0 0 20 20">
|
||||
@@ -130,8 +138,8 @@
|
||||
@endforeach
|
||||
@endif
|
||||
</ul>
|
||||
<a href="/packages?type=reseller&package_id={{ $package->id }}" class="w-full bg-green-600 hover:bg-green-700 text-white py-2 px-4 rounded-md text-center font-semibold transition duration-300">
|
||||
{{ __('marketing.packages.subscribe_now') }}
|
||||
<a href="{{ route('register', ['package_id' => $package->id]) }}" class="w-full bg-green-600 hover:bg-green-700 text-white py-2 px-4 rounded-md text-center font-semibold transition duration-300">
|
||||
{{ __('marketing.packages.register_subscribe') }}
|
||||
</a>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
99
resources/views/marketing/profile.blade.php
Normal file
99
resources/views/marketing/profile.blade.php
Normal file
@@ -0,0 +1,99 @@
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', __('profile.title'))
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
|
||||
<div class="max-w-md w-full space-y-8">
|
||||
<div>
|
||||
<h2 class="mt-6 text-center text-3xl font-extrabold text-gray-900">
|
||||
{{ __('profile.title') }}
|
||||
</h2>
|
||||
</div>
|
||||
<form class="mt-8 space-y-6" action="{{ route('profile.update') }}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<!-- First Name -->
|
||||
<div>
|
||||
<label for="first_name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.first_name') }}
|
||||
</label>
|
||||
<input id="first_name" name="first_name" type="text" required
|
||||
value="{{ old('first_name', $user->first_name) }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('first_name') border-red-500 @enderror"
|
||||
placeholder="{{ __('profile.first_name_placeholder') }}">
|
||||
@error('first_name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Last Name -->
|
||||
<div>
|
||||
<label for="last_name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.last_name') }}
|
||||
</label>
|
||||
<input id="last_name" name="last_name" type="text" required
|
||||
value="{{ old('last_name', $user->last_name) }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('last_name') border-red-500 @enderror"
|
||||
placeholder="{{ __('profile.last_name_placeholder') }}">
|
||||
@error('last_name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Address -->
|
||||
<div>
|
||||
<label for="address" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.address') }}
|
||||
</label>
|
||||
<textarea id="address" name="address" required rows="3"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('address') border-red-500 @enderror">{{ old('address', $user->address) }}</textarea>
|
||||
@error('address')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Phone -->
|
||||
<div>
|
||||
<label for="phone" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.phone') }}
|
||||
</label>
|
||||
<input id="phone" name="phone" type="tel" required
|
||||
value="{{ old('phone', $user->phone) }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('phone') border-red-500 @enderror"
|
||||
placeholder="{{ __('profile.phone_placeholder') }}">
|
||||
@error('phone')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Password -->
|
||||
<div>
|
||||
<label for="password" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.password') }}
|
||||
</label>
|
||||
<input id="password" name="password" type="password"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('password') border-red-500 @enderror"
|
||||
placeholder="{{ __('profile.password_placeholder') }}">
|
||||
@error('password')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button type="submit"
|
||||
class="group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition duration-300">
|
||||
{{ __('profile.save') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<p class="text-sm text-gray-600">
|
||||
{{ __('profile.delete_account') }} <a href="#" class="text-red-600 hover:text-red-500">{{ __('profile.delete') }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
182
resources/views/marketing/register.blade.php
Normal file
182
resources/views/marketing/register.blade.php
Normal file
@@ -0,0 +1,182 @@
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', __('auth.register'))
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
|
||||
<div class="max-w-md w-full space-y-8">
|
||||
<div>
|
||||
<h2 class="mt-6 text-center text-3xl font-extrabold text-gray-900">
|
||||
{{ __('auth.register') }}
|
||||
</h2>
|
||||
@if($package ?? false)
|
||||
<div class="mt-4 p-4 bg-blue-50 border border-blue-200 rounded-md">
|
||||
<h3 class="text-lg font-semibold text-blue-900 mb-2">{{ $package->name }}</h3>
|
||||
<p class="text-blue-800 mb-2">{{ $package->description }}</p>
|
||||
<p class="text-sm text-blue-700">
|
||||
{{ $package->price == 0 ? __('marketing.free') : $package->price . ' €' }}
|
||||
</p>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<form class="mt-8 space-y-6" action="{{ route('register.store') }}" method="POST">
|
||||
@csrf
|
||||
@if($package ?? false)
|
||||
<input type="hidden" name="package_id" value="{{ $package->id }}">
|
||||
@endif
|
||||
|
||||
<!-- Name Field -->
|
||||
<div>
|
||||
<label for="name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.name') }}
|
||||
</label>
|
||||
<input id="name" name="name" type="text" required
|
||||
value="{{ old('name') }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('name') border-red-500 @enderror"
|
||||
placeholder="{{ __('auth.name_placeholder') }}">
|
||||
@error('name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Username Field -->
|
||||
<div>
|
||||
<label for="username" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.username') }}
|
||||
</label>
|
||||
<input id="username" name="username" type="text" required
|
||||
value="{{ old('username') }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('username') border-red-500 @enderror"
|
||||
placeholder="{{ __('auth.username_placeholder') }}">
|
||||
@error('username')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Email Field -->
|
||||
<div>
|
||||
<label for="email" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.email') }}
|
||||
</label>
|
||||
<input id="email" name="email" type="email" required
|
||||
value="{{ old('email') }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('email') border-red-500 @enderror"
|
||||
placeholder="{{ __('auth.email_placeholder') }}">
|
||||
@error('email')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Password Field -->
|
||||
<div>
|
||||
<label for="password" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.password') }}
|
||||
</label>
|
||||
<input id="password" name="password" type="password" required
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-b-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('password') border-red-500 @enderror"
|
||||
placeholder="{{ __('auth.password_placeholder') }}">
|
||||
@error('password')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Confirm Password Field -->
|
||||
<div>
|
||||
<label for="password_confirmation" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.confirm_password') }}
|
||||
</label>
|
||||
<input id="password_confirmation" name="password_confirmation" type="password" required
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-b-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm"
|
||||
placeholder="{{ __('auth.confirm_password_placeholder') }}">
|
||||
</div>
|
||||
|
||||
<!-- First Name Field -->
|
||||
<div>
|
||||
<label for="first_name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.first_name') }}
|
||||
</label>
|
||||
<input id="first_name" name="first_name" type="text" required
|
||||
value="{{ old('first_name') }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('first_name') border-red-500 @enderror"
|
||||
placeholder="{{ __('profile.first_name_placeholder') }}">
|
||||
@error('first_name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Last Name Field -->
|
||||
<div>
|
||||
<label for="last_name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.last_name') }}
|
||||
</label>
|
||||
<input id="last_name" name="last_name" type="text" required
|
||||
value="{{ old('last_name') }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('last_name') border-red-500 @enderror"
|
||||
placeholder="{{ __('profile.last_name_placeholder') }}">
|
||||
@error('last_name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Address Field -->
|
||||
<div>
|
||||
<label for="address" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.address') }}
|
||||
</label>
|
||||
<textarea id="address" name="address" required rows="3"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('address') border-red-500 @enderror">{{ old('address') }}</textarea>
|
||||
@error('address')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Phone Field -->
|
||||
<div>
|
||||
<label for="phone" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.phone') }}
|
||||
</label>
|
||||
<input id="phone" name="phone" type="tel" required
|
||||
value="{{ old('phone') }}"
|
||||
class="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm @error('phone') border-red-500 @enderror"
|
||||
placeholder="{{ __('profile.phone_placeholder') }}">
|
||||
@error('phone')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Privacy Consent -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input id="privacy_consent" name="privacy_consent" type="checkbox" required
|
||||
class="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded @error('privacy_consent') border-red-500 @enderror">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="privacy_consent" class="font-medium text-gray-700">
|
||||
{{ __('auth.privacy_consent') }}
|
||||
<a href="{{ route('datenschutz') }}" class="text-blue-600 hover:text-blue-500">{{ __('auth.privacy_policy') }}</a>.
|
||||
</label>
|
||||
@error('privacy_consent')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button type="submit"
|
||||
class="group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition duration-300">
|
||||
{{ __('auth.register') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<p class="text-sm text-gray-600">
|
||||
{{ __('auth.have_account') }}
|
||||
<a href="{{ route('login') }}" class="font-medium text-blue-600 hover:text-blue-500">
|
||||
{{ __('auth.login') }}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,13 +1,58 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Zahlung erfolgreich - Fotospiel</title>
|
||||
</head>
|
||||
<body class="container mx-auto px-4 py-8 text-center">
|
||||
<h1>Zahlung erfolgreich!</h1>
|
||||
<p>Vielen Dank für Ihren Kauf. Ihr Konto wurde aktualisiert.</p>
|
||||
<a href="/admin" class="bg-green-600 text-white px-4 py-2 rounded">Zum Admin-Dashboard</a>
|
||||
</body>
|
||||
</html>
|
||||
@extends('marketing.layout')
|
||||
|
||||
@section('title', __('marketing.success.title'))
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
|
||||
@auth
|
||||
@if(auth()->user()->email_verified_at)
|
||||
<script>
|
||||
window.location.href = '/admin';
|
||||
</script>
|
||||
<div class="text-center">
|
||||
<div class="spinner-border animate-spin inline-block w-8 h-8 border border-2 border-blue-600 border-t-transparent rounded-full" role="status">
|
||||
<span class="sr-only">Loading...</span>
|
||||
</div>
|
||||
<p class="mt-2 text-gray-600">{{ __('marketing.success.redirecting') }}</p>
|
||||
</div>
|
||||
@else
|
||||
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-8">
|
||||
<div class="text-center">
|
||||
<h2 class="text-2xl font-bold text-gray-900 mb-4">
|
||||
{{ __('marketing.success.verify_email') }}
|
||||
</h2>
|
||||
<p class="text-gray-600 mb-6">
|
||||
{{ __('marketing.success.check_email') }}
|
||||
</p>
|
||||
<form method="POST" action="{{ route('verification.send') }}">
|
||||
@csrf
|
||||
<button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-md font-medium transition duration-300">
|
||||
{{ __('auth.resend_verification') }}
|
||||
</button>
|
||||
</form>
|
||||
<p class="mt-4 text-sm text-gray-600">
|
||||
{{ __('auth.have_account') }} <a href="{{ route('login') }}" class="text-blue-600 hover:text-blue-500">{{ __('auth.login') }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@else
|
||||
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-8">
|
||||
<div class="text-center">
|
||||
<h2 class="text-2xl font-bold text-gray-900 mb-4">
|
||||
{{ __('marketing.success.complete_purchase') }}
|
||||
</h2>
|
||||
<p class="text-gray-600 mb-6">
|
||||
{{ __('marketing.success.login_to_continue') }}
|
||||
</p>
|
||||
<a href="{{ route('login') }}" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-md font-medium transition duration-300 block mb-2">
|
||||
{{ __('auth.login') }}
|
||||
</a>
|
||||
<p class="text-sm text-gray-600">
|
||||
{{ __('auth.no_account') }} <a href="{{ route('register') }}" class="text-blue-600 hover:text-blue-500">{{ __('auth.register') }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@endauth
|
||||
</div>
|
||||
@endsection
|
||||
192
resources/views/profile/edit.blade.php
Normal file
192
resources/views/profile/edit.blade.php
Normal file
@@ -0,0 +1,192 @@
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', __('profile.edit_title'))
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
|
||||
<div class="max-w-4xl mx-auto">
|
||||
<div class="bg-white shadow overflow-hidden sm:rounded-lg">
|
||||
<div class="px-4 py-5 sm:px-6">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
{{ __('profile.personal_information') }}
|
||||
</h3>
|
||||
<p class="mt-1 max-w-2xl text-sm text-gray-500">
|
||||
{{ __('profile.update_info') }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="border-t border-gray-200">
|
||||
<form method="POST" action="{{ route('profile.update') }}" class="px-4 py-5 sm:p-6">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<!-- Name Field -->
|
||||
<div class="grid grid-cols-6 gap-6">
|
||||
<div class="col-span-6 sm:col-span-3">
|
||||
<label for="name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.name') }}
|
||||
</label>
|
||||
<input type="text" name="name" id="name" value="{{ old('name', $user->name) }}"
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('name') border-red-500 @enderror"
|
||||
required>
|
||||
@error('name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Username Field -->
|
||||
<div class="col-span-6 sm:col-span-3">
|
||||
<label for="username" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.username') }}
|
||||
</label>
|
||||
<input type="text" name="username" id="username" value="{{ old('username', $user->username) }}"
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('username') border-red-500 @enderror"
|
||||
required>
|
||||
@error('username')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-6 gap-6 mt-6">
|
||||
<!-- Email Field -->
|
||||
<div class="col-span-6 sm:col-span-3">
|
||||
<label for="email" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.email') }}
|
||||
</label>
|
||||
<input type="email" name="email" id="email" value="{{ old('email', $user->email) }}"
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('email') border-red-500 @enderror"
|
||||
required>
|
||||
@error('email')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- First Name Field -->
|
||||
<div class="col-span-6 sm:col-span-3">
|
||||
<label for="first_name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.first_name') }}
|
||||
</label>
|
||||
<input type="text" name="first_name" id="first_name" value="{{ old('first_name', $user->first_name) }}"
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('first_name') border-red-500 @enderror"
|
||||
required>
|
||||
@error('first_name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-6 gap-6 mt-6">
|
||||
<!-- Last Name Field -->
|
||||
<div class="col-span-6 sm:col-span-3">
|
||||
<label for="last_name" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.last_name') }}
|
||||
</label>
|
||||
<input type="text" name="last_name" id="last_name" value="{{ old('last_name', $user->last_name) }}"
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('last_name') border-red-500 @enderror"
|
||||
required>
|
||||
@error('last_name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Phone Field -->
|
||||
<div class="col-span-6 sm:col-span-3">
|
||||
<label for="phone" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.phone') }}
|
||||
</label>
|
||||
<input type="tel" name="phone" id="phone" value="{{ old('phone', $user->phone) }}"
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('phone') border-red-500 @enderror"
|
||||
required>
|
||||
@error('phone')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Address Field -->
|
||||
<div class="col-span-6 mt-6">
|
||||
<label for="address" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.address') }}
|
||||
</label>
|
||||
<textarea name="address" id="address" rows="3" class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('address') border-red-500 @enderror">{{ old('address', $user->address) }}</textarea>
|
||||
@error('address')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
@if (session('status') == 'profile-updated')
|
||||
<div class="col-span-6 mt-4 bg-green-50 border border-green-200 rounded-md p-4">
|
||||
<p class="text-sm text-green-800">{{ __('profile.updated_success') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="flex justify-end mt-6">
|
||||
<button type="submit"
|
||||
class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md transition duration-300">
|
||||
{{ __('profile.save') }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Password Update Section -->
|
||||
<div class="mt-8 bg-white shadow overflow-hidden sm:rounded-lg">
|
||||
<div class="px-4 py-5 sm:px-6">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
{{ __('profile.password') }}
|
||||
</h3>
|
||||
<p class="mt-1 max-w-2xl text-sm text-gray-500">
|
||||
{{ __('profile.update_password') }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="border-t border-gray-200 px-4 py-5 sm:p-6">
|
||||
<form method="POST" action="{{ route('profile.update-password') }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<!-- Current Password -->
|
||||
<div class="mb-4">
|
||||
<label for="current_password" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('profile.current_password') }}
|
||||
</label>
|
||||
<input type="password" name="current_password" id="current_password" required
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('current_password') border-red-500 @enderror">
|
||||
@error('current_password')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- New Password -->
|
||||
<div class="mb-4">
|
||||
<label for="password" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.password') }}
|
||||
</label>
|
||||
<input type="password" name="password" id="password" required
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md @error('password') border-red-500 @enderror">
|
||||
@error('password')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Confirm New Password -->
|
||||
<div class="mb-6">
|
||||
<label for="password_confirmation" class="block text-sm font-medium text-gray-700">
|
||||
{{ __('auth.confirm_password') }}
|
||||
</label>
|
||||
<input type="password" name="password_confirmation" id="password_confirmation" required
|
||||
class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md">
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end">
|
||||
<button type="submit"
|
||||
class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md transition duration-300">
|
||||
{{ __('profile.update_password') }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user