Giter Club home page Giter Club logo

geli's Introduction

geli -- unfortunately no active developers for now :(

geli-Logo

GitHub release Build Status Coverage Status Uptime Robot ratio Gitter chat DavidDM-API DavidDM-WEB

geli is an open source e-learning platform. Try the demo!

The project is mainly developed by Computer Science Master's students at the University of Applied Sciences in Darmstadt, Germany.

If you need help using or want to support the project, just say hello on Gitter.

Usage

Your best option for running the project is by using our Docker images:

Have a look at the sample docker-compose file on how to wire things together.

For a list of all configuration options see docs/configuration.

Development

The codebase is written entirely in TypeScript.

The API is based on Node.js together with Express, routing controllers and MongoDB. Have a look at our API documentation.

The web frontend is built with Angular 6 and Angular Material components.

Running

You have multiple options for running the project for development purposes.

After successfully starting, the web frontend will be available at http://localhost:4200.

The API will be available at http://localhost:3030. To avoid CORS the API will also be proxied by the Angular development server and be available at http://localhost:4200/api.

Configuration

The default configuration should already enable you to start developing.

For more information on how to configure e.g. e-mail see docs/development/configuration.

Commands

API & web frontend

  • Running: npm run start
  • Linting: npm run lint
  • Testing: npm run test

API

  • Loading fixtures (sample data): npm run load:fixtures
  • Debugging: npm run start:inspect

Web frontend

  • End to end tests: npm run e2e
  • Angular CLI: npm run ng (Be sure to pass flags with additional dashes. E.g.: npm run ng build -- --prod)

Contributing

Please have a look at our contributing guide.

LICENSING

Copyright [2018] [Ute Trapp]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

geli's People

Contributors

a-siewe avatar abczxya avatar aeimer avatar alexweinfurter avatar alperuygun avatar andreasschroll avatar cfsoe avatar chrisenpunkt avatar dboschm avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar felixbrucker avatar fwitulski avatar gargamil avatar grosspersky avatar hpunktochs avatar jsinisa avatar kesselb avatar khase avatar lkskrt avatar lukas-schardt avatar maxleppla avatar michaelnarkus avatar micpah avatar oliverneff avatar patrickskowronek avatar thomassss avatar torss avatar wurmc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar

geli's Issues

export students activities

User Story

As a:

teacher

I want:

export the students activities to a csv-file

so that:

be able to give a overall grade to a given course based on different activities.

Storypoints:

Acceptance criteria:

  • Downloadable csv-file within each course, possible format:

Additional info:

Exmaple of the CSV-File

id;last name; first name; unit/assignment name; summary of points; list of given answers (seperated by ';')

travis prune devdependencies

User Story

As a:

Admin

I want:

devdependencies not to be installed in the (prod-) docker images

so that:

the image is as small as possible

Storypoints:

Acceptance criteria:

  • only the normal dependencies are in the docker container
    • API
    • Frontend (is build by webpack)

Additional info:

prune devdependencies before docker build and publish
npm prune --develop

Lecture Einheiten anlegen

User Story

als:

Teacher

möchte ich:

meinen Kurs in Einheiten aufteilen

damit ich:

kleine Lerneinheiten schaffen kann

Akzeptanzkriterien:

Lerneinheiten können angelegt und verwaltet werden

Storypoints:

Sonstiges:

fill-in-the-blank-questions

User Story

As a:

teacher

I want:

be able to assign questions of the type fill-in-the-blank

so that:

be able to create questions with numbers as answers.

Storypoints:

Acceptance criteria:

  • Be able to define a question with many blanks, correct answers of the type boolean, int, float, string, binary numbers.

Additional info:

Fragen definieren

User Story

als:

Teacher

möchte ich:

Fragen (multiple choice) erstellen und sie Kurseinheiten zuweisen

damit ich:

das Wissen der Studenten überprüfen kann

Akzeptanzkriterien:

Teacher kann Fragen hinzufügen

Storypoints:

Sonstiges:

Problems with Model-IDs in returned JSON

IDs of Models are displayed as ObjectIDs instead of regular strings.

This can be fixed by adding an object transformation function to each schema:

    toObject: {
      transform: function(doc: any, ret: any) {
        ret._id = ret.id;
        delete ret.id;
      }
    }

Check if Vagrant(box) is working properly

User Story

As a:

Developer

I want:

a problemless working vagrant-vm

so that:

I just have to run vagrant up and I can start developing and testing. In addition a correct Readme is needed.

Storypoints:

?

Acceptance criteria:

  • vagrant up works problemless
  • developing code over the mount works problemless
  • db-access from host via eg "compass"
  • testing should be possible
    • backend
    • frontend
    • integrationtests
  • readme is correct
    • correct texts for docker
    • correct texts for vagrant

Additional info:

This should be done ASAP, but after the milestone Release 0.1.

Remove user name (and only use mail address for login)

To be discussed: Does the user name add any substantial value?

Suggestion: Use the mail address for logging in. Inside the application, we address the user with Firstname and Last name (which we have anyway)

  • Remove username from register form
  • Remove username from update/profile form
  • Remove username from database shema/model
  • Remove username from fixtures???

Videoupload

User Story

als:

Teacher

möchte ich:

Videos hochladen und sie einer Kurseinheit anhängen

damit ich:

sie den Studierenden verfügbar mache

Akzeptanzkriterien:

Videoupload funktioniert

Storypoints:

Sonstiges:

Personalisiertes Dashboard

User Story

als:

Student

möchte ich:

den letzten Kurs in dem ich gearbeitet habe beim wieder anmelden auf dem dashboard haben

damit ich:

direkt weiter machen kann

Akzeptanzkriterien:

letzter aktiver Kurs wird angezeigt

Storypoints:

Sonstiges:

Mail Bestätigung

User Story

als:

Anwender

möchte ich:

eine Bestätigungsmail nach dem Registrieren bekommen

damit ich:

meinen Account verifizieren kann

Akzeptanzkriterien:

Mail mit Bestätigungslink wird versendet
Bestätigung wird nach anklicken des Links in Datenbank gespeichert

Storypoints:

Sonstiges:

course view teacher

User Story

As a:

teacher

I want:

within each course a good overview of all activities

so that:

be able tro track the students activities.

Storypoints:

Acceptance criteria:

  • Within each course I see the activities of each student including a progress bar (see #99), their assignments, ...
  • for each assignment I see who
    • passed it/who failed it/tried it
    • a summary

Additional info:

Breaking-Changes in Angular Material 2

Aufgrund von Updates in Material 2 ist es zu Breaking-Changes gekommen, die einen Compile-Vorgang unterbinden:
https://github.com/angular/material2/releases/tag/2.0.0-beta.3

Folgende Anpassungen sind nötig:
Ersetzen von:
@import '~@angular/material/core/theming/prebuilt/deeppurple-amber.css';
durch
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';

in styles.css

Zusätzlich muss das Package '@angular/animations' installiert sein. Das Package muss in der package.json ergänzt werden und anschließend erneut npm install ausgeführt werden.

Außerdem muss eines der Module BrowserAnimationsModule oder NoopAnimationsModule inkludiert werden.

publish students answers

User Story

As a:

teacher

I want:

make good (selected) or all answers of the students visible to all members of the course

so that:

show different strategies and possibilities. In addition the students may learn from other students if they study their solutions.

Storypoints:

?

Acceptance criteria:

  • Dialog to select some or all answers to a given assignment and a publish button. After pressing this button, all selected answers are visible to all members of the course.

Additional info:

Frontend styling collecting ticket

User Story

As a:

User

I want:

a good styled website

so that:

I like the patform even more

Storypoints:

Acceptance criteria:

  • add css-transitions for hover/active events
  • add some Kind of Filter to the Index Image, so the Text is easier to read

Additional info:

We should collect some todos and then implement them...

Improve User feedback in case of invalid inputs

Some areas of the application (for example login and registration) do not give direct user feedback in case of errors.

Example: If I try to login with a student account that is not activated yet, I do not see a helpful error message telling me the cause of the error.

Desired behavior: I want to receive a toast message telling me what went wrong.

Multiple teachers for one course

User Story

As a:

Teacher

I want to:

Add multiple other teachers to my course

so that:

every teacher can administer the course.

Storypoints:

Acceptance criteria:

  • Every teacher has full configuration capabilities for the course.
  • Every teacher should be able to add/remove other teachers (with a confirm / prompt beforehand).

Additional info:

For lectures like Advanced Web Development where we have multiple teachers that lead the course.

Add correct title

User Story

As a:

User

I want:

a speaking and useful title for the browser-tab/-window

so that:

I can see where I am and navigate better trough multiple geli-tabs

Storypoints:

?

Acceptance criteria:

  • the title accords to the shown page
  • the title switches with every context-switch

Additional info:

add id to user

User Story

As a:

teacher

I want:

assign an id (e.g. matrikel number) to each student

so that:

match different data of different sources more easily.

Storypoints:

Acceptance criteria:

  • The id is visible to teachers only.

Additional info:

automatically checked program code

User Story

As a:

teacher

I want:

create programming tasks and corresponding tests based on program code

so that:

automatically evaluate student's assignments.

Storypoints:

Acceptance criteria:

  • The teacher uploads a set of tests (Java, JavaScript, C++) -- format needs to be discussed and a corresponding assignment.
  • The students uploads a possible solution to the given assignment (zip-file).
  • Within a docker container, the student's solution is run against the given tests.
  • The student gets the feedback from the test, which is visible to the teacher too.
  • The teacher should be able to give inline feedback directly in the code (click on a line of code and enter a comment) for reviewing purposes.

Additional info:

Introduce a (mail-) templating

User Story

As a:

Programmer

I want:

to have a templating engine in the backend

so that:

I can easier and cleaner create and maintain templates for e.g. (html) mails

Storypoints:

?

Acceptance criteria:

  • templates stored under e.g. api/src/templates/mail/ can be rendered
  • variables can be passed to the value
    • object-values from a passed value can be accessed (nested)
  • a wrapper template can be defined in the render-function (this may be useful to create a tempalte file for the message and a wrapper-file to define some kind of html markup stuff)

Additional info:

The module mini-template-engine looks pretty good for this task.

Some kind of example code may be this:

class Templating {
  private $wrapper = '<div>add here some cool styled css/html stuff<div class="content">[[CONTENT]]</div></div>';
  private $activation = 'Hi {user.name}, please click {activationlink}. CU';

  public static function render($template, $html = false, array $attributes) {
    // todo check if template exists
    $input = $template_content; // MAGIC: this is the content of eg $activation for $template = 'activation'
    if ($html) {
      strreplace('[[CONTENT]]', $wrapper, $input);
    }
    $output = TinyTmpl.render($input, $attributes);
    return $output;
  }
}

but instead of getting the content from the variables we should read them from the template-files.

Delete course

User Story

As:

teacher or admin

I want to:

delete or deactivate old courses from list of courses.

As a result:

I can clean up old courses so there is a better overwiew on current

Acceptance criteria:

teacher or admin can delete a course, it will show in another seaction like an trash or will never show again.

Storypoints:

Others:

In Kurs einschreiben

User Story

als:

Student

möchte ich:

mich in einen angebotenen Kurs einschreiben

damit ich:

die dort hinterlegten Materialien verwenden kann

Akzeptanzkriterien:

Einschreiben in Kurs sowie Verknüpfung in Datenbank funktionieren

Storypoints:

Sonstiges:

Answer multiple choice questions

User Story

als:

Student

möchte ich:

Fragen vom Teacher beantworten können

damit ich:

einen Test / ein Testat bestehen kann

Akzeptanzkriterien:

  • Eingaben werden gespeichert
  • Fortschritt wird entsprechend wie in #99 dem Student und Dozent angezeigt

Storypoints:

Sonstiges:

Add license "crawler" and license page

User Story

als:

Project Owner

möchte ich:

eine rechtssicherheit haben

damit ich:

wegen Apache 2.0 Lizensen nicht abgemahnt werden können.

Akzeptanzkriterien:

  • Linzensen werden im Repository aufgeführt
  • evtl werden für noch nicht erstellte Lizenslinks warnungen ausgegeben

Storypoints:

5

Sonstiges:

Improve readme with a full installation guide

The readme file should contain a full guide on how to setup the application from zero using every available installation method (vagrant / docker / host system).

This guide should also contain instructions on how I create user accounts (using npm run load:fixtures) and how I activate them so I am actually able to login.

Please include a guide on how to setup the mail transfer aswell.

Kursfortschritt dokumentieren

User Story

als:

Student

möchte ich:

sehen wie weit ich im Kurs fortgeschritten bin

damit ich:

sehe wie viel ich noch zu tun habe

Akzeptanzkriterien:

Fortschrittsbalken wird im Dashboard angezeigt

Storypoints:

Sonstiges:

Userprofil editieren

User Story

als:

Jeder

möchte ich:

mein Profil editieren können

damit ich:

meine Nutzerdaten ändern kann

Akzeptanzkriterien:

Nutzerdaten können verändert werden
Passwort kann geändert werden

Storypoints:

Sonstiges:

🐛 BUG: Fix security issues

When I try to promote myself to the role administrator using window.localStorage["currentUserRole"] = "admin"; I should be be presented with the "admin" option in the frontend but instead be logged out.
`

add picture to user

User Story

As a:

course member (student or teacher)

I want:

see a picture within each student list etc.

so that:

remember the students more easily.

Storypoints:

Acceptance criteria:

  • The user profile contains an optinal picture (upload and taking a picture with the builtin camera).
  • Within each list of students, first name, last name and picture is visible.

Additional info:

backend gulp task remap:coverage throws warnings

(node:5304) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: EISDIR: illegal operation on a directory, open '/home/travis/build/h-da/geli/api/coverage' (node:5304) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

This warning can be fixed by selecting a file instead of a directory for the remap json file:

remapIstanbul({
            // basePath: ".",
            fail: true,
            reports: {
                "html": "./coverage",
                "json": "./coverage/coverage-report.json",
                "text-summary": null,
                "lcovonly": "./coverage/lcov.info"
            }
        })

Add i18n to frontend

User Story

als:

User

möchte ich:

eine primäre Sprache auswählen

damit ich:

den Inhalt gut erfassen kann

Akzeptanzkriterien:

Sprache muss geändert werden können

Storypoints:

Sonstiges:

ngx-translate

Add gulp debug configuration

User Story

as:

developer

i want to:

debug the typescript files of the backend without manually building it

as a result:

i have much more comfort during development

Acceptance criteria:

I'm able to debug the backend code using WebStorm.

Storypoints:

Other:

Course Detail View

User Story

As a:

student

I want:

to see the details of a course (e.g. lectures, units)

so that:

i can use the course and learn

Storypoints:

Acceptance criteria:

  • i can see lectures and units

Additional info:

Add students to course

User Story

als:

Teacher

möchte ich:

Students in meinen Kurs aufnehmen können

damit ich:

studierende im Kurs habe

Akzeptanzkriterien:

Teacher kann Studierende und Tutoren zu eigenen Kursen hinzufügen

Storypoints:

Sonstiges:

User editieren

User Story

als:

Admin

möchte ich:

die Benutzerrechte ändern

damit ich:

Teacher, Tutoren und Admins ernennen kann

Akzeptanzkriterien:

Benutzerrechte können verändert werden

Storypoints:

Sonstiges:

Setup Travis

Setup the Travis CI.

Current Status:

Backend

  • Linter (This is executed with the test-command)
  • Tests

Frontend

  • Linter
  • Tests
  • End2End Tests
  • use Chrome 59+ headless so we do not need xvfb
    • We have to check before that the testframeworks are compatible with Chrome 59+ (headless)

deadlines within questions and assignments

User Story

As a:

teacher

I want:

set a deadline for a given assignment/question

so that:

able to address the problems in the lecture.

Storypoints:

?

Acceptance criteria:

  • Possiblity to set a deadline (optional!). After this deadline the students may not upload their answers or work on the questions.

Additional info:

Course visibility configuration: Open and closed courses

User Story

As a:

Teacher

I want to:

Configure the course visibility level

so that:

Either every student with an account is able to join to cours or only priviledged users that have an access key.

Storypoints:

Acceptance criteria:

  • Students are not able to join closed courses without a valid access key
  • Every student is able to join open courses

Additional info:

To be discussed: Should closed courses be visible at or only when the correct access key is provided?

Add students based on a csv-file

User Story

As a:

teacher

I want:

add/asign students to a course based on a csv-file

so that:

save time.

Storypoints:

Acceptance criteria:

  • expected format of the csv-file needs to be displayed to the user and validated accordingly before starting the import
  • CSV Import should be possible through the teacher's web interface (upload).

Additional info:

Example of an CSV-File:
SauerTDoergeMuellerD_SS17_FortgeschritteneWebentwicklung_302566_Teilnehmer.zip

As discussed in the meeting: We don't have the mail addresses of the students in this CSV file, so we might enroll students automatically to the course that register themselves with their matrikel number (#48) that we get from the CSV file upload. See #102 for a related task (mail whitelist)

anonymous forum

User Story

As a:

teacher

I want:

give students the possibility to raise and discuss questions anonymously

so that:

know their problems.

Storypoints:

?

Acceptance criteria:

  • Standard forum, the author's name is not tracked/visible.
  • I can delete bad posts.
  • Users can comment units, section of a video.
  • Users can reference units in comment.

Additional info:

Estimated:

  • 4 x 4hr

Configuration script during installation

User Story

as:

site builder

i want to:

define a first admin account and other configuration data during the app installation

as a result:

I have a secure way and easy way to define my first admin account and configuration data

acceptance criteria:

Parameters defined during installation are used for configuration and after the installation process is finished a account with role admin exists

Storypoints:

Other:

Send e-mails to course members

User Story

As:

teacher

I want to:

send an email to an specific member, all member or an amount of members for his information.

As a result:

I can inform students.

Acceptance criteria:

Storypoints:

Others:

Import/Export course/unit/...

User Story

As a:

teacher

I want:

import parts of a lecture to a new course

so that:

reuse existing stuff in another course or be able to start a new course in a new semester based on an existing course.

Storypoints:

Acceptance criteria:

  • Create a new course based on an existing course, unselect some units, copy all selected units into the just created course.
  • Within an existing course import/copy units from another course.

Additional info:

extends #183

Estimated:

  • 4 x 4hr

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.