0 ? ( Services::curriculum_repo()->items( array( $item_id ) )[ $item_id ] ?? null ) : null; if ( null === $item ) { return ''; } $media = Services::media_repo()->for_owner( MediaOwner::UNIT, $item->unit_id, MediaRole::PRIMARY ); if ( null === $media || ! $media->completes() || ! MediaProgressService::trackable( $media ) || null === Services::media_progress()->measure( $media ) ) { return ''; } if ( ProgressStatus::COMPLETED === ( Learner::item_statuses( $user_id, $item->course_id )[ $item->id ] ?? ProgressStatus::NOT_STARTED ) ) { return ''; } $e = Learner::enrolment( $user_id, $item->course_id ); $cycle = max( 1, (int) ( $e?->cycle ?? 1 ) ); if ( MediaProgressService::max_percent( $user_id, $item->id, $cycle ) >= (int) $media->required_percent ) { return ''; } return self::message( $media ); } public static function message( Media $media ): string { $p = Format::percent( (int) $media->required_percent ); if ( MediaKind::PDF === $media->kind ) { return 100 <= (int) $media->required_percent ? __( 'Open every page of the document to complete this lesson.', 'rooster-lms' ) /* translators: %s: a percentage. */ : sprintf( __( 'Read at least %s of the pages to complete this lesson.', 'rooster-lms' ), $p ); } return MediaKind::AUDIO === $media->kind /* translators: %s: a percentage. */ ? sprintf( __( 'Listen to at least %s of the audio to complete this lesson.', 'rooster-lms' ), $p ) /* translators: %s: a percentage. */ : sprintf( __( 'Watch at least %s of the video to complete this lesson.', 'rooster-lms' ), $p ); } }