Cross-Course Navigation

Core → Silver
💰 $1000

Let students switch between multiple enrollments.

Technology iconTechnology iconTechnology icon

Cross-Course Navigation Module Overview

The Cross-Course Navigation module is designed to enhance the user experience for students enrolled in multiple courses by providing seamless navigation between different enrollments. This core functionality simplifies the process of switching between courses, allowing users to manage their academic workload efficiently.

Purpose

The primary purpose of this module is to enable students to easily switch between multiple course enrollments within a single interface. It eliminates the need for manual navigation and reduces cognitive load by providing a unified view of all enrolled courses.

Benefits

Usage Scenarios

  1. Dashboard Integration: Students can see an overview of all their enrolled courses on a dashboard, with easy access to each course via links or buttons.
  2. Course Switcher Dropdown: A dropdown menu or similar interface allows students to select the desired course for navigation.
  3. Quick Access Links: Prominent placement of quick-access links or icons for frequently accessed courses.
  4. Cross-Device Compatibility: Ensures smooth navigation across different devices, including desktops, tablets, and mobile phones.

This module is essential for any learning management system (LMS) or educational platform aiming to provide a seamless and user-friendly experience for multi-course enrollment scenarios.

Technical Documentation for Cross-Course Navigation Module

Multi-Enrollment Support

This feature allows students to manage multiple course enrollments efficiently. The system integrates with the enrollment tracking API to fetch and update enrollment status in real-time. Developers can access this data via RESTful endpoints, ensuring seamless integration into the dashboard interface.

Course Switching Functionality

Quickly switch between courses using a dropdown menu or buttons located on the navigation bar. The implementation uses session management techniques, such as cookies and tokens, to maintain user context across different course environments, ensuring continuity in user experience.

Contextual Navigation

The UI dynamically adapts based on the current course context. For example, breadcrumb trails update to reflect the current course, and menu options adjust accordingly. Event handlers manage context switches, triggering necessary updates to navigation elements and state management.

Audit Trail for Cross-Course Activity

Activity logs are captured using a logging mechanism that records time stamps, course IDs, user actions, and IP addresses. These logs are stored in a database for auditing purposes, supporting compliance with data protection regulations by maintaining secure and accessible audit trails.

Each feature is designed to provide developers with clear technical insights, ensuring smooth integration and maintenance within the system’s architecture.

Cross-Course Navigation Module Documentation

FastAPI Endpoint (Python)

The following is a FastAPI endpoint that allows students to switch between enrolled courses.

from fastapi import APIRouter, Depends, Path
from typing import Annotated
from pydantic import BaseModel

router = APIRouter()

class Enrollment(BaseModel):
    student_id: str
    course_id: str
    status: str  # "enrolled" or "unenrolled"

@router.put(
    "/students/{student_id}/courses/{course_id}",
    summary="Switch Course Enrollment",
    description="Enroll or un-enroll a student in a specific course."
)
async def switch_enrollment(
    student_id: Annotated[str, Path],
    course_id: Annotated[str, Path],
    enrollment_status: str = Query(...),  # "enroll" or "unenroll"
    token: str = Header(...)
):
    """
    Switches the enrollment status of a student for a specific course.

    Args:
        student_id (str): The ID of the student.
        course_id (str): The ID of the course.
        enrollment_status (str): The desired enrollment status ("enroll" or "unenroll").
        token (str): Authentication token.

    Returns:
        dict: A dictionary containing the updated enrollment information.
    """
    # Assume we have a database model called CourseEnrollment
    enrollment = await CourseEnrollment.find(student_id, course_id)
    
    if enrollment_status == "enroll":
        if not enrollment:
            new_enrollment = Enrollment(
                student_id=student_id,
                course_id=course_id,
                status="enrolled"
            )
            await new_enrollment.save()
            return {"message": "Student enrolled successfully", "status": "enrolled"}
    else:  # unenroll
        if enrollment:
            await enrollment.delete()
            return {"message": "Student un-enrolled successfully", "status": "unenrolled"}

    return {"message": f"Enrollment status could not be updated", "status": "error"}

