TenantAtlas/apps/platform/app/Support/OperationalControls/OperationalControlBlockedException.php
ahmido be314c577f Spec 400: rebuild Tenantial homepage visuals (#387)
## Summary
- rebuild the public Tenantial homepage around an evidence-first Microsoft tenant governance narrative
- replace the old hero visual with a new static dashboard preview and add dedicated Trust Bar and Feature Pillars sections
- update the shared public shell, navigation, footer, dark design tokens, assets, and homepage content to match the new brand direction
- align website smoke coverage and Spec 400 artifacts with the rebuilt homepage

## Testing
- not run in this pass
- updated website smoke specs under apps/website/tests/smoke

## Note
- `website-dev` was pushed to `origin` so the requested PR base exists remotely
- the remote `website-dev` branch is an ancestor of `origin/dev`, so this PR may also show upstream `dev` history relative to that base

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #387
2026-05-18 14:38:11 +00:00

31 lines
843 B
PHP

<?php
declare(strict_types=1);
namespace App\Support\OperationalControls;
use RuntimeException;
final class OperationalControlBlockedException extends RuntimeException
{
private function __construct(
public readonly OperationalControlDecision $decision,
public readonly string $actionLabel,
) {
$message = trim($decision->reasonText ?? '');
parent::__construct($message !== ''
? sprintf('%s is currently paused. %s', $actionLabel, $message)
: sprintf('%s is currently paused.', $actionLabel));
}
public static function forDecision(OperationalControlDecision $decision, string $actionLabel): self
{
return new self($decision, $actionLabel);
}
public function title(): string
{
return sprintf('%s paused', $this->actionLabel);
}
}