From mn/ifi/inf5750
Jump to: navigation, search

Group Members

  • Joakim Kristiansen
  • Vivek Kaul
  • Sigurhjörtur Snorrason
  • Farrukh Wahab Manzoor

Summary of requirement


  • Create courses, quizes and questions.
  • Add attendants and mentors to course.
  • Support both multiple choice and text questions.


  • Take a quiz for course enrolled in.
  • See finished courses and quizes.
  • See pending quizes.


  • Correct answered quizes.
  • Give feedback in form of approved/not approved.


List of technologies and frameworks we will use:

  • JavaScript (jQuery, AJAX, JSON)
  • CSS
  • HTML5
  • Bootstrap (summernote, typeahead)

Time schedule

Milestone 1: 1st November

Document features and architecture on Wiki

Show understanding of DHIS2 web apps

Document flowchart, UML and ORM models and GUI outlines.

Create work schedule and step-by-step goals of the probject.

Milestone 2: 15th November

First bare-bone version - static HTML

Uploadable as DHIS2 web app

Create a sample GUI with mock classes

Milestone 3: 30th November

Finished, if applicable also with mobile app.

Presentation: 3th December

Finalize wiki.

Create a work history on steps achieved.

Final delivery: 8th December

Create at least 2 fully dynamic applications for quiz taking.

Adapt so it works with DHIS.

Create mobile support

Tasks Divided

  • All:
    - Brainstorming.
    - Designing and Prototyping of Apps.
  • Joakim Kristiansen:
    - Wiki.
    - Implemented VJFS_Admin App.
    - Designed JSON format. 
  • Vivek Kaul:
    - Mockups and ORM modell.
    - Implemented VJFS_User App.
  • Sigurhjörtur Snorrason:
    - Wiki.
    - Flowcharts.
    - Implemented VJFS_Mentor App
  • Farrukh Wahab Manzoor:
    - Mockups and ORM model.
    - Implemented VJFS_Stat App.
    - Project Presentation.

Screen Flow and Design Skeleton

Flow of the creation of new courses, quizes and questions.


Flow of the course and quiz taking application.


Flow of the course correcting and mentoring app.


GUI Mockup

By creating basic design of what we want our GUI to ressemble we have created a clear outline for us to work on. This means we can focus more on the functionality of the program and not spend to much time getting ideas for the acutal look of the program. We also aimed for a simplistic look to our GUI. One of the reasons being that this should be useable by anyone, even if it is the first minute of working with DHIS. By keeping the amount of buttons and things you can do as low as possible while keeping the fundamental requirements of the program we hope it will be as easy as possible to learn. 

As these are mockups of the actual GUI we have omitted as much graphical design as we, and just keep to the fundamental parts we require from the GUI.

The mockups can be found https://github.com/joakikr/inf5750/tree/master/Modelimages/MockPages

How Information Is Stored

For the three apps the information about courses, quizes, questions and users answers is stored as JSON objects within DHIS own resource,  /api/systemSettings.


There are three systemSettings this app will create/modify - VJFS_courses, VJFS_quizes and VJFS_questions.

  • VJFS_courses can be found from the URL /api/systemSettings/VJFS_courses and its JSON object will have the following notation.
    Each course is an element in the array courses and has the following properties:

    courseID : An unique ID that represents the course. (required)
    courseTitle: The title for the course. (required)
    courseDescription: The description of the course.
    courseAttendants: The attendants for the course, this is a subset of the users of DHIS system.
    courseMentors: The mentors for the course, this is a subset of the users of DHIS system

    An example JSON object:
