Introduction:
This document describes the design for Programs to integrate with Sunbird Portal and also discusses the ability of Programs to support and launch multiple programs for various adopters.
Overview:
Currently, Programs are used by a single adopter to run a specific activity within a defined scope which uses minimum configuration. It is currently used to create a specific set of content types. (Example: QuestionSet creation). By and large it is used for creation purpose.
Problem Definition:
Program portal should be able to support to launch multiple programs configured for various adopters. A program can have more than one activity. Each activity can take its own configuration. An admin of the program adopter should be able to define the scope, actions, tools etc based on the activity/purpose. Programs on the portal should be able to handle multiple active programs at a time.
Key Area to be analysed:
- Ability to load components dynamically based on configuration
- Ability to load components dynamically on multiple levels based on configuration
Solution:
Program configurations based on components
Since each tool (comprises of multiple components and tools can share the same components between each other) is going to solve the purpose of each activity in a program, the program can have its configurations based the input that each component in the tool is expecting.
...
If we put together all the component and its required configurations, actions and possible enhancements into a module/highlevel component the following would be the overall component hierarchy and configuration.
Code Block | ||||
---|---|---|---|---|
| ||||
{ "pageAssemblyId":"", "board":"", "class":"", "subject":"", "medium":"", "framework":"", "collectionType":{ "name": "Collection type", "type": "string", "enum": "Textbook, Course" }, "contentTypes": { "name": "List of contentTypes", "type": "List", "enum": ["PracticeQuestionSet", "Lessonplan", "ExperientialResource", "FocusSpot", "CuriosityQuestionSet", "ExplanationResource"] }, "questionCategories":{ "name": "List of AssessmentItem Categorys", "type": "List", "enum": ["VSA", "SA", "LA", "MCQ", "CuriosityQuestion"], "hints": "When PracticeQuestionSet is set for contentTypes AssessmentItem Categorys must be" }, "ckEditorConfig": {} } |
...
Code Block | ||
---|---|---|
| ||
{
"programId": "217bddc0-df59-11e9-8d82-2b7f2cdfa2fd",
"description": C"Test Prep program",
"name": "Test Prep",
"slug": "sunbird",
"startDate": "2019-09-25T12:50:30.000Z",
"endDate": null,
"status": null,
"type": "private",
"roles": {
"value": [],
"enum": ["CONTRIBUTOR", "REVIEWER", "PUBLISHER"]
},
"defaultRoles": ["CONTRIBUTOR"],
"config": {
"onBoardForm": {
"templateName": "onBoardingForm",
"action": "onboard",
"fields": [
{
"code": "school",
"dataType": "text",
"name": "School",
"label": "School",
"description": "School",
"inputType": "select",
"required": false,
"displayProperty": "Editable",
"visible": true,
"range": [
{
"identifier": "my_school",
"code": "my_school",
"name": "My School",
"description": "My School",
"index": 1,
"category": "school",
"status": "Live"
}
],
"index": 1
}
]
},
"framework": "NCF",
"Board": "AP",
"Medium": "English",
"filterCategory": [
{
"code": "class",
"range": [
"Class 6", "Class 7", "Class 8"
],
"label": "Class",
"multiselect": false
},
{
"code": "subject",
"range": [
"English", "Maths"
],
"label": "Subject",
"multiselect": false
}
],
"groupBy": {
"value": "Subject",
"defaultValue": "Class",
"enum": ["Class", "Subject", "Board", "Medium"]
},
"contentTypes": {
"name": "List of contentTypes",
"type": "List",
"value": [{
"name": "Explanation",
"contentType": "ExplanationResource",
"mimeType": ["application/pdf"],
"thumbnail": "",
"description": "description",
"marks": 5,
"resourceType": "",
"Audience": "",
"formConfiguration": [
{
"code": "LearningOutcome",
"range": [],
"label": "Learning Outcome",
"multiselect": true
},
{
"code": "bloomslevel",
"range": [],
"label": "Learning Level",
"multiselect": true
}
],
"filesConfig": {
"accepted": "pdf",
"size": "50"
}
}, {
"name": "Experimental",
"contentType": "ExperientialResource",
"mimeType": ["video/mp4", "video/webm", "video/x-youtube"],
"thumbnail": "",
"description": "description",
"marks": 5,
"resourceType": "",
"Audience": "",
"formConfiguration": [
{
"code": "LearningOutcome",
"range": [],
"label": "Learning Outcome",
"multiselect": true
},
{
"code": "bloomslevel",
"range": [],
"label": "Learning Level",
"multiselect": true
}],
"filesConfig": {
"accepted": "mp4, webm, youtube",
"size": "50"
}
}, {
"name": "Practice Sets",
"contentType": "PracticeQuestionSet",
"mimeType": ["application/vnd.ekstep.ecml-archive"],
"questionCategories": ["vsa", "sa", "la", "mcq"],
"thumbnail": "",
"description": "description",
"marks": 5,
"resourceType": "",
"Audience": "",
"formConfiguration": [
{
"code": "LearningOutcome",
"range": [],
"label": "Learning Outcome",
"multiselect": true
},
{
"code": "bloomslevel",
"range": [],
"label": "Learning Level",
"multiselect": true
}]
}, {
"name": "Curiosity",
"contentType": "CuriosityQuestionSet",
"mimeType": ["application/vnd.ekstep.ecml-archive"],
"questionCategories": ["curiosity"],
"thumbnail": "",
"description": "description",
"marks": 5,
"resourceType": "",
"Audience": "",
"formConfiguration": [
{
"code": "LearningOutcome",
"range": [],
"label": "Learning Outcome",
"multiselect": true
},
{
"code": "bloomslevel",
"range": [],
"label": "Learning Level",
"multiselect": true
}
]
}],
"defaultValue": [{
"name": "Practice Sets",
"contentType": "PracticeQuestionSet",
"mimeType": ["application/vnd.ekstep.ecml-archive"],
"questionCategories": ["vsa", "sa", "la", "mcq"],
"thumbnail": "",
"description": "description",
"marks": 2,
"resourceType": "",
"Audience": "",
"formConfiguration": [
{
"code": "LearningOutcome",
"range": [],
"label": "Learning Outcome",
"multiselect": false
},
{
"code": "bloomslevel",
"range": [],
"label": "Learning Level",
"multiselect": true
}
]
}],
"enum": [
"PracticeQuestionSet",
"Lessonplan",
"ExperientialResource",
"FocusSpot",
"CuriosityQuestionSet",
"ExplanationResource"
]
},
"questionLimit": {
"value": "",
"defaultValue": ""
},
"optionsLimit": {
"value": "",
"defaultValue": ""
}
}
} |
...