GithubHelp home page GithubHelp logo

hyfer's Introduction

Hyfer

Hyfer is a Code School platform for students and teachers.

Installation

Database

This application requires a MySQL database.

  • Create an empty database and a MySQL user with rights to the database.

  • Use the command line to load the most recent version of the schema SQL file from the sql folder into the database:

    mysql -u user-name -p database-name < sql-file

  • Next, repeat this command to load the sample data SQL file from the sql folder into the database.

  • create a .env file in the hyfer-backend folder, paste the contents of the .env.sample file into it, and modify to reflect your specific database configuration.

Installing dependencies

Install dependencies using:

yarn install

Running tests

You can run tests using:

yarn test

start the app

yarn start

Admin functions

Certain admin tasks require a teacher role. To initially give yourself this role you need to sign-in with GitHUb and then use the my-sql command line or the MySQL Workbench to change your role in the users table from guest to teacher.

hyfer's People

Contributors

aminmahrami avatar arasmr avatar chileluk avatar ekocibar avatar elias011 avatar fadikurdi avatar jalalalwani avatar jamsrahimi avatar jidarwish avatar m3kh avatar maher-reven avatar mahmutkaya avatar malnajar avatar meyadd avatar mkruijt avatar naghamfarwati avatar ninjatux avatar remarcmij avatar talalalamdar-2 avatar yousefallaban avatar zydan1 avatar

Stargazers

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

hyfer's Issues

a bug in the timeline button "go to today"

when you press on the button in the timeline the app will crash and you will receive this error:

TypeError: Cannot read property 'parentNode' of null
Timeline._this.handleClickTodayMarker
line: Timeline.js:85

Peer Review Feature

add functionality to:

  • notify teacher when student submits homework

  • allow teacher to assign each student a partner to provide feedback

  • notify assigned feedback partner when homework is ready for review

  • allow teacher to see and add to feedback provided by review partner

Duplicated code

The Guest, Students and Teachers components in the src/components/Users folder are virtually identical. This should be replaced with a single component that receives a role prop.

The input search doesn't work

The input search(lookup someone) doesn't work, and if I want to see the other users of this app or members of a class also I can't.

Add filter option when adding teachers to class

As our list of teachers quite large, it takes quite a bit of time to find the right teacher in the list. As the team has to add many teachers when updating the scedule, it would be very helpful to have a filter option here that makes selecting a teacher easy.

can't assign new teacher in the module

while trying to assign teacher in one of the modules, there is no way to write or select any teacher from the database, there only teacher(1/2) and nothing can be done.

Changing roles error

As a teacher, I can't change the role of a user, to student or to teacher, or update anything on the form. I get error 401. Also default class5 should be changed!

Rate students homework

“As a teacher, I want to be able to rate my students homework , so that I can know the progress for each student.”

an issue in editing profile in the class selector

there is an issue in the profile components ... if you want to pick a class you only have a limited options from class 6 till class 15 ... while that should be based on the API to loop through the class's, and the way of adding a new class should be based on the timeline when a teacher add a new class then he can add students to that class

no one can delete a class from the app :D