React UI Component (JavaScript)

The following is a React component that provides a UI for course switching.

import React, { useState } from 'react';
import axios from 'axios';

const CourseSwitcher = () => {
    const [courses, setCourses] = useState([]);
    const [selectedCourse, setSelectedCourse] = useState('');
    const [isLoading, setIsLoading] = useState(false);
    const [error, setError] = useState(null);

    const fetchCourses = async () => {
        try {
            const response = await axios.get('/api/courses');
            setCourses(response.data);
        } catch (err) {
            setError('Failed to fetch courses');
        }
    };

    const switchEnrollment = async () => {
        setIsLoading(true);
        setError(null);
        try {
            if (!selectedCourse) return;
            
            const response = await axios.put(
                `/api/students/${studentId}/courses/${selectedCourse}`,
                { enrollment_status: 'enroll' }
            );
            
            // Handle response
            setIsLoading(false);
            alert(response.data.message);
        } catch (err) {
            setError('Failed to switch enrollment');
            setIsLoading(false);
        }
    };

    return (
        <div>
            <h2>Course Switcher</h2>
            <select 
                value={selectedCourse}
                onChange={(e) => setSelectedCourse(e.target.value)}
            >
                {courses.map(course => (
                    <option key={course.id} value={course.id}>
                        {course.name}
                    </option>
                ))}
            </select>
            <button onClick={switchEnrollment} disabled={isLoading}>
                {isLoading ? 'Switching...' : 'Switch Course'}
            </button>
            {error && <p style={{ color: 'red' }}>{error}</p>}
        </div>
    );
};

export default CourseSwitcher;

Pydantic Data Schema

The following defines the data models for course enrollment.

from pydantic import BaseModel
from typing import Optional, Dict

class Course(BaseModel):
    id: str
    name: str
    description: Optional[str] = None
    enrollment_status: str  # "open" or "closed"

class Enrollment(BaseModel):
    student_id: str
    course_id: str
    status: str  # "enrolled" or "unenrolled"
    enrolled_at: Optional[Dict[str, str]] = None

class CourseEnrollmentResponse(BaseModel):
    message: str
    status: str
    enrollment_data: Optional[Enrollment] = None

Summary

This documentation provides the necessary code snippets to implement cross-course navigation functionality. The FastAPI endpoint handles switching enrollments, the React component provides a UI for course switching, and the Pydantic models define the data structures involved in the process.

Technical Documentation for Cross-Course Navigation Module

Overview

The Cross-Course Navigation module enables students to switch between multiple enrollments seamlessly. This module is designed for developers who need to integrate or configure it into their educational platform.

Use Cases

  1. Navigate Between Courses
    Students can switch courses from a dropdown menu on the dashboard, updating their active course context.

  2. Handle Enrollment Changes
    The system triggers notifications upon enrollment updates, informing both students and instructors.

  3. Quick Access Shortcuts
    Users can save frequently accessed courses as shortcuts for quick navigation.

  4. Mobile Responsiveness
    Ensures seamless experience across devices, including mobile browsers.

Integration Tips

Configuration Options

SettingDescriptionDefault ValueExample Use Case
enable_course_switchingEnables or disables the course switching feature.trueAllow students to switch courses freely.
max_recent_coursesLimits the number of recent courses displayed in the navigation menu.5Show up to 5 recent courses for easy access.
session_timeout_in_minutesSession timeout duration after which user is logged out.30Prevents unauthorized access if session expires.
cookie_domainDomain for cookies used in cross-domain communication..example.comEnsures cookies are accessible across subdomains.
redirect_urlURL to redirect to after switching courses./dashboardRedirects user to dashboard post-switch.

Troubleshooting

Conclusion

This documentation provides a comprehensive guide for integrating the Cross-Course Navigation module, ensuring developers have the necessary information to implement it effectively.