\RoosterLMS\Blocks\Tables\PortalProgressTable::class, \RoosterLMS\Blocks\Tables\PortalMembersTable::ID => \RoosterLMS\Blocks\Tables\PortalMembersTable::class, \RoosterLMS\Blocks\Tables\PortalQuizResultsTable::ID => \RoosterLMS\Blocks\Tables\PortalQuizResultsTable::class, ); public const CORE = array( 'admin.attempts' => AttemptsTable::class ) + AdminTables::ALL + self::PORTAL; public static function all(): array { $tables = apply_filters( 'rooster_lms_data_tables', self::CORE ); return is_array( $tables ) ? $tables : self::CORE; } public static function list_screens(): array { $screens = array(); foreach ( self::all() as $entry ) { $def = null; if ( is_string( $entry ) && class_exists( $entry ) && is_subclass_of( $entry, TableDefinition::class ) ) { $def = new $entry(); } elseif ( is_callable( $entry ) ) { $def = $entry(); } if ( ! $def instanceof TableDefinition || 'list' !== $def->kind() ) { continue; } foreach ( $def->screens() as $slug ) { if ( '' !== $slug ) { $screens[ $slug ] = true; } } } return $screens; } public static function get( string $id, array $context = array() ): ?TableDefinition { $entry = self::all()[ $id ] ?? null; $def = null; if ( is_string( $entry ) && class_exists( $entry ) && is_subclass_of( $entry, TableDefinition::class ) ) { $def = new $entry(); } elseif ( is_callable( $entry ) ) { $def = $entry(); } if ( ! $def instanceof TableDefinition || $def->id() !== $id ) { return null; } return $def->with_context( $context ); } }