Поддержка перечислений в БД

Issue #347 resolved
Former user created an issue

Originally reported on Google Code with ID 347

С меня - поддержка перечислений, чтобы они сохранялись в БД.
С Вадима - заполнение перечислений.

Разрабатывать планирую в отдельном клоне-варианте mariabirvg-mamontovdp-correctwriting.

Reported by mamontov.dp on 2015-05-01 12:41:43

Comments (18)

  1. Former user Account Deleted
    Создан новый клон - https://code.google.com/r/mamontovdp-mariabirvg-correctwriting2-enumsupport/.
    

    Reported by mamontov.dp on 2015-05-01 13:40:14

  2. Former user Account Deleted
    Вытолкнул изменения в клон. Сейчас в принципе все работает, добавлено новое поле enumerations
    на форме, выглядит как скрытое поле enumerations[номер ответа]. В него строкой должны
    быть записаны значения через JS Вадима. Возникло три проблемы:
    
    1) Не нашел функцию, чтобы были правильно заполнено поле enumerations в вопросе. Такое
    ощущение, что в poasquestion его нет. Решил через ленивую загрузку в poasquestion,
    функций qtype_correctwriting::get_enumerations_by_answer_id, с. 174 в question.php
    которая получает перечисления по id ответа. За Вадимом оставляю десериализацию, как
    он реализует формат.
    2) Импорт из XML. Не вижу, чтобы там была поддержка extra_answer_fields в poas_question.
    Необходимо уточнее - её надо самим кодить или нет?
    3) Экспорт в XML. Аналогично.
    

    Reported by mamontov.dp on 2015-05-01 15:54:14

  3. Oleg Sychev repo owner
    extra_answer_fields для импорта/экспорта XML надо смотреть не в poasquestion а в questiontypebase
    или questionbase, они протолкнуты в ядро Moodle.
    
    Что именно имеловсь ввиде под "правильно заполнено поле в вопросе" надо уточнять -
    смотрим, как объявлено поле для тестов регексов в preg. В get_question_options поддержка
    extra_answer_fields есть, в initialise_question_instance тоже.
    

    Reported by oasychev on 2015-05-03 18:51:54

  4. Former user Account Deleted
    Хм, в таком случае, думаю, что у меня возможно просто не самая свежая версия Moodle.
    Думаю в ближайшее время обновлюсь и проверю.
    

    Reported by mamontov.dp on 2015-05-04 05:11:08

  5. Вадим Клевцов Account Deactivated
    Функцию get_enumerations_by_answer_id, я реализовал. Вопрос выталкивать в тотже клон
    или склонировать новый? Еще вопрос я реализовал функцию десериализации, а где искать
    функцию сериализации? 
    

    Reported by vad23klev on 2015-05-04 06:44:13

  6. Oleg Sychev repo owner
    То, что касается интерфейса и поддержки перечислений в английском языке - в новый клон;
    то что касается тестов на анализаторы и доделок всех проверок чтобы вопрос правильно
    сохранялся - СРОЧНО и в старый клон.
    

    Reported by oasychev on 2015-05-04 11:29:22

  7. Former user Account Deleted
    Я так понимаю, что функцию сериализации ты будешь формировать из JS? Потому что как
    бы у тебя перечисления задаются из диалога. Тогда в форме будет поле с именем enumerations,
    которому надо и поставить такое значение. 
    

    Reported by mamontov.dp on 2015-05-04 16:18:42

  8. Former user Account Deleted
    Однако, если это надо, то в qtype_correctwriting есть функция save_question_options.
    По идее в ней можно из $question->options->enumerations получить значение поля, которое
    пришло из формы и если его перезаписать, по идее оно должно записаться правильно в
    БД.
    

    Reported by mamontov.dp on 2015-05-04 17:23:41

  9. Oleg Sychev repo owner
    JS должен заполнять скрытое поле, добавленное в форму.
    Дальше сохранение в БД идет традиционным образом через extra_answer_fields.
    
    При считывании из БД данных get_question_options добавляет эти данные в question->options->answers.
    Далее можно перегрузить функцию make_answer чтобы использовать свой класс-наследник
    вместо question_answer и добавить туда поле для описания перечислений.
    

    Reported by oasychev on 2015-05-04 23:07:54

  10. Former user Account Deleted
    Исправил. Вадим, перенесите функцию в /classes/answer.php, метод qtype_correctwriting_answer::deserialize_enumerations
    . Проверил код question_base, судя по всему, поддержка там вполне полноценная. Но:
    я не проверял наш код на этом, надо проверить отдельно. Из формы записи должны быть
    сериализованы через JS, особой поддержки препроцессинга из PHP пока не запланировано.
    

    Reported by mamontov.dp on 2015-05-08 18:03:46

  11. Вадим Клевцов Account Deactivated
    Добавлена десериализация.
    

    Reported by vad23klev on 2015-05-23 21:52:35

  12. Oleg Sychev repo owner

    Вотчеров нет, так что есть шанс что Клевцов этого коммента не увидит...

  13. Dmitry Mamontov

    Отправил ему. Что самое интересное - сейчас письмо пришло.

  14. Вадим Клевцов Account Deactivated

    На чистой установке, все работает.

    2.png

  15. Log in to comment