Coder Social home page Coder Social logo

fkn / ndo Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kriasoft/react-starter-kit

1.0 1.0 15.0 4.95 MB

NDO - Next DOmic

Home Page: http://ndoproject.org

License: MIT License

JavaScript 96.04% CSS 3.77% Dockerfile 0.13% Shell 0.06%
bootstrap3 education nodejs react

ndo's People

Contributors

akazimirov avatar cattit avatar chentaixu avatar frenzzy avatar goatslacker avatar greenkeeperio-bot avatar hogonov avatar ilyaabramovich avatar ithebredor avatar jorrit avatar josephfrazier avatar koistya avatar langpavel avatar matrus2 avatar maxkhog avatar nodkz avatar phpeek avatar piglovesyou avatar richb-hanover avatar rsanchezpp avatar salttis avatar sdiaz avatar stupidism avatar tobiasmuehl avatar tylercreator avatar volday avatar vpasport avatar wseng avatar zhiyelee avatar zwhitchcox avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

ndo's Issues

Модицифицировать input[@type=upload] чтобы ученик мог выгружать файлы

У нас есть базовая реализация хранения файлов. Там уже есть возможность загружать файл.
Нужно сделать следующее:

  • студент открывает учебную единицу
  • допустим, что на странице есть тэг <input type=upload name=file1234/> (чтобы тестировать - нужно его самостоятельно добавить)
  • пользователь кликает на upload и выбирает файл для загрузки
  • пользователь нажимает Save
    • выбранный файл загружается в files, в результате возвращается id загруженного файла
    • в поле file1234 создается объект {id: ..., name: ..., ...} (нудно подумать какие нужны поля)

Для этой задачи нужно модифицировать https://github.com/fkn/ndo/tree/master/src/components/StudyEntityView

Эта задача зависит от #40

Использовать nodejs vm модуль вместо eval

Сейчас написан "быстрый" код, который нельзя использовать в реальности (крайне небезопасный).

Нужно изучить модуль vm и сделать возможным использование его вместо new Function.

Думается, что можно будет в вызов vm передавать "богатый" API, который сможет делать некоторые общие вещи (проверка теста, проверка файла, и др)

// TODO: use nodejs vm instead of eval
/**
* Any preprocessing related to checker function for key
* @param {string} key fn key
*/
build(key) {
/* eslint-disable no-new-func */
this.fns[key] = new Function(
'val',
'key',
'doc',
'schema',
this.schema[key].checker,
);
}

https://nodejs.org/api/vm.html

StudyEntity -> Unit

Везде провести переименование StudyEntity -> Unit

Во-первых нужно переименовать файлы (чтобы переименовывать файлы нужно использовать команду git mv)

Во-вторых нужно переименовать во всех упоминаниях в файлах

В-третьих нужно поменять структуру базы данных

Отображать оценки для учебных единиц у студента

На этой странице
http://localhost:3000/courses/79629d30-0e18-11e8-a0fc-03998ec082e6/marks

