jobRepository = new ContaiJobRepository(); } public function render(): void { $this->renderAdminNotices(); $creditGuard = new ContaiCreditGuard(); $creditCheck = $creditGuard->validateCredits(); if ( ! $creditCheck['has_credits'] ) : ?>

—

getQueueStatus(); ?>

renderJobRow( $job ); ?>

jobRepository->countJobsByTypeAndStatus( ContaiKeywordExtractionJob::TYPE, ContaiJobStatus::PENDING ); $processing = $this->jobRepository->countJobsByTypeAndStatus( ContaiKeywordExtractionJob::TYPE, ContaiJobStatus::PROCESSING ); $processingJobs = $this->jobRepository->getProcessingJobsByType( ContaiKeywordExtractionJob::TYPE ); return array( 'pending' => $pending, 'processing' => $processing, 'processing_jobs' => $processingJobs, ); } private function renderJobRow( array $job ): void { $payload = json_decode( $job['payload'], true ) ?? array(); $topic = $payload['topic'] ?? $payload['domain'] ?? __( 'Unknown', '1platform-content-ai' ); $country = strtoupper( $payload['country'] ?? 'N/A' ); $lang = strtoupper( $payload['lang'] ?? 'N/A' ); $elapsed = $this->calculateElapsedTime( $job['processed_at'] ); ?> 0 ) { return sprintf( '%dm %ds', $minutes, $seconds ); } return sprintf( '%ds', $seconds ); } }