occurrence->live_state( $e->session->join_before_min, $now ); if ( $user_id > 0 && $e->may_join ) { if ( in_array( $state, array( LiveState::OPEN, LiveState::RUNNING ), true ) && \RoosterLMS\Live\ProviderKey::IN_PERSON !== $e->session->provider ) { return self::out( 'join', self::link( __( 'Join', 'rooster-lms' ), JoinRoute::url( $e->session, $e->id() ), 'primary', $style ) ); } if ( '' !== $page ) { return self::out( 'lesson', self::link( __( 'Open the lesson', 'rooster-lms' ), $page, 'secondary', $style ) ); } } $rsvp = $user_id > 0 ? self::rsvp_url( $e->rsvp ) : ''; if ( '' !== $rsvp ) { return self::out( 'rsvp', self::link( __( 'Your RSVP', 'rooster-lms' ), $rsvp, 'primary', $style ) ); } $buy = $e->open ? $offers->button( $e, $user_id ) : ''; if ( '' !== $buy ) { return self::out( 'buy', wp_kses_post( $buy ) ); } if ( $e->open && EnrolPolicy::OPEN === $e->enrol_policy && '' !== (string) ( $post['course_url'] ?? '' ) && 0 !== $e->places_left ) { return self::out( 'enrol', self::link( __( 'Enrol free', 'rooster-lms' ), (string) $post['course_url'], 'primary', $style ) ); } return self::out( 'notify', Notify::form( $e, (string) ( $post['title'] ?? '' ), $user_id, $back, $style ) ); } public static function rsvp_url( string $row ): string { $parts = explode( ':', $row ); if ( 3 !== count( $parts ) || (int) $parts[0] <= 0 || '' === $parts[1] ) { return ''; } $token = RsvpTokens::for_invitee( (int) $parts[0], $parts[1] ); return '' !== $token && hash_equals( $parts[2], RsvpTokens::hash( $token ) ) ? RsvpRoute::url( $token ) : ''; } private static function link( string $label, string $url, string $variant, string $style ): string { if ( 'link' === $style ) { return '' . esc_html( $label ) . ''; } return Ui::button( $label, $variant, array( 'href' => $url, 'rel' => 'nofollow', 'size' => 'sm', ) ); } private static function out( string $kind, string $html ): array { return array( 'kind' => $kind, 'html' => $html, ); } }