Нужно отобразить списком учебные единицы (для начала просто скопировать код из списках учебных единиц: http://localhost:3000/courses/79629d30-0e18-11e8-a0fc-03998ec082e6)

Только оформить список в виде таблицы. И напротив каждой учебной единицы показывать максимальную оценку (для получения оценки студента за юнит нужно написать специальный API).

Сделать pagination & search для списка пользователей

Нужно взять код для списка пользователей с этой страницы:
https://github.com/fkn/ndo/blob/master/src/routes/users/Users.js

И вынести его в отдельный компонент. В этом отдельном компоненте сделать так, чтобы пользователей можно было фильтровать через суффиксный поиск и чтобы была pagination (например, на одной странице можно было отображать не более 10 групп)

Добавить вес учебной единицы в курсе

Обновить таблицу CourseStudyEntity и добавить туда свойство weight

Это будет вес учебной единицы в итоговой оценке за курс

По хорошему итоговая оценка за курс должна быть нормализована к 100 баллам, но вес просто должен быть коэффициентом для учебной единицы.

Пример

Есть 3 учебных единицы в курсе: А, Б, В
С весами: А - 10, Б - 5, В - 20.

Студент получил оценки: А - 90, Б - 50, В - 30

Итоговая оценка будет подсчитана следующим образом:

  1. Находим суммарный вес учебных единиц (в нашем случае - 10+5+20 = 35)
  2. Находим нормализованный балл по учебным единицам:
    А - 90x10/35; Б - 50x5/35; В - 30x20/35
  3. Сумма - и есть ответ: в нашем случае - 50

Разбить StudyEntityView:processingInstructions на классы

Сейчас есть длинный код в:
https://github.com/fkn/ndo/blob/master/src/components/UnitView/UnitView.js#L126

Необходимо сделать так, чтобы этот код был разделен на классы (каждый элемент - отдельный класс)

В момент написания этой задачи там есть 8 разных компонентов.

Значит нужно создать 8 классов. Возможно, что нужен будет ещё 9 класс для хранения каких-то общих утилитарных функций.

Добавить возможность преподавателю выгружать файлы в учебную единицу

Нужно сделать следующее:

  • преподаватель открывает учебную единицу и нажимает кнопку редактировать
    • над текстовым редактором нужно добавить toolbox с кнопками (в прямоугольнике)
    • пока что там будет лишь одна кнопка (добавить файл)
  • преподаватель кликает на кнопку добавить файл
  • появляется модальное окно со списком файлв и там же будет возможность загрузки нового файла
    • преподаватель кликает по существующему файлу
    • или загружает новый
  • файл вставляется просто как url (потом сделаем так, чтобы можно было выбрать тип контента, а пока автор сам руками добавит необходимый тэг для отображения файла: ссылка, картинка, iframe)

image

Ошибка при открытии юнита

Зайдите под пользователем [email protected]

И откройте эту страницу:
http://localhost:3000/courses/869dc290-0e18-11e8-a0fc-03998ec082e6/ad32c630-0e18-11e8-a0fc-03998ec082e6

Администратор должен иметь возможность просматривать содержимое курса (но не должен иметь возможность ставить оценки).

Студент должен иметь возможность видеть список юнитов, но не иметь возможность смотреть конкретный юнит (так же для этого нужно изменить запросы в БД, чтобы разграничить права).

Преподаватель должен иметь возможность просматривать содержимое курса и иметь возможность ставить оценки.

Сделать возможным изменить имя курса

Самое логичное - добавить кнопку (изменить) рядом с плюсом

При нажатии на кнопку должно появляться модальное окно создания курса, но для редактирования

image

Сделать загруку dot-файлов

Сделать загрузку dot-файлов (язык для графов), прямо в учебную единицу.

Про dot-файлы можно почитать тут: https://ru.wikipedia.org/wiki/DOT_(язык)

Поиграть в это онлайн можно тут: http://viz-js.com

Есть библиотека D3 (https://d3js.org), которая идеально под это подходит, но есть вероятность, что она будет слишком медленной.

Поэтому появляется 2 пути решения:

  • рендерить графику прямо на стороне клиента (есть вероятность того, что будет тормозить)
  • рендерить графику на стороне сервера и отдавать клиенту просто png-картинку

Пока что я бы попробовал первый вариант. Бегло гуглится 2 реализации:

Нужно попробовать какую-нибудь из них. По-сути, чтобы вставить граф преподаватель должен будет написать какой-то такой код:

<script type="text/vnd.graphviz">
graph {
    a -- b;
    b -- c;
    a -- c;
    d -- c;
    e -- c;
    e -- a;
}
</script>

Ошибка рефакторинга

В user нет поля role. Role определяется для каждой пары Course-User в отдельности.

Нужно запрашивать роль где-то в тот же момент когда запрашиваются курсы текущего пользователя.

Может быть лучше добавить свойство role в CourseType для graphql.

{user.role === 'teacher' && (

Сделать pagination & search для списка групп

Нужно взять код для списка групп с этой страницы:
https://github.com/fkn/ndo/blob/master/src/routes/users/Users.js

И вынести его в отдельный компонент. В этом отдельном компоненте сделать так, чтобы группы можно было фильтровать через суффиксный поиск и чтобы была pagination (например, на одной странице можно было отображать не более 10 групп)

Добавить возможность вставлять математические формулы в учебную единицу (преподавателем)

Хочется, чтобы преподаватель мог писать формулы в формате LaTeX, а студенты их могли видеть.

Есть 2 подхода:

  1. вставлять формулы через специальный тэг (например: <math>2 + 2 = 4</math>
  2. вставлять формулы как это делается в LaTeX'е (например: $$ 2 + 2 = 4 $$)

Второй способ - лучше, но скорее всего лучше использовать первый.

Самое крутое средство на сегодняшний день - MathJax. Вот тут есть документация:
https://docs.mathjax.org/en/latest/start.html

Похоже, что вот эта библиотека лучший вариант (но надо ещё поискать):
https://github.com/wko27/react-mathjax

Сделать нормально отображение списка курсов

На странице курсов нужно чтобы отображались они следующим образом:

  • вначале курсы, на которые пользователь подписан как студент
  • потом курсы, на которые пользователь подписан как преподаватель
  • потом все остальные курсы

Создать commit.md

Создать checklist для проверки всё ли сделано правильно при коммите и правильно ли сделан коммит

Написать как сделать синхронизацию с upstream'ом

Написать как сделать pull request

Создать файл тут:
https://github.com/fkn/ndo/new/master/docs

Список оценок должен обновляться сразу после добавления новой оценки

Сейчас при добавлении оценки она не появляется в списке и нужно обновить страницу. Нужно, чтобы добавленная оценка отображалась автоматически

image

Имеется ввиду эта страница:
http://localhost:3000/courses/79629d30-0e18-11e8-a0fc-03998ec082e6/98d574d0-0e18-11e8-a0fc-03998ec082e6

Добавить стратегию оценивания

В юните нужно добавить возможность выбирать "стратегию" оценивания (поле markStrategy:enum).

Пока что видны следующие стратегии:

  1. Учитывается последняя оценка
  2. Учитывается первая оценка
  3. Учитывается лучшая оценка
  4. Учитывается худшая оценка

Стратегия будет просто строкой и дальше будет использоваться на странице со списками оценок.

(то есть просто через switch-case надо будет выбирать нужную стратегию)

Добавить новый пункт меню "Tests"

image

Это должна быть страница со списком тестов текущего пользователя.
Каждый тест будет содержать в себе:

  • id
  • title: String
  • body: String
  • authorId

Для body должен быть текстовый редактор (такой же как в учебной единице).

Про формат body пока не стоит думать (скорее всего будет JSON).

Скрыть email'ы от глаз

Вот на этой странице:
http://51.15.53.245/users

Можно увидеть email'ы всех пользователей. По-хорошему доступ к email пользователя должен отсутствовать у не администратора. Тем более у обычных пользователей.

Сейчас же можно собирать данные с этой страницы и рассылать спам на email'ы

Поэтому можно выделить такие задачи:

  • скрыть email'ы для пользователей, которые не вошли в систему (можно показывать имя, но не e-mail)
  • скрыть email'ы для не администраторов

Привести в порядок grapnql запросы

Для каждого запроса нужно сделать следующее:

  1. Запрос должен быть вынесен во внешний файл
  2. У запроса должно быть имя (то есть он должен начинаться с query <NAME> { или с mutation <NAME> {)
  3. Для каждого запроса должен быть написан хотя бы 1 тест (нужно переиспользовать запросы из внешних файлов)

Исправить основные ошибки создания/редактирования курса

  1. Зарегистрироваться под администратором
  2. Создать курс
  3. Открыть курс и убедиться, что нельзя создавать в нём юниты
  4. Подписать этого же пользователя как преподавателя на курс
  5. Создать в курсе юнит
  6. Посмотреть юнит
  7. Добавить ответ на юнит
  8. Выставить оценку за юнит

Этот процесс не работает в данный момент и есть как минимум 2 ошибки:

  • пункт 3 - будет ошибка, что role undefined
  • пункт 6 - будет ошибка, что answers undefined

Подписать 2-х пользователь не администраторов:

  1. Как ученика
  2. Как преподавателя

Зайти под учеником

  1. Открыть курс
  2. Открыть юнит
  3. Добавить ответ

Зайти под преподавателем

  1. Открыть курс
  2. Добавить новый юнит
  3. Открыть юнит
  4. Просмотреть ответы
  5. Выставить оценку за ответ

setup_env.md -> proxyisu.txt

Описать необходимое программное обеспечение с ссылками для скчавания
Указать настройки прокси во всех программах
Сделать в виде пошагового рокуводства

Нельзя удалять и создавать новый файл. Нужно сделать переименование

Сделать возможным изменение имени пользователя

На этой странице:
http://localhost:3000/users/4595ded0-9051-11e7-9277-efa5ca42ec56

Сделать так, чтобы пользователь мог кликнуть на карандаш напротив своего имени и изменить его

image

  • если это пользователь - admin, то изменение возможно для всех пользователей
  • в противном случае - пользователь может менять только своё имя

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.