tel8618217223380 / oasychev-moodle-plugins

Automatically exported from code.google.com/p/oasychev-moodle-plugins
0 stars 0 forks source link

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

Open GoogleCodeExporter opened 9 years ago

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

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

Original issue reported on code.google.com by mamontov...@gmail.com on 1 May 2015 at 12:41

GoogleCodeExporter commented 9 years ago
Создан новый клон - 
https://code.google.com/r/mamontovdp-mariabirvg-correctwriting2-enumsupport/.

Original comment by mamontov...@gmail.com on 1 May 2015 at 1:40

GoogleCodeExporter commented 9 years ago
Вытолкнул изменения в клон. Сейчас в 
принципе все работает, добавлено новое 
поле 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. Аналогично.

Original comment by mamontov...@gmail.com on 1 May 2015 at 3:54

GoogleCodeExporter commented 9 years ago
extra_answer_fields для импорта/экспорта XML надо 
смотреть не в poasquestion а в questiontypebase или 
questionbase, они протолкнуты в ядро Moodle.

Что именно имеловсь ввиде под "правильно 
заполнено поле в вопросе" надо уточнять - 
смотрим, как объявлено поле для тестов 
регексов в preg. В get_question_options поддержка 
extra_answer_fields есть, в initialise_question_instance тоже.

Original comment by oasyc...@gmail.com on 3 May 2015 at 6:51

GoogleCodeExporter commented 9 years ago
Хм, в таком случае, думаю, что у меня 
возможно просто не самая свежая версия Moodle. 
Думаю в ближайшее время обновлюсь и 
проверю.

Original comment by mamontov...@gmail.com on 4 May 2015 at 5:11

GoogleCodeExporter commented 9 years ago
Функцию get_enumerations_by_answer_id, я реализовал. 
Вопрос выталкивать в тотже клон или 
склонировать новый? Еще вопрос я 
реализовал функцию десериализации, а где 
искать функцию сериализации? 

Original comment by vad23k...@gmail.com on 4 May 2015 at 6:44

GoogleCodeExporter commented 9 years ago
То, что касается интерфейса и поддержки 
перечислений в английском языке - в новый 
клон; то что касается тестов на анализаторы 
и доделок всех проверок чтобы вопрос 
правильно сохранялся - СРОЧНО и в старый 
клон.

Original comment by oasyc...@gmail.com on 4 May 2015 at 11:29

GoogleCodeExporter commented 9 years ago
Я так понимаю, что функцию сериализации ты 
будешь формировать из JS? Потому что как бы у 
тебя перечисления задаются из диалога. 
Тогда в форме будет поле с именем enumerations, 
которому надо и поставить такое значение. 

Original comment by mamontov...@gmail.com on 4 May 2015 at 4:18

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

Original comment by mamontov...@gmail.com on 4 May 2015 at 5:23

GoogleCodeExporter commented 9 years ago
JS должен заполнять скрытое поле, 
добавленное в форму.
Дальше сохранение в БД идет традиционным 
образом через extra_answer_fields.

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

Original comment by oasyc...@gmail.com on 4 May 2015 at 11:07

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

Original comment by mamontov...@gmail.com on 8 May 2015 at 6:03

GoogleCodeExporter commented 9 years ago
Добавлена десериализация.

Original comment by vad23k...@gmail.com on 23 May 2015 at 9:52