Giter Club home page Giter Club logo

course-management's Introduction

A homegrown course management system

This repository houses the source code that runs the course management system operated by the student representatives of the computer science department at TU Dresden. It can be used to manage programming courses or pretty much every other event that has a limited number of attendees and should therefore offer a registration.

Technical tidbits

The course system is written in Django and uses the Litera Bootstrap theme.

For more details on the design decisions taken and the general structure of the application, please refer to the design overview.

Setting up a development environment

  1. In order to use this project, you need python3 and poetry on your system. Install them via your distribution's package manager.
  2. Copy the example configuration and customize it as you see fit:
cp course-management/course/settings.py.example course-management/course/settings.py
  1. Install any Python dependencies via poetry install. PostgreSQL support is gated behind a poetry extra. If you need it, run poetry install -E pgsql.
  2. Run poetry run course-management/manage.py migrate to apply the database migrations.
  3. Run poetry run course-management/manage.py loaddata courses to load a sample data set.
  4. Fire up the development server with poetry run course-management/manage.py runserver.
  5. You now can login with the super user foo and password bar

Another test user is available by logging in as test: test.

Opening http://[project url]/admin in your browser gives you access to the standard admin interface of Django which you can use to make manual changes to the database.

Using nix

This project's flake provides a devShell that sets up everything for you. Activate it by executing nix develop or using direnv, and the manage.py commands will work as above.

Changing the database model

When changing the database model make sure that the fixture located in course/fixtures/courses.yaml still works. If not, export a new version of the fixture using the command

python manage.py dumpdata --format yaml --exclude contenttypes --output course/fixtures/courses.yaml

It should always include the two aforementioned test users and a set of example courses.

Deployment

To deploy the application in an productive environment, using a SQLite database is discouraged. The amount of concurrent users during registration frequently overwhelms the simplistic architecture and therefore, a MySQL/Postgres database should be preferred. Be sure to change the settings.py configuration accordingly.

Otherwise, just follow steps 1-4 from the checklist above, then follow the standard instructions for deploying a Django application and check the deployment checklist.

Run the poetry run course-management/manage.py createsuperuser command to create a root user for the application to be able to assign administrative privileges to new users. Admin rights may in general only be granted from the http://[site url]/admin page by selecting the appropriate user there and giving them staff/superuser rights.

NixOS module

The NixOS module can be used in a flake like this:

{
  inputs.course-management.url = "github:fsr/course-management";

  outputs = { self, nixpkgs, course-management }: {
    nixosConfigurations.yourhostname = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        course-management.nixosModules.default
        {
          services.course-management = {
            enable = true;
            hostName = "courses.example.com";
            settings.adminPassFile = "/run/secrets/course-management-adminPass";
            # settings.database = { ... };
            # ...
          };
        }
      ];
    };
  };
}

Nginx will be set up to serve the application on hostName, unless none is configured. Note however that TLS will not be enabled by default and should be configured separately. As explained above, it is recommended to configure a database suited for use in a productive environment. PostgreSQL is supported without further configuration.

If the option is set, a superuser named admin with the password stored in adminPassFile will be created automatically. Alternatively, you can create a superuser using the wrapped manage.py script (as explained above), which is installed to the system environment as cm-manage.

License

This software is licensed with the BSD3 license. See the LICENSE file for more information.

course-management's People

Contributors

bennofs avatar dependabot[bot] avatar feliix42 avatar fugidev avatar h4llow3en avatar hirokikibori avatar jkrbs avatar jkrude avatar jnsga avatar justusadam avatar lodifice avatar lucasvog avatar manuelvok avatar rouven0 avatar sbruder avatar sjaster avatar spyfly avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

course-management's Issues

Release & Deployment

The new semester is approaching and the goal was to have the new system up and running for the upcoming course cycle.
@JustusAdam do you think we will be able to sit together with @sebschrader and deploy the enrollment system in time for the summer term enrollments? Or is there too much left to fix?

White text in Settings

On the "Edit your data" site at the bottom the "change your password" has white text.

Email Verification

Hey,

My verification mail looks like this:

"Dear Sascha,

you have successfully signed up for your iFSR Course Enrollment system account.
Note that you need to verify your account before you will be able to log in.

Please click the following link to activate your account:
/kurse/accounts/verify/student/?token= " ....

I suggest that you add in the complete url (the first part) to this link ;-)

Error on registration

submitting registration results in

FileNotFoundError
[Errno 2] No such file or directory: 'res/registrationmail.txt'

Combat Missing Unicode Support On Linux

