Skip to content

Commit b66f709

Browse files
committed
more work on courses & minor compat. fixes
1 parent 932724b commit b66f709

11 files changed

Lines changed: 206 additions & 3 deletions

File tree

client/polyfill/dom.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ var methods = {
5858
var node = this;
5959

6060
while (node) {
61-
if (node.matches(selector)) return node;
61+
if (node.matches && node.matches(selector)) return node;
6262
else node = node.parentElement;
6363
}
6464
return null;

ecosystem.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"name": "Javascript.ru",
55
"script": "bin/server",
66
"instances": "2",
7+
"node_args": "--harmony_classes",
78
"exec_mode": "cluster_mode",
89
"max_memory_restart": "2G",
910
"log_file": "/var/log/node/javascript.log",

fixture/init/course.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ exports.CourseGroup = [
2222
slug: 'js-1',
2323
price: 1,
2424
participantsLimit: 30,
25+
webinarId: '123',
2526
title: "Курс JavaScript/DOM/интерфейсы (01.01)"
2627
},
2728
{
@@ -31,6 +32,7 @@ exports.CourseGroup = [
3132
timeDesc: "пн/чт 21:30 - 23:00 GMT+3",
3233
slug: 'js-2',
3334
price: 1,
35+
webinarId: '456',
3436
participantsLimit: 30,
3537
title: "Курс JavaScript/DOM/интерфейсы (06.01)"
3638
}

gulpfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ gulp.task("nodemon", lazyRequireTask('./tasks/nodemon', {
5252
// so I have to restart server to pickup the template change
5353
ext: "js,jade",
5454

55-
nodeArgs: ['--debug'],
55+
nodeArgs: ['--debug', '--harmony_classes'],
5656
script: "./bin/server",
5757
ignore: '**/client/', // ignore handlers' client code
5858
watch: ["handlers", "modules"]

handlers/courses/lib/onPaid.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
const Order = require('payments').Order;
22
const path = require('path');
33
const log = require('log')();
4+
const config = require('config');
45
const sendMail = require('mailer').send;
56
const CourseInvite = require('../models/courseInvite');
67
const CourseGroup = require('../models/courseGroup');
78
const sendOrderInvites = require('./sendOrderInvites');
9+
const xmppClient = require('xmppClient');
810

911
// not a middleware
1012
// can be called from CRON
@@ -43,6 +45,25 @@ module.exports = function* (order) {
4345

4446
yield* sendOrderInvites(order);
4547

48+
// grant membership in chat
49+
var client = new xmppClient({
50+
jid: config.xmpp.admin.login + '/host',
51+
password: config.xmpp.admin.password
52+
});
53+
54+
yield client.connect();
55+
56+
var roomJid = yield client.createRoom(group.webinarId);
57+
58+
yield CourseGroup.populate(group, {path: 'participants.user'});
59+
60+
for (var i = 0; i < group.participants.length; i++) {
61+
var participant = group.participants[i];
62+
yield client.grantMember(roomJid, participant.user.profileName, participant.courseName);
63+
}
64+
65+
client.disconnect();
66+
4667
order.status = Order.STATUS_SUCCESS;
4768

4869
yield order.persist();

handlers/courses/models/courseGroup.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ var schema = new Schema({
5050
}
5151
}],
5252

53+
// room jid, gotowebinar id
54+
webinarId: {
55+
type: String
56+
},
57+
5358
course: {
5459
type: Schema.Types.ObjectId,
5560
ref: 'Course',
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
extends /layouts/main
2+
3+
4+
block append variables
5+
6+
- var layout_main_class = "main_width-limit"
7+
- var title = 'Онлайн-курс: настройка окружения';
8+
- var sitetoolbar = true
9+
10+
11+
block content
12+
13+
include:simpledown ./course-js-howto.md
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
Эта инструкция -- о том, как настроить у себя окружение для обучения.
2+
3+
Прочитайте, пожалуйста, ее полностью.
4+
Настройте всё и, желательно, протестируйте на собрании.
5+
Это важно, чтобы вы могли сразу же полноценно принимать участие в процессе.
6+
7+
Для общения используется одновременно видео, аудио и чат.
8+
9+
# Общение в чате
10+
11+
Для общения в чате используется Jabber-клиент.
12+
13+
Самые популярные клиенты:
14+
15+
<ul>
16+
<li>Для Windows и Linux: <a href="http://pidgin.im">Pidgin</a>.</li>
17+
<li>Для MacOS: <a href="https://adium.im/">Adium</a>.</li>
18+
</ul>
19+
20+
Для настройки вам понадобятся:
21+
<ul>
22+
<li>Имя страницы профиля в качестве логина -- его можно посмотреть в <a href="/profile/">профиле</a>, во вкладке Аккаунт.</li>
23+
<li>Пароль для входа в сайт. Если вы всегда входили через социальную сеть -- его может не быть, тогда создайте его во вкладке профиля Аккаунт.</li>
24+
<li>Номер комнаты -- можно посмотреть на странице группы, доступной с вкладки профиля Курсы.</li>
25+
</ul>
26+
27+
Обратим внимание: имя пользователя и email вам не нужны. Только то, что указано выше.
28+
29+
Например, если ваши данные:
30+
<ul>
31+
<li>Email: `[email protected]`</li>
32+
<li>Имя пользователя: `Василий Иванович`</li>
33+
<li>Имя страницы профиля: `vasily-ivanovich`</li>
34+
<li>Пароль: `chapaev`</li>
35+
</ul>
36+
37+
То для чата вам понадобятся `vasily-ivanovich` как логин и `chapaev` как пароль.
38+
39+
Если вы уже знаете, как настраивать Jabber-клиенты, то вот детали настройки:
40+
41+
<ul>
42+
<li>Сервер: x.javascript.ru</li>
43+
<li>Сервер конференций: conference.x.javascript.ru</li>
44+
<li>Название комнаты: со страницы группы, это число вида 12982351439.</li>
45+
</ul>
46+
47+
В качестве ника(псевдонима) для комнаты укажите свое имя и фамилию в формате "Имя Фамилия" (учитывая регистр).
48+
49+
Короткое видео по установке и настройке Pidgin и Adium вы можете увидеть тут !TODO!
50+
51+
# Система для разделения экрана и общения
52+
53+
Для ее использования в браузере должна быть установлена и включена java. Если у вас ее нет -- скачать можно здесь: <a href="http://java.com/ru/download/">http://java.com/ru/download/</a>.
54+
55+
Для захода в систему зайдите на адрес <a href="http://joingotowebinar.com">http://joingotowebinar.com</a> и укажите в первом поле название комнаты, а во втором -- `логин@javascript.ru`.
56+
57+
[warn]
58+
Нужно использовать именно номер комнаты и логин, например <code>12982351439</code> и <code>[email protected]</code>. Свою почту указывать не нужно.
59+
60+
Ваша почта намеренно не используется в настройках из соображений приватности.
61+
[/warn]
62+
63+
Для запуска системы отвечайте Yes на вопросы. Если ничего не запускается -- возможно, нужно нажать кнопку <b>Launch</b> или <b>Download Software</b> и запустить скачанную программу вручную.
64+
65+
Когда программа поставится, при следующем заходе скачивать или запускать ее заново будет не нужно.
66+
67+
[warn]
68+
Заход в видео возможен только в период проведения мероприятия.<br><br>При попытке зайти во "внеурочное" время видео не запустится. Это нормально.
69+
[/warn]
70+
71+
# Общение голосом
72+
73+
Для общения голосом служит та же система, что и для видео. Желательно иметь гарнитуру (наушники + микрофон).
74+
75+
Обратим внимание, микрофон не обязателен для участия, так как задавать вопросы можно и в чате.
76+
77+
# Как задавать вопросы?
78+
79+
Темп занятий соответствует тому, насколько я вижу понимание с вашей стороны.
80+
Если вдруг вам что-то непонятно в материале или решении задачи -- обязательно говорите об этом, задавайте вопросы.
81+
82+
Бывает так, что вроде бы непонятно, но конкретно сформулировать сложно.
83+
В этом случае отличным выходом является вопрос "с этого момента поподробнее". Главное - спрашивайте, участвуйте в занятии.
84+
85+
Ответы на ваши вопросы могут содержать дополнительные интересные сведения, которые помогут не только вам, но и другим участникам.
86+
Поэтому участвуйте, задавайте, все вам скажут только спасибо.
87+
88+
<b>Задавать вопросы можно двумя способами.</b>
89+
90+
<ol>
91+
<li>Первый -- написать в общем чате. Настройки чата описаны выше</li>
92+
<li>Второй -- спросить голосом.
93+
Для этого нужно нажать на кнопку "ладонь со стрелкой вверх" ("Raise hand"), которая находится на мини-пульте управления системой разделения экрана.
94+
По умолчанию это справа-сверху. В этом случае, когда ведущий увидит вашу руку -- он передаст вам "микрофон".
95+
96+
При получении микрофона значок микрофона на мини-пульте изменится и раздастся голосовое оповещение на английском "unmuted", и вас будет слышно.</li>
97+
</ol>
98+
99+
Бывает, что поднятая рука заметна ведущему не сразу, тогда можно написать об этом в чате -- "вопрос голосом".
100+
101+
# Если чат не работает
102+
103+
Во-первых, проверьте, что вы вводите в качестве логина именно имя страницы профиля. Оно указано во вкладке профиля Аккаунт.
104+
Это не имя пользователя и не часть вашего email.
105+
106+
Во-вторых, это бывает весьма редко, но некоторые провайдеры имеют сложности с правильным разрешением особых ДНС-записей для Jabber.
107+
В результате аккаунт не может подключиться.
108+
Попробуйте поставить DNS-сервер `8.8.8.8` (это открытый сервер от Google), если заработает, значит дело в этом.
109+
110+
Если всё ещё не работает -- напишите мне на <a href="mailto:[email protected]">[email protected]</a>, постараюсь помочь.
111+
112+
**Чат должен работать в любое время, проверьте его заранее.**
113+
114+
115+
# Если не работает видео
116+
117+
**Видео, в отличие от чата, работает только во время занятий. Как правило, оно стартует в течение 1-2 минут после захода ведущего в чат.**
118+
119+
Если вход не удаётся -- проверьте, во-первых, правильные ли данные вы вводите.
120+
121+
**На сайте <a href="http://joingotowebinar.com">http://joingotowebinar.com</a> в поле E-mail нужно ввести имя страницы профиля, прибавив к нему `"javascript.ru"` например `[email protected]`, а не ваш email.**
122+
123+
В поле Webinar Id вводите `Номер комнаты` со страницы группы.
124+
125+
Если всё ещё не работает -- посмотрите системные требования. Операционная система: Windows или Mac OS. Нужна <a href="http://java.com/ru/download/index.jsp">Java</a>.
126+
127+
Бывает так, что автоматически система не стартует, на этот случай при входе есть предложение скачать (download) программу и запустить её вручную.
128+
129+
Напоминаю, что во время онлайн-собрания можно задавать вопросы по Skype, ник: `javascript.ru`.
130+
131+
# Форс-мажор: если нет ведущего
132+
133+
Если вдруг случится что-то непредвиденное (на линии электропередач упало дерево, интернет-провода погрыз ополоумевший барсук, ведущего переехал самосвал) -- занятия всё равно будут,
134+
но, возможно, с опозданием или переносом.
135+
136+
Подобное бывает очень редко.
137+
138+
Обычно занятия начинаются по расписанию. Максимально возможное опоздание ведущего -- 15 минут.
139+
Если его нет дольше и нет информации, значит произошло что-то серьезное.
140+
141+
Можно попытаться узнать, что именно, позвонив по телефону +7(903)541-94-41. Не стесняйтесь -- звоните.
142+
В качестве финального порога отмены занятия устанавливается задержка на 30 минут.
143+
144+
Разъяснения и соответствующее обновление расписания в этом случае будут в ближайшее возможное время.
145+
146+
# Дополнительно
147+
148+
Вам также может понадобиться просмотр PDF. Как правило, для этого используют Acrobat Reader. Скачать можно, например, <a href="http://get.adobe.com/reader/">здесь</a> (выберите OS, язык и уберите галочку Free McAfee).
149+
150+
Ну и, конечно же, нужны будут браузеры, которые вы собираетесь поддерживать. Обычно это Chrome, Internet Explorer и Firefox.
151+
152+
Настройте свое рабочее место. Поставьте редакторы -- я использую <a href="https://www.jetbrains.com/webstorm/">Webstorm</a> и <a href="http://www.sublimetext.com/">Sublime</a>,
153+
но есть и много других, выбор целиком ваш.
154+
155+
Обязательно выставьте точное время на часах (свериться можно с [google](https://www.google.ru/search?q=время)). Это нужно для координации времени на перерывы и решение задач.
156+
157+
Все эти приготовления и система задуманы так, чтобы сделать процесс обучения максимально комфортным и эффективным.
158+
159+
Если что-то из этой инструкции непонятно -- задавайте вопросы на <a href="mailto:[email protected]">[email protected]</a>, я на них отвечу.

handlers/users/models/user.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ UserSchema.methods.getInfoFields = function() {
197197
UserSchema.statics.getInfoFields = function(user) {
198198
return {
199199
id: user._id,
200+
hasPassword: Boolean(user.passwordHash),
200201
displayName: user.displayName,
201202
profileName: user.profileName,
202203
gender: user.gender,

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
"nib": "*",
8484
"node-static": "*",
8585
"node-uuid": "*",
86+
"node-xmpp": "^1.0.0-alpha2",
8687
"node-zip": "*",
8788
"nodemailer": "*",
8889
"nodemailer-ses-transport": "*",

0 commit comments

Comments
 (0)