courses: [
 courseID: 1416663811386,
 courseTitle: "Course 1",
 courseDescription: ""<p>This is course 1.</p>"",
 courseAttendants: [
 attendantUsername: "toure",
 attendantName: "Yaya Toure",
 attendantID: "yI9qQfuM7Xd"
 courseMentors: [ ]
 courseID: 1416663826881,
 courseTitle: "Course 2",
 courseDescription: ""<p>This is course 2.</p>"",
 courseAttendants: [ ],
 courseMentors: [ ]
  • VJFS_quizes can be found from the URL /api/systemSettings/VJFS_quizes and its JSON object will have the following notation.
    Each quiz is an element in the array quizes and has the following properties:

    quizID: An unique ID that represents the quiz. (required)
    courseID: The ID of the course this quiz belongs to. (required)
    quizTitle: The title for the quiz. (required)
    quizLevel: The level of this quiz. If a quiz in a course has level x, then all quizes in that course with level lower than x must be taken first. (required)

    An example JSON object:
 quizID: 1416665405980,
 courseID: "1416663811386",
 quizTitle: "Quiz 1",
 quizLevel: "1"
 quizID: 1416665421301,
 courseID: "1416663811386",
 quizTitle: "Quiz 2",
 quizLevel: "2"
  • VJFS_questions can be found from the URL /api/systemSettings/VJFS_questions and its JSON object will have the following notation.
    Each question is an element in the array questions and has the following properties:

    questionID: An unique ID that represents the question. (required)
    quizID: The ID of the quiz ths question belongs to. (required)
    questionType: The type of the question - it's either "text" for text question or "multiple" for a multiplechoice question. (required)
    questionQuestion: The question for the question. (required)
    questionAnswer: The answer to the question. (required for "text" questions)
    questionAlternatives: The alternatives with a boolean of whether that alternative is correct or not. (required for "multiple" questions)

    An example JSON object:
 questions: [
 questionID: 1416665924422,
 quizID: "1416665405980",
 questionTitle: "Question 1",
 questionType: "text",
 questionQuestion: "Q",
 questionAnswer: "A"
 questionID: 1416665944701,
 quizID: "1416665405980",
 questionTitle: "Question 2",
 questionType: "multiple",
 questionQuestion: "Q",
 questionAlternatives: [
 alternativeChecked: true,
 alternativeValue: "A1"
 alternativeChecked: false,
 alternativeValue: "A2"


For users of the the quiz app there will be created four new field on the systemSettings resource per user.
These fields will have the following pattern URL: /api/systemSettings/VJFS_<username>_<courses | quizes | questions>.

  • VJFS_username_courses can be found from the URL /api/systemSettings/VJFS_username_courses and will have the following notation:
    Each course is an element in the array courses and will only have one property:

    courseID: The ID of a course this user has passed. (required)
  • VJFS_username_quizes can be found from the URL /api/systemSettings/VJFS_username_quizes and will have the following notation:
    Each quiz is an element in the array quizes and will only have one property:

    quizID: The ID of a quiz this users has passed. (required)
  • VJFS_username_questions can be found from the URL /api/systemSettings/VJFS_username_questions and will have the following notation:
    Each question is an element in the array questions and will have the following properties:

    questionID: The ID of the question this answer belongs to. (required)
    quizID: The ID of the quiz the question belonged to. (required)
    questionAnswer: The answer provided by the user for this question. (required for "text" questions)
    questionAlternatives: The alternatives with a boolean of the users answer on that alternative. (required for "multiple" questions)
    corrected: Holds the value of whether this answer has been corrected or not.


The mentor app will not itself store new data, but rather modify existing data saved in URL: /api/systemSettings/VJFS_<username>_<courses | quizes | questions>.

Models (Not valid)

To create a clear and structured setup for working on the task we have created a UML for our Java and a ORM for our databases. By doing this we have a clear idea on what we want from both the Java code and Hibernate. This will make dividing the tasks between us easier.

ORM : http://folk.uio.no/sigurhjs/ORM.pdf

UML: http://folk.uio.no/sigurhjs/INF5750UML.pdf

Suggested Improvements to Further Work

  • Improve GUI.
  • Improve stability.
  • Switch out JSON for own database for better performance and security.


The following sections contains the necessary links.

Link to repository

Link to downloadable .zip file