Kontaktdaten: Telefon +49 521 986 20 100, E-Mail interior@b2in.eu
Lang-Dateien (Kontaktformular, Impressum, Datenschutz, de/en), Support-Link im Partnerportal, WhatsApp-Schreibweise und Platzhalter im Admin. ContactDetailsSeeder ersetzt die alten Werte in den gespeicherten CMS-Einträgen (beide Sprachen), Marken und Magazin; Display-Folien und Info-Tablet (CABINET-Showroom) bleiben unberührt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
17acb35231
commit
73152ae3d7
14 changed files with 132 additions and 35 deletions
48
database/seeders/ContactDetailsSeeder.php
Normal file
48
database/seeders/ContactDetailsSeeder.php
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Database\Seeders\Concerns\ReplacesCmsTexts;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
/**
|
||||
* Neue Kontaktdaten (09.10.2026): Telefon +49 521 986 20 100, E-Mail interior@b2in.eu.
|
||||
*
|
||||
* Ersetzt in allen CMS-Sektionen (beide Sprachen, auch Rechtstexte und Kontaktformular), Marken
|
||||
* und Magazin die bisherige Nummer +49 (0) 5221 9255055 sowie info@b2in.eu bzw. info@b2in.de.
|
||||
* Die WhatsApp-Nummer (dieselbe Nummer) bekommt die neue Schreibweise, wenn sie noch in einer der
|
||||
* alten Schreibweisen steht. Display-Folien und Info-Tablet bleiben unberührt (CABINET-Showroom).
|
||||
* Mehrfaches Ausführen ist unbedenklich.
|
||||
*
|
||||
* php artisan db:seed --class=ContactDetailsSeeder
|
||||
*/
|
||||
class ContactDetailsSeeder extends Seeder
|
||||
{
|
||||
use ReplacesCmsTexts;
|
||||
|
||||
public const PHONE = '+49 521 986 20 100';
|
||||
|
||||
public const EMAIL = 'interior@b2in.eu';
|
||||
|
||||
public const REPLACEMENTS = [
|
||||
'+49 (0) 5221 9255055' => self::PHONE,
|
||||
'info@b2in.eu' => self::EMAIL,
|
||||
'info@b2in.de' => self::EMAIL,
|
||||
];
|
||||
|
||||
/** Werte, die vollständig übereinstimmen müssen – die WhatsApp-Nummer in alter Schreibweise. */
|
||||
public const EXACT = [
|
||||
'+49 521 98620100' => self::PHONE,
|
||||
'0521 98620100' => self::PHONE,
|
||||
'0521-98620100' => self::PHONE,
|
||||
];
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
$count = $this->replaceCmsTexts(self::REPLACEMENTS, self::EXACT);
|
||||
|
||||
$this->command?->info($count === 0
|
||||
? 'Kontaktdaten: bereits aktuell.'
|
||||
: "Kontaktdaten: {$count} Stellen auf ".self::PHONE.' / '.self::EMAIL.' umgestellt.');
|
||||
}
|
||||
}
|
||||
|
|
@ -59,6 +59,7 @@ class InteriorReleaseSeeder extends Seeder
|
|||
ContentCorrections20261008Seeder::class,
|
||||
FaqCategoriesSeeder::class,
|
||||
BrandTranslationsSeeder::class,
|
||||
ContactDetailsSeeder::class,
|
||||
// Zuletzt: fehlende Felder ergänzen, verwendete Bilder in die Mediathek.
|
||||
CmsSectionFieldsSeeder::class,
|
||||
AssetMediaImportSeeder::class,
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ use Illuminate\Database\Seeder;
|
|||
*/
|
||||
class WhatsappNumberSeeder extends Seeder
|
||||
{
|
||||
/** Business-Nummer laut Marcel (0521-98620100, korrigiert am 24.09.), international geschrieben. */
|
||||
public const NUMBER = '+49 521 98620100';
|
||||
/** Business-Nummer laut Marcel (0521-98620100, korrigiert am 24.09.), international geschrieben (Schreibweise seit 09.10.). */
|
||||
public const NUMBER = '+49 521 986 20 100';
|
||||
|
||||
/**
|
||||
* Werte, die der Seeder ersetzt: der Platzhalter aus der ersten Einrichtung und die am 23.09.
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ Stillgelegte Seiten leiten dauerhaft um: `/netzwerk`, `/interior`, `/partner` un
|
|||
|
||||
- **Hero-Slideshow:** elf Bilder, im CMS pflegbar. Je Bild Marke und Motiv in der Infokarte. Überblendung alle 7 Sekunden (einstellbar 3–30), Pause bei Hover und Fokus, Steuerung per Pfeiltasten. Eine Fortschrittslinie im Bild zeigt die verbleibende Zeit. Auf dem Handy steht die Karte unter dem Bild.
|
||||
- **Gemeinsamer Hero-Stil** auf Start, Marken, Über uns und Kontakt: Goldverlauf als Rahmen, Zeile über der Überschrift, Vertrauenspunkte.
|
||||
- **Termin-Widget:** WhatsApp zuerst (0521-98620100), darunter das Formular.
|
||||
- **Termin-Widget:** WhatsApp zuerst (+49 521 986 20 100, zugleich Telefonnummer; E-Mail interior@b2in.eu), darunter das Formular.
|
||||
- **Live-Display:** Die Startseite zeigt, was im Showroom läuft, vergrößerbar und im Vollbild.
|
||||
- **Sprache:** Deutsch und Englisch, Umschaltung über die Sitzung (`SetLocale`).
|
||||
|
||||
|
|
|
|||
|
|
@ -704,14 +704,14 @@ return [
|
|||
[
|
||||
'title' => 'Unsere E-Mail-Adresse',
|
||||
'info' => [
|
||||
'info@b2in.eu',
|
||||
'interior@b2in.eu',
|
||||
],
|
||||
'icon' => 'mail',
|
||||
],
|
||||
[
|
||||
'title' => 'Unsere Telefonnummer',
|
||||
'info' => [
|
||||
'+49 (0) 5221 9255055',
|
||||
'+49 521 986 20 100',
|
||||
],
|
||||
'icon' => 'phone',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ return [
|
|||
<div>
|
||||
<h2 class="text-lg font-semibold text-foreground mb-2">Kontakt</h2>
|
||||
<p>
|
||||
E-Mail: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a><br>
|
||||
Telefon: +49 (0) 5221 9255055
|
||||
E-Mail: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a><br>
|
||||
Telefon: +49 521 986 20 100
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -190,8 +190,8 @@ return [
|
|||
<strong>B2in GmbH</strong><br>
|
||||
Feldstraße 59<br>
|
||||
32120 Hiddenhausen<br>
|
||||
Telefon: +49 (0) 5221 9255055<br>
|
||||
E-Mail: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a>
|
||||
Telefon: +49 521 986 20 100<br>
|
||||
E-Mail: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -302,7 +302,7 @@ return [
|
|||
<li>gemäß Art. 21 DSGVO <strong>Widerspruch</strong> gegen die Verarbeitung einzulegen, sofern Ihre Daten auf Grundlage von berechtigten Interessen verarbeitet werden.</li>
|
||||
</ul>
|
||||
<p class="text-muted-foreground mt-4">
|
||||
Möchten Sie von Ihren Rechten Gebrauch machen, genügt eine E-Mail an: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a>.
|
||||
Möchten Sie von Ihren Rechten Gebrauch machen, genügt eine E-Mail an: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a>.
|
||||
</p>
|
||||
<p class="text-muted-foreground mt-2">
|
||||
Sie haben zudem das Recht, sich bei einer Datenschutz-Aufsichtsbehörde zu beschweren (Art. 77 DSGVO).
|
||||
|
|
@ -326,8 +326,8 @@ return [
|
|||
<strong>B2in GmbH</strong><br>
|
||||
Feldstraße 59<br>
|
||||
32120 Hiddenhausen<br>
|
||||
Telefon: +49 (0) 5221 9255055<br>
|
||||
E-Mail: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a>
|
||||
Telefon: +49 521 986 20 100<br>
|
||||
E-Mail: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -687,14 +687,14 @@ return [
|
|||
[
|
||||
'title' => 'Our Email Address',
|
||||
'info' => [
|
||||
'info@b2in.eu',
|
||||
'interior@b2in.eu',
|
||||
],
|
||||
'icon' => 'mail',
|
||||
],
|
||||
[
|
||||
'title' => 'Our Phone Number',
|
||||
'info' => [
|
||||
'+49 (0) 5221 9255055',
|
||||
'+49 521 986 20 100',
|
||||
],
|
||||
'icon' => 'phone',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ return [
|
|||
<div>
|
||||
<h2 class="text-lg font-semibold text-foreground mb-2">Contact</h2>
|
||||
<p>
|
||||
Email: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a><br>
|
||||
Phone: +49 (0) 5221 9255055
|
||||
Email: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a><br>
|
||||
Phone: +49 521 986 20 100
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -190,8 +190,8 @@ return [
|
|||
<strong>B2in GmbH</strong><br>
|
||||
Feldstraße 59<br>
|
||||
32120 Hiddenhausen, Germany<br>
|
||||
Phone: +49 (0) 5221 9255055<br>
|
||||
Email: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a>
|
||||
Phone: +49 521 986 20 100<br>
|
||||
Email: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -295,7 +295,7 @@ return [
|
|||
<li>pursuant to Art. 21 GDPR, to <strong>object</strong> to the processing, insofar as your data is processed on the basis of legitimate interests.</li>
|
||||
</ul>
|
||||
<p class="text-muted-foreground mt-4">
|
||||
To exercise your rights, simply send an email to: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a>.
|
||||
To exercise your rights, simply send an email to: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a>.
|
||||
</p>
|
||||
<p class="text-muted-foreground mt-2">
|
||||
You also have the right to lodge a complaint with a data protection supervisory authority (Art. 77 GDPR).
|
||||
|
|
@ -319,8 +319,8 @@ return [
|
|||
<strong>B2in GmbH</strong><br>
|
||||
Feldstraße 59<br>
|
||||
32120 Hiddenhausen, Germany<br>
|
||||
Phone: +49 (0) 5221 9255055<br>
|
||||
Email: <a href="mailto:info@b2in.eu" class="text-secondary hover:underline">info@b2in.eu</a>
|
||||
Phone: +49 521 986 20 100<br>
|
||||
Email: <a href="mailto:interior@b2in.eu" class="text-secondary hover:underline">interior@b2in.eu</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@
|
|||
<flux:heading size="lg" class="mb-4">{{ __('Kontakt') }}</flux:heading>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<flux:input wire:model="contactPhone" label="Telefon" placeholder="z.B. 0521 98620100" />
|
||||
<flux:input wire:model="contactPhone" label="Telefon" placeholder="z.B. +49 521 986 20 100" />
|
||||
@error('contactPhone')
|
||||
<span class="text-red-600 text-sm">{{ $message }}</span>
|
||||
@enderror
|
||||
|
|
|
|||
|
|
@ -320,7 +320,7 @@
|
|||
@endif
|
||||
<flux:switch wire:model.live="slideShowContact" label="Kontakt anzeigen" />
|
||||
@if($slideShowContact)
|
||||
<flux:input wire:model="slideContact" label="Kontakt" placeholder="z.B. 0521 98620100 / Tel. oder WhatsApp" />
|
||||
<flux:input wire:model="slideContact" label="Kontakt" placeholder="z.B. +49 521 986 20 100 / Tel. oder WhatsApp" />
|
||||
@endif
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
{{ __('Bitte kontaktieren Sie Ihren Ansprechpartner, um eine neue Einladung zu erhalten.') }}
|
||||
</p>
|
||||
|
||||
<flux:button variant="primary" href="mailto:info@b2in.eu" icon="envelope">
|
||||
<flux:button variant="primary" href="mailto:interior@b2in.eu" icon="envelope">
|
||||
{{ __('Support kontaktieren') }}
|
||||
</flux:button>
|
||||
</div>
|
||||
|
|
|
|||
48
tests/Feature/ContactDetailsTest.php
Normal file
48
tests/Feature/ContactDetailsTest.php
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use Database\Seeders\ContactDetailsSeeder;
|
||||
use FluxCms\Core\Models\CmsContent;
|
||||
|
||||
/**
|
||||
* Neue Kontaktdaten (09.10.2026): +49 521 986 20 100 und interior@b2in.eu.
|
||||
*/
|
||||
it('replaces the old phone number and email in stored cms entries, including legal texts and whatsapp', function () {
|
||||
$legal = CmsContent::create(['group' => 'legal', 'key' => 'impressum', 'type' => 'json', 'order' => 0, 'value' => [
|
||||
'de' => ['content' => 'E-Mail: <a href="mailto:info@b2in.eu">info@b2in.eu</a><br>Telefon: +49 (0) 5221 9255055'],
|
||||
'en' => ['content' => 'Email: info@b2in.de, Phone: +49 (0) 5221 9255055'],
|
||||
]]);
|
||||
$contact = CmsContent::create(['group' => 'global', 'key' => 'contact', 'type' => 'json', 'order' => 0, 'value' => [
|
||||
'de' => ['whatsapp' => '+49 521 98620100', 'note' => 'Rufen Sie 0521 98620100 an'],
|
||||
]]);
|
||||
|
||||
$this->seed(ContactDetailsSeeder::class);
|
||||
$first = [$legal->refresh()->getTranslations('value'), $contact->refresh()->getTranslations('value')];
|
||||
$this->seed(ContactDetailsSeeder::class);
|
||||
|
||||
expect([$legal->refresh()->getTranslations('value'), $contact->refresh()->getTranslations('value')])->toBe($first)
|
||||
->and($first[0]['de']['content'])->toBe('E-Mail: <a href="mailto:interior@b2in.eu">interior@b2in.eu</a><br>Telefon: +49 521 986 20 100')
|
||||
->and($first[0]['en']['content'])->toBe('Email: interior@b2in.eu, Phone: +49 521 986 20 100')
|
||||
->and($first[1]['de']['whatsapp'])->toBe('+49 521 986 20 100')
|
||||
// Fließtext mit der Nummer bleibt – ersetzt wird nur der vollständige Wert.
|
||||
->and($first[1]['de']['note'])->toBe('Rufen Sie 0521 98620100 an');
|
||||
|
||||
expect(whatsapp_link())->toBe('https://wa.me/4952198620100');
|
||||
});
|
||||
|
||||
it('shows the new contact details on the contact page and in the legal texts', function () {
|
||||
$this->get('/contact')->assertSuccessful()
|
||||
->assertSee('interior@b2in.eu')->assertSee('+49 521 986 20 100')
|
||||
->assertDontSee('5221 9255055')->assertDontSee('info@b2in.eu');
|
||||
|
||||
$this->get('/impressum')->assertSuccessful()->assertSee('interior@b2in.eu')->assertSee('+49 521 986 20 100');
|
||||
$this->get('/privacy')->assertSuccessful()->assertDontSee('info@b2in.eu');
|
||||
});
|
||||
|
||||
it('leaves no old contact details in the default texts', function () {
|
||||
foreach (['de', 'en'] as $locale) {
|
||||
foreach (['b2in.php', 'b2in_legal.php'] as $file) {
|
||||
$text = file_get_contents(lang_path("{$locale}/{$file}"));
|
||||
expect($text)->not->toContain('5221 9255055')->not->toContain('info@b2in.');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -26,7 +26,7 @@ it('ships current legal references on every legal page', function (string $path,
|
|||
->not->toContain('Lissabon')
|
||||
->not->toContain('info@b2in.de');
|
||||
})->with([
|
||||
'impressum' => ['/impressum', ['§ 5 DDG', '§ 18 Abs. 2 MStV', 'Amtsgericht Bad Oeynhausen', 'Verbraucherstreitbeilegung', 'info@b2in.eu']],
|
||||
'impressum' => ['/impressum', ['§ 5 DDG', '§ 18 Abs. 2 MStV', 'Amtsgericht Bad Oeynhausen', 'Verbraucherstreitbeilegung', 'interior@b2in.eu', '+49 521 986 20 100']],
|
||||
'terms' => ['/terms', ['Stand: 06.10.2026', 'Unter B2in Interior bieten wir']],
|
||||
'privacy' => ['/privacy', ['§ 25 Abs. 2 Nr. 2 TDDDG', 'Google Analytics 4', '2. Hosting', 'Hetzner Online GmbH', 'Falkenstein (Sachsen)', 'höchstens 14 Tage gespeichert', 'united-domains GmbH', '9. Ihre Rechte als betroffene Person']],
|
||||
'cookies' => ['/cookie-policy', ['§ 25 Abs. 1 TDDDG', 'Stand: 06.10.2026']],
|
||||
|
|
@ -71,8 +71,8 @@ it('adds hosting and mail provider to a stored privacy policy only once', functi
|
|||
->and(substr_count($content, '<div'))->toBe(substr_count($content, '</div>'));
|
||||
});
|
||||
|
||||
it('points the partner portal support link to info@b2in.eu', function () {
|
||||
it('points the partner portal support link to interior@b2in.eu', function () {
|
||||
$view = file_get_contents(resource_path('views/partner/invitation-expired.blade.php'));
|
||||
|
||||
expect($view)->toContain('mailto:info@b2in.eu')->not->toContain('@b2in.de');
|
||||
expect($view)->toContain('mailto:interior@b2in.eu')->not->toContain('@b2in.de');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ function contactWhatsapp(string $locale = 'de'): string
|
|||
it('creates the contact entry with the business number when it is missing', function () {
|
||||
$this->seed(WhatsappNumberSeeder::class);
|
||||
|
||||
expect(contactWhatsapp('de'))->toBe('+49 521 98620100')
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 98620100')
|
||||
expect(contactWhatsapp('de'))->toBe('+49 521 986 20 100')
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100')
|
||||
->and(whatsapp_link())->toBe('https://wa.me/4952198620100');
|
||||
});
|
||||
|
||||
|
|
@ -34,8 +34,8 @@ it('replaces the placeholder number from the first setup', function () {
|
|||
|
||||
$this->seed(WhatsappNumberSeeder::class);
|
||||
|
||||
expect(contactWhatsapp('de'))->toBe('+49 521 98620100')
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 98620100');
|
||||
expect(contactWhatsapp('de'))->toBe('+49 521 986 20 100')
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100');
|
||||
});
|
||||
|
||||
it('corrects the wrong number that was seeded on 23.09.', function () {
|
||||
|
|
@ -49,8 +49,8 @@ it('corrects the wrong number that was seeded on 23.09.', function () {
|
|||
|
||||
$this->seed(WhatsappNumberSeeder::class);
|
||||
|
||||
expect(contactWhatsapp('de'))->toBe('+49 521 98620100')
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 98620100');
|
||||
expect(contactWhatsapp('de'))->toBe('+49 521 986 20 100')
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100');
|
||||
});
|
||||
|
||||
it('keeps a number that was maintained in the admin', function () {
|
||||
|
|
@ -68,7 +68,7 @@ it('keeps a number that was maintained in the admin', function () {
|
|||
|
||||
expect(contactWhatsapp('de'))->toBe('+49 170 1234567')
|
||||
->and($row->getTranslation('value', 'de')['phone'])->toBe('0521 1')
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 98620100');
|
||||
->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100');
|
||||
});
|
||||
|
||||
it('is idempotent', function () {
|
||||
|
|
@ -76,7 +76,7 @@ it('is idempotent', function () {
|
|||
$this->seed(WhatsappNumberSeeder::class);
|
||||
|
||||
expect(CmsContent::query()->where('group', 'global')->where('key', 'contact')->count())->toBe(1)
|
||||
->and(contactWhatsapp('de'))->toBe('+49 521 98620100');
|
||||
->and(contactWhatsapp('de'))->toBe('+49 521 986 20 100');
|
||||
});
|
||||
|
||||
it('shows the business number on the site after seeding', function () {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue