Flask-Admin based web application that serves as an dashboard for e-learning content produced with the Adapt Authoring Tool. The Adapt Authoring Tool integrates with MongoDB to store and manage learning materials, in different layers: courses, articles, blocks and components (interactive and presentative). The Authoring Tool only gives you an overview of courses, not their contents, which makes it hard to reuse them for Open Educational Resources (OERs) or any other format. Below is a breakdown of its architecture, design patterns, and dependencies.
You need to set the following environment variables to run Adapt|OER. Therefor copy the given credentials.env.dist and apply the variables on your host.
USER=your-account
PASS=your-password
GITLAB_ACCESS_TOKEN=...
# mongodb
MONGODB_PORT=27017
DB_HOST=127.0.0.1
DB_NAME=adapt
SECRET_KEY=123456790
# adapt authoring
BUILDS_DIR=/path/to/adapt_authoring/temp/tenantId/adapt_framework/courses
AUTHORING_DOMAIN=https://your.auhtoring.url
- Backend: Flask (Python) for API and server-side rendering
- Database: MongoDB (via PyMongo)
- Admin Panel: Flask-Admin for managing SCORM content
- Frontend: Flask templates (Jinja2)
- Authentication: Flask-Login for user management (assumes User is authenticated in Adapt Authoring Tool)
- Internationalization: Flask-Babel for multilingual support
- SCORM Integration: SCORM-compatible learning modules
- Forms & Validation: Flask-WTF and WTForms
- File Handling: Handles ZIP files for packaging quizzes and learning content
- Initializes the Flask app
- Configures database connection (
MongoDB) - Sets up authentication (
Flask-Login) - Defines routes for user authentication, course content, and quiz generation
- Serves as the entry point
- Uses
Flask-Loginto authenticate a single admin user. @login_requireddecorator ensures restricted access to the admin panel.- Session handling is done via Flask’s built-in session mechanism.
Key methods:
login()→ Handles login requests and verifies credentialslogout()→ Logs out the userload_user()→ Retrieves authenticated user from session
- Provides a dashboard for managing courses, content objects, questions, and media.
- Uses
ModelViewsubclasses to manage MongoDB collections.
Admin Views:
CourseView→ Manages e-learning coursesContentsView→ Handles learning content and taxonomyQuestionView→ Manages quizzes and assessmentsPresentationView→ Handles text-based learning componentsGraphicView→ Manages image-based contentGlossaryView→ Stores glossary terms and definitions
- Uses
pipwerks.SCORMto track progress and completion within the LMS. - Learning content is managed in MongoDB, where:
contentobjectsstore course unitsblocksstore sections within unitscomponentsstore questions, media, and text elements
filter_components_and_blocks()extracts and groups components into learning blocks.get_related_content_index()finds related content items in a course.fetch_and_nest_content()recursively structures content hierarchies.
- Supports dynamic quiz generation using
prepare_quizzes()andcompose_quiz(). - Uses Flask routes to generate, bundle, and deliver quizzes as SCORM packages.
- Uses
transpile_bson.pyto convert MongoDB BSON data into JSON-compatible format.
| Library | Purpose |
|---|---|
| Flask | Web framework |
| Flask-Login | User authentication |
| Flask-Admin | Admin dashboard |
| Flask-WTF | Form handling |
| Flask-Babel | i18n support |
| PyMongo | MongoDB integration |
| WTForms | Form validation |
| ZipFile | ZIP file handling |
| Requests | HTTP requests |
| BeautifulSoup | HTML parsing for glossary and text processing |
| Werkzeug | File security utilities |
✅ SCORM-Ready: Generates SCORM-compatible packages for LMS integration.
✅ User Authentication: Admin-only access using Flask-Login.
✅ MongoDB-Based CMS: Stores, manages, and retrieves learning content.
✅ Dynamic Quiz Generation: Filters, modifies, and bundles quizzes as ZIP files.
✅ Multi-Language Support: Flask-Babel for translations.
✅ Admin Panel: Manages courses, components, and glossary.
This project is a SCORM-compatible e-learning content manager that integrates MongoDB, Flask-Admin, and Flask-Login to provide an admin dashboard for managing quizzes, courses, and media assets. It follows best practices in design patterns to ensure scalability, modularity, and efficiency.