Ошибка записи в базу при восстановлении курса

Ошибка записи в базу при восстановлении курса

от Сергей Больной -
Количество ответов: 2


Собственно ошибку видно на картинке. Текст в полях shortname и fullname  одинаковый, но на картинке видно, что shortname обрезано.

Курс выгружается из moodle 1.6 самописным скриптом (написан несколько лет назад), а восстанавливаться должен в moodle 3.8.1+

Вот часть файла moodle_backup.xml:

<?xml version="1.0" encoding="UTF-8"?>
<moodle_backup>
<information>
<name>backup-moodle2-course-40273-13.03.01_teploehnergetika_i_teplotekhnika_-_ooo_intertekhehlektro-turbomontazh_-20200310-1235.mbz</name>
<moodle_version>3.4</moodle_version>
<moodle_release>3.5.0 (Build: 2010072301)</moodle_release>
<backup_version>2010072301</backup_version>
<backup_release>3.4</backup_release>
<backup_date>1583825753</backup_date>
<mnet_remoteusers>0</mnet_remoteusers>
<include_files>1</include_files>
<include_file_references_to_external_content>0</include_file_references_to_external_content>
<original_wwwroot>https://educon.tyuiu.ru</original_wwwroot>
<original_site_identifier_hash>urLlbrEDmWuo3gRwQIacrsVwOs6X4OM1</original_site_identifier_hash>
<original_course_id>40273</original_course_id>
<original_course_format>topics</original_course_format>
<original_course_fullname><![CDATA[13.03.01 "Теплоэнергетика и теплотехника" - (ООО "ИНТЕРТЕХЭЛЕКТРО-ТУРБОМОНТАЖ")]]></original_course_fullname>
<original_course_shortname><![CDATA[sss 13.03.01 "Теплоэнергетика и теплотехника" - (ООО "ИНТЕРТЕХЭЛЕКТРО-ТУРБОМОНТАЖ")]]></original_course_shortname>
<original_course_startdate>1520708400</original_course_startdate>
<original_course_contextid>1627557648</original_course_contextid>
<original_system_contextid>1</original_system_contextid>
Как видно строка shortname "нормальная". Так где грабли?
В ответ на Сергей Больной

Re: Ошибка записи в базу при восстановлении курса

от Сергей Больной -
Собственно решение оказалось простым. Мудл при восстановлении обрезает shortname до 100 символов (хотя в базе размер поля для этого varchar(255)), причем обрезает строку не посимвольно, а по байтам, ну и собственно кирилический символ на конце может "закосячиться"....
В ответ на Сергей Больной

Re: Ошибка записи в базу при восстановлении курса

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Если можете указать на это место в коде, можно создать задачу в трекере, чтобы вместо substr использовали mb_substr.