Как подцепить нужный файл из Moodle в собственный скрипт?

Как подцепить нужный файл из Moodle в собственный скрипт?

от Матвей Беляков -
Количество ответов: 6

моя задача кафедральная состоит в следующем:
Мне для moodle было поручено написать один дополнительный модуль, который позволял бы автоматически создавать новые курсы по дисциплинам на основании рабочей программы дисциплины (РПД). Это РПД преподаватель составляет в начале каждого семестра. Шаблон такой РПД у меня есть, но скинуть тут в сообщении вроде бы нельзя, прикреплять некуда)
То есть подразумевается, что преподаватель составляет такое РПД, затем заходит в систему и открывает курс своей дисциплины, который был создан уже заранее. Затем на странице этого курса ему надо уже загрузить в модуль свою составленную РПД и запустить его на исполнение, чтобы модуль выгрузил из этого файла нужные данные и создал всё необходимое: лабы, лекции, самостоятельные работы и т.д.
загружает его в модуль, который выгружает из этого файла нужные данный и создаёт всё необходимое.
Было решено, что удобнее всего выгружать данные из XML-файла, так что я просто создал аналогичный шаблон РПД, но в Экселе и сохранил его как XML, там получились удобные теги, которые удобно искать по стилю ячейки (ничего лучше не придумал я).
Сам модуль я решил на python'е писать.
Таким образом получается, что выгружаем данные и в виде SQL-запроса записываем в нужную таблицу БД moodle.
Визуально модуль удобно было бы изобразить в виде блока, на котором есть кнопка запуска python-скрипта, из-за чего я собственно и заинтересовался созданием собственного блока в moodle. Но я не совсем понимаю как моему скрипту сослаться на нужный файл РПД и начать его "парсить"... Не знаю как подцепить источник данных так сказать...

Я пытался разобраться как загружаются файлы в мудл по аналогии с блоком "Мои личные файлы", но что-то порылся и знаний мне не хватает, чтобы понять что да как там устроено... В моём скрипте есть такие строки:
url = open('C:\XML 2003.xml')
xml = parse(url)
И вот что записать вместо 'C:\XML 2003.xml' так, чтобы выбирался файл, нужный преподавателю, не знаю...

Я вот думаю цеплять файл как-нибудь при помощи блока "Мои личные файлы". То есть, преподаватель загружает свою РПД в данный блок. После уже надо запустить мой блок с кнопкой запуска скрипта. Теперь надо осуществить поиск в таблице "files" по id user'а и ... по расширению файла. Будем считать и пропишем это в регламенте работы, что в блоке "Мои личные файлы" обязан находиться лишь один файл с расширением XML. Тогда по логике вещей должна найтись одна запись (хотя в таблице "files" при добавлении одного файла, почему-то добавляется 2 записи =/ ). После уже по этой записи скрипт должен понять какой именно файл ему цеплять для обработки. Но есть такие сложности, как то, что moodle записывает название файла как хэш-сумма и т.д....

В ответ на Матвей Беляков

Re: Как подцепить нужный файл из Moodle в собственный скрипт?

от Alexandre Scherbyna -

Какое совпадение! Я как раз вчера тоже думал, как бы автоматически пренести все данные из рабочей программы в создаваемый курс Moodle.

Мне кажется, решать такую задачу нужно следующим образом.

1) Проанализировать структуру XML-файлa бэкапа курса, содержащего только названия секций и ресурсы типа Пояснение.

2) Найти способ конвертирования XML-файлa рабочей программы (которую преподаватель создает в Word-e на основе вашего шаблона) в XML-файл бэкапа курса так, чтобы названия модулей рабочей программы стали названиями секций, а названия тем каждого модуля стали ресурсами типа Пояснение в этой секции.

Когда бэкап готов, мы его используем по назначению и получаем болванку курса, в которую перенесены все данные из рабочей программы. Дальше ее нужно вручную наполнять ресурсами и деятельностями Moodle, т.к. в рабочей программе есть только названия лабораторных, лекций и т.п., но не их содержание.

Тут следовало бы подумать, как можно автоматически отслеживать наполнение такого курса. У кого болванка так и осталась болванкой, а кто выложил материал, разместил задания и т.п.

В ответ на Alexandre Scherbyna

Re: Как подцепить нужный файл из Moodle в собственный скрипт?

от Матвей Беляков -

Вы думали, а мне диплом по этому писать)))

Про XML-файлa бэкапа курса я как-то и не думал, да и даже не знал, что такой есть...

Только я думаю шаблон в Экселе сделать, так как там получаемая структура XML-файла намного приятнее, чем если сохрать в виде XML через Word) Всё таки в Экселе идёт хорошая привязка к ячейке и её содержимому.

Да да, идея как раз в том, чтобы создать множество компонентов (ресурсов и элементов) на основании данных из РПД. А уже их наполнением должен будет заняться в ручную преподаватель.

 

Пока я только написал скрипт, который парсит XML-шаблон, находит в ней название дисциплины и создаёт в moodle курс с таким названием) Но с научным руководителем уже обговорили, что создавать курс с помощью скрипта не надо (они будут уже "голые" созданы заранее). Надо будет заполнять пустые курсы содержимым на основании РПД. Только я вот делал заполнение через SQL_запрос, а вы говорите, что можно через бекап организовать всё это дело...

В ответ на Матвей Беляков

Re: Как подцепить нужный файл из Moodle в собственный скрипт?

от Alexandre Scherbyna -

Матвей, формат XML создан для того, чтобы извлекать из документа нужную информацию и автоматически преробразовывать ее в другие докумнты самых разных форматов. Это называется XSLT-преобразованием. Суть его в том, что человек создает документ один раз, а компьютер делает из него много разнообразных представлений. Т.е. написал человек один раз рабочую программу в Worde и всё. Все другие ее представления: и ту таблицу Excel, которую вы его хотите заставить делать вручную, и бэкап для создания болванки курса в Moodle, и подробную презентацию структуры курса, и краткую справку, и множество других подобных документов должны создаваться из рабочей программы автоматически с помощью созданных вами XSLT-преобразований.

В ответ на Матвей Беляков

Re: Как подцепить нужный файл из Moodle в собственный скрипт?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Матвей, вряд ли Вам удастся сделать что-то для мудла на python. Потому как мудл написан на php и работает только с модулями написанными на php. А придумывать как присобачить python - как гвозди отвёрткой забивать.

Весь исходный код мудл один огромный пример того, что и как сделать.

Например, при импорте тестовых попросов как раз отображается форма с выбором параметров и окошком для загрузки файла в систему и его последующей обработкой. Можете взять этот код за основу.

Дальше - не нужно никаких прямых sql запросов. В moodle есть специальный объект $DB, у которого куча методов типа insert_record, get_records, так что в 95% случаев даже sql код писать не надо.

В ответ на Alexandre Scherbyna

Re: Как подцепить нужный файл из Moodle в собственный скрипт?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

А случайно в электронном деканате ничего подобного нет? Может быть проще сделать это модулем для ЭД, если там уже есть структурированная информация о рабочей программе или каких=то параметрах курса?

В ответ на Alexandre Scherbyna

Re: Как подцепить нужный файл из Moodle в собственный скрипт?

от Alexandre Scherbyna -

Оказывается в mbz-архиве бэкапа Moodle 2 содержится множество xml-файлов. Поэтому документ Word легче преобразовать в zip-архив бэкапа Moodle 1, содержащий единственный xml-файл. Moodle 2.4 восстанавливает курсы из таких бэкапов.