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:
Kevin Adametz 2026-10-09 13:29:34 +00:00
parent 17acb35231
commit 07816dce19
14 changed files with 132 additions and 35 deletions

View 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.');
}
}

View file

@ -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,

View file

@ -19,7 +19,7 @@ use Illuminate\Database\Seeder;
*/
class WhatsappNumberSeeder extends Seeder
{
/** Business-Nummer laut Marcel (0521-98620100, korrigiert am 24.09.), international geschrieben. */
/** Business-Nummer laut Marcel (0521-98620100, korrigiert am 24.09.), international geschrieben (Schreibweise seit 09.10.). */
public const NUMBER = '+49 521 986 20 100';
/**

View file

@ -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`).

View file

@ -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',
],

View file

@ -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>

View file

@ -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',
],

View file

@ -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>

View file

@ -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

View file

@ -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>

View file

@ -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>

View 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.');
}
}
});

View file

@ -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');
});