$config */ public function issueFor(array $config): ?string { $accounts = data_get($config, 'accounts'); if (! is_array($accounts) || $accounts === []) { return null; } $imageCount = $this->intendedImageCount($config, $accounts); foreach ($accounts as $entry) { $contentType = ContentType::tryFrom((string) data_get($entry, 'content_type')); if (! $contentType instanceof ContentType) { continue; } $issue = $this->issueForAccount($contentType, $imageCount); if ($issue !== null) { return $issue; } } return null; } /** * Mirrors the frontend: the carousel slide count when any selected account * supports multiple images, otherwise a single image when enabled. * * @param array $config * @param array $accounts */ private function intendedImageCount(array $config, array $accounts): int { foreach ($accounts as $entry) { $contentType = ContentType::tryFrom((string) data_get($entry, 'content_type')); if ($contentType instanceof ContentType && $contentType->supportsImage() && $contentType->maxMediaCount() > 1) { return (int) data_get($config, 'target_slide_count', 2); } } return (bool) data_get($config, 'include_image', true) ? 1 : 0; } private function issueForAccount(ContentType $contentType, int $imageCount): ?string { if ($contentType->requiresMedia() && $imageCount === 0) { return __('posts.edit.compliance.requires_media'); } if ($imageCount > 0 && ! $contentType->supportsImage()) { return __('posts.edit.compliance.no_images'); } $max = min(self::MAX_GENERATED_IMAGES, $contentType->maxMediaCount()); if ($imageCount > $max) { return __('posts.edit.compliance.too_many_files', ['max' => (string) $max]); } return null; } }