web: Newsroom-Seite mit eigenem Kasten für den Verwaltungszugang

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 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-13 15:26:08 +00:00
parent a157d7a2a1
commit 2c332052ce
6 changed files with 109 additions and 58 deletions

View file

@ -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<array{portal: Portal, label: string, url: string}>
*/
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