Курсы: JS API

Это экспериментальная версия JS API v0.1

JS API позволяет расширять функциональность кабинета учеников.

Размещать свой код можно в поле "Футер" в редакторе урока (в этом работать код будет только на странице урока) либо в футере курса (будет работать во всех уроках курса).

Обратите внимание: в футере размещается HTML, поэтому если у вас только JS код, его нужно обернуть в тег <script>.

Сам скрипт может быть написан в футере в <script></script> или загружен с вашего домена. Например, <script defer src="https://ваш.домен/путь/к/скрипту"></script>

Прежде чем использовать JS API, необходимо зарегистрировать плагин:

var api = cabinetAPI.registerPlugin();
api.on('ready', function() {
  // данные ученика загружены и доступны через API
  
  // информация о профиле и доступе
  var profile = api.getStudentInfo();
  console.log('E-mail ученика: ' + profile.email);
  
  var access = api.getStudentAccess();
  if(!access) {
     // вы зашли как модератор
  }
  else {
     console.log('Пройдено уроков: ' + access.confirmed)
  }
});
 
api.on('lesson_passed', function(event) {
   // ученик нажал кнопку "Урок пройден"
});

Объект api представляет собой коллекцию методов. Часть методов доступна сразу после выполнения функции registerPlugin, а часть — только после события "ready".

Методы в api:

getCurrentDate

[доступно: сразу]

Возвращает метку серверного времени (в мс от 01.01.1970) на момент загрузки страницы учеником. Серверное время — UTC+3.

getCourseId

[доступно: сразу]

Возвращает внутренний id курса.

getLessonId

[доступно: сразу]

Возвращает внутренний id урока

getLessonNum

[доступно сразу]

Возвращает порядковый номер урока (или 0, если текущая страница не является уроком)

getStudentId

[доступно сразу]

Возвращает id ученика в системе

getStudentEmail

[доступно сразу]

Возвращает email ученика

getCurrentDateLo

[доступно после события ready]

Возвращает объект LoDate для текущей серверной даты (она же возвращается в getCurrentDate). Объект LoDate удобно использовать для вывода времени в московском часовом поясе независимо от того, какой часовой пояс у ученика.
Как использовать LoDate >>

getStudentAccess

[доступно после события ready] Возвращает объект с доступом ученика к текущему курсу.
Содержит следующие поля:

  • class: Number — номер потока (если используется в курсе)
  • progress: Number — номер последнего пройденного урока по мнению ученика (только для пошаговых курсов)
  • confirmed: Number — номер пройденного урока, подтвержденный модератором (только для пошаговых курсов с ручным открытием доступа)
  • confirmedDate: Number — метка времени последнего подтвержденного урока (confirmed)
  • cmpl: Boolean — флаг, пройден ли курс или нет.
  • isOn: Boolean — есть ли доступ ученика к этому курсу
  • fails: Number — количество прогулов (для марафона)
  • score: Array  — очки ученика за курс. Представляет собой массив чисел. Индекс — номер урока. Значение — 0 или null — неизвестно,  -1 = прогул, 1 = требуется переделать задание, 5 = задание сдано, урока пройден.
  • expires: Number — метка времени, когда доступ к курсу заканчивается
  • frozen: Boolean — флаг, заморожен ли доступ к текущему курсу
  • freezeDate: ISODate — дата включения заморозки
  • freezeLen: Number — количество дней, на которое включена заморозка
  • cert: String — id выданного сертификата, если выдан.

getStudentInfo 

[доступно после события ready] Возвращает объект с информацией об ученике.
Содержит следующие поля:

  • username: String — имя пользователя
  • email: String
  • phone: String
  • net_profiles: Array[String] — массив ссылок на профили соцсетей (заполняется учеником самостоятельно на странице Профиль)
  • city: String — город, заполняется учеником на стр. Профиль
  • timezone: String — часовой пояс ученика, заполняется учеником на стр. Профиль
  • hash: String  — секретный ключ ученика для различных действий в письмах (в частности, для автологина)
  • last_access: ISODate — дата последнего посещения кабинета курсов.
  • last_ip: String — последний IP-адрес ученика
  • subscribedOnComments: Boolean — подписан ли на уведомления о новых комментариях
  • subscribedOnAuthorMails: Boolean — подписан ли на рассылку автора (включая любую серию писем в курсах)

События

— on (подписка на события)
— emit (генерация события)

Использование:

api.on('myevent', function(event, data) {
 // event = "myevent"
 // data = { a: 1, b: 2 }
})  
api.emit('myevent', { a: 1, b: 2 })

Доступные системные события:

  • lesson_passed — когда ученик нажимает на кнопку "Урок пройден". Второй аргумент не передается.

 

 

LoDate

LoDate — инструмент для работы с датой, не зависящий от часового пояса. 
Конструктор LoDate доступен непосредственно из api.
api.LoDate

Далее вместо api.LoDate будем писать просто LoDate.

Создание объект:

var d = new LoDate( src ) — создать на основе src,
где src может быть:

  • new Date()
  • строкой ISODate
  • меткой времени (числом миллисекунд с 01.01.1970)
  • объектом LoDate
  • строкой в формате DD.MM.YYYY HH:mm:ss

Создание на основе человеко-читаемого представления:
var d = new LoDate();
d.human( "20.09.2017" )
или d.human("20.09.2017 17:43")  
 

Форматирование:

  • human()
    вывод в виде ДД.ММ.ГГГГ ЧЧ:мм:сс
  • humanDate()
    вывод в виде ДД.ММ.ГГГГ
  • humanTime()
    вывод в виде ЧЧ:мм:сс
  • format(String)
    вывод в заданном формате.    D — день, M — месяц, Y — год, h — часы, m — минуты, s — секунды, ms — миллисекунды.
    Например:   LoDate().format("дата D.M.Y, время h:m") 
  • year, month, day, hour, minute, second — функции для вывода отдельных компонент.