пятница, 20 января 2012 г.

Maxima и Moodle интеграция

В продолжение темы интеграции maxima и moodle. Сегодня нашла статью "Реализация сервис-ориентированных распределенных систем на основе технологии Ice". В ней пишут, что апробация описанного подхода на практике велась в том числе сервиса доступа к системе компьютерной алгебры Maxima, при этом использовалась реализация контейнера сервисов на языке C++, аналогичная описанной в статье. И еще нашла такую статью: "Разработка Grid-сервиса для системы компьютерной алгебры Maxima на основе промежуточного программного обеспечения Ice". Аннотация статьи многообещающая: "Изложены результаты работы по созданию Grid-сервиса компьютерной алгебры на основе системы Maxima (с открытым исходным кодом) средствами промежуточного программного обеспечения Ice (Internet Communications Engine). Данный сервис предоставляет пользователю простой механизм удалѐнного вызова операций Maxima, а также возможности создания/удаления исполняемых процессов Maxima на удалѐнном хосте. Статья содержит описание основных способов программного взаимодействия с системой Maxima и принципов реализации сервиса." Попробую скачать эту статью в понедельник.

среда, 11 января 2012 г.

Создание модуля в Moodle 2.x типа activity (часть 8)

Цель: поставить в gradebook оценку, введенную студентом с помощью submit_form.php. Этого можно достичь, добавив в файл view.php следующие строки:
и
Также пришлось подправить код функции itask_grade_item_update в файле <...>itask/lib.php следующим образом:
И заработало:

вторник, 10 января 2012 г.

Создание модуля в Moodle 2.x типа activity (часть 7)

Следующий шаг - сделать так, чтобы при нажатии на кнопку "Сохранить" пользователю записывалась в gradebook та оценка, которую он выбрал. Попробую для начала получить данные, введенные пользователем в форму. Посмотрела на файл <...>/moodle/mod/glossary/import.php и написала следующие строки в файл <...>/itask/view.php:
Функцию get_data() нашла в файле formslib.php. Тут написано, что get_data() - "Получить данные формы после всех проверок на стороне клиента и сервера. Данные получаются в виде объекта, именами полей которого являются имена заданных в функции definition() объектов, а значениями - значения полей в форме (по умолчанию или введенные)." Так что дописала еще такие строки:
Кстати, вывод footer'а тут нужен для того, чтобы сбоку на новой странице после нажатия кнопки "Сохранить" в окне activity типа itask оставалось стандартное меню Moodle.

Теперь при открытии конкретного activity типа itask Moodle стал выдавать следующую ошибку: "You must specify a course_module ID or an instance ID". Далее я заметила, что в файле <...>/moodle/lib/formslib.php конструктору класса moodleform на самом деле подается несколько параметров со значениями по умолчанию, в их числе параметр $customdata, про который в комментариях написано, что "param array $customdata if your form defintion method needs access to data such as $course $cm, etc. to construct the form definition then pass it in this array. You can use globals for somethings".

Если в файле view.php закомментировать все, что связано с submit_form, и написать
То при открытии одного activity типа itask каждый раз будет выводиться "n=0, id=8", а для другого - "n=0, id=9". Если попробовать вывести course->id, то будет выводиться "2", непонятно почему, ведь в настройках курса в поле "идентификатор курса" я ставила значение 1. Правда, в справке Moodle к полю "идентификатор курса" написано, что "Идентификационный номер курса необходим только при использовании его во внешних системах." Так как это поле можно оставить пустым, видимо, этот идентификатор и "системный" - две разные вещи. Тогда создала экземпляр класса mod_itask_submit_form так:
И заработало, теперь при нажатии кнопки "Сохранить" на новой странице браузера вместо элементов управления submit_form выводится выбранная оценка.

Создание модуля в Moodle 2.x типа activity (часть 6)

Следующий шаг - видоизменение формы, отображающейся на экране, когда открывается некий activity типа itask. В книге написано, что "the two main functions to add form elements to your form are addElement и createElement. These are essentially the same function, except that createElement returns the created form element object without adding it to the form<...>You should typically use addElement, unless you need to perform extra processing on the element before adding it to a form."

Я хочу на этой форме сделать выпадающий список с заголовком "Какую оценку вы хотите за это задание?". Элементами выпадающего списка должны быть цифры от 1 до 5. Закомментировала строки, соответствующие старым элементам управления, т.е. текстовому полю с названием "itask name", и дописала в файл <...>/itask/submit_form.php следующие строки:
При открытии activity Moodle стал ругаться на функцию get_string(). Похоже, настала пора разобраться с русификацией.

Вот тут написано, что синтаксис у функции get_string другой. Должен быть еще один параметр - имя модуля, т.е. в данном случае надо писать "get_string('left_label', 'itask')". Далее, в каталоге <...>/itask/lang создала папку с названием "ru". Скопировала туда из папки <...>/itask/lang/en файл itask.php.

В конец файла <...>/itask/lang/en/itask.php дописала такую строку: "$string['left_label'] = 'left label';", а в конец файла <...>/itask/lang/en/itask.php - такую - "$string['left_label'] = 'Выберите себе оценку';".

