Наладить человекопонятную работу сообщений студенту когда ему отказываают в тесте

Issue #320 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 320

Мы реально один раз полчаса разбирались с настройками IP-адреса на компе из-за сообщения,
а студент оказался не в той группе.

Описание текущего положения дел от Анастасии:
"Я также оттестировала вход человека, приписанного к курсу, но с другой группы, выводится
сообщение: вы не принадлежите к заданному диапазону ip-адресов или же для вашей группы
нет активной сессии." (кстати, "или" и в русском и английском варианте? а то я в том
случае никакого "или" не видел).

Предложение:
Сообщение "вы не принадлежите к заданному диапазону ip-адресов или же для вашей группы
нет активной сессии" хотелось бы иметь более точным, чтобы преподаватель не гадал что
происходит.
а) если для группы (и для "всех групп" конечно) нет активной сессии вообще то говорить
что " для вашей группы нет активной сессии"
б) если для группы активная сессия есть, но нет аудитории - то говорить что "вы не
находитесь в аудитории такой-то (подставляется название аудитории), в которой занимается
ваша группа" (вариант - аудитории во множественном числе, если сессий несколько).

Так я думаю понятнее, ибо группа в этом плане первична - если группа не занимается,
то в каком ты классе не так уж важно. А если занимается - иди в свой класс. Определять
каким группам принадлежит в занятиях лучше не по мудловским таблицам, а по блоковской
таблице куда копируется группа при занятии, чтобы успешно действовало на "временные"
группы с конкретным перечнем человек в будущем.

Reported by oasychev on 2015-01-10 19:52:29

Comments (9)

  1. Former user Account Deleted
    Олег Александрович, по поводу пункта б) 
    В библиотеке блока supervised активная сессия для пользователя определяется двумя флагами
    - находится ли пользователь в нужном ip-диапазоне и находится ли пользователь в группе.
    "if ( !($useringroup && $userinsubnet) )" 
    Получается, что нужно удалять флаг проверки на адресное пространство, иначе всегда
    система будет выдавать - нет активной сессии для пользователя. По поводу сообщений
    - я посмотрела файл в папке lang. там Получилось так, что для русского языка все в
    порядке, а для английского строка iperror содержит сообщение как раз вот с этим ИЛИ:
    вы не в диапазоне сессии или нет активной сессии для вас. Я ее исправила, теперь хотелось
    бы узнать, изменение данного условия в функции получения активных сессий пользователей
    приведет ли к регрессии? Или можно попробовать? Возможно, я не знаю ситуации, когда
    данный флаг может существенно повлиять на работу блока.
    

    Reported by anastasiyaSergeevnaP on 2015-01-22 11:45:54

  2. Former user Account Deleted
    $string['iperror']                  = 'You can\'t start the quiz now. No active supervised
    session for your group at this moment or your ip isn\'t in the classroom subnet.';
    $string['noaccess']                 = 'You can\'t start the quiz now. No active supervised
    session for your group at this moment with appropriate lesson type.';
    
    Вот iperror строка частично дублирует строку noaccess, и, как мне кажется, выдает сообщение
    об ошибке, за которую не отвечает. Я изменила ее на  You can\'t start the quiz now.
    Your ip isn\'t in the classroom subnet.
    

    Reported by anastasiyaSergeevnaP on 2015-01-22 11:48:29

  3. Oleg Sychev reporter
    Флаги удалять не нужно, нужно разобраться с логикой их применения. Возможно сделать
    пару условий вместо одного.
    Там надо точно понять логику выставления флагов в ситуации если одновременно ведет
    несколько занятий - и проверить, чтобы логика выдачи сообщений соответствовала тому,
    что я написал в описании issue.
    
    Можете сегодня подойти часов до 14...14-30, уточним все.
    

    Reported by oasychev on 2015-01-23 05:01:50

  4. Former user Account Deleted
    Олег Александрович, я по поводу добавления в функцию user_active_sessions фильтр по
    типам. Я так поняла, что фильтр по типам не перенесли в функцию по следующей причине:
    https://code.google.com/r/anastasiyasergeevnap-supervised-block-clone/source/browse/mod/quiz/accessrule/supervisedcheck/rule.php
    (строка 56 case). Тут получается, что в зависимости от режима выбираются и типы занятий
    из разных таблиц. Я не думаю, что в данную функцию нужно передавать массив типа занятий
    или цифру режима, потому что данная функция применялась где-то в блоке, который о режимах
    по идее не знает ничего, а как обойти такой момент я не знаю. 
    

    Reported by anastasiyaSergeevnaP on 2015-01-24 21:35:23

  5. Oleg Sychev reporter
    В данном случае из данных правила (которые блоку знать не положено) берется массив lessontypeid
    для которых разрешены занятия. Причем не очень эффективно.
    
    Что сделал бы я: передал массив в функцию блока, причем только в случае case 2 (когда
    есть конкретный перечень), для случая же  case 1 когда по случаю проверка реально не
    требуется (все стили блока) сделал бы значение по умолчанию для этого параметра null
    и развилку в коде проверке в блоке что проверять только если передан массив, если нет
    то проверка типа занятия пропускается вообще. Это будет быстрее, чем проверять по списку
    из всех. Про сами типы занятий блок знает, это его информация - он не знает только
    какие типы настроены для конкретного теста, именно эта информация берется из таблицы
    правила.
    
    P.S. Синие цифры в google code с номерами строк являются ссылками, можно нажать и скопировать.
    Т.е. ссылка на строку 56 будет выглядеть так https://code.google.com/r/anastasiyasergeevnap-supervised-block-clone/source/browse/mod/quiz/accessrule/supervisedcheck/rule.php#56
    

    Reported by oasychev on 2015-01-24 21:51:53

  6. Former user Account Deleted
    Олег Александрович, я почти доделала. У меня остался последний вопрос. Допустим, такая
    ситуация - у нас есть один Quiz и два типа занятий: лаба и лекция. Я настроила supervised
    quiz attempts для теста только для лабы. Далее я начинаю сессию с типом занятий - лекция.
    Если пользователь зашел во время сессии на курс и хочет пройти этот тест, ему должны
    отказать или нет? Данная настройка означает именно привязку теста к типу занятия или
    что все supervised-проверки будут проводиться для данного теста только если он проходится
    во время занятия с типом лаба?
    

    Reported by anastasiyaSergeevnaP on 2015-01-27 07:57:37

  7. Oleg Sychev reporter
    Если выбран третий пункт в правиле - разрешать только на определенных типах занятий
    - то на занятий других типов тест должен быть недоступен. Пример - экзаменационный
    тест должен быть доступен на экзамене и досдаче, но не на лабораторной работе. Если
    группа и аудитория нужные, а тип занятия нет - должно выдаваться сообщение типа "Во
    время xxx занятия проходить этот тест нельзя." где xxx - тип текущего занятия.
    P.S. Сорри за задержку, уезжал из города...
    

    Reported by oasychev on 2015-02-08 22:13:25

  8. Oleg Sychev reporter
    Предлагаю встретится в среду после конца пар - они у нас обоих в районе 18-30 заканчиваются
    - и посмотреть сделанные изменения+решить все вопросы...
    

    Reported by oasychev on 2015-02-08 22:26:09

  9. Oleg Sychev reporter
    Сделано, спасибо.
    

    Reported by oasychev on 2015-02-26 23:07:54 - Status changed: Done

  10. Log in to comment