Exabis E-Portfolio - проблема с общим доступом

Exabis E-Portfolio - проблема с общим доступом

by Игорь М -
Number of replies: 11

Наверное, начну новую тему, что то в продолжение существующей никто не ответил

Заполняли студенты, заполняли Портфолио - все нормально было. Ставили галочку на "общий доступ" - доступ открывался, все отлично. А сегодня зашел, думаю, дай проверю - и ВСЕ! БАСТА! к кому бы ни стукнулся через "Общие категории", пишет 

 ------------------

Некорректный пользователь

Подробнее об этой ошибке

------------------

И все на этом. Буквально несколько дней назад с директором и замом просматривали - все отлично работало, а сейчас как обрезало. что может быть такое?

 

версия Moodle 3.2.3+

Ошибка такая:

Debug info: SELECT id FROM {user} WHERE id = ? AND deleted = ?
[array (
0 => '167',
1 => 0,
)]
Error code: invaliduser
Stack trace:
  • line 1526 of /lib/dml/moodle_database.php: dml_missing_record_exception thrown
  • line 1502 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select()
  • line 6212 of /lib/accesslib.php: call to moodle_database->get_record()
  • line 61 of /blocks/exaport/lib/lib.php: call to context_user::instance()
  • line 760 of /blocks/exaport/lib/sharelib.php: call to block_exaport_get_category_icon()
  • line 73 of /blocks/exaport/view_items.php: call to block_exaport\get_categories_shared_to_user()

Когда открывается доступ, например, конкретному человеку - то тот человек нормально заходит для просмотра открытой категории. Беда только с общим доступом. Как временная мера - я в настройках закрыл общий доступ, но это как то неправильно...

 