we need to make a button that also can delete a class and in this case we need to know after deleting a class where the students will end up ... should they still can use the app or by deleting the app we should just close it so it will not show up in the timeline (in this case also we have to add in the class table status for example "open" or "closed"

Use either yarn.lock or package-lock.json only

yarn.lock and package-lock.json serve the same purpose but are used but different tools. Having them both is redundant and defeats the purpose of a lock file since different people will have different dependency versions which might lead to inconsistent results.

Consider using yarn instead of npm and getting rid of package-lock.json.

More about yarn.lock.

Timeline is not working with our without the existing database

i have tried to run the app today with the old database but still the timeline not working and i receive this error's from AddNewModuleModal._this.setInitialState
and the error's are :

    • min.format is not a function
      The above error occurred in the component:
      in AddNewModuleModal (at AddDropdownList.js:54)
    • ./src/components/timelineComp/Timeline/Timeline.js
      Line 8: 'loader' is defined but never used no-unused-vars
    • ./src/Pages/Users/Profile.js
      Line 5: 'notify' is defined but never

Down below at front page

Should be changed: About hyfer Hyfer is a learning platform of Hack Your Future, a code school (foundation) teaching computer programming to refugees. The website was developed as a project in Hack Your Future curriculum. Developed by Hasan Shahoud, Jack Sacali and Malek Kanaan under supervision of HYF teachers Jim Cramer,Michael Trouw,Pablo Celentano and Unmesh Joshi. Enhanced by Alumnus of Class11 .

Implement PropTypes

At present the Hyfer frontend does not use PropTypes for props validation. There is a risk that passing invalid props goes undetected.

It is proposed that PropTypes are implemented for each React component that needs to be touched for other work anyway.

# track assignments

As a teacher, I want to know who make his homework, So I can track assignments

Linter

Should we add Linter ?

Train tickets Issue

for the user of this feature:

  • the user should be able to send a link or links to single student or class(with the possibility to remove any student from the list if the student will not attend to the class)
  • the ability for the user to see if the tickets have been used or not
  • the user must also have the ability to remove or hide the ticket from the student if the student didn't use the ticket (or the user can also assign the ticket for the following week)

and this feature should give the student the ability to:

  • receive the train ticket (the link) individually to make sure that no one can use his ticket
  • write a comment or send a report that the student have an issue with the ticket (used before) or with the link
  • receive the link also by Email which will give the student more access to his ticket in case that he wasn't able to reach the app

Centralise application-wide constants.

At present there are several front-end files that directly define a constant for the base URL for the backend API (i.e. http://localhost:3005/...). This makes it difficult and error-prone to change this base URL should that be necessary.

The proposed solution is to create a config.js file that contains definitions of constants that are used application-wide in the frontend. We can then import the definitions where needed and replace equivalent locally defined constants as we come across them.

GitHub Team Synchronization

Synchronization of users with GitHub

1. Administrative Principles

  • The GitHub Team information is to be considered the single source of truth for the Hyfer database. That is, HYF class membership should be actively managed through the GitHub page for the HackYourFuture organization. Hyfer itself will not provide any means for such management.

  • Class membership management includes the following activities:

    • Creating new class teams.
    • Adding (inviting) students.
    • Moving students that switch classes.
    • Removing dropped-out students.
  • A GitHub team that represents a HYF class should have a name that consists of the word class followed by a number, e.g. class13. Team members of such a class are considered 'students' and will receive the Hyfer role of student. (Exception: members of the teachers team, see below.)

  • Teachers are defined as members of the GitHub teachers team and will receive the Hyfer role of teacher.

  • A class team may include one or more teachers if needed for administrative purposes, however in Hyfer they will not be included as members/students of the class, i.e. they will be filtered out.

  • Any other teams in the HYF organization will be ignored by Hyfer.

2. Synchronization Principles

Synchronization can be completely handled by the backend. The frontend only needs to trigger the process by calling an API endpoint and be notified when the process has been completed.

  • The properties of interest for each member in a GitHub team are:

    property description
    login GitHub login name
    name The user's full name (may not be present).
    email The user's email address (may not be present).
  • When comparing user data between the GitHub API response and the Hyfer database, the GitHub login name is used as the unique key to identify a user. In the GitHub API response this corresponds to the property login, and in the users table to username.

  • We will never delete classes or users in the database. We can archive classes if necessary and can filter out users that are not a member of any (active) class if necessary in the UI.

2.1 GitHub teams that represent HYF classes

Note: these are GitHub teams that start with the word class, followed by a number.

For each class team the following process will be followed:

  1. If the class does not yet exist in the groups table we insert a new row with a default starting_date of 'next Sunday' and an archived value of zero.

  2. We will need to wipe out the class membership (if any) for the current class and rebuild it from scratch from the membership data obtained from GitHub. This is done by deleting all rows from the groups_students table that correspond to the group_id of the class being processed.

  3. For each member of the GitHub class team (except if they are also member of the teachers team) either a row needs to be inserted into the users table if the user doesn't exist yet, or the name and email fields for an existing user should be updated if that data is available from GitHub. The role must be set to student.

  4. We need to add rows in the groups_students table, linking each team member to its class. This effectively (re)builds the class membership.

2.2 GitHub teachers team

Note: This is the GitHub team with the name teachers.

For each member of the GitHub teachers team we either need to insert a user into the users table if the user doesn't exist yet, or overwrite the name and email fields for an existing user if that data is available from GitHub. The role must be set to teacher.

Date Picker of 'Add a new module' is not working.

When you click to Add a new module button which is on the Timeline page, after you filled all information, you are not able to choose a valid date in the date picker. Date picker gets the 'min' and 'max' available time of the chosen modules but you still get error says 'Please provide a valid starting date for the module to be added'.

i tried to handle it but its not work out and show me some err in terminal even when i was using the old database

×

_callee$
C:/Users/marjonbartelds/Desktop/project/hyfer/src/store/TimeLineStore.js:71
  68 |    ).catch(err => console.log(err));
  69 | 
  70 |    // set the state with the array of all current groups [maybe needed for sidecolumn group names]
> 71 |    const groups = Object.keys(timelineItems);
  72 |    groups.sort((group1, group2) => {
  73 |      return +group1.split(" ")[1] > +group2.split(" ")[1];
  74 |    });

todayMarker is null -- React Issue

I tried to follow the code to know from where it will be null and as i saw you are getting it from the state and the state is null, so in thiscase offcourse it will be, I couldn't figure it out because i don't know what it suppose to do.
But if there is something will have a null value in some point it should be better to have it with a conditional checking.
screenshot-2018-4-9 hyfer

# class activity(event)

“As a user, I want to be able to see my class activity such as Youtube so that I can see all my class activity in one place.”

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.