Первый раз при запуске activity типа itask показались какие-то кракозябры. Я пересохранила файл <...>/itask/lang/en/itask.php в кодировке UTF8, потом открыла его в программе Notepad++, увидела там кракозябры, переправила, нажала "сохранить как", в открывшемся окне нажала "сохранить". Потом обновила модуль (изменив файл version.php, Администрирование->Уведомления в самом Moodle) и увидела, что русификация заработала:

Создание модуля в Moodle 2.x типа activity (часть 5)

В этом посте была описана попытка видоизменения формы, которая отображается на экране, когда открываешь некий activity типа itask. Застряла на том, что параметры $id и $n получают только значения по умолчанию. Немного потыкав то-се, выяснила, что правильнее использовать следующий код:
В этом случае начинает создаваться экземпляр класса "mod_itask_submit_form", запускается function moodleform_mod($current, $section, $cm, $course), но затем эта функция выводит следующее сообщение об ошибке: "Use $modname parameter or rename form to mod_xx_mod_form, where xx is name of your module". Поскольку эта функция ожидает, что имя вызвавшего ее класса должно иметь вид "mod_itask_mod_form", а я не могу переименовать этот класс (такой уже есть), надо как-то понять, как можно использовать параметр $modname. Я не поняла, и начала искать другой путь.

Следующей идеей было посмотреть, а как же вызываются в других модулях формы с именами, отличными от "стандартных". Наугад зашла в модуль "glossary" и увидела там файл import_form.php. В этом файле определен класс "mod_glossary_import_form", являющийся расширением класса "moodleform". Поэтому я решила попробовать также сделать класс "mod_itask_submit_form" расширением класса "moodleform". В файле <...>/itask/submit_form.php поменяла соответствующую строку, также закомментировала строку
(Moodle на нее ругался при отладке). Затем в файле view.php оставила следующие строки после строки с add_to_log:
И вот что стало показываться при открытии activity типа itask:
Ура!Заработало:)

А строки эти с $id и $n лучше вернуть к первоначальному виду, а то когда открываешь то одно activity типа itask, то другое, выскакивает ошибка - что-то связанное с базой данных.

воскресенье, 8 января 2012 г.

Создание модуля в Moodle 2.x типа activity (часть 2)

К сожалению, при попытке сохранения activity типа itask (см. предыдущий пост) выдается ошибка: "moodle_database::insert_record_raw() no fields found". Поизучала исходники moodle и обнаружила, что в папке шаблона модуля в файле lib.php есть такие строки:
В результате заполнения пользовательской формы в базу данных должна добавляться запись. По-видимому, нужно явным образом описать заполнение всех полей при добавлении этой записи (поскольку в таблице itask есть куча полей, и среди них наверняка есть обязательные к заполнению без значений по умолчанию). Добавила соответствующие строки:
Не помогло. Также заметила, что в XMLDB editor'е перед редактированием таблиц отображается странное значение поля Path: "mod/newmodule/db" (наверное все-таки должно быть "mod/itask/db". Зашла в /db/install.xml и поменяла значение тега "XMLDB PATH". Тоже не помогло.

Потом тут вычитала, что человеку удалось соединить Moodle 2.0 и вот этот вот шаблон модуля. Отмечу, что для локального тестирования лучше скачивать Moodle for Windows. Ура! Для вышеуказанного шаблона модуля и релиза Moodle 2.0.7 for Windows эта ошибка не выдается:)

Создание модуля в Moodle 2.x типа activity (часть 1)

Модули типа activity в Moodle позволяют вовлечь студентов в некоторую "образовательную деятельность": интерактивное решение тренировочных задач, видеочат с учителем и группой других студентов, и т.д. По результатам участия в такой деятельности студенты могут получать оценки.

Насколько мне известно, информация по созданию таких модулей пока доступна только по Moodle 1.9. В данном посте будут изложены результаты по адаптации этой информации к Moodle 2.2.

Для начала необходимо скачать шаблон нового модуля. Я назвала свой модуль itask (поскольку в дальнейшем его планируется переделать в модуль для интерактивного решения задач). Далее во всех файлах с расширением php скачанного шаблона необходимо поменять слова newmodule и NEWMODULE на itask и ITASK соответственно. Я это сделала с помощью программы TextCrawler. Также в папке <...>/lang/en необходимо поменять имя файла с newmodule.php на itask.php. Затем переименовываем скачанную папку шаблона модуля в itask и копируем ее в корень папки /moodle/mod (в этой папке содержатся все модули).

Согласно туториалу, редактируем базу данных с помощью XMLDB editor, обновляем файл version.php, и т.п. В общем, выполняем п. 6 и 7 туториала.

Далее, согласно книге "Moodle 1.9 Extension Development", мы должны отредактировать в папке нового модуля файл mod_form.php. В результате ее редактирования мы должны получить форму вот такого вида:
Эта форма появляется на экране, после того, как к некоторой теме (или неделе курса, смотря как у кого в настройках) добавляется activity типа itask:
Пока шаблонный код не отредактирован, эта форма выглядит вот так:
Попробуем видоизменить эту форму так, чтобы на ней осталось только единственное обязательное поле "itask name". Для этого закомментируем некоторые строки, обновим файл version.php, далее в меню Moodle зайдем в Администрирование->Уведомления и нажмем там кнопку "Обновить". Ниже приведен код, оставшийся незакомментированным в теле функции definition (файл mod_form.php):
Этот код генерирует вот такую форму: