version = $version; } public function render(): \Illuminate\Contracts\View\View { return view('livewire.policy-version-assignments-widget', [ 'version' => $this->version, 'compliance' => $this->complianceNotifications(), 'groupLabels' => $this->groupLabels(), ]); } /** * @return array */ private function groupLabels(): array { $assignments = $this->version->assignments; if (! is_array($assignments) || $assignments === []) { return []; } $tenant = rescue(fn () => Tenant::current(), null); if (! $tenant instanceof Tenant) { return []; } $groupIds = []; $sourceNames = []; foreach ($assignments as $assignment) { if (! is_array($assignment)) { continue; } $target = $assignment['target'] ?? null; if (! is_array($target)) { continue; } $groupId = $target['groupId'] ?? null; if (! is_string($groupId) || $groupId === '') { continue; } $groupIds[] = $groupId; $displayName = $target['group_display_name'] ?? null; if (is_string($displayName) && $displayName !== '') { $sourceNames[$groupId] = $displayName; } } $groupIds = array_values(array_unique($groupIds)); if ($groupIds === []) { return []; } $resolver = app(EntraGroupLabelResolver::class); $cached = $resolver->lookupMany($tenant, $groupIds); $labels = []; foreach ($groupIds as $groupId) { $cachedName = $cached[strtolower($groupId)] ?? null; $labels[$groupId] = EntraGroupLabelResolver::formatLabel($cachedName ?? ($sourceNames[$groupId] ?? null), $groupId); } return $labels; } /** * @return array{total:int,templates:array,items:array} */ private function complianceNotifications(): array { if ($this->version->policy_type !== 'deviceCompliancePolicy') { return [ 'total' => 0, 'templates' => [], 'items' => [], ]; } $snapshot = $this->version->snapshot; if (! is_array($snapshot)) { return [ 'total' => 0, 'templates' => [], 'items' => [], ]; } $scheduled = $snapshot['scheduledActionsForRule'] ?? null; if (! is_array($scheduled)) { return [ 'total' => 0, 'templates' => [], 'items' => [], ]; } $items = []; $templateIds = []; foreach ($scheduled as $rule) { if (! is_array($rule)) { continue; } $ruleName = $rule['ruleName'] ?? null; $configs = $rule['scheduledActionConfigurations'] ?? null; if (! is_array($configs)) { continue; } foreach ($configs as $config) { if (! is_array($config)) { continue; } if (($config['actionType'] ?? null) !== 'notification') { continue; } $templateKey = $this->resolveNotificationTemplateKey($config); if ($templateKey === null) { continue; } $templateId = $config[$templateKey] ?? null; if (! is_string($templateId) || $templateId === '' || $this->isEmptyGuid($templateId)) { continue; } $items[] = [ 'rule_name' => is_string($ruleName) ? $ruleName : null, 'template_id' => $templateId, 'template_key' => $templateKey, ]; $templateIds[] = $templateId; } } return [ 'total' => count($items), 'templates' => array_values(array_unique($templateIds)), 'items' => $items, ]; } private function resolveNotificationTemplateKey(array $config): ?string { if (array_key_exists('notificationTemplateId', $config)) { return 'notificationTemplateId'; } if (array_key_exists('notificationMessageTemplateId', $config)) { return 'notificationMessageTemplateId'; } return null; } private function isEmptyGuid(string $value): bool { return strtolower($value) === '00000000-0000-0000-0000-000000000000'; } }