Обновил блок до последней версии, думал, поможет - не, не помогло. И после перезагрузки тоже sad((

Sum of ratings: -
In reply to Игорь М

Re: Exabis E-Portfolio - проблема с общим доступом

by Vadim Tabunshchik -
Picture of Developers

Проверьте, у вас пользователь с id = '167' существует? Может, все нормально было, когда был такой юзер, а сейчас его нет, удалили, например.

Обновил блок до последней версии, думал, поможет - не, не помогло.

Автору пишите, пусть «допиливает» блок. Имхо, отсутствует проверка на существование пользователя при выводе «расшаренных» портфолио.

In reply to Vadim Tabunshchik

Re: Exabis E-Portfolio - проблема с общим доступом

by Игорь М -

Хм. Да, удалили несколько отчисленных. правда, не знаю, успели они что то в Портфолио вообще положить. Так такое 167 выдается при любом юзере. Впрочем, надо проверить завтра - с домашнего в Мускул не могу зайти - пароли не помню. А в Мудл никак не посмотреть id?

In reply to Игорь М

Re: Exabis E-Portfolio - проблема с общим доступом

by Vadim Tabunshchik -
Picture of Developers
Так такое 167 выдается при любом юзере

Любой - это тот, который хочет посмотреть общие папки портфолио? Правильно, так как 167 - это юзер, чье портфолио расшарено и должно быть показано на странице.

Насколько я могу судить, Error code: invaliduser появляется при вызове функции get_categories_shared_to_user(), выводящей «шару» по id её владельца (userid). Ни одна функция не отрабатывает нормально, где нужен userid (get_record, context_user::instance() и т. д.)

А в Мудл никак не посмотреть id?

Зайдите под админом на страницу http://адрес_сайта/user/profile.php?id=167

Если увидите профиль пользователя, значит он существует, если получите сообщение «Некорректный пользователь» - пользователь удален.

Спрашивайте разработчика плагина, неужто в плагине не предусмотрен механизм чистки портфолио удаленных пользователей? Или проверка удаленных пользователей при просмотре общих папок.

Ну в самой же системе сделано нормально, пользователь удален ,но все записи модулей (БД, глоссарий), все тестовые вопросы, им созданные, на месте, никуда не удаляются и нормально отображаются. А в портфолио такой косяк smile

In reply to Vadim Tabunshchik

Re: Exabis E-Portfolio - проблема с общим доступом

by Игорь М -

Да, по указанной команде выдает, что пользователь удален... Черт... С автором я конечно попытаюсь на Гугловско-переводческом английском связаться... А сейчас что делать? Можно как то эти id прописать, например, как временную меру, у новых пользователей? или через Мускул?

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

In reply to Игорь М

Re: Exabis E-Portfolio - проблема с общим доступом

by Vadim Tabunshchik -
Picture of Developers
А сейчас что делать?

Удалить в таблицах плагина все записи, связанные с эти пользователем userid=167. Через Мускул, ест-нно (phpmyadmin или др. прогу)

Сначала смотрите в таблице block_exaportcatshar. Если удаление в ней строк с userid=167 уберет ошибку, то тестируйте дальше.

In reply to Vadim Tabunshchik

Re: Exabis E-Portfolio - проблема с общим доступом

by Игорь М -

Спасибо, завтра буду экспериментировать. 

Эхххх, ну вот, "расходы незапланированные" smile Временные smile

In reply to Игорь М

Re: Exabis E-Portfolio - проблема с общим доступом

by Vadim Tabunshchik -
Picture of Developers

Если файлы нужно сохранить, поменяйте userid=167 на userid администратора. Станете владельцем smile

Вообще логика разработчика непонятна.

Если он хотел после удаления пользователя сохранять его расшаренные файлы (для создания какой-либо коллекции, например), то почему не предусмотрел подобную ситуацию. Ведь понятно, что привязка запросов к userid при несуществующем пользователе приведет к ошибке. Тем более, что используются системные библиотеки (/lib/dml/moodle_database.php: dml_missing_record_exception, /lib/dml/moodle_database.php: call to moodle_database->get_record_select, /lib/accesslib.php: call to moodle_database->get_record), где обязательно проверят существование userid. Нужно было тогда для плагина свои функции прописать вместо системных. К тому же, сам определяет контекст в /blocks/exaport/lib/lib.php: call to context_user::instance - контекст пользователя. Несуществующего? surprise

Если задачи сохранять файлы нет, почему не удаляются записи удаленного пользователя в таблицах БД? Система же чистит все следы деятельности при удалении пользователя, только оценки хранит в истории. А тут что?

In reply to Vadim Tabunshchik

Re: Exabis E-Portfolio - проблема с общим доступом

by Игорь М -

ну, если дело все таки в этом - то одним 167 не отделаюсь - мы несколько человек удаляли. Нужны будут еще люди smile Я и говорю - пока "левых" наделать, типа юзер 1, 2, 3...

In reply to Игорь М

Re: Exabis E-Portfolio - проблема с общим доступом

by Vadim Tabunshchik -
Picture of Developers
Я и говорю - пока "левых" наделать, типа юзер 1, 2, 3...

Какой смысл делать «левых» пользователей? Ведь их id нужно будет прописывать вместо удаленных в таблицах плагина. Не проще ли прописать id уже существующего админа? Или просто удалить строки из таблиц, если файлы не нужны.

Или ещё вариант: если пользователи удалялись только через интерфейс Мудл, то в БД они остались. Можно зайти через phpmyadmin в БД и в таблице mdl_user поменять поле deleted c 1 на 0 у нужных пользователей. Временно, чтобы под их именем зайти в портфолио и почистить его. Потом флаг deleted вернуть к значению 1.

И ещё: попробуйте запустить проверку внешних ключей (Администрирование ► Разработка ► Редактор XMLDB), может система сама найдет эти «битые» записи и покажет запросы на удаление строк с отсутствующим userid в таблицах _exaport_
Хотя, судя по таким багам в плагине, надежды на это мало.

In reply to Vadim Tabunshchik

Re: Exabis E-Portfolio - проблема с общим доступом

by Игорь М -

Пока сделал проверку ключей... Выдало следующее

 

Поиск ошибочных внешних ключей

  • Внешний ключ pid таблицы block_exaportcate нарушен 360 из 432 строк.
    SELECT * FROM {block_exaportcate} t1 LEFT JOIN {block_exaportcate} t2 ON t1.pid = t2.id WHERE t1.pid IS NOT NULL AND t2.id IS NULL; 
  • Внешний ключ courseid таблицы block_exaportcate нарушен 1 из 432 строк.
    SELECT * FROM {block_exaportcate} t1 LEFT JOIN {course} t2 ON t1.courseid = t2.id WHERE t1.courseid <> ? AND t2.id IS NULL; (0)
  • Внешний ключ courseid таблицы grade_items_history нарушен 590 из 3707 строк.
    SELECT * FROM {grade_items_history} t1 LEFT JOIN {course} t2 ON t1.courseid = t2.id WHERE t1.courseid IS NOT NULL AND t2.id IS NULL; 
  • Внешний ключ categoryid таблицы grade_items_history нарушен 69 из 3707 строк.
    SELECT * FROM {grade_items_history} t1 LEFT JOIN {grade_categories} t2 ON t1.categoryid = t2.id WHERE t1.categoryid IS NOT NULL AND t2.id IS NULL; 
  • Внешний ключ uniqueid таблицы quiz_attempts нарушен 1 из 206 строк.
    SELECT * FROM {quiz_attempts} t1 LEFT JOIN {question_usages} t2 ON t1.uniqueid = t2.id WHERE t1.uniqueid <> ? AND t2.id IS NULL; (0)
In reply to Игорь М

Re: Exabis E-Portfolio - проблема с общим доступом

by Игорь М -

В общем, предположение оказалось абсолютно верным. Зашел в мускул, нашел этого товарища, изменил в ячейке deleted 1 на 0, общий доступ тут же заработал - он реально успел в Портфолио создать общую папку. После того, как папку я удалил, удалил снова через Мудл этого пользователя - все снова нормально заработало. 

УРА! Спасибо огромное, Вы даже не представляете, как мне помогли - у нас аккредитация на носу, буквально два-три месяца осталось, а по последним данным, электронные системы обучения очень сильно шерстят, и портфолио - не исключение. 

Попробую написать разработчику... Как получится, через гугл-переводчик...