Name Subject To Change
PeerReviewWeb is a platform that supports the integration of Peer Reviews into coursework. During or after submitting work for an assignment in a course, students will review and comment on each others' work.
It supports multiple courses, configurable instruction staff and student rosters, multiple assignments and multi-stage assignments, with configurable assignment group settings, and configurable review parameters including dynamic review forms.
PeerReviewWeb is not and will never be a learning management system (LMS). It will not replace Moodle, Canvas, D2L, BlackBoard, BannerWeb, or any other LMS for those purposes. PeerReviewWeb is not and will never be an autograding platform. It will not replace Moodle CodeRunner, INGInious, or whatever secret sauce your university uses.
A Dockerfile is provided. You can use that to launch an instance immediately. Some environment variables are required:
ConnectionStrings:DefaultConnection
must contain a valid connectonstring for a mysql/mariadb server where the user has all permissions on the given database and the database has been migrated.Storage:BasePath
must contain a path where PeerReviewWeb can store files.Authentication:Google:ClientId
must contain the client id for a Google OAuth configurationAuthentication:Google:ClientSecret
must contain the secret key for a Google OAuth configurationAuthorization:OrganizationDomain
must contain the domain (e.g. "colorado.edu") to which to grant acces to the application (all other domains are prohibited in Production mode, but not in Development mode)Authorization:AdminEmailAddress
must contain the email address (in the given domain) of the application administrator (who will have an extended set of privileges on the server)
Clone this repo, and in the base directory, do:
env "ConnectionStrings:DefaultConnection"=<connection-string> dotnet ef database update
Beware passwords with semicolons or quotes in them.
If you have already started a container, you should be able to execute the migration in it. Note that you have to run the migration prior to first accessing the application.
docker exec -it <container name> dotnet ef database update
You need a .NET Core 2.0+ toolchain. You can get one for Windows, Mac, or various Linuxes on Microsoft's website.
- Have a mysql server
- Restore NuGET packages
dotnet restore
- Set all the above configuration variables for docker either as environment variables or as user secrets using the .NET Core SecretManager.
- Migrate the databse
- Build and run
dotnet run
If you want anything more complicated than that, you're on your own.
Okay... I'll level with you. This code is garbage. As a matter of practicality, most of this code was written in about a week. I intend to gradually clean it up as time permits.
...in this code are legion. Here's the shortlist:
- Markdown rendering requires preview and doesn't honor single line-breaks (maybe desired behavior?)
- Review assignment does not work entirely correctly for unknown reasons (sometimes, students are assigned more or fewer than mandatory # of reviews)
- Review assignment doesn't work correctly for the last group to submit
...are badly needed. Again, shortlist (not in priority order):
- Refactoring, especially in AssignmentController.cs, which gradually became a god class.
- Abstraction of permissions modeling (remove
if user is admin or is owner or is member of course or is ...
everywhere) - More intuitive, less generic UI.
- Interaction testing and data flow
- Unit testing 🎉 🎊
- Test data sets.
- Data visualizations for submission data.
- Integration with Google+ API to get users' names
- Email notifications for common actions
- Google Cloud Storage/S3 support
- Support databases that aren't MySQL (first priorities: PgSQL, MS-SQL)
- Where it makes sense, move data processing pipelines into a functional architecture (F#?)
This program is licensed under the terms of the GNU Affero General Public License, Version 3.
Copyright (C) 2018 William M. Temple II
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
--
Developed with ❤️ and 🍺 by Will Temple at the University of Colorado Boulder. PeerReviewWeb is inspired by Captain Teach.