With Linux I can't see the icons eg. behind "report bugs [] and errors []" and so on whether in firefox, chrome or opera.
Windows+Firefox displayed the icons but maybe its just an unreproducible fault on my system.

Linux Mint 13 (Ubuntu 12.04)
Mentioned browsers latest version

Better style

Most of the desired functionality is now implemented and as such we should turn part of the attention to style.

This includes not only assigning the correct classes and writing some css but also restructuring the templates where necessary.

I am personally not opposed to any fundamental style changes. I think the current base style is bearable but by no means pretty. If anyone has a good idea, now's the time to move it forward.

Student verification status

  • The student verification status should be shown on the profile page.
  • There should be the opportunity to resend the verification mail.

"contact user" does not work

I added functionality to contact a user a while back. I have no clue whether it actually works though.

This is a reminder to test the functionality.

A link to the contact form can be found on the user profile page.

Registration messages switched

When registering for a course from a single course page, e.g. https://www.ifsr.de/kurse/course/15/, I get the message "Your unsubscription to the course Python was successful.", when unregistering, I get "Your subscription to the course Python was successful.". Registering and unregistering seem to work, though, only the messages are switched.

i18n

Translate Everything.

Registration restrictions

There's a restriction for new registrations to be students of the university, enforced via a confirmation link in an email to the s-number email address.

Is this really necessary? And if so, what is it necessary for? Currently this restriction applies globally, does it have to?

Weekly attendee count

Implement a small feature to enter the number of people that attended the course in a certain lesson.

Style

We need good templates and a nice style.

Things I am not satisfied with yet:

  • Buttons (they often look weird)
  • User description on your own profile (needs to be visually encapsulated)
  • Course list in general
  • index page (the list looks weird)
  • Footer layout and size
  • subject pages (the description should be encapsulated better)
  • polls
    • poll view
    • vote view

Ping @LarsEngeln @lucasvog

Clean permissions

Certain subsystems still require proper clean permission management.

  • Courses
    • Each course needs to have its own edit/delete permissions
    • Permissions need to be automatically assigned during creation
  • Polls
    • Each poll requires its own edit/delete permissions
    • Permissions need to be automatically assigned during creation

creation of schedule fails

When creating a new course, a schedule is automatically created but the type property of this schedule is a full html line.

Location is not saved

When creating a Weekly schedule, the location field is required but not saved on submit.

Testing verification email

At some point before the launch the verification email functionality needs to be tested.

Current Issue: On my machine at least python is not allowed to send email, as a result I have no way of testing whether it works. I disabled all email and re_captcha related verification so long as DEBUG=True.

This is not urgent but needs to be done before launch.

Course Schedule Is Ambiguous

I'm viewing page https://www.ifsr.de/kurse/course/8/ (C - Advanced course)

Under the point 'Schedule' it says " Thursdays, 2nd - APB/E067".

  1. APB/E067 is a location and not part of a schedule. Either call it "When & Where" (instead of Schedule) or add a point Location/Room

  2. I still don't know when the course is. 'Thursdays, 2nd' could mean:

  • every 2nd Thursday in a month
  • Thursdays every 2nd week
  • Thursdays every 2nd month
  • every Thursday from 9:20 to 10:50
  • Thursday, June 2nd

Also, remove the bullet point - no other entry has one. Somehow the font is also different for this one entry.

Optional TU-Student verification

In case of student-only events/courses students should be able to verify that they are in fact students (since non-students should be able to register as well)

Add student-only courses

Add a value to the course attributes to define if the courses are student-only courses or not.

Yay, markdown. But which one?

It is nice that you can use markdown for the course description. Question is: which one of the dozens of dialects?

Please add a link to a cheat sheet for the appropriate markdown.

Attendee list generation

Need functionality to generate the attendee list in a printable format, so that the tutors of the course can simply print the list of attendees.

How to join if you are not a student anymore?

Persons, who want to teach but do no longer have an s-number, can not join since the s-number is always required.

Suggestion for improvement: Introduce an "No student" checkbox that acts as an alternative. Of course crediting then is impossible.

New vendor code handling

I have removed the vendor code (jQuery, bootstrap) from the repo.

Instead I have added an install script which downloads those resources automatically into src/static/vendor.

So next time you git pull you may have to run install.sh to get bootstrap and jQuery. @manuelthieme @Feliix42 @Lodifice @lucasvog

I also added the vendor directory to the .gitignore which means you should have no trouble with accidentally checking all the vendor code into git again.

Error on editing profile data

Submit changes of profile data results in

ValueError
Cannot assign "'1'": "Student.faculty" must be a "Faculty" instance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.