A web-based application that allows students at PK Yonge Developmental Research School (in Gainesville, FL) to practice for their end-of-course exams. This application was created for the Introduction to Software Engineering (CEN3031) class at the University of Florida, using the MEAN stack.
The group working on this project (as of Fall 2015) consists of the following members:
- Bailey Anderson @baileyanderson
- Cody Fitzpatrick @CodyFitzpatrick
- Nicola Frachesen @Nicola37
- Guilain Huyghes-Despointes @ghDespointes
- Sara Lichtenstein @saralich
- Terry Philippe @tjphilippe
- Xiaoxi Zheng @XiaoxiZheng
Site URL: http://pky-eoc.herokuapp.com/
Our app is deployed through HEROKU. Deployment information can be found here. Please contact @Nicola37 for further deployment questions.
- Install all necessary packages and libraries by following this installation guide
- After cloning the remote repository to a local repository on your computer and navigating to the directory in which the app contents are located, you can run the app by using Grunt, "The Javascript Task Runner". Please see the below terminal commands that detail this process. The repository only needs to be cloned once, during the installation of the app.
$ git clone https://github.com/CEN3031-Project-9C/PK-Yonge-App
$ cd PK-Yonge-App
$ grunt
Note! This app was developed using Node version 0.12.7. A newer version of Node may cause this app to run differently or break altogether.
- In the file
PK-Yonge-App\config\env\development.js
- Change lines 6 to 14 to be your respective login credentials and mongoLab information
- Allow a user to create an account, modify their profile information, log in, log out, and retrieve a forgotten password.
- We used the default MEAN application's functionality in the "users" module for this, located in
modules/users/
. - User details are saved in the
users
collection in MongoDB. - Email credentials used to send the forgotten password emails are located in
config/env/local.js
. - Emailing scripts are located in
scripts/reset-password.js/
- We used the default MEAN application's functionality in the "users" module for this, located in
- Allow a user to select a test they'd like to take.
- Accomplished via custom functionality in the "choose-test" module, located in
modules/choose-test/
. - The user's test choice is stored within a templated object that is created and then saved as a document in the
user_sessions
collection in MongoDB (inmodules/choose-test/choose-test.client.controller.js
). This specific document (as each user_session is associated with a different testing session) should be updated as the user takes the test in order to save their answers, notes, mark-for-review flags, etcetera, but as described below in the "Buggy Features" section, this functionality is not working.
- Accomplished via custom functionality in the "choose-test" module, located in
- Allow the user to take a test (view questions specific to their chosen test, select answers, and save those answers).
- As follows are various working features that aid in the test-taking process.
- A basic four function calculator
- Formula Sheet
- Navigation between different questions
- Notepad that properly stores notes for every individual question
- Mark for review and that will be reflected in the drop down navigation, and on the individual questions
- Pop-up warnings when navigating between questions without answering
- Pop-up warnings when there are questions unanswered when submitting the test
- Pop-up warnings when time is up
- The user_session object (that is first instantiated and then stored in the
user_sessions
collection in MongoDB via$scope.startTest
function inmodules/choose-test/choose-test.client.controller.js
) is updated as the user takes the test (i.e. if the user selects an answer for question 1, then the value is updated in slot 0 in theuser_answers' array - this array is a property of the
user_sessionobject in the aforementioned controller as well as a property of the document in the
user_sessions` collection in MongoDB); this is done for all properties:time
complete
user_notepad
user_answer
review
correct
- Please note how the aforementioned property names and types are consistent across the application in the MongoDB collections and the Mongoose Schema "Models" found throughout the application. Some of the aforementioned propeties are updated explicity as the user takes the test (i.e. user_notepad if user updates a question's notes, user_answer if they select or change an answer to a question, review if they mark a question for a review) but time, completed, and correct, are updated in the background (time is counted down as the user takes the test, complete is marked true if the user has answered the question, and correct is marked true if the user got the question correct during the grading process).
- As follows are various working features that aid in the test-taking process.
- Allow the user to review test performance for a previously-taken test.
- The user can see how they did on a test they just submitted, but this information is only stored locally and there is no page for the user to review ALL of their previous tests (see "Buggy Features" section).
- Saving the user's test information to the database. This information is currently being stored locally on the user's computer and is lost after the user exits the application.
- Allowing the user to view their previous tests via the "Review Tests" page. This page is supposed to display all of the user's previous tests and allow them to review each test (i.e. their answers for each question, the correct answer for each question, the standard being tested for each question, and their overall grade on the test)
- The user should also be able to resume paused tests from this page (i.e. hop back into a previous testing session), if this functionality is desired
- The test timer, which is displayed when a user is taking a test and offers them a visual cue as to how much time they have remaining for their test, does not pause and resume correctly.
These bugs are explained further on the Issues page (https://github.com/CEN3031-Project-9C/PK-Yonge-App/issues).
- Test question types
- Drag-and-drop
- Graphing
- Test-taking features
- Line reader
- Zoom in and out
- Allow the user to take the test as a guest
- This may only require a "guest" account that the user is automatically logged in to after select to take a test as a guest
- Use WolframAlpha API to render algebric expressions (rather than in plain text)
- Administrative panel for teachers and faculty to create tests, add questions, and manage testing sessions (i.e. provide access to specific students, start and begin the test session, hide/display grades, etc.)
The homepage.
Reading instructions for the test.
Signing in.
Taking a mutiple choice question.
Taking a muti-select question.
Taking a fill in the blank question with calculator.
Mark for review feature
Timer Feature
Grading a test.
This project incorporates a number of open source projects:
- MEAN Stack - MongoDB, Express, Angular, and Node
- [AngularJS] - HTML enhanced for web apps!
- [node.js] - evented I/O for the backend
- [Express] - fast node.js network app framework [@tjholowaychuk]
- MongoDB - NoSQL Database
- [jQuery] - For basic Javascript functionalities
- [Twitter Bootstrap] - great UI boilerplate for modern web apps
- Thom Porter - Calculator used in the app
And of course the PK-Yonge-App lives here on GitHub, in this public repository.