From 2c332052ce248ff3135133e3f0491c21bc6e83ea Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Tue, 13 Oct 2026 15:26:08 +0000 Subject: [PATCH] =?UTF-8?q?web:=20Newsroom-Seite=20mit=20eigenem=20Kasten?= =?UTF-8?q?=20f=C3=BCr=20den=20Verwaltungszugang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Statt einer grauen Textzeile in der Profilbox derselbe Kasten wie unter jeder Meldung (maskierte Adresse, Knopf „Anmeldelink anfordern“), jetzt als gemeinsame Komponente. Mobil direkt unter dem Profil, am Desktop oben in der Seitenleiste; der doppelte Kasten „Eigenen Newsroom starten“ entfällt. Roadmap 6.17: 7 Firmen öffneten die Verwaltungsseite, eine forderte an. Changelog: Verbessert Public: Auf jeder Newsroom-Seite führt ein eigener Kasten zum kostenlosen Verwaltungszugang – mit der Adresse, an die der Anmeldelink geht. Co-Authored-By: Claude Opus 5.5 --- app/Models/Company.php | 48 +++++++++++++++++++ lang/de/web.php | 7 +-- lang/en/web.php | 7 +-- .../web/manage-newsroom-box.blade.php | 45 +++++++++++++++++ resources/views/web/newsroom.blade.php | 33 +++++-------- resources/views/web/release-detail.blade.php | 27 +---------- 6 files changed, 109 insertions(+), 58 deletions(-) create mode 100644 resources/views/components/web/manage-newsroom-box.blade.php diff --git a/app/Models/Company.php b/app/Models/Company.php index 1dcd1af4..194c9f60 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -161,6 +161,54 @@ class Company extends Model return $this->gone_at !== null; } + /** + * Öffentliche Newsroom-Seiten dieser Firma, je Portal — nur dort, wo sie + * schon erscheint: Der Newsroom ist öffentlich ab der ersten sichtbaren + * Meldung in dieser Sprache (Roadmap 1b.1). Deutsch hat Vorrang, sonst + * Englisch. Für die Verknüpfung „Firma ↔ Newsroom“ im Kunden- und + * Adminbereich. + * + * @return list + */ + public function publicNewsroomLinks(): array + { + if (! $this->slug || ! $this->is_active || $this->isGone()) { + return []; + } + + $portals = $this->portal === Portal::Both ? [Portal::Presseecho, Portal::Businessportal24] : [$this->portal]; + $links = []; + + foreach ($portals as $portal) { + $languages = PressRelease::query() + ->withoutGlobalScope(PortalScope::class) + ->where('company_id', $this->getKey()) + ->whereIn('portal', [$portal->value, Portal::Both->value]) + ->visibleInArchive() + ->whereIn('language', ['de', 'en']) + ->distinct() + ->pluck('language') + ->all(); + + if ($languages === []) { + continue; + } + + $links[] = [ + 'portal' => $portal, + 'label' => $portal->label(), + 'url' => sprintf( + '%s/%s/newsroom/%s', + rtrim((string) ($portal === Portal::Presseecho ? config('domains.domain_presseecho_url') : config('domains.domain_businessportal_url')), '/'), + in_array('de', $languages, true) ? 'de' : 'en', + $this->slug, + ), + ]; + } + + return $links; + } + /** * Trägt eine fremde, lebende Firma auf einem ANDEREN Portal diesen Slug? * Dann darf diese Firma nicht `both` werden: Die öffentliche Auflösung diff --git a/lang/de/web.php b/lang/de/web.php index 6a813c43..d8573a04 100644 --- a/lang/de/web.php +++ b/lang/de/web.php @@ -288,12 +288,9 @@ return [ 'total_hits_sub' => 'über alle Meldungen', 'latest' => 'Aktuellste Meldung', 'empty' => 'Aktuell keine weiteren Meldungen in diesem Newsroom.', - 'manage_hint' => 'Sie vertreten :company? Profil, Logo und Pressekontakte lassen sich kostenlos pflegen.', - 'manage_link' => 'Diesen Newsroom verwalten', + 'manage_eyebrow' => 'Diesen Newsroom verwalten', + 'manage_question' => 'Sie vertreten :company? Beschreibung, Logo und Pressekontakte pflegen Sie kostenlos – und Sie sehen die Aufrufe Ihrer Meldungen.', 'feed_link' => 'RSS-Feed', - 'own_title' => 'Eigenen Newsroom starten', - 'own_text' => 'Bündeln Sie alle Ihre Pressemitteilungen unter einer eigenen Marken-URL – mit Logo, Branchen-Zuordnung und SEO-Vorteil.', - 'own_cta' => 'Newsroom anlegen', ], 'category' => [ diff --git a/lang/en/web.php b/lang/en/web.php index 49c0b156..ebf871a6 100644 --- a/lang/en/web.php +++ b/lang/en/web.php @@ -283,12 +283,9 @@ return [ 'total_hits_sub' => 'across all releases', 'latest' => 'Latest release', 'empty' => 'No further releases in this newsroom at the moment.', - 'manage_hint' => 'You represent :company? Profile, logo and press contacts can be maintained free of charge.', - 'manage_link' => 'Manage this newsroom', + 'manage_eyebrow' => 'Manage this newsroom', + 'manage_question' => 'You represent :company? Maintain the description, logo and press contacts free of charge – and see how often your releases are read.', 'feed_link' => 'RSS feed', - 'own_title' => 'Start your own newsroom', - 'own_text' => 'Bundle all your press releases under your own branded URL – with logo, industry mapping and SEO benefit.', - 'own_cta' => 'Create newsroom', ], 'category' => [ diff --git a/resources/views/components/web/manage-newsroom-box.blade.php b/resources/views/components/web/manage-newsroom-box.blade.php new file mode 100644 index 00000000..3f0bba89 --- /dev/null +++ b/resources/views/components/web/manage-newsroom-box.blade.php @@ -0,0 +1,45 @@ +@props([ + 'company' => null, + // Kopfzeile und Frage je Ort: unter einer Meldung „Diese Mitteilung + // verwalten“, auf der Newsroom-Seite „Diesen Newsroom verwalten“. + 'eyebrow' => null, + 'question' => null, +]) + +{{-- Verwaltungszugang (Roadmap 1b.2/1b.4, 6.17): ein Kasten mit Knopf statt + einer Textzeile, die überlesen wurde. Die Empfängeradresse steht maskiert + dabei, damit klar ist, wohin der Link geht — ohne sie preiszugeben. Ohne + hinterlegte Adresse führt der Knopf zur Anmeldung per E-Mail-Link. --}} +@php + $portalUrl = rtrim((string) config('domains.domain_portal_url', config('app.url')), '/'); + $recipients = ($company && ! $company->isGone() && $company->slug) + ? app(\App\Services\Company\NewsroomClaimService::class)->maskedRecipients($company) + : collect(); +@endphp + +
class(['border border-bg-rule-strong bg-bg-elev p-5']) }} data-manage-newsroom> +
{{ $eyebrow ?? __('web.detail.manage_eyebrow') }}
+

{{ $question ?? __('web.detail.manage_question') }}

+ @if ($recipients->isNotEmpty()) +

{{ __('web.detail.manage_recipient') }}

+
    + @foreach ($recipients as $recipient) +
  • {{ $recipient }}
  • + @endforeach +
+ + + {{ __('web.detail.manage_cta') }} + +

+ {{ __('web.detail.manage_hint') }} + {{ __('web.detail.manage_other_address') }} +

+ @else + + + {{ __('web.detail.manage_link') }} + +

{{ __('web.detail.manage_hint') }}

+ @endif +
diff --git a/resources/views/web/newsroom.blade.php b/resources/views/web/newsroom.blade.php index 917aaa2a..f0bf5ea4 100644 --- a/resources/views/web/newsroom.blade.php +++ b/resources/views/web/newsroom.blade.php @@ -136,13 +136,6 @@

{{ Str::limit($boilerplate, 360) }}

@endif - {{-- Verwaltungszugang (Roadmap 1b.4): ein Hinweis, kein Angebot. - Der Zugang ist kostenlos und führt zur Firmen-E-Mail. --}} -

- {{ __('web.newsroom_page.manage_hint', ['company' => $company->name]) }} - {{ __('web.newsroom_page.manage_link') }} -

- @if ($categories->isNotEmpty())
{{ __('web.newsroom_page.industries') }} @@ -155,6 +148,13 @@
@endif + + {{-- Verwaltungszugang (Roadmap 1b.4, 6.17): auf Mobil direkt unter + dem Profil, am Desktop oben in der rechten Spalte. Ein Hinweis, + kein Angebot — der Zugang ist kostenlos. --}} + {{-- Stat strip --}} @@ -251,22 +251,11 @@ diff --git a/resources/views/web/release-detail.blade.php b/resources/views/web/release-detail.blade.php index 1f4fd914..1156facb 100644 --- a/resources/views/web/release-detail.blade.php +++ b/resources/views/web/release-detail.blade.php @@ -610,32 +610,7 @@ -
-
{{ __('web.detail.manage_eyebrow') }}
-

{{ __('web.detail.manage_question') }}

- @if ($claimRecipients->isNotEmpty()) -

{{ __('web.detail.manage_recipient') }}

-
    - @foreach ($claimRecipients as $recipient) -
  • {{ $recipient }}
  • - @endforeach -
- - - {{ __('web.detail.manage_cta') }} - -

- {{ __('web.detail.manage_hint') }} - {{ __('web.detail.manage_other_address') }} -

- @else - - - {{ __('web.detail.manage_link') }} - -

{{ __('web.detail.manage_hint') }}

- @endif -
+