@if($plan->features && count($plan->features) > 0)
@php
$groupedPlanFeatures = [];
if (isset($moduleDefinitions) && is_array($moduleDefinitions) && $plan->features && is_array($plan->features)) {
// Create a flat map of feature definitions for easier lookup
$featureDefMap = [];
foreach ($moduleDefinitions as $moduleSystemName => $moduleData) {
if (isset($moduleData['features']) && is_array($moduleData['features'])) {
foreach ($moduleData['features'] as $featureKeyFromDef => $featureDetail) {
// Use the key as defined in module.json (which should match plan feature keys)
$featureDefMap[$featureKeyFromDef] = [
'moduleDisplayName' => $moduleData['displayName'],
'featureName' => $featureDetail['name']
];
}
}
}
foreach ($plan->features as $planFeatureItem) {
$planFeatureKey = $planFeatureItem['key'];
$featureLimit = $planFeatureItem['limit'] ?? null;
if (isset($featureDefMap[$planFeatureKey])) {
$moduleDisplayName = $featureDefMap[$planFeatureKey]['moduleDisplayName'];
$featureName = $featureDefMap[$planFeatureKey]['featureName'];
if (!isset($groupedPlanFeatures[$moduleDisplayName])) {
$groupedPlanFeatures[$moduleDisplayName] = [
'displayName' => $moduleDisplayName,
'features' => []
];
}
$groupedPlanFeatures[$moduleDisplayName]['features'][] = [
'name' => $featureName,
'limit' => $featureLimit
];
} else { // Handle features whose definition might be missing
if (!isset($groupedPlanFeatures['OrphanedFeatures'])) {
$groupedPlanFeatures['OrphanedFeatures'] = ['displayName' => 'Additional Features', 'features' => []];
}
$groupedPlanFeatures['OrphanedFeatures']['features'][] = [
'name' => Str::title(str_replace(['_', '-'], ' ', $planFeatureKey)), // Best guess for name
'limit' => $featureLimit
];
}
}
}
@endphp
@foreach ($groupedPlanFeatures as $moduleGroupName => $moduleGroupData)
{{ $moduleGroupData['displayName'] }}
@foreach ($moduleGroupData['features'] as $feature)
{{ $feature['name'] ?? 'Feature details missing' }}
@if(isset($feature['limit']))
(Limit: {{ $feature['limit'] === 0 ? 'Unlimited' : $feature['limit'] }})
@endif
@endforeach
@endforeach
@endif
{{-- TODO: Ensure you have a route named 'subscription.checkout' that accepts the plan --}}
@if($currentSubscription && $currentSubscription->subscription_plan_id == $plan->id)
@else
@endif
{{-- Show trial period info only if the plan has one AND it's not the currently active plan --}}
@if($plan->trial_period_days > 0 && !($currentSubscription && $currentSubscription->subscription_plan_id == $